Initial commit

This commit is contained in:
2025-10-28 01:39:22 +03:00
commit 8d1473935a
23 changed files with 870 additions and 0 deletions

18
docs/README.md Normal file
View File

@@ -0,0 +1,18 @@
# Документация проекта
Добро пожаловать! Этот раздел содержит полную документацию по проекту, навигацию по подсекциям, примеры конфигураций и инструкции по развёртыванию и публикации в Gitea.
## Навигация
- [Обзор и требования](./overview.md)
- [Запуск и деплой](./deployment.md)
- [Мониторинг: метрики и алёрты](./monitoring.md)
- [Примеры .env файлов](./env-examples.md)
- [Публикация в Gitea](./gitea.md)
- [Диагностика и троблшутинг](./troubleshooting.md)
## Быстрый старт
- Скопируйте и заполните `.env.v1`, `.env.v2`, `.env.db` по образцам из [env-examples.md](./env-examples.md).
- Запустите `docker compose up -d` из корня проекта.
- Проверьте таргеты в Prometheus: `http://localhost:9090/targets`.
- Проверьте метрики экспортеров: Nginx `http://localhost:9113/metrics`, PHP-FPM `http://localhost:9253/metrics`, Postgres `http://localhost:9187/metrics`, Memcached `http://localhost:9150/metrics`.
- Alertmanager UI: `http://localhost:9093` (настройте получателей в `monitoring/alertmanager.yml`).

23
docs/deployment.md Normal file
View File

@@ -0,0 +1,23 @@
# Запуск и деплой
## Локальный запуск (DEV)
1. Заполните `.env.v1`, `.env.v2`, `.env.db` по образцам из [env-examples.md](./env-examples.md).
2. Запустите: `docker compose up -d` в корне проекта.
3. Проверьте:
- API v1: `http://localhost/api/v1/`
- API v2: `http://localhost/api/v2/`
- Nginx статус: `http://localhost/status`
- Prometheus: `http://localhost:9090`
- Alertmanager: `http://localhost:9093`
## Продакшен (общие рекомендации)
- Используйте секреты: Docker Swarm/K8s Secrets, Vault или SSM Parameter Store.
- Ограничьте `/status` (Nginx stub_status) по IP/ACL.
- Разнесите экспортеры и Prometheus на отдельные ноды.
- Настройте резервное копирование для Postgres и ретеншен для Prometheus.
- Добавьте Grafana для визуализации (рекомендуется).
## Обновление стека
- Обновить конфиги: `monitoring/*`, `nginx/nginx.conf`, `.env.*`.
- Перезапуск: `docker compose up -d`.
- Проверка таргетов: `http://localhost:9090/targets`.

30
docs/env-examples.md Normal file
View File

@@ -0,0 +1,30 @@
# Примеры .env файлов
## .env.v1
```
DB_HOST=postgres
DB_NAME=app_db
DB_USER=app_user
DB_PASS=local_password_v1
MEMCACHED_HOST=memcached
```
## .env.v2
```
DB_HOST=postgres
DB_NAME=app_db
DB_USER=app_user
DB_PASS=local_password_v2
MEMCACHED_HOST=memcached
```
## .env.db
```
POSTGRES_DB=app_db
POSTGRES_USER=app_user
POSTGRES_PASSWORD=local_db_password
```
## Примечания
- Эти файлы добавлены в `.gitignore` и не должны коммититься.
- В продакшене используйте секрет-менеджеры или переменные окружения CI/CD.

28
docs/gitea.md Normal file
View File

@@ -0,0 +1,28 @@
# Публикация в Gitea
## Подготовка репозитория
- Убедитесь, что `.env.*` и `logs/` в `.gitignore`.
- Проверьте `README.md` и раздел `docs/` на актуальность.
## Создание репозитория в Gitea
1. Зайдите в Gitea и создайте новый репозиторий (Private/Public по вашему выбору).
2. Скопируйте URL репозитория (SSH/HTTPS).
## Локальная привязка и пуш
```bash
# Инициализация (если не инициализировано)
git init
# Добавление ремоута
git remote add origin <URL-вашего-репозитория>
# Коммиты и пуш
git add .
git commit -m "Initial commit"
git push -u origin main
```
## CI/CD (рекомендации)
- Включите защищённые секреты в Gitea/Runner.
- Запланируйте пайплайн: линтеры, сборка, запуск `docker compose config && docker compose up -d`.
- Храните prod-секреты вне репозитория (Secrets/Variables).

24
docs/monitoring.md Normal file
View File

@@ -0,0 +1,24 @@
# Мониторинг: метрики и алёрты
## Экспортеры и порты
- Nginx Exporter (`nginx_exporter`): `http://localhost:9113/metrics` — читает `http://nginx/status`.
- PHP-FPM Exporter (`php_fpm_exporter`): `http://localhost:9253/metrics` — опрашивает `tcp://php-fpm-v1:9000/status` и `tcp://php-fpm-v2:9000/status`.
- Postgres Exporter (`postgres_exporter`): `http://localhost:9187/metrics`.
- Memcached Exporter (`memcached_exporter`): `http://localhost:9150/metrics`.
## Prometheus
- UI: `http://localhost:9090`
- Конфиг: `monitoring/prometheus.yml`
- Таргеты: `http://localhost:9090/targets`
## Alertmanager
- UI: `http://localhost:9093`
- Конфиг: `monitoring/alertmanager.yml`
- Правила алёртов: `monitoring/alert.rules.yml`
## Правила по умолчанию
- `InstanceDown`: `up == 0` в течение 1 минуты — критический алерт.
## Расширение
- Добавьте свои правила в `monitoring/alert.rules.yml`.
- Настройте получателей в `monitoring/alertmanager.yml` (email/telegram/webhook).

16
docs/overview.md Normal file
View File

@@ -0,0 +1,16 @@
# Обзор и требования
Проект содержит два PHP API (v1 и v2), Nginx для роутинга, Postgres и Memcached. Добавлены healthchecks, метрики через экспортеры и базовые алёрты.
## Компоненты
- Nginx (`nginx`) — прокси и роутинг `/api/v1` и `/api/v2`.
- PHP-FPM v1/v2 (`php-fpm-v1`, `php-fpm-v2`) — обработка PHP.
- Postgres (`postgres`) — база данных.
- Memcached (`memcached`) — кеш.
- Экспортеры: `nginx_exporter`, `php_fpm_exporter`, `postgres_exporter`, `memcached_exporter`.
- Мониторинг: `prometheus`, `alertmanager`.
## Требования
- Docker 24+ и Docker Compose v2.
- Порты, свободные на хосте: `80, 5432, 11211, 9113, 9253, 9187, 9150, 9090, 9093`.
- Windows: запуск из PowerShell, пути проекта в `c:\docker\nginxphp\server\project`.

17
docs/troubleshooting.md Normal file
View File

@@ -0,0 +1,17 @@
# Диагностика и троблшутинг
## Healthchecks
- `nginx`: проверка `http://localhost/`.
- `php-fpm-v1/v2`: проверка `http://nginx/api/v1/` и `http://nginx/api/v2/`.
- `postgres`: `pg_isready`.
- `memcached`: `pidof memcached`.
## Типичные проблемы
- Порты заняты: проверьте, что нет конфликтующих сервисов.
- Ошибка доступа к `/status`: ограничьте доступ в продакшене, в DEV открыт.
- Postgres exporter: проверьте `DATA_SOURCE_NAME` и учётные данные.
## Логи
- Nginx: `./logs/nginx`.
- PHP-FPM v1/v2: `./logs/php-v1`, `./logs/php-v2`.
- Postgres: внутри контейнера `/var/lib/postgresql/data/log` (при включении логгирования).