Compare commits
No commits in common. "cd69aec83e0a6b633eb28eeac5daf088a06abf34" and "78007b65e9207b2df28c6fc1bff31e47f813e44c" have entirely different histories.
cd69aec83e
...
78007b65e9
@ -3,12 +3,10 @@
|
||||
COMPOSE_PROJECT_NAME=patrol
|
||||
COMPOSE_FILE=docker-compose.yml:docker-compose.prod.yml
|
||||
|
||||
# Адрес, по которому открывают сервис (для redirect_uri Aspans ID). Пока http по IP и порту,
|
||||
# потом — https-адрес прокси, который поставят перед сервером.
|
||||
WEB_PORT=8090
|
||||
WEBSITE_URL=http://<ip-сервера>:8090
|
||||
# true — когда сервис откроют по HTTPS
|
||||
COOKIE_SECURE=false
|
||||
# Адрес сервиса. Без своего домена — sslip.io: IP 203.0.113.10 → 203-0-113-10.sslip.io
|
||||
SITE_ADDRESS=<ip-через-дефисы>.sslip.io
|
||||
WEBSITE_URL=https://<ip-через-дефисы>.sslip.io
|
||||
COOKIE_SECURE=true
|
||||
|
||||
POSTGRES_DB=patrol
|
||||
POSTGRES_USER=patrol
|
||||
@ -40,4 +38,4 @@ KAFKA_PASSWORD=
|
||||
VITE_TILE_URL=/tiles/styles/basic-preview/256/{z}/{x}/{y}.png
|
||||
|
||||
UCHET_KZ_TOKEN=
|
||||
NOMINATIM_EMAIL=
|
||||
NOMINATIM_EMAIL=<email для User-Agent Nominatim>
|
||||
|
||||
10
README.md
10
README.md
@ -36,15 +36,15 @@ docker compose up -d --build
|
||||
|
||||
## Сервер
|
||||
|
||||
Сервис отдаётся по http на `WEB_PORT` (8090). HTTPS делает прокси перед сервером. Пока его нет, на телефонах охранников не работают геолокация и офлайн-режим PWA: браузеры дают их только по HTTPS.
|
||||
Без своего домена сервис открывается по `https://<ip-через-дефисы>.sslip.io`: sslip.io указывает на IP из имени, Caddy сам получает сертификат Let's Encrypt. HTTPS обязателен для телефонов охранников: без него браузер не даёт геолокацию и не включает офлайн-режим PWA.
|
||||
|
||||
1. Нужен `docker compose` v2 (не старый `docker-compose` 1.x). Проверка сервера, только чтение: `ssh user@IP 'bash -s' < scripts/server-check.sh`.
|
||||
1. Проверить сервер (только читает): `ssh user@IP 'bash -s' < scripts/server-check.sh`. Нужно: Docker с `docker compose` v2, свободные 80 и 443 (и открытые в файрволе), от 2 ГБ RAM (сборка фронта), от 10 ГБ свободного места плюс место под фото и видео.
|
||||
2. Склонировать репозиторий, `cp .env.production.example .env`, заполнить.
|
||||
3. Карту на сервере **не собирать**: скопировать готовый файл `tiles/kazakhstan.mbtiles` (~0,5 ГБ) в `tiles/` проекта. Сборка planetiler требует ~4 ГБ RAM и качает исходные данные.
|
||||
3. Карту на сервере **не собирать**: скопировать готовый файл — `scp tiles/kazakhstan.mbtiles user@IP:<папка проекта>/tiles/` (~0,5 ГБ). Сборка planetiler требует ~4 ГБ RAM и качает исходные данные.
|
||||
4. `docker compose up -d --build` (`COMPOSE_FILE` из `.env` сам подключит `docker-compose.prod.yml`).
|
||||
5. В Aspans ID у клиента `patrol` разрешить redirect_uri `${WEBSITE_URL}/auth/sso/callback`.
|
||||
5. В Aspans ID у клиента `patrol` разрешить redirect_uri `https://<ip-через-дефисы>.sslip.io/auth/sso/callback`.
|
||||
|
||||
Наружу открыт только web на `WEB_PORT`. База слушает 127.0.0.1, api, tiles и s3 доступны только внутри docker.
|
||||
Наружу открыты только 80 и 443 (Caddy). База слушает 127.0.0.1, api, tiles и s3 доступны только внутри docker.
|
||||
|
||||
## Порты
|
||||
|
||||
|
||||
@ -1,8 +1,25 @@
|
||||
# Сервер: поверх docker-compose.yml (без override). В .env сервера:
|
||||
# COMPOSE_FILE=docker-compose.yml:docker-compose.prod.yml
|
||||
# Наружу открыт только web на WEB_PORT (http). HTTPS делает прокси на другом сервере.
|
||||
# База слушает только 127.0.0.1, api/tiles/s3 — только внутри docker.
|
||||
# Наружу открыт только Caddy (80 и 443): он сам получает сертификат Let's Encrypt для SITE_ADDRESS
|
||||
# и проксирует всё на web. База слушает только 127.0.0.1, api/tiles/s3 — только внутри docker.
|
||||
services:
|
||||
web:
|
||||
caddy:
|
||||
image: caddy:2.10-alpine
|
||||
container_name: patrol_caddy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- web
|
||||
ports:
|
||||
- "${WEB_BIND:-0.0.0.0}:${WEB_PORT}:80"
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "443:443/udp"
|
||||
environment:
|
||||
SITE_ADDRESS: ${SITE_ADDRESS}
|
||||
volumes:
|
||||
- ./docker/Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
- patrol_caddy_data:/data
|
||||
- patrol_caddy_config:/config
|
||||
|
||||
volumes:
|
||||
patrol_caddy_data:
|
||||
patrol_caddy_config:
|
||||
|
||||
6
docker/Caddyfile
Normal file
6
docker/Caddyfile
Normal file
@ -0,0 +1,6 @@
|
||||
# SITE_ADDRESS — имя сервера, например 203-0-113-10.sslip.io (sslip.io указывает на IP из имени).
|
||||
# Caddy сам получает и продлевает сертификат Let's Encrypt и перенаправляет http → https.
|
||||
{$SITE_ADDRESS} {
|
||||
encode zstd gzip
|
||||
reverse_proxy web:80
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user