Skip to content

 Добавляет упаковку в контейнер #391

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

HellSquirrel
Copy link

Запаковывает приложение в контейнер. Работает в одном из двух режимов - локальный тест (без сертификатов) или прод сборка (предполагается что сертификаты есть на машине где запускается контейнер)

Чтобы потестировать можно сделать так

  • Запустите команду docker build -t <имя_контейнера> --build-arg NGINX_CONF=nginx.local.conf .

  • Запустите docker run -p 8080:80 <имя_контейнера>.

  • Проверьте результат на localhost:8080

@pepelsbey
Copy link
Member

pepelsbey commented May 19, 2025

Наверное всё хорошо, я не настоящий сварщик)

Заметил, что:

  • Нужно не просто поставить Докер, а ещё быть авторизованым в CLI, то есть docker login, чтобы стянуть пакеты.
  • Локально запущенный сервер (docker run -p 8080:80) работает на HTTP 1.1 и даже не гзипует, а хотелось бы чтобы HTTP 2 и бротлил даже. Хотя вроде HTTP 2 без SSL не получится, если правильно помню.
  • По докам непонятно откуда брать имя контейнера и зачем оно нужно. Если оно произвольное (я написал просто web-standards), то может в доках так бы и написать?

Я вообще засомневался, что докер нужно к этой репе прикручивать, поскольку нам нужны полные nginx-кофиги (приватная репка), которые наверное не стоит светить, не уверен.

@pepelsbey
Copy link
Member

pepelsbey commented May 19, 2025

Наверное нам официальный образ не подойдёт (он не поддерживает brotli) и нужно взять уже готовый с brotli, например такой. Ну или изготовить в процессе сборки свой такой же)

@monochromer
Copy link
Member

В дальнейшем предполагается использовать этот контейнер на продовом сервере?

@HellSquirrel
Copy link
Author

В дальнейшем предполагается использовать этот контейнер на продовом сервере?

Приветик. Да. Сейчас оно немного разобрано (мне надо завести бротли в Debian :) План примерно такой: собрать контейнер в gha и дальше запускать где-то :)

@monochromer
Copy link
Member

мне надо завести бротли в Debian

А Alpine не устраивает? Для него есть пакет - https://pkgs.alpinelinux.org/package/edge/main/x86/nginx-mod-http-brotli.

В Debian тоже есть - https://packages.debian.org/sid/libnginx-mod-http-brotli-filter

@HellSquirrel
Copy link
Author

@pepelsbey Я сделяль вторую версию с бротли и блекджеком. Дальше можно думать как сие деплоить

@monochromer
Copy link
Member

Модуль с brotli нужно ещё подключить и настроить.

Можно жать на лету, но я бы предложил использовать раздачу заранее подготовленных brotli и gzip архивов. После сборки в папке со статикой создать brotli-архивы (тут прорекламирую свою утилиту web compressor), затем настроить nginx на раздачу этих архивов:

load_module modules/ngx_http_brotli_static_module.so;

http {
  server {
    brotli_static on;
  }
}

@HellSquirrel
Copy link
Author

Модуль с brotli нужно ещё подключить и настроить.

Можно жать на лету, но я бы предложил использовать раздачу заранее подготовленных brotli и gzip архивов. После сборки в папке со статикой создать brotli-архивы (тут прорекламирую свою утилиту web compressor), затем настроить nginx на раздачу этих архивов:

load_module modules/ngx_http_brotli_static_module.so;

http {
  server {
    brotli_static on;
  }
}

Там уже настроено. Контейнер вытаскивает приватный репозиторий с конфигами. Именно поэтому там странные ssh маунты внутри )

@monochromer
Copy link
Member

Там уже настроено. Контейнер вытаскивает приватный репозиторий с конфигами. Именно поэтому там странные ssh маунты внутри )

Хорошо, но я всё равно настаиваю на статике – зачем сжимать на каждый запрос, если это можно сделать один раз заранее.

@pepelsbey
Copy link
Member

Сжатие на каждый запрос более гибкое. Можно положить на сервер что-то мимо сборки, если нужно. Или использовать этот образ для других проектов. Ну и в целом цена сжатия на лету небольшая, вроде.

@monochromer
Copy link
Member

Динамическое сжатие хорошо применять, где есть генерация на лету html, rss, xml  или json. Ничего из этого в проекте нет. А так можно создать архивы с максимальной степенью сжатия.

@pepelsbey
Copy link
Member

Правильно ли я понимаю, что сжатие происходит в момент сборки контейнера, когда он забирает весь контент, и неважно, что там вообще?

@monochromer
Copy link
Member

Да, но можно настроить какие именно файлы сжимать и какой должен быть минимальный размер файла (как правило, файлы меньше 1Кб становятся только больше).

@pepelsbey
Copy link
Member

Ну тогда такая стратегия кажется адекватной. Лишь бы она не слишком замедляла скорость сборки (и не повышала бы его цену) из-за слишком высокого сжатия)

@HellSquirrel
Copy link
Author

Я согласна. Сборковое сжатие имеет смысл. Однако я бы кушала слоника по частям и сначала допинала докер идентичный текущему сетапу.

Дальше можно отдельно подумать про производительность и порешать проблемы которые есть (я предположу что сейчас почти никаких нет)

И вот только после того можно заняться творчеством и выкрутить перформанс на максимум. Думаю что первым шагом для этого было бы хорошо посмотреть конфиг/наличие CDN. Так как CDN отвечает за самое агрессивное кеширование. Ну и дальше поиграть c http заголовками, посмотреть оптимизирован ли SSL и что-то вынести на этап сборки

@pepelsbey
Copy link
Member

Я согласна. Сборковое сжатие имеет смысл. Однако я бы кушала слоника по частям и сначала допинала докер идентичный текущему сетапу.

Синьора ответ 😎 Согласен!

Co-authored-by: monochromer <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants