- Shell 60.1%
- PowerShell 39.9%
| .gitea/workflows | ||
| nginx | ||
| scripts | ||
| .env.dev | ||
| .env.prod | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
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)
- Выбери окружение и скопируй файл переменных:
cp .env.dev .env
- Укажи папку шаблонов (dev/prod) через переменную:
# dev
export NGINX_TEMPLATE_SUBDIR=dev
# prod
# export NGINX_TEMPLATE_SUBDIR=prod
- Запусти:
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
Что делает:
- Берёт
env(dev/prod) из ручного запуска. - Копирует
.env.devили.env.prodв.env. - Рендерит и деплоит через
scripts/deploy.sh.
Требования на раннере:
- Установлен Nginx.
- Есть
envsubst(пакетgettext-base). - Пользователь раннера имеет
sudoбез пароля дляnginxиsystemctl reload nginx.
Структура
nginx/templates/dev/— шаблоны для devnginx/templates/prod/— шаблоны для prodnginx/entrypoint.d/— скрипты для контейнераscripts/— локальные скрипты рендера/деплояgenerated/— сгенерированные конфиги (игнорируются git)
Окружения
dev:.env.devprod:.env.prod
Переменные (пример)
SERVER_NAMEUPSTREAM_HOSTUPSTREAM_PORTNGINX_HTTP_PORTNGINX_TEMPLATE_SUBDIR(dev/prod)