Skip to main content

Установка веб-серверов Nginx и Apache.

Итоговая архитектура для разработки предполагается такая:

                Internet
                    ↓
        ┌─────────────────────┐
        │       Nginx         │  ← порт 8081 (вход)
        └─────────────────────┘
            ↓            ↓
     WordPress      .NET apps (опционально)
     (Apache)           (Kestrel)
            ↓
        MariaDB
        PostgreSQL

🥇 Роли компонентов

🌐 Nginx (front door)

  • SSL (HTTPS)
  • маршрутизация
  • защита
  • статика

🟦 Apache (только WordPress)

Apache HTTP Server

  • PHP обработка
  • WordPress
  • .htaccess

🚀 ШАГ 1 — установка пакетов

В Ubuntu:

sudo apt update

sudo apt install -y nginx

sudo apt install -y apache2

sudo apt install -y mariadb-server
sudo apt install -y postgresql


⚙️ ШАГ 2 — порты (ВАЖНО)

Apache уводим с 80:

sudo nano /etc/apache2/ports.conf

Примерное содержимое:

Listen 8082

<IfModule ssl_module>
	Listen 443
</IfModule>

<IfModule mod_gnutls.c>
	Listen 443
</IfModule>

И в site config:

sudo nano /etc/apache2/sites-available/000-default.conf

Примерное содержимое с учетом проекта на wordpress:

<VirtualHost *:8082>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

	Alias /portfolio /mnt/d/Soft/Freelance/Wordpress/portfolio/site
	<Directory /mnt/d/Soft/Freelance/Wordpress/portfolio/site>
		Options Indexes FollowSymLinks Includes ExecCGI
		AllowOverride All
		Order allow,deny
		Allow from all
		Require all granted
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
    
</VirtualHost>

Устанавливаем

sudo apt install -y php php-mysql libapache2-mod-php

Эта установка запустит триггеры, один из которых запустит Apache, теперь он будет на правильном порту, если запуска Apache не произойдет, перезапустим его вручную:

sudo systemctl restart apache2


🌐 ШАГ 3 — WordPress (Apache backend)

Документа root:

/var/www/html
Но выше в конфиге был определен алиас "portfolio", это папка, которая подмонтирована из windows и в ней установлен wordpress.

ШАГ 4 — включить mod_rewrite (нужно для WordPress)

sudo a2enmod rewrite


ШАГ 5 — права доступа (очень важно в WSL)

Иногда Apache не может читать Windows-диск:

sudo chmod -R 755 /mnt/d/Soft/Freelance/Wordpress/portfolio/site

База:

sudo mysql


CREATE USER 'dev'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';
FLUSH PRIVILEGES;
Пользователь может иметь доступ к базе отвсюду.

Создайте базу данных и восстановите в нее дамп из вашего проекта на Wordpress.

🟨 ШАГ 6 — MariaDB

sudo systemctl enable mariadb
sudo systemctl start mariadb

Проброс порта 3306 наружу (в windows)

Пробрасываем на порт 3307, таким образом в windows может быть экземпляр базы  с портом по умолчанию, а к базе внутри WSL можно будет иметь доступ из таких приложений как DBeaver или MySQL Workbench.
При старте WSL он запускается в собственной сети, IP-адрес может меняться и лучше сделать стартовый скрипт, который будет это учитывать и пробрасывать порт наружу.
🧠 Что это за файл

fix-mysql-port.ps1 — это PowerShell-скрипт, который:

  • берёт актуальный IP WSL
  • пересоздаёт проброс порта 3307 → 3306
  • чтобы не зависеть от смены IP

🥇 ГДЕ СОЗДАТЬ

Создай его в любом удобном месте, например:

D:\Soft\DockerData\Scripts\fix-mysql-port.ps1

👉 главное — чтобы путь был простой


🧪 КАК СОЗДАТЬ
  1. Откройте Блокнот или VS Code
  2. Вставьте код:
$ip = (wsl hostname -I).Trim()

netsh interface portproxy delete v4tov4 listenport=3307 listenaddress=127.0.0.1 2>$null

netsh interface portproxy add v4tov4 `
listenport=3307 listenaddress=127.0.0.1 `
connectport=3306 connectaddress=$ip

Write-Host "WSL MariaDB → localhost:3307 → $ip"

  1. Сохраните как:
fix-mysql-port.ps1


🚀 КОГДА ЕГО ЗАПУСКАТЬ
✔ Вручную (пока проще всего)

Каждый раз:

  • после перезапуска WSL
  • после перезагрузки Windows
  • если не работает порт 3307

👉 запуск:

Откройте PowerShell:

powershell -ExecutionPolicy Bypass -File D:\Soft\DockerData\Scripts\fix-mysql-port.ps1
🧠 ПОЧЕМУ ЭТО НУЖНО

WSL меняет IP:

172.31.x.x → каждый запуск новый

👉 поэтому static portproxy НЕ работает стабильно


🧪 КАК ПРОВЕРИТЬ ЧТО ВСЁ ОК

После запуска скрипта:

netsh interface portproxy show all

Должно быть:

127.0.0.1:3307 → <WSL_IP>:3306


🧠 ВАЖНО (частая ошибка)

❌ НЕ подключайтесь в DBeaver к WSL IP
✔ всегда используйте:

127.0.0.1:3307

🟪 ШАГ 7 — PostgreSQL

sudo systemctl enable postgresql
sudo systemctl start postgresql

🌐 ШАГ 8 — Nginx (главный вход)

Конфиг:

sudo nano /etc/nginx/sites-available/default

📌 Конфигурация

Примерное содержимое файла:

server {
	listen 8081 default_server;
	listen [::]:8081 default_server;

	root /var/www/html;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;

	server_name _;

	location / {
		proxy_pass http://127.0.0.1:8082;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}

}

Перезапуск Nginx:

sudo systemctl restart nginx