Установка веб-серверов 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 install -y nginx
sudo apt install -y apache2
sudo apt install -y mariadb-server
sudo apt install -y postgresql
⚙️ ШАГ 2 — порты (ВАЖНО)
Apache уводим с 80:
Примерное содержимое:
Listen 8082
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
И в site config:
Примерное содержимое с учетом проекта на 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>
Устанавливаем
Эта установка запустит триггеры, один из которых запустит Apache, теперь он будет на правильном порту, если запуска Apache не произойдет, перезапустим его вручную:
🌐 ШАГ 3 — WordPress (Apache backend)
Документа root:
ШАГ 4 — включить mod_rewrite (нужно для WordPress)
ШАГ 5 — права доступа (очень важно в WSL)
Иногда Apache не может читать Windows-диск:
База:
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';
FLUSH PRIVILEGES;
🟨 ШАГ 6 — MariaDB
sudo systemctl start mariadb
Проброс порта 3306 наружу (в windows)
🧠 Что это за файл
fix-mysql-port.ps1 — это PowerShell-скрипт, который:
- берёт актуальный IP WSL
- пересоздаёт проброс порта 3307 → 3306
- чтобы не зависеть от смены IP
🥇 ГДЕ СОЗДАТЬ
Создай его в любом удобном месте, например:
👉 главное — чтобы путь был простой
🧪 КАК СОЗДАТЬ
- Откройте Блокнот или VS Code
- Вставьте код:
$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"
- Сохраните как:
🚀 КОГДА ЕГО ЗАПУСКАТЬ
✔ Вручную (пока проще всего)
Каждый раз:
- после перезапуска WSL
- после перезагрузки Windows
- если не работает порт 3307
👉 запуск:
Откройте PowerShell:
🧠 ПОЧЕМУ ЭТО НУЖНО
WSL меняет IP:
👉 поэтому static portproxy НЕ работает стабильно
🧪 КАК ПРОВЕРИТЬ ЧТО ВСЁ ОК
После запуска скрипта:
Должно быть:
🧠 ВАЖНО (частая ошибка)
❌ НЕ подключайтесь в DBeaver к WSL IP
✔ всегда используйте:
🟪 ШАГ 7 — PostgreSQL
sudo systemctl start postgresql
Зайдите через системного пользователя:
Потом:
И сразу:
(введите новый пароль вручную дважды)
Выйти:
✅ Проверить в WSL
Выполните:
Что должно быть хорошо:
или
Если плохо:
или
Тогда внешний доступ из Windows через portproxy не работает.
🥇 Как исправить
1. Открыть конфиг PostgreSQL
Найдите:
Замените на:
2. Разрешить подключение
Откройте:
Добавьте строку:
(если у вас в Windows есть уже запущенный Postgres и у него адрес именно такой)
3. Перезапустить PostgreSQL
🥇 Потом проверить снова
Проброс порта:
По аналогии с mySql нужно внести изменения в файл start-dev-db.ps1
$ip = (wsl hostname -I).Trim()
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=3307
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=5433
netsh interface portproxy add v4tov4 `
listenport=3307 listenaddress=127.0.0.1 `
connectport=3306 connectaddress=$ip
netsh interface portproxy add v4tov4 `
listenport=5433 listenaddress=127.0.0.1 `
connectport=5432 connectaddress=$ip
Write-Host ""
Write-Host "Portproxy rules:"
netsh interface portproxy show all
Write-Host ""
Write-Host "Ready:"
Write-Host "MariaDB -> 127.0.0.1:3307"
Write-Host "PostgreSQL -> 127.0.0.1:5433"
🌐 ШАГ 8 — Nginx (главный вход)
Конфиг:
📌 Конфигурация
Примерное содержимое файла:
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;
}
}