Перейти к содержимому

Продакшен

Публичный слушатель сервера сам по себе не занимается TLS. В продакшене перед ним ставят nginx: он держит сертификаты и раздаёт байты файлов, а на сервер проксирует запросы лаунчера и Yggdrasil. Готовый конфиг лежит в deploy/nginx/laminara.conf.

nginx и TLS

Пример проксирует всё на публичный порт сервера и говорит по HTTP/1.1 — этого хватает и для Connect-вызовов лаунчера, и для Yggdrasil.

location / {
proxy_pass http://laminara; # upstream на 127.0.0.1:8099
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
}

Сертификат берётся certbot’ом; редирект с :80 на :443 и путь для ACME-проверки уже прописаны в примере. Домены в конфиге замените на свои.

Раздача файлов: два пути

Как сервер отдаёт байты объектов, зависит от хранилища.

Включите api.xAccel: true. Тогда на запрос /objects/<хеш> сервер отвечает заголовком X-Accel-Redirect, а сами байты отдаёт nginx через sendfile — без копирования через процесс сервера. В nginx нужна внутренняя локация, указывающая на каталог хранилища:

location /internal-objects/ {
internal;
alias /var/lib/laminara/objects/;
add_header Cache-Control "public, immutable, max-age=31536000";
}

Префикс /internal-objects/ должен совпадать с xaccelPrefix в настройках файлового хранилища.

Порт и бэкапы

  • Наружу открывается только порт nginx (443). Публичный порт сервера (api.addr) держите на 127.0.0.1 или во внутренней сети — снаружи к нему ходить незачем.
  • Каталог данных (/var/lib/laminara) — это профили сборок, объекты и ключ подписи. Потеря ключа означает, что старые манифесты больше нечем переподписать. Бэкапьте его отдельно и надёжно.