Поиск по сайту:

Как установить и использовать Portainer для управления Docker с помощью Nginx Proxy Manager


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
    1. Cent OS/Rocky Linux/Alma Linux
    2. Убунту/Дебиан

    1. Cent OS/Rocky Linux/Alma Linux
    2. Убунту
    3. Дебиан

    1. Установить NPM
    2. Доступ к NPM
    3. Подключение Portainer к контейнеру NPM

    1. Присоединение внешнего контейнера к Portainer

    Portainer — это решение для управления контейнерами с открытым исходным кодом для Docker, Kubernetes и Nomad, которое упрощает запуск, создание и запуск контейнеров. Он предоставляет веб-панель управления для управления контейнерами, образами, сетями и томами.

    В этом руководстве вы научитесь устанавливать и настраивать решение для управления контейнерами Portainer на сервере Linux и использовать его для создания контейнеров Docker и управления ими для запуска различных приложений. Вы также научитесь размещать эти контейнеры за Nginx с помощью прокси-менеджера Nginx.

    Предпосылки

    • Сервер Linux под управлением ОС Ubuntu/Debian/Cent OS/Rocky Linux 8/Alma Linux.
    • Пользователь без полномочий root с привилегиями sudo.
    • Полное доменное имя (FQDN), указывающее на сервер для Portainer (portrainer.example.com) и Nginx Proxy Manager (npm.example.com ).

    Шаг 1. Настройте брандмауэр

    ОС Cent/Rocky Linux/Alma Linux

    У вас должен быть установлен брандмауэр Firewalld. Проверьте состояние брандмауэров.

    $ sudo firewall-cmd --state
    running
    

    Откройте порты 80, 9443 и 443. Portainer использует порт 9443 для предоставления своего веб-интерфейса через HTTPS. Nginx Proxy Manager использует порт 81 для пользовательского интерфейса.

    $ sudo firewall-cmd --permanent --add-service=http
    $ sudo firewall-cmd --permanent --add-service=https
    $ sudo firewall-cmd --permanent --add-port=9443/tcp
    $ sudo firewall-cmd --permanent --add-port=81/tcp
    

    Перезагрузите брандмауэр, чтобы изменения вступили в силу.

    $ sudo firewall-cmd --reload
    

    Убунту/Дебиан

    Системы Ubuntu и Debian по умолчанию используют ufw (несложный брандмауэр).

    Проверьте, работает ли брандмауэр.

    $ sudo ufw status
    

    Если он запущен, то откройте порты 80, 9443 и 443.

    $ sudo ufw allow 80
    $ sudo ufw allow 443
    $ sudo ufw allow 9443
    $ sudo ufw allow 81
    

    Откройте порт SSH, если брандмауэр не работает.

    $ sudo ufw allow "OpenSSH"
    

    Включите брандмауэр, если он не запущен.

    $ sudo ufw enable
    

    Если он запущен, перезагрузите его, чтобы применить изменения.

    $ sudo ufw reload
    

    Шаг 2 — Установите Докер

    ОС Cent/Rocky Linux/Alma Linux

    Выполните следующую команду, чтобы установить Docker.

    $ sudo yum install -y yum-utils
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    $ sudo yum install docker-ce docker-ce-cli containerd.io
    

    Убунту

    $ sudo apt install ca-certificates curl gnupg lsb-release
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    $ sudo apt update
    $ sudo apt install docker-ce docker-ce-cli containerd.io
    

    Дебиан

    $ sudo apt install ca-certificates curl gnupg lsb-release
    $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    $ sudo apt update
    $ sudo apt install docker-ce docker-ce-cli containerd.io
    

    Включите и запустите службу Docker.

    $ sudo systemctl start docker --now
    

    Добавьте свое имя пользователя в группу Docker.

    $ sudo usermod -aG docker $USER
    

    Выйдите из системы и войдите снова, чтобы применить изменения.

    Шаг 3 — Установите Docker Compose

    Скачайте и установите двоичный файл Docker compose.

    $ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    Применить разрешение на выполнение к двоичному файлу.

    $ sudo chmod +x /usr/local/bin/docker-compose
    

    Шаг 4 - Установите Portainer

    Создайте каталог для Portainer.

    $ mkdir ~/portainer
    

    Перейдите в каталог.

    $ cd ~/portainer
    

    Создайте и откройте файл Docker Compose для редактирования.

    $ nano docker-compose.yaml
    

    Вставьте в него следующий код.

    version: "3.3"
    services:
        portainer:
          image: portainer/portainer-ce:latest
          container_name: portainer
          restart: always
          privileged: true
          volumes:
            - ./data:/data:Z
            - /var/run/docker.sock:/var/run/docker.sock:Z
          ports:
            - 9443:9443
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Давайте пройдемся по файлу компоновки Docker.

    • Мы загружаем последнюю версию Portainer Community Edition из Docker Hub. Portainer Community Edition можно использовать бесплатно, а для версии Business требуется платная лицензия. Вы можете получить версию Business Edition, но вам будет предложено ввести лицензионный ключ для ее использования.
    • Мы назвали наш контейнер porttainer для целей идентификации и связывания.
    • Политика перезапуска настроена на всегда, чтобы контейнер оставался включенным во время загрузки.
    • Настройка privated: true предназначена для того, чтобы Portainer мог получить доступ к сокету Docker и работать в привилегированном контексте, поскольку мы используем SELinux. Если вы не используете SELinux, вы можете удалить этот параметр. Этот параметр предоставляет контейнеру Portainer доступ ко всему в хост-системе, включая доступ к оборудованию. Поэтому включайте этот параметр только тогда, когда знаете, что делаете.
    • В разделе volumes папка на хосте сопоставляется с папками в контейнере с помощью монтирования Bind. Мы открыли каталог ~/porttainer/data для контейнера для хранения любых соответствующих данных и API сокетов Docker для управления контейнером. Метка :Z сообщает Docker, что мы запускаем SELinux на нашем хосте. Если у вас не включен SELinux, вы должны удалить метку.

    Запустите Portainer.

    $ docker-compose up -d
    

    Проверьте состояние контейнера.

    $ docker ps
    CONTAINER ID   IMAGE                           COMMAND        CREATED         STATUS         PORTS                                                           NAMES
    916411e8d12e   portainer/portainer-ce:latest   "/portainer"   5 seconds ago   Up 4 seconds   8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   portainer
    

    Шаг 5. Доступ и настройка Portainer

    Откройте URL-адрес https://:9443 в своем браузере, и вы увидите следующий экран.

    Вам будет предложено создать нового пользователя-администратора. Добавьте свои данные пользователя. Снимите флажок Разрешить сбор анонимной статистики, если вы заботитесь о конфиденциальности. Нажмите кнопку «Создать пользователя», чтобы начать установку и создать новую учетную запись администратора.

    Далее вы попадете на следующий экран панели инструментов.

    Через несколько секунд он автоматически обновится и покажет вам следующий экран.

    Он покажет вам локальную среду, в которой работает Portainer. Нажмите на локальную среду, чтобы начать.

    Большинство разделов говорят сами за себя. Раздел Stacks помогает создавать контейнеры с помощью файлов компоновки Docker. Вы можете развернуть контейнеры напрямую, используя категорию «Контейнеры» на боковой панели. Вы можете настроить текущую среду Docker через раздел Hosts. Раздел «Шаблоны приложений» содержит предустановленные файлы компоновки Docker для установки наиболее распространенных приложений. Вы также можете создавать собственные шаблоны.

    Раздел «Настройки» позволяет настраивать различные параметры, такие как добавление пользовательских реестров Docker, добавление нескольких хостов для Docker swarm, настройка доступа пользователей, резервное копирование данных и настройка Portainer.

    Шаг 5. Поместите Portainer за обратным прокси-сервером с помощью Nginx Proxy Manager (NPM)

    Прежде чем двигаться дальше, давайте поместим Portainer за обратным прокси-сервером с помощью Nginx Proxy Manager. Nginx Proxy Manager — это приложение Docker, которое предоставляет пользовательский интерфейс веб-управления для настройки Nginx в качестве обратного прокси-сервера. Его также можно использовать в качестве перенаправления или потокового хоста.

    Установить NPM

    Первый шаг — создать сеть для Nginx Proxy Manager (NPM). Откройте раздел «Сети» и нажмите кнопку «Добавить сеть», чтобы создать новую сеть.

    Дайте имя сети и оставьте все настройки без изменений. Нажмите кнопку Создать сеть, чтобы закончить.

    Посетите стеки и создайте новый стек с помощью кнопки «Добавить стек».

    Назовите стек как nginx-proxy-manager и вставьте в него следующий код.

    version: "3.3"
    services:
      npm-app:
        image: 'jc21/nginx-proxy-manager:latest'
        container_name: npm-app
        restart: unless-stopped
        ports:
          - '80:80' # Public HTTP Port
          - '443:443' # Public HTTPS Port
          - '81:81' # Admin Web Port
          # Add any other Stream port you want to expose
          # - '21:21' # FTP
        environment:
          DB_MYSQL_HOST: "npm-db"
          DB_MYSQL_PORT: 3306
          DB_MYSQL_USER: "npm"
          DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
          DB_MYSQL_NAME: "npm"
          # Uncomment the line below if IPv6 is not enabled on your host
          # DISABLE_IPV6: 'true'
        volumes:
          - ./npm-data:/data:Z
          - ./letsencrypt:/etc/letsencrypt:Z
        depends_on:
          - npm-db
        networks:
          - npm-network
          - npm-internal
    
      npm-db:
        image: 'mariadb:latest'
        container_name: npm-db
        restart: unless-stopped
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: 'npm'
          MYSQL_USER: 'npm'
          MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
        volumes:
          - ./npm-data/mysql:/var/lib/mysql:Z
        networks:
          - npm-internal
    
    networks:
      npm-internal:
      npm-network:
        external: true
    

    Мы установили две переменные среды для установки паролей базы данных и root MySQL. Portainer можно использовать для установки секретов с помощью переменных среды. Прокрутите страницу вниз и нажмите кнопку «Добавить переменную среды», чтобы добавить надежные пароли.

    Нажмите кнопку Развернуть стек, чтобы создать и запустить контейнер NPM.

    Доступ к NPM

    Откройте URL-адрес https://:81 в своем браузере, и вы увидите следующий экран. Введите следующие учетные данные по умолчанию для входа.

    Адрес электронной почты: [email Пароль: changeme

    Далее вас сразу же попросят указать имя и адрес электронной почты. Нажмите кнопку Сохранить, и вам будет предложено создать новый пароль. Нажмите кнопку Сохранить еще раз, чтобы начать.

    Посетите Hosts >> Proxy Hosts и нажмите кнопку Add Proxy Host.

    Введите доменное имя как portainer.example.com. Выберите схему как https. Введите имя контейнера в качестве имени узла пересылки и 9443 в качестве порта пересылки. Отметьте параметры «Блокировать распространенные эксплойты» и «Поддержка веб-сокетов».

    Перейдите на вкладку SSL и выберите Запросить новый сертификат SSL в раскрывающемся меню. Установите флажок «Принудительно использовать SSL и поддержку HTTP/2», чтобы защитить и оптимизировать SSL-соединение. Введите адрес электронной почты, чтобы получать уведомления о продлении подписки, и примите условия обслуживания. Нажмите кнопку «Сохранить», чтобы завершить настройку прокси-сервера для Portainer.

    Подключите Portainer к контейнеру NPM

    Мы настроили прокси-хост, но контейнер все еще не подключен к сети NPM. Вернитесь на панель инструментов Portainer, перейдите в раздел «Контейнеры» и выберите контейнер portainer.

    Выберите npm-network в раскрывающемся меню в разделе «Подключенные сети» и нажмите кнопку «Присоединиться к сети», чтобы добавить контейнер Portainer в сеть прокси-менеджеров.

    Вы можете получить сообщение об ошибке, но обновите страницу, и вы увидите, что контейнер добавлен в сеть NPM.

    Вы должны иметь доступ к Portainer, используя URL-адрес https://portainer.example.com в своем браузере.

    Вы можете выполнить аналогичную процедуру, чтобы разместить NPM за общедоступным URL-адресом, например, https://npm.example.com, как описано в нашем руководстве по Nginx Proxy Manager.

    Теперь, когда вы установили общедоступный URL-адрес для Portainer, вы можете удалить открытый порт 9443. Для этого вернитесь в Терминал и перейдите в каталог portainer.

    $ cd ~/portainer
    

    Откройте файл компоновки Docker для редактирования.

    $ nano docker-compose.yaml
    

    Удалите раздел портов, закомментировав его, как показано ниже.

    version: "3.3"
    services:
        portainer:
          image: portainer/portainer-ce:latest
          container_name: portainer
          restart: always
          privileged: true
          volumes:
            - ./data:/data:Z
            - /var/run/docker.sock:/var/run/docker.sock:Z
          #ports:
          #  - 9443:9443
          networks:
            - npm-network
    
    networks:
      npm-network:
        external: true
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Здесь мы добавили сведения о сети NPM, потому что нам нужно будет перезапустить контейнер Portainer.

    Остановите контейнер Portainer.

    $ docker-compose down --remove-orphans
    

    Запустите контейнер снова с обновленной конфигурацией.

    $ docker-compose up -d
    

    Шаг 6. Разверните контейнер с помощью шаблона приложения

    Portainer предоставляет несколько предопределенных шаблонов для прямого запуска приложений с минимальной конфигурацией.

    Посетите раздел «Шаблоны приложений» и выберите любой шаблон. Дайте ему имя и выберите сеть для использования. Используйте раздел дополнительных параметров для развертывания настраиваемых портов, сетей и монтирования томов.

    Нажмите кнопку Развернуть контейнер, чтобы завершить развертывание приложения. Здесь мы развертываем контейнер Redis.

    Шаг 7 — Управление контейнерами

    Давайте управлять существующим контейнером. Откройте страницу контейнеров, и вы увидите все запущенные контейнеры.

    Щелкните недавно созданный контейнер hw-redis, чтобы продолжить.

    Вверху вы можете увидеть список действий, которые вы можете выполнять с работающим контейнером. Вы можете остановить и убить контейнер. Recreate создаст контейнер с нуля. Опция Дублировать/редактировать позволит вам создать еще один идентичный контейнер, что позволит вам изменить настройки перед его запуском.

    Статус контейнера показывает время работы, IP-адрес и другие сведения о контейнере.

    Параметр «Журналы» показывает выходные данные команды docker logs. Поскольку вывод команд не кэшируется, каждый раз, когда вы обновляете страницу, команда запускается с нуля.

    Опция Inspect запускает команду docker inspect для контейнера и показывает ее вывод.

    Параметр «Статистика» показывает использование контейнера в режиме реального времени.

    Вы можете запустить консоль контейнера, используя опцию Console. Вам будет предложено ввести команду и системного пользователя для запуска.

    Нажмите кнопку Подключить, чтобы запустить консоль.

    Параметр «Присоединить» запускает команду docker attach.

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

    Прикрепите внешний контейнер к Portainer

    Создание любого контейнера за пределами Portainer будет отображаться внутри него, если он создан в той же системе, что и Portainer. Это возможно, потому что Portainer подключен к Docker с помощью веб-сокета.

    Давайте проверим, запустив контейнер Hello World Docker.

    $ docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete
    Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    Проверьте список контейнеров в терминале. Мы используем флаг -a, чтобы показать список всех контейнеров, включая остановленные. Вы можете увидеть имя контейнера как sad_williamson.

    $ docker ps -a
    CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                     PORTS                                                                                  NAMES
    5fa46b85d594   hello-world                       "/hello"                 3 minutes ago   Exited (0) 3 minutes ago                                                                                          sad_williamson
    .....
    

    Теперь проверьте страницу Portainer Containers, и контейнер hello world будет отображаться как остановленный в списке с тем же именем.

    Заключение

    На этом мы завершаем наше руководство по установке и использованию Portainer для управления Docker и Nginx Proxy Manager. Мы рассмотрим создание образов Docker, создание пользовательских контейнеров и использование Portainer с Docker swarm в следующем руководстве. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.