Nginx+Letsencrypt+IPv6 in docker

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Привет, я решил отпраздновать сегодня публикацией маленького набора конфигов, которые я отлаживал и переписывал хрен знает сколько.
Пытаюсь сделать решение для общего случая этой маленькой задачки из заголовка.
Для всяких wordpress-блогов, форумов и лендингов, когда еще и с https и ipv6 трахаться совсем-совсем не хочется, а хорошо бы.

Пришлось изучить posix sh - довольно странный язык программирования, он заметно отличается от привычного bash.
Отладка скрипта, который выпускает и обновляет реальные сертификаты, как оказалось, требует очень много времени. Из-за этого я не мог закончить набор Nginx+ACME+MySQL+PHP и перейти к фреймвокам и wordpress.
Я дождался и проверил обновление сертификата через 2 месяца, тем временем сократил решение раза в 2.
Буду реально рад комментариям, указаниям, и объяснению почему это нафиг не нужно.

 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Я использую DNS-01 challenge, с ним выпуск сертификата вообще не требует никакого взаимодействия с веб-сервером, и все сводится к запуску standalone контейнера с acme.sh. Остается только вопрос доставки сертификатов и рестарта, что уже вещь банальная.

HTTP-01 с контейнеризацией это геморрой который непонятно зачем нужен )
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Да, DNS challenge - отличная штука, она позволяет *.host.tld, только это зависимость от регистратора. Для общего случая, для enterprise и всяких странных доменов типа .ru не подходит.

Доставка сертификата - конечно, через общий volume. А рестарт - совсем не банальная вещь. Пробрасывать сокет докера в контейнер - это те самые гланды через задницу. Мое решение на порядок проще, безопаснее, и подходит для общего случая без противопоказаний.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
"Зачем нужен" - да, тут ситуация такая. С одной стороны, я эту задачу решаю в каждом проекте. Ну, как... раз в пару лет написал и забыл - домены и сервера у проектов не меняются. А с другой, на эти вещи, TLS и ipv6, часто просто забивают. Помню как certbot не обновился, сертификаты не обновились, и сайт лег в субботу с проэкспайрившимся сертификатом.

Проекты побольше разработчики запускают локально как-то через docker-compose up, а на проде админы по-своему, и при смене окружения оно иногда ломается. Там другие проблемы, вообще.

А в проектах поменьше забивают просто потому что сложно. Я пытаюсь сделать общее решение для всяких CMS, wordpress и форумов - скопируй, вставь имя домена, работает. Потому что нравится, не нравится, а их пол-интернета.

Я даже не знаю, как до этих разработчиков на коробках это решение донести. Только @Yoskaldyr и знаю, кто этим занимается. Может быть, оно им и не нужно. Фидбек не помешает.
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
Я даже не знаю, как до этих разработчиков на коробках это решение донести. Только @Yoskaldyr и знаю, кто этим занимается. Может быть, оно им и не нужно. Фидбек не помешает.
Если в общем - то там он вообще не нужен. Докер нужен только там где есть те кто умеет с ним работать, а это не коробочные решения, рынок поддержки и разработки которых на 99% состоит из говно фриланса.

Там все очень печально - докер для разработки, да бывает. Но вот где-то еще в проде - ну очень редко.

Обычно есть такое:
1. Поменьше сайты и там в 99% случаев полностью рулят панельки. Да и часто панельки рулят даже в довольно крупных проектах (ну че типа удобно владельцу - видимость полного контроля). Настройки в панельке полностью покрывают требования ко всем основным коробочным продуктам (и клиенту пофигу что оно не оптимально).
2. Чуть побольше, когда владелец может позволить себе нормальный выделенный сервер и кастомную разработку и более менее адекватный админ суппорт, тогда обычно это ручная настройка под конкретный сайт и часто просто базовая настройка php-nginx-mysql под конкретный дистр.

А докер в большинстве случаев используется только в случае когда админ хочет так все завернуть, чтобы обращались только к нему для всех последующих правок или модификаций конфигов. Это я из практики пишу, т.к. в реальности встречал докер всего раза 3 и всегда были проблемы с прошлыми админами - оставленные шеллы и т.п. прелести. Т.е. как бы странно не звучало - докер во фриланс-админстве - это показатель хитрожопости этих админов, а не профессионализма.

Я докер в принципе не использую у клиентов в проде, т.к. надо понимать, что с докером шанс что смогут разобраться те, кто будет после меня стремится к нулю. Да, фриланс он такой - бессмысленный и беспощадный.

Весь прикол в том что очень много сайтов живет на минивдсках и куда там ставить докер, если и так уже виртуалка (не всегда на нормальной виртуализации) и памяти в притык?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Любопытно и грустно. Уже несколько лет во всех проектах, которые я вижу, разработка с docker-compose. Деплой по-разному, и это связано с проблемами докера.

Дело не в ресурсах. У докера RSS - 70 мб. На мини-виртуалке за $5/mo с 1 гб оперативки под докером nginx/php/mysql, и свободно крутится форум с базой в пару гигабайт. Не бывает дешевле виртуалок у нормальных провайдеров.

Конечно, я решал свою задачу. Несколько сайтов бложиков-форумов, каждый на своей VPS, на каждом хочется настроить HTTPS с Lets Encrypt, каждый сервер, каждую коробку надо обновлять, и открывать php-процессам пермиссию на запись в php-файлы совсем не хочу.
И нанимать админа, который будет следить за моими бложиками, я тоже не собиараюсь, а делать одно и то же с каждым сайтом - яжепрограммист!

Ручные настройки под конкретный дистрибутив для одинаковых стеков - это тупая однообразная копипаста. Я не хочу заново настраивать сервера при переезде, мне надоели проблемы с устареванием операционных систем и php. Я хочу взять новую виртуалку, запустить несколько команд, переключить DNS - и оно просто работает себе дальше.
Жаль, что вместо этого докер используют для жульничества.

Цель решения Nginx+Lets Encrypt+... - чтобы вот этот более менее адекватный админ суппорт был не нужен. Скопировал файлы, прописал имена доменов в конфиге, оно само запустило TLS и обновляет сертификаты, ни денег, ни времени не требует.

В общем, если это кому-то нужно - берите.
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
@grigori докер на openvz виртуалке????? Не везде есть квм или что-то нормальное :(
Да понятно зачем это надо. Но есть один момент. Кто будет обновлять образы докера? Кто будет разбираться если какие проблемы?
Надо понимать, что на той стороне нет никого кто сможет с ним работать - вот вообще нет. печально но факт.

Типичный пример - знакомый один попросил посмотреть что у него отвалилось на одной вдске. Оказалось было на докере, только вот разработчик докер запуск автоматом не прописал и кое-какие настройки скрипта изменились, надо было конфиг подправить. Только вот как изначально найти что что-то должно запускаться если, не только слои системы, но и абсолютно весь код на ноде (с нодмодулес и всем трешем) тоже был запушен в докер регистри. Как нормально без костылей исправить такой код, если почему-то после запуска что-то падает? Поэтому нет тех кто смог бы с докером нормально работать :( Панельки значительно меньшее зло в этой сфере, чем докер.

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Мы о разном. Обновление образов докера - это команды `docker pull nginx:alpine` и `docker pull php:7.4-alpine`. Это раз так в 100 проще, чем обновлять сервисы, которые настоены из пакетов дистрибутива.

Вопрос "кто будет обновлять" подразумевает, что владельцу сайт и сервер безразличен. Таким людям, конечно, лучше купить wordpress по подписке в SAAS, и не нужно никакое программирование.
Конечно, я думаю о тех, кто думает про свои сервера. У меня нет выбора обновлять или нет, мне просто надоело делать одно и то же каждый год.

Я не знаю таких вируталок, где памяти меньше гигабайта.
У всех известных провайдеров виртуалки стоят от $5, и в них 1гб оперативки. Для wordpress у меня на виртуалке хватает 500, 470 мб свободны, и +- 70 мб незаметны.
Наверное, есть виртуалки по $1, но я не понимаю как может работать провайдер, продавая 1000 виртуалок в месяц за $1000. Надо ж еще железо и ДЦ оплачивать.
 

fixxxer

К.О.
Партнер клуба
Как нормально без костылей исправить такой код
Склонировать из репозитория, запустить docker-compose на машн разработчика, исправить, запушить в репозиторий, сбилдить на CI, запушить в регистри.

Если на подход openvz-cpanel-залить по фтп пытаться частично натянуть современные практики чисто из моды, не меняя сам процесс - конечно, ничем хорошим это не кончится. Не выеживайтесь, Иван Иваныч, слушайте "Валенки".
 

Yoskaldyr

"Спамер"
Партнер клуба
@fixxxer @grigori Да все что вы пишете - правильно. Но только в нормальных условиях. Речь же шла о хардкоре коробочных решений и фрилансе. Вот там ад - это норма. И повторюсь никто нормально с докером там не работает - это факт. Речь же изначально шла о необходимости и полезности этого решения для таких случаев - так оно там никому не надо, только потому что там нет НИКОГО кто бы это использовал и вообще понял что это и зачем. Был вопрос - я ответил. Хотите верить что там это кому-то нужно - пожалуйста, но это никак не изменит того что треш останется трешем и этому трешу докер не нужен.

@fixxxer Такой вопрос, я не совсем понял по твоим словам - пихать весь код с node_modules в паблик регистри это норма??????
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
как изначально найти что что-то должно запускаться если, не только слои системы, но и абсолютно весь код на ноде (с нодмодулес и всем трешем) тоже был запушен в докер регистри.
В нулевых был такой сравнительно честный способ - зажать исходники и взять за них дополнительные деньги. Масковские дизайнеры особенно так делали. Подписывали договор, где результат работы был указан в jpg, а когда человек шел в типографию, и его просили в векторе или psd, то с него еще $1000.
А кодеры обфусцировали php-код. Встраивали проверку даты, и когда клиент не платил, сайт начинал выдавать ругань, что владелец сайта плохой человек и кидала. 😁

Только это не про докер. В отличие от обфускаторов, образ докера - это папка на диске :) файлы не закодированы, не сжаты, докер - это не виртуалка. Просто разработчик не хочет исправлять свои ошибки. Ну, никто и не обязан, я с нодой не сталкивался, тоже не справился бы.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Был вопрос - я ответил. Хотите верить что там это кому-то нужно - пожалуйста, но это никак не изменит того что треш останется трешем и этому трешу докер не нужен.
спасибо! мне это было нужно - теперь понимаю, что это для тех, кому не все равно, но надоело
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
докер - это не виртуалка
докер это и виртуалка - особенно на винде (работает через виртуалку)

А кодеры обфусцировали php-код. Встраивали проверку даты, и когда клиент не платил, сайт начинал выдавать ругань, что владелец сайта плохой человек и кидала.
Это никуда не делось. Дело все еще живее всех живых.

Я привел пример с докером, только для того что в том случае быстро найти что не работает, не говоря уже о коде не представлялось возможным, учитывая что кроме докера, на этом же сервере стоял и работал и nginx и мускуль и пхп. А предыдущий разработчик пропал, и понятно что инструкции что и как на серваке не было. История команд - пустая :) Владелец был без понятия на чем там все было написано. И здесь не вопрос знаю я или не знаю инструменты, а в том что здесь эти инструменты ну как бы не сильно применимы, учитывая что над сайтом может работать 100500 Вась. Что и подтвердила статистика - передо мной пробовала понять что не работает около 10 админов и было потрачено около 500 баксов на все это (деньги не сильно большие, но это просто хорошо демонстрирует как обычно это работает в данной сфере)

И последний пример, довольно крупный магазин (главный оптовик в Украине в одной из ниш потребительских товаров) тупо работал на шаред хостинге от разработчика конфигурации магаза. Платили конечно как за полноценный сервак, в довесок ионкуб. При условии что код от которого хочется вешаться, страница по 30 сек могла генерироваться. А вы говорите докер...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Не, ну, украинский оптовик - это b2b, где вообще пофиг скорость генерации, им один раз в день на клиента выгрузить каталог надо.

пробовала понять что не работает около 10 админов и было потрачено около 500 баксов
🤣 админы оптом по $50 за штуку
 

Yoskaldyr

"Спамер"
Партнер клуба
Не, ну, украинский оптовик - это b2b, где вообще пофиг скорость генерации, им один раз в день на клиента выгрузить каталог надо.
Ну у них и свой магаз для розницы, довольно старый, но который они типа хотят продвигать. А тчо-то не получается когда таааак тупит.
🤣 админы оптом по $50 за штуку
да там обычно так - 20-30$ час, предоплата на пару часов и пофигу по факту не получилось :))))
 

Yoskaldyr

"Спамер"
Партнер клуба
Весь треш что был в 2000-х никуда не делся, дополнительно добавились современные нюансы. Хотя это уже вообще оффтоп пошел
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
А предыдущий разработчик пропал, и понятно что инструкции что и как на серваке не было.
Я сейчас обсуждаю один проект, в котором нет процессов.
В пятницу меня попросили написать план работы. И я написал.
* In collaborating with stakeholders and marketing create an understandable list of key parameters affecting sales of the product.
It can be short- or long-term goals, SLA, scalability, content or product features - something to bind the virtual tech tasks to the real world demand.
* Study the business logic and current operations of the project, define contexts by DDD, and create a high-level description to assist onboarding.
* Define the system bottlenecks that make problems with scaling and availability
* From key parameters of the business and the current state of the system agree the middle-term goals of an IT team.
* Establish a hiring and onboarding process to create a strong team. It requires composing documentation/use cases together with a product owner.
* Create a workflow using team collaboration tools such as kanban boards, ticket/tracker system, chat, git repo.
* Establish system monitoring, logging, and backup/recovery plans.
* Create the architecture modification plan.
* Decompose the middle-term development goals by milestones and agree calendar plans.
* Create a CI/CD development-test-release flow and event logging.
* Prioritize tasks of the development team.
* Work out the regular meetings with a product owner and reporting of an IT department to stakeholders.
Отправил по мылу. Потом задумался, что в списке нет разработки. И задумался, зачем я это пишу, как объяснить зачем вот это вот все, люди говорят, что не программисты, и может быть, просто хотят, чтобы им сделали хорошо, а я им такое.

Упустил я в своем письме главный момент. Когда заказывают сайт - это лотерея. Наверное, сделают. Может быть, исправят.
Весь мой список нужен только для одного - для предсказуемости. Если хочешь предсказуемости результатов - затраты увеличатся раз в 100.
 

fixxxer

К.О.
Партнер клуба
я не совсем понял по твоим словам - пихать весь код с node_modules в паблик регистри это норма?
В паблик это, конечно, как минимум странно. Я подразумевал приватный.

А вообще, ну да, а ты что предлагаешь, на каждой ноде npm install запускать?
 
Сверху