Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
396e4ee4b9 | ||
|
|
8e18324f08 |
@@ -0,0 +1,52 @@
|
||||
# deploy/apache — vhost для mapmil.deepfishing.ru
|
||||
|
||||
Источник истины для Apache-виртхоста, который проксирует домен на стек MapMil.
|
||||
|
||||
## Что здесь
|
||||
|
||||
- `mapmil.conf` — vhost `mapmil.deepfishing.ru` (`apache2` → `ca-frontend:80`)
|
||||
|
||||
## Архитектура
|
||||
|
||||
- `apache2` — **отдельный** контейнер (не из `docker-compose.yml` этого репо).
|
||||
- Он подключён к сети `mapmil_default`, создаваемой compose-стеком MapMil.
|
||||
- Бэкенд адресуется **по имени сервиса `ca-frontend`**, не по IP.
|
||||
IP контейнера меняется при пересборке → хардкод IP даёт **503** (Connection refused).
|
||||
|
||||
## Применение на сервере (beget)
|
||||
|
||||
```bash
|
||||
cd ~/Projects/MapMil
|
||||
CONF=/usr/local/apache2/conf/conf-enabled/mapmil.conf
|
||||
|
||||
# 1. Бэкап текущего конфига в контейнере
|
||||
docker exec apache2 cp "$CONF" "$CONF.bak"
|
||||
|
||||
# 2. Скопировать актуальный vhost из репо внутрь контейнера
|
||||
docker cp deploy/apache/mapmil.conf apache2:"$CONF"
|
||||
|
||||
# 3. Проверить и перезагрузить Apache
|
||||
docker exec apache2 httpd -t
|
||||
docker exec apache2 httpd -k graceful
|
||||
|
||||
# 4. Проверить сайт
|
||||
curl -s -o /dev/null -w "%{http_code}\n" https://mapmil.deepfishing.ru/ # 200
|
||||
```
|
||||
|
||||
## Если сайт отдаёт 503
|
||||
|
||||
Проверить, что в конфиге **нет хардкода IP**:
|
||||
|
||||
```bash
|
||||
docker exec apache2 grep -n "ca-frontend\|172\." "$CONF"
|
||||
docker exec apache2 tail -20 /usr/local/apache2/logs/mapmil-error.log
|
||||
```
|
||||
|
||||
Признак: `AH00957: attempt to connect to 172.x.x.x:80 failed`.
|
||||
Лечение — применить `mapmil.conf` из репо (см. выше).
|
||||
|
||||
## TODO
|
||||
|
||||
- Автоматизировать копирование конфига при деплое (сейчас вручную).
|
||||
- Рассмотреть подключение `deploy/apache/` как volume в контейнер `apache2`,
|
||||
чтобы конфиг не терялся при его пересоздании.
|
||||
@@ -0,0 +1,42 @@
|
||||
# ========== HTTPS VirtualHost для mapmil.deepfishing.ru ==========
|
||||
#
|
||||
# Источник истины для vhost Apache (контейнер `apache2`).
|
||||
# Применение: см. deploy/apache/README.md
|
||||
#
|
||||
# ВАЖНО: бэкенд адресуется ПО ИМЕНИ `ca-frontend`, а не по IP контейнера.
|
||||
# IP меняется при каждом пересоздании стека → хардкод IP даёт 503.
|
||||
# Контейнер `apache2` подключён к сети `mapmil_default`, поэтому имя резолвится.
|
||||
|
||||
<VirtualHost *:443>
|
||||
ServerName mapmil.deepfishing.ru
|
||||
|
||||
SSLEngine on
|
||||
SSLCertificateFile /etc/letsencrypt/live/deepfishing.ru/fullchain.pem
|
||||
SSLCertificateKeyFile /etc/letsencrypt/live/deepfishing.ru/privkey.pem
|
||||
|
||||
SSLProtocol -all +TLSv1.2 +TLSv1.3
|
||||
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
|
||||
SSLHonorCipherOrder on
|
||||
SSLCompression off
|
||||
|
||||
ProxyPreserveHost On
|
||||
RequestHeader set X-Forwarded-Proto "https"
|
||||
RequestHeader set X-Forwarded-Host %{HTTP_HOST}e
|
||||
AllowEncodedSlashes NoDecode
|
||||
|
||||
Header set X-Content-Type-Options "nosniff"
|
||||
Header set X-XSS-Protection "1; mode=block"
|
||||
|
||||
# WebSocket support
|
||||
RewriteEngine On
|
||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
||||
RewriteRule ^/(.*)$ ws://ca-frontend:80/$1 [P,L]
|
||||
|
||||
ProxyPass / http://ca-frontend:80/
|
||||
ProxyPassReverse / http://ca-frontend:80/
|
||||
|
||||
ErrorLog /usr/local/apache2/logs/mapmil-error.log
|
||||
CustomLog /usr/local/apache2/logs/mapmil-access.log combined
|
||||
LogLevel warn
|
||||
</VirtualHost>
|
||||
+1
-7
@@ -44,7 +44,7 @@ services:
|
||||
ca-frontend:
|
||||
build: ./centers/analytics/frontend
|
||||
ports:
|
||||
- "8080:80"
|
||||
- "127.0.0.1:8089:80"
|
||||
depends_on:
|
||||
- ca-api
|
||||
restart: unless-stopped
|
||||
@@ -73,10 +73,6 @@ services:
|
||||
TELEGRAM_SESSION_PATH: /data/telegram.session
|
||||
TELEGRAM_LISTENER_ENABLED: "true"
|
||||
TELEGRAM_LISTENER_REFRESH_SECONDS: "60"
|
||||
# Env fallback when VPN tab is off (host Happ/xray; socat 11080→10808).
|
||||
# Overrides .env 127.0.0.1 which is wrong inside the container.
|
||||
TELEGRAM_PROXY_HOST: host.docker.internal
|
||||
TELEGRAM_PROXY_PORT: "11080"
|
||||
CP_VPN_HOST: cp-vpn
|
||||
CP_VPN_PORT: "1080"
|
||||
ENABLED_ADAPTERS: telegram
|
||||
@@ -84,8 +80,6 @@ services:
|
||||
CA_API_URL: http://ca-api:8000
|
||||
REDIS_URL: redis://redis:6379/0
|
||||
INTERNAL_TOKEN: ${INTERNAL_TOKEN:-dev-internal-token}
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
depends_on:
|
||||
|
||||
Reference in New Issue
Block a user