Необходимые требования
Чтобы всё получилось нам понадобится:
- Сервер с Root доступом. Рекомендую вот этот
- Установленный Docker + Docker-Compose
- 20 - 30 минут времени
В двух словах о Portainer
Portainer представляет из себя GUI интерфейс для управления докер контейнерами. С его помощью можно Добавлять / Удалять / Клонировать / Стартовать / Перезагружать / Останавливать контейнеры.
Также очень просто можно посмотреть логи конкретного контейнера. Присоединяться к терминалу конкретного контейнера. Выбираем интересующий нас и нажимаем на соответствующую кнопку. Всё интуитивно понятно.
Помимо вышеперечисленного, Portainer умеет работать с Kubernetes. А ещё его можно использовать как единый узел для управления сразу несколькими серверами.
Portainer сильно упростит изучение технологий Docker на самом раннем этапе.
Установка Portainer
Создадим Volume где будет храниться информация
Теперь необходимо выбрать способ установки. Для новичков я рекомендую Способ 1, т.к. он более прост в понимании. Изначально этот пост писался именно под этот способ. Минусом данного способа будут торчащие наружу порты. Те самые которые вы замапите на 8000 и 9443.
Однако, существует и альтернативный вариант, рассмотренный во втором способе. Данный способ подразумевает что вы прочитали пост про Nginx Proxy Manager. В особенности раздел Вариант 2: Проксируем приложение через хостнейм. Этот способ чуть сложнее, но при этом он лучше в плане безопасности.
Способ 1: установка Portainer с торчащими наружу портами
Мы замапили порт 9000 внутри контейнера на порт 44150 на хостовую машину.
Обратите внимание порт 8000 внутри контейнера используется для агента Portainer. А порт 9000 внутри контейнера используется для веб интерфейса.
О том как добавить SSL сертификат для этого способа - читайте ниже в этом посте.
Способ 2: установка Portainer с привязкой по хостнейму
Перед тем как подключить SSL сертификат для этого способа, обязательно прочтите раздел: Вариант 2: Проксируем приложение через хостнейм из поста про Nginx Proxy Manager. Имейте в виду что в виду особенностей этого способа проксировать надо не на ip+внешний порт, а на portainer:9443
Способ 3: установка Portainer Portainer с помощью docker-compose
Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила - хранить все контейнеры в одном месте. Создаём необходимые директории для Portainer
Сделаем нашего пользователя (не root !) владельцем этой директории
Перейдём в директорию, которую мы создавали на предыдущем шаге
Создадим фаил docker-compose.yml
И заполняем его таким таким содержанием. Данный конфиг подойдёт сразу под amd64 и arm64 архитектуры.
Если Вы хотите поднять Portainer не светя порты наружу, прочитайте про проксирование приложения в NPM через хостнейм. После усвоения материала используйте этот фаил docker-dompose. В противном случае используйте первый вариант, изначально пост писался именно под него!
Я советую периодически проверять DockerHub на наличие новых версий. На момент написания статьи актуальная версия была
portainer-ce:2.19.4
SSL сертификат для Portainer
Необязательным но желательным шагом будет получение SSL сертификата. Дело в том что в данный момент все данные передаются по незащищённому протоколу http. Логин и пароль передаются в открытом виде.
Если вы ставите портейнер для того чтобы потренироваться на домашнем сервере то можно обойтись и без SSL. На продакшн сервере SSL musthave!
Самый простой вариант завести поддомен например portainer.domain.com и посадить на этот поддомен Portainer. Проще всего это сделать при помощи Nginx Proxy Manager. Если вы не знаете как, то читайте предыдущий пост Nginx Proxy Manager в Docker контейнере.
В Nginx Proxy Manager(далее NPM) создаём новый хост. Заполняем необходимую информацию.
- Домен либо поддомен
- Scheme - https
- Ip адрес
- Порт - 44150
- Обязательно включаем - Websockets Support если не включим то не сможем атачиться внутрь контейнеров через web интерфейс
Нажимаем Save и ждём примерно 60 секунд.
После этого снова редактируем только что добавленный хост, нажав на три точки справа и Edit.
На этот раз отправляемся в раздел SSL в котором запрашиваем новый ssl сертификат для нашего домена - Request a new SSL Certificate
И нажимаем кнопку Save
Обратите внимание, что после нажатия кнопки Save не должно быть никаких ошибок. Если у вас всё же были какие то ошибки, скорее всего это связано с тем что у вас не успели обновиться записи в DNS, либо вы превысили лимиты(количество попыток) LetsEncrypt. В обоих случаях надо просто подождать и повторить попытку позже.
Если же у вас не выдало никаких ошибок с сертификатом, то сразу проверяем результат в браузере, открыв только что добавленный домен.
Мы должны увидеть страницу установки Portainer
Базовая настройка Portainer
Открываем адрес
Либо тот порт который вы замапили на порт 9000 внутри контейнера.
Нас приветствует Portainer и предлагает задать логин и пароль для администратора
Следующим шагом будет задание эндпоинта. В рамках данной статьи мы рассматриваем работу Portainer в среде Docker - выбираем соответствующий пункт и нажимаем connect
Нас перекинет на главную страницу Portainer
На этом установка завершена.
Что умеет Portainer
Кликая по значку кита мы попадаем на Dashboard конкретного эндпоинта. В нашем случае локального.
Тут мы наблюдаем сразу несколько разделов
Stacks - Тут содержатся так называемые стэк контейнеры. В таких контейнерах присутствует сразу же несколько сервисов например Nginx + Php + MySQL.
Выгодным отличием стэк контейнера заключается в том что мы можем устанавливать какой сервис запускать после какого. Например в случае веб сервера имеет смысл сначала запустить БД потом PHP и После этого запустить Nginx. Если бы мы сначала запустили Nginx то наблюдали бы ошибки связанные с невозможностью подключиться к базе данных или же ошибки Php. Это фишка самого докера, а не портейнера.
Containers - Наши контейнеры. Запущенные и остановленные.
Images - образы для контейнеров. Те что скачиваются с докерхаба либо же те которые мы сами билдим.
Volume - название говорит само за себя. Тут содержаться наши виртуальные фаиловые системы для контейнеров.
Networks - сети.
Практика
Предлагаю попрактиковаться и поставить что нибудь из шаблонов портейнера. Пускай это будет нода (node).
Из главного меню переходим в раздел App Templates. Из списка выбираем ноду
В поле name вписываем название используя только маленькие латинские буквы a-z. У меня это будет nodesurge. После этого разворачиваем спойлер на котором написано +Show advanced options.
(Если вам нужно чтобы контейнер был присоединён к кастомной сети то вместо bridge выберите желаемую сеть, у меня это будет сеть evilcorp)
В выпадающем списке нас интересует пункт Volume mapping в котором кликаем по пункту map additional volume .
Перед тем как замапить директорию создадим её, например такую
И сразу дадим нашему пользователю права для этой директории
Возвращаемся к мэпингу директории в portainer. После того как мы нажали map additional volume выбираем Bind
В поле container вписываем /app
В поле host вписываем /app/misc/nodesurge/data
И нажимаем Deploy the container
Если всё сделано правильно, то спустя какое то время мы увидим оповещение что всё хорошо
Находим наш только что созданный контейнер по имени и нажимаем на него, попадая таким образом в его настройки
В любой момент мы можем посмотреть логи контейнера, зайдя в соответствующий раздел. Я же предлагаю сразу зайти в пункт >_Console
Мы можем зайти внутрь нашего контейнера нажав кнопку Connect
Попав внутрь поставим модуль для NPM Surge для этого вписываем
Ну и напоследок добавим какой нибудь простой HTML код в качестве сайта для Surge. Создаём папку с фаилом index.html с таким содержанием.
(Во время первой закачки необходимо будет авторизоваться вписав почту и пароль для входа, вас автоматически зарегистрирует если почта в сервисе используется 1 раз)
Видим что наш сайт опубликован на домене temporary-talk.surge.sh переходим на него, только подставим перед доменом https иначе откроется сайт без SSL сертификата.
Сработало!
Хитрости Surge
Если вы хотите использовать свой придуманный домен, то перед заливкой сайта создайте в его корне фаил CNAME в котором напишите желаемый домен.
Вам никто не запрещает создать HTML редирект с красивым доменом и потом использовать его в своих целях.
На этом с практикой закончили.
Переустановка Portainer
Иногда бывает нужно переустановить portainer. Для этого сначала понадобится удалить прежнюю версию. Делается это довольно
Останавливаем контейнер с portainer
Удаляем контейнер с portainer
Опционально - смотрим список всех имаджей
Опционально - удаляем имадж portainer
Удаляем volume с данными portainer
После этого можем заново установить portainer
Полезные ссылки
Deploying Portainer CE in Docker
Portainer на DockerHub
Спасибо тебе большое, добрый человек. Сэкономил мне кучу времени, когда я запорол работу контейнера с Portainer установкой Бизнес редакции вместо Community. Благодаря тебе переустановил все за пару минут
ОтветитьУдалитьПожалуйста, был рад помочь 👍
УдалитьОтправить комментарий