No description
  • Shell 60.1%
  • PowerShell 39.9%
Find a file
2026-03-15 15:53:36 +03:00
.gitea/workflows fix 2026-03-15 15:53:36 +03:00
nginx First 2026-03-15 15:50:34 +03:00
scripts First 2026-03-15 15:50:34 +03:00
.env.dev First 2026-03-15 15:50:34 +03:00
.env.prod First 2026-03-15 15:50:34 +03:00
.gitignore First 2026-03-15 15:50:34 +03:00
docker-compose.yml First 2026-03-15 15:50:34 +03:00
README.md First 2026-03-15 15:50:34 +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)