No description
  • Shell 59.8%
  • PowerShell 40.2%
Find a file
2026-08-25 22:13:40 +03:00
.gitea/workflows fix 2026-03-15 15:53:36 +03:00
nginx деплой фортунаты 2026-08-25 22:13:40 +03:00
scripts деплой фортунаты 2026-08-25 22:13:40 +03:00
.env.dev деплой фортунаты 2026-08-25 22:13:40 +03:00
.env.prod деплой фортунаты 2026-08-25 22:13:40 +03:00
.gitignore First 2026-03-15 15:50:34 +03:00
docker-compose.yml деплой фортунаты 2026-08-25 22:13:40 +03:00
README.md деплой фортунаты 2026-08-25 22:13:40 +03:00

Reverse Proxy (Nginx)

Репозиторий для управления конфигами Nginx с подстановкой переменных и разными окружениями (dev/prod). Базовый сценарий — Docker, но есть и рендер/деплой без Docker. Примеры ориентированы на Raspberry Pi OS (raspbian).

Важно про расширения .template

Расширение .template — это просто маркер «это шаблон, его нужно отрендерить». Nginx сам по себе такие файлы не читает. Скрипт берёт *.template, подставляет переменные и делает итоговые *.conf.

.location — это обычно про структуру Nginx (include отдельных файлов), а не про CI. Если тебе удобно, можно оставить .location как результат рендера или делать *.location.template и дальше подключать через include. Смысл не в расширении, а в том, чтобы скрипт понимал, что рендерить.

Быстрый старт (Docker)

  1. Выбери окружение и скопируй файл переменных:
cp .env.dev .env
  1. Укажи папку шаблонов (dev/prod) через переменную:
# dev
export NGINX_TEMPLATE_SUBDIR=dev

# prod
# export NGINX_TEMPLATE_SUBDIR=prod
  1. Запусти:
docker compose up -d

Nginx поднимется и сгенерирует конфиги из nginx/templates/<env>/.

Рендер без Docker

./scripts/render.sh .env ./nginx/templates dev ./generated/dev
# для prod:
# ./scripts/render.sh .env ./nginx/templates prod ./generated/prod

Деплой без Docker (ручная кнопка)

Этот скрипт рендерит конфиги, копирует в /etc/nginx/conf.d, проверяет синтаксис и делает reload.

./scripts/deploy.sh dev .env ./nginx/templates ./generated/dev
# для prod:
# ./scripts/deploy.sh prod .env ./nginx/templates ./generated/prod

CI/CD (Forgejo/Gitea Actions)

Есть ручной workflow для деплоя на раннере (например, Raspberry Pi).

Файл: ./.gitea/workflows/deploy.yml

Что делает:

  1. Берёт env (dev/prod) из ручного запуска.
  2. Копирует .env.dev или .env.prod в .env.
  3. Рендерит и деплоит через scripts/deploy.sh.

Требования на раннере:

  • Установлен Nginx.
  • Есть envsubst (пакет gettext-base).
  • Пользователь раннера имеет sudo без пароля для nginx и systemctl reload nginx.

Структура

  • nginx/templates/dev/ — шаблоны для dev
  • nginx/templates/prod/ — шаблоны для prod
  • nginx/entrypoint.d/ — скрипты для контейнера
  • scripts/ — локальные скрипты рендера/деплоя
  • generated/ — сгенерированные конфиги (игнорируются git)

Окружения

  • dev: .env.dev
  • prod: .env.prod

Переменные (пример)

  • SERVER_NAME
  • UPSTREAM_HOST
  • UPSTREAM_PORT
  • NGINX_HTTP_PORT
  • NGINX_TEMPLATE_SUBDIR (dev/prod)

Fortunata Analyzer

Шаблоны nginx/templates/<env>/fortunata-analyzer.conf.template проксируют отдельный stack приложения Fortunata Analyzer через общую внешнюю Docker-сеть reverse-proxy:

reverse-proxy → generator-analyzer:8080

Один раз на Raspberry Pi создайте сеть до запуска обоих stack:

docker network create reverse-proxy

Повторный запуск команды вернёт ошибку «already exists» — это нормально.

Перед prod-деплоем задайте в .env.prod:

FORTUNATA_SERVER_NAME=ваш-домен
FORTUNATA_UPSTREAM_HOST=generator-analyzer
FORTUNATA_UPSTREAM_PORT=8080

После изменения шаблона/переменных перерендерьте и примените Nginx обычным для этого репозитория способом:

./scripts/deploy.sh prod .env ./nginx/templates ./generated/prod