Продакшен
Публичный слушатель сервера сам по себе не занимается 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 в настройках файлового хранилища.
Байты через сервер вообще не идут. На запрос объекта он отдаёт редирект на presigned-ссылку хранилища, и лаунчер качает напрямую из S3 или CDN. nginx на пути файлов не участвует; xAccel не нужен.
Порт и бэкапы
- Наружу открывается только порт nginx (443). Публичный порт сервера (
api.addr) держите на127.0.0.1или во внутренней сети — снаружи к нему ходить незачем. - Каталог данных (
/var/lib/laminara) — это профили сборок, объекты и ключ подписи. Потеря ключа означает, что старые манифесты больше нечем переподписать. Бэкапьте его отдельно и надёжно.