Pull to refresh

Comments 27

Итак, что бы проксировать http(s) в localhost:8080 вы выбрали такой путь:
Nginx, возможно даже из сторонних репозиториев, конфиги, установка sertbot и какие-то там подтверждения соглашений, ручные правки, кроны…
Предлагаю заменить этот паровоз на два элемента systemd+traefik. Без каких-либо ручных правок файлов.
Алгоритм автоматизации:


  • скопировать юнит-файл
  • скопировать бинарник traefik
  • cкопировать конфиг traefik
  • установка вашего или любого другого сервиса на local host:8080 ( кстати, а почему не на сокете?)
  • настройка fw
  • reboot
По поводу сокета. Так вроде бы не умеет в них Apache Tomcat (или я не умею его готовить). Jetty умеет, но по условиям задачи нужен Tomcat.

Tomcat умеет в Ajp и есть связка Apache + tomcat по AJP (и в этом варианте, насколько мне помнится) даже не нужно ничего в томкате кофигурить — Apache Web Server сам корретно ip, порты и пр. прокидывает.

Наверняка можно и nginx + tomcat ajp настроить.
На самом деле сокет vs порт — наверное, меньшая из проблем. Тем более, если планируются docker'ы или разносить бекенды на разные ноды (сокет только в пределах одной ноды (сервера) работает).
+1. Я тоже топлю за traefik.
Он прекрасно работает с докерами, динамические конфиги и всякая радость.
Немаловажно, что traefik дает производительность сравнимую с nginx, а пользоваться им намного удобнее.
Также traefik прозрачно интегруется с LE и не нужно тащить всякую дрянь в систему.

Еще я бы обязательно обратил внимание автора статьи на такой чудесный прокси, как envoy.
Автору.
Ну, что опять за дет сад.
Я полностью согласен с комментарием пользователя BOPOHA
Эти действия можно сделать один раз. А дальше уже нужна автоматизация (покажите мне свои манифесты/роли и я скажу, кто Вы!!!). Я на третий раз уже всегда пишу ansible/salt роль/манифест/state, ну, либо на край — башник.
К тому же, выкинуты за борт пользователи альтернативных дистрибутивов. Ну, там centos и прочее.
Спасибо, посмотрел. Не до конца понял, как этот docker image мне может помочь. Моя цель поднять reverse proxy с бесплатным (не самоподписным!) https сертификатом с минимальными усилиями. Кажется, для этого container'а уже нужно иметь уже готовые https сертификаты и он решает вопрос настройки nginx + ssl. Я понимаю, что если покопаться, то, наверное, найдется и такое решение (docker image for nginx + ssl + let's enctypt), но по моим внутренним ощущениям docker в этой задаче overkill. Т.е. нужна какая-то простая штука которую запускаешь и забываешь на годы (или пока Java не съест всю память :). А тут еще мы добавляем промежуточный слой docker'a с которым тоже могут быть свои особенности (от пробрасывания логов до изменений в сам образ и пр.).

И еще раз спасибо за комментарий.
Я согласен, что в этом случае docker тащить — это overkill.
А потом придется еще бороться с особенностями docker (совместимость версий, настройка firewall, настройка драйверов storage etc).
С другой стороны, если в инфраструктуре докер уже есть, то почему бы им не воспользоваться? К тому же, docker реально позволяет избежать «замусоривания» основной системы лишними пакетами, конфигами etc.

Запускать ВМ для каждого сервлета и инсталлировать все окружение на нем, имхо, еще больший оверкил. Контейнер, наверняка, уже готовый можно найти, вверху, в другом комменте есть ссылка, например.


(совместимость версий, настройка firewall, настройка драйверов storage etc).

Все не актуально в данном конкретном случае.

А можете написать то же самое про tomcat 9? Его нет в apt-get, а ручная настройка мне не далась вообще нивкакую — systemd скрипты которые скопипащены по всем туториалам в интернете просто не работают :(
Спасибо!

Нет.

Точнее так. Судя по данным с сайта Ubuntu пакет tomcat9 появится только в версии disco AKA 19.04 А чем плох вариант скачать zip/gzip и установить 9 или версию 8.5 (ее к слову тоже нет в пакетах). Шаги по томкату брать отсюда, например.
Все прочее кроме расположение tomcat файлов (в том числе и config) у вас останется без изменения (т.е. чуть больше будет прыжков по автозапуску и пр. и прописывать org.apache.catalina.valves.RemoteIpValve нужно будет в файле conf/server.xml и все, как кажется).
Сделал все по инструкции. Полетело (digital ocean). По поводу порта 8005 — попробуйте его изменить в файле server.xml на любой другой свободный.
<Server port="8005" shutdown="SHUTDOWN">

Он, скорее всего, уже чем-то занят на это виртуалке. lsof Вам в помощь
> lsof -i :8005
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    3433 tomcat   86u  IPv6  32276      0t0  TCP localhost:8005 (LISTEN)
Блин, мне значит не везет. Пробовал в точности следовать туториалу прямо на Digital Ocean — не работает.

Что по поводу 8005 порта — то это была моя первоначальная догадка. Потом я все-таки выяснил, что причина в другом. Systemctl по какой-то причине останавливает сервис сразу же после того, как стартует его.

В итоге, я все-таки сделал себе Tomcat8 через apt-get — требование о 9м томкате было некритичным. Обидно просто было, что так и не выяснил в чем причина ошибки.

p.s. Большое спасибо за ваше время
Если еще есть виртуалка с tomcat 9 — посмотрите в логи томката (каталог logs). Если сервис стартует и останавливается, значит между этими событиями происходит какое-то событие (например, неправильный путь к JVM, порт занят и пр.).

Я бы на Вашем месте очистил каталог logs (сделал его пустым) и перезапустил tomcat9 сервис и посмотрел в логи.
логи всегда пустые — все файлы 0 bytes

Если логи пустые, то томкат даже не смог стартануть (обычно сообщения о занятых портах пишутся сильно позже). Те это или права или путь к jvm (хотя я в tutorial’e налажал и не изменил JAVA_HOME, так эти сообщения в логах были).

Значит, права. Спасибо! Буду копать.

проблема скорее всего в окружении. Тот же пользователь, права, настройки systemd-юнита etc. Разобраться можно.
Если это не тестовое окружение на одни сутки, то лучше озаботится наличием fail2ban или ограничением на файрволе доступа к ssh по белому списку адресов.
Здравая идея. А есть еще port knocking :)
повторюсь, что fail2ban — не лучшее решение.
Во-первых, как любой опенсурс — он не безгрешен. И может подвести. Ну, например, github.com/fail2ban/fail2ban/issues/798 Это все очень version-related.
Но, во-вторых, кмк, лучше защиты выносить на другой уровень — инфраструктуры (зоны безопасности в облачном провайдере, например), так и приложения (basic auth etc.).
Кстати, отдельный вопрос как будет дружить fail2ban c docker, учитывая, что оба переписывают правила файрволла.
За кадром еще два вопроса — вопрос идентификации клиентов за NAT'ом (для них f2b бесполезен, т.к. он не видит оригинальный IP) и еще вопрос нагрузки (т.к. каждое правило файрволла — снижение быстродействия, причем когда правил много, то значительное)
Ну и причём тут devops? Это работа обычно админа.

1) как запустить tomcat
2) как сделать сертификат в letsencrypt
3) основы proxypass (без кеша)
Все можно нагуглить элементарными запросами.
Если честно статья ни о чем. Кеш не рассмотрен. Минусы tomcat не показаны. Конфиг томката, дочки — ничего не рассмотрено.


Теперь — "по условиям задачи нужен Tomcat" — orly?
Задача поставлена самостоятельно, потому, что не смогли приготовить jetty или потому, что Jetty просто напросто отшила говнокод в отличие от tomcat, который жрет всё?


Ейбогу, вместо того, чтобы треш писать, лучше его удалить и потратить лишние 3 часа времени, но написать нормальный материал. Заодно и самому разобраться.

Sign up to leave a comment.

Articles