diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..b060d3f --- /dev/null +++ b/Caddyfile @@ -0,0 +1,10 @@ +# Replace the example domains below with your real webhook and Mini App hostnames. +webhook.domain.com { + encode zstd gzip + reverse_proxy remnawave-tg-shop:{$WEB_SERVER_PORT:8080} +} + +app.domain.com { + encode zstd gzip + reverse_proxy remnawave-tg-shop:{$WEBAPP_SERVER_PORT:8081} +} diff --git a/README.md b/README.md index 73f478e..cd332d8 100644 --- a/README.md +++ b/README.md @@ -447,6 +447,43 @@ cd /opt/remnawave/nginx && docker compose down && docker compose up -d && docker IMAGE_TAG=3.0.0 docker compose -f docker-compose-remote-server.yml up -d ``` +### Вариант с Caddy + +Если нужен reverse proxy на Caddy, используйте `docker-compose-caddy.yml` вместе с `Caddyfile`. Это удобный вариант, когда хочется, чтобы Caddy сам выпускал TLS-сертификаты и проксировал и webhook'и, и Mini App без ручной настройки Nginx. + +В этой схеме: +- Caddy публикует наружу `80` и `443`. +- Бот остается доступным только внутри docker-сети. +- `WEBHOOK_BASE_URL` должен указывать на домен вебхуков, а `SUBSCRIPTION_MINI_APP_URL` - на домен Mini App. + +Пример `Caddyfile`: + +```caddyfile +webhook.domain.com { + encode zstd gzip + reverse_proxy remnawave-tg-shop:{$WEB_SERVER_PORT:8080} +} + +app.domain.com { + encode zstd gzip + reverse_proxy remnawave-tg-shop:{$WEBAPP_SERVER_PORT:8081} +} +``` + +Что нужно поменять под себя: +- заменить `webhook.domain.com` и `app.domain.com` на свои домены; +- убедиться, что в `.env` заданы `WEBHOOK_BASE_URL=https://webhook.domain.com` и `SUBSCRIPTION_MINI_APP_URL=https://app.domain.com/`; +- при необходимости скорректировать `WEB_SERVER_PORT` и `WEBAPP_SERVER_PORT`, если они отличаются от стандартных `8080` и `8081`. +- в BotFather укажите домен Mini App через `/setdomain`, чтобы он совпадал с `SUBSCRIPTION_MINI_APP_URL`. + +Запуск: + +```bash +docker compose -f docker-compose-caddy.yml up -d --build +``` + +После этого Caddy сам выпустит сертификаты и будет проксировать webhook'и на порт `8080`, а Mini App - на `8081`. + ## 📁 Структура проекта ``` diff --git a/docker-compose-caddy.yml b/docker-compose-caddy.yml new file mode 100644 index 0000000..dcfd79e --- /dev/null +++ b/docker-compose-caddy.yml @@ -0,0 +1,59 @@ +services: + remnawave-tg-shop: + build: . + container_name: remnawave-tg-shop + hostname: remnawave-tg-shop + env_file: + - .env + environment: + - TZ=UTC + volumes: + - ./locales:/app/locales + restart: unless-stopped + depends_on: + remnawave-tg-shop-db: + condition: service_healthy + + remnawave-tg-shop-db: + image: postgres:17 + container_name: remnawave-tg-shop-db + hostname: remnawave-tg-shop-db + env_file: + - .env + environment: + - TZ=UTC + volumes: + - remnawave-tg-shop-db-data:/var/lib/postgresql/data + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] + interval: 5s + timeout: 5s + retries: 20 + + caddy: + image: caddy:2-alpine + container_name: remnawave-tg-shop-caddy + hostname: remnawave-tg-shop-caddy + environment: + - TZ=UTC + - WEB_SERVER_PORT=${WEB_SERVER_PORT:-8080} + - WEBAPP_SERVER_PORT=${WEBAPP_SERVER_PORT:-8081} + depends_on: + - remnawave-tg-shop + ports: + - "80:80" + - "443:443" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + - caddy_data:/data + - caddy_config:/config + restart: unless-stopped + +volumes: + remnawave-tg-shop-db-data: + name: remnawave-tg-shop-db-data + caddy_data: + name: remnawave-tg-shop-caddy-data + caddy_config: + name: remnawave-tg-shop-caddy-config