← Назад к обзору

Один build.zip

make release-compat && make dist    # → deploy/build.zip (~25 MB)

Бинарник кросс-компилируется под glibc 2.17 через cargo zigbuild — работает на CentOS 7+ и любом современном Linux.

systemd

deploy/blog.service — юзер blog-server (system, no-login), каталог /opt/blog-server/, security hardening (NoNewPrivileges, ProtectSystem=strict), LimitNOFILE=65536. Порт 80 через AmbientCapabilities=CAP_NET_BIND_SERVICE.

HAProxy reverse proxy

deploy/install_haproxy.sh + deploy/haproxy.cfg: :80 → 301 → :443, :443 → TCP passthrough → 127.0.0.1:8080 (blog-server с TLS+ACME). Stats :8404 — localhost only.

Phusion Passenger

Проект совместим с Passenger 6 (Generic Language Support). Passengerfile.json с max_instances: 1 (приложение stateful). Secure cookie через X-Forwarded-Proto — корректная работа за reverse proxy. Hot reload (file watcher) с Passenger не использовать.

Docker

Три compose-файла: dev / prod / runtime.

# Dev (сборка внутри контейнера)
docker compose -f docker/docker-compose.yml up

# Prod (zigbuild под glibc 2.17 внутри контейнера)
docker compose -f docker/docker-compose.prod.yml up --build

# Runtime (pre-built бинарник монтируется)
make release-compat && docker compose -f docker/docker-compose.runtime.yml up --build

Для локальной отладки — docker/Dockerfile.debug + docker-compose.debug.yml (host-side remote debugging через gdbserver и CodeLLDB).