Один 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).