test26 — Приложение (test)¶
Общее¶
| Параметр | Значение |
|---|---|
| Тип | CX23 (2 vCPU, 3.7 GB RAM, 40 GB SSD) |
| ОС | Ubuntu 24.04.4 LTS (Noble Numbat) |
| Ядро | 6.8.0-107-generic |
| Public IP | 46.224.173.242 |
| Private IP | 10.26.0.6 |
| Timezone | Asia/Jerusalem |
| Проект | infra26 |
| SSH | ssh digi.i26.test26 (порт 1022) |
| Ansible playbook | project/test26.yml |
Архитектура¶
test26 совмещает роли: - Load balancer — HAProxy с TLS-терминацией (аналогично lb26), но только для тестовых сайтов - App server — все тестовые WordPress-сайты в Docker на том же хосте
Трафик: Internet → HAProxy (:443) → nginx-контейнер (10.26.0.6:200NN) → PHP-FPM-контейнер (:9000)
Сервисы¶
Системные¶
| Сервис | Порт | Описание |
|---|---|---|
| HAProxy 3.0 | 0.0.0.0:80/443, 10.26.0.6:8405 |
TLS-терминация и роутинг по хостам |
| Nginx | 127.0.0.1:8080 |
Только ACME-challenge |
| node_exporter | 10.26.0.6:9100 |
Prometheus-метрики хоста |
| bareos-filedaemon | 10.26.0.6:9102 |
Клиент резервного копирования |
| gitlab-runner | — | CI/CD runner |
| glpi-agent | — | Инвентаризация |
Общие Docker-сервисы¶
| Контейнер | Образ | Описание |
|---|---|---|
| redis | redis:7.4.8 |
Общий кэш (внутренний, порт 6379) |
| postgres | postgres:16 |
PostgreSQL (внутренний, порт 5432) |
| autoheal | willfarrell/autoheal |
Авто-перезапуск unhealthy контейнеров |
Тестовые сайты¶
Каждый сайт разворачивается плейбуком test26-NN-*.yml через роли compose_php_fpm + compose_php_cli + haproxy_config.
| № | Домен | Nginx-порт (HAProxy → контейнер) | CLI SSH (снаружи) | Плейбук |
|---|---|---|---|---|
| 10 | dev.mitgavrim.digiproduct.co.il | 10.26.0.6:20010 |
0.0.0.0:10010 |
test26-10-dev-mitgavrim.yml |
| 11 | stage.mitgavrim.digiproduct.co.il | 10.26.0.6:20011 |
0.0.0.0:10011 |
test26-11-stage-mitgavrim.yml |
| 12 | makeitdigital.digiproduct.co.il | 10.26.0.6:20012 |
0.0.0.0:10012 |
test26-12-makeitdigital.yml |
| 13 | conector.nonomimi.digiproduct.co.il | 10.26.0.6:20013 |
0.0.0.0:10013 |
test26-13-conector.nonomimi.digiproduct.co.il.yml |
| 14 | conector.stage.nonomimi.digiproduct.co.il | 10.26.0.6:20014 |
0.0.0.0:10014 |
test26-14-conector.stage.nonomimi.digiproduct.co.il.yml |
| 15 | nonomimi2.digiproduct.co.il | 10.26.0.6:20015 |
0.0.0.0:10015 |
test26-15-nonomimi2.digiproduct.co.il.yml |
| 16 | littleriverguesthouse.digiproduct.co.il | 10.26.0.6:20016 |
0.0.0.0:10016 |
test26-16-littleriverguesthouse.digiproduct.co.il.yml |
Docker-контейнеры на сайт¶
| Контейнер | Образ | Назначение |
|---|---|---|
ngx_NN-<sitename> |
nginx:1.29.5-trixie |
Web-сервер, проксирует в PHP-FPM |
fpm_NN-<sitename> |
wordpress:php8.4-fpm |
PHP 8.4 + WordPress |
cli_NN-<sitename> |
registry.digiproduct.co.il/infra/compose/php84:8.4.14-cli |
PHP CLI с SSH (WP-CLI, деплой) |
Для conector.nonomimi.digiproduct.co.il (#13) дополнительно:
- schedule_13-… — обработчик расписания (Laravel/кастомный)
- queue_13-… — обработчик очереди
Файлы сайтов: /docker/volumes/NN-<sitename>/
CLI SSH-доступ к контейнерам¶
Порты 0.0.0.0:100NN:22 открыты наружу — используются GitLab CI/CD для деплоя:
ssh -p 10010 [email protected] # cli контейнер сайта #10
HAProxy — маршрутизация¶
Входящий трафик (порт 80)
├── /.well-known/acme-challenge/ → nginx (127.0.0.1:8080)
└── всё остальное → redirect 301 https://
Входящий трафик (порт 443, TLS)
├── dev.mitgavrim.digiproduct.co.il → 10.26.0.6:20010 (send-proxy)
├── stage.mitgavrim.digiproduct.co.il → 10.26.0.6:20011 (send-proxy)
├── makeitdigital.digiproduct.co.il → 10.26.0.6:20012 (send-proxy)
├── conector.nonomimi.digiproduct.co.il → 10.26.0.6:20013 (send-proxy)
├── conector.stage.nonomimi.digiproduct.co.il → 10.26.0.6:20014 (send-proxy)
├── nonomimi2.digiproduct.co.il → 10.26.0.6:20015 (send-proxy)
└── littleriverguesthouse.digiproduct.co.il → 10.26.0.6:20016 (send-proxy)
- www.* → redirect 301 на голый домен
- Балансировка:
leastconn, health-check каждые 2 с - Cloudflare real-IP из
CF-Connecting-IP - Заблокирован IP
5.29.19.3и user-agentMJ12bot
SSL-сертификаты¶
| Домен | Статус |
|---|---|
dev.mitgavrim.digiproduct.co.il |
активен |
stage.mitgavrim.digiproduct.co.il |
активен |
makeitdigital.digiproduct.co.il |
активен |
conector.nonomimi.digiproduct.co.il |
активен |
conector.stage.nonomimi.digiproduct.co.il |
активен |
nonomimi2.digiproduct.co.il |
активен |
littleriverguesthouse.digiproduct.co.il |
активен |
Cron: 0 3 * * * → certbot-helper.sh >> /var/log/certbot-combine.log 2>&1
Мониторинг¶
| Компонент | Порт | Scraped by |
|---|---|---|
| node_exporter | 10.26.0.6:9100 |
116.203.108.152, 46.224.166.151 (mon26) |
| HAProxy Prometheus | 10.26.0.6:8405 |
mon26 |
| glpi-agent | — | роль haproxy, env production-infra26 |
Резервное копирование (Bareos)¶
| Параметр | Значение |
|---|---|
| Клиент | bareos-filedaemon на 10.26.0.6:9102 |
| Директор | bkp26 (10.26.0.8), FQDN bkp26-local.digiproduct.co.il |
| Хранилище | Hetzner Object Storage fsn1.your-objectstorage.com |
| Бакет | digibkpinfra26 |
| Расписание | WeeklyCycle |
| Удержание | 90 дней |
| Макс. томов (incremental) | 100 |
| Spool dir | /var/lib/bareos/spool/test26 |
Бэкапы сайтов (/docker/volumes/NN-<sitename>/) управляются отдельными заданиями через роль bareos_bkp_wp_s3 в плейбуках test26-NN-*.yml.
Файрвол¶
UFW отключён. Файрвол управляется через iptables (/etc/iptables/rules.v4).
Открытые порты: 80/tcp, 443/tcp, 1022/tcp (SSH), 10010–10016/tcp (CLI SSH контейнеров).
Ansible-роли¶
Плейбук project/test26.yml:
| Роль | Статус | Назначение |
|---|---|---|
infra26 |
закомментирована (уже применена) | базовая настройка: swap 4GB, Docker, MySQL client, timezone |
compose_autoheal |
закомментирована (уже применена) | авто-перезапуск контейнеров |
node_exporter |
закомментирована (уже применена) | Prometheus-экспортер хоста |
glpi_agent |
закомментирована (уже применена) | инвентаризация |
systemd_haproxy |
закомментирована (уже применена) | HAProxy + Nginx + certbot |
systemd_bareos_client |
закомментирована (уже применена) | bareos-filedaemon |
bareos_bkp_system_s3 |
закомментирована (уже применена) | бэкап системы в S3 |
systemd_gitlab_runner |
активна | регистрация GitLab CI/CD runner |
Заметки¶
- SSH нестандартный порт: 1022
- Диск 69% занят (25 GB / 38 GB) — много overlay-слоёв от 7 сайтов × ~3 контейнера
- RAM ~2.3 GB из 3.7 GB; при добавлении новых сайтов нужен апгрейд типа сервера
infra26_install_mysql_common_client: true— MySQL CLI установлен на уровне ОС (для удобства)- Журнал systemd ограничен 300 MB (
@daily journalctl --vacuum-size=300M)