Установка Portainer

Portainer — веб-интерфейс для управления Docker. Размещается в /srv/portainer.

1. Подготовка каталога#

Переходим в /srv, создаём каталог для контейнера и заходим в него.

cd /srv
sudo mkdir portainer
cd ./portainer

2. Конфигурация docker-compose#

Создаём файл docker-compose.yml:

sudo nano docker-compose.yml

Заполняем, сохраняем, закрываем:

services:
  portainer:
    # Безопасность
    security_opt:
      - no-new-privileges:true  # не выдавать дополнительных привилегий
    tmpfs:
      - /tmp:rw,noexec,nosuid  # не запускать исполняемые файлы из временной папки

    # Настройки контейнера
    container_name: portainer
    image: portainer/portainer-ce:2.39.4  # 2.33.2
    restart: always

    #hostname: portainer.domain.com
    networks:
      - reverse_proxy

    environment:
      TZ: Europe/Moscow
    volumes:
      - /etc/localtime:/etc/localtime:ro      # установка времени
      - /var/run/docker.sock:/var/run/docker.sock  # расположение Docker
      - /srv/portainer/portainer_data:/data   # постоянные настройки Portainer
    ports:
      # - "9000:9000"
      - "9443:9443"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "10"

networks:
  reverse_proxy:
    external: true

3. Сеть (если ещё нет)#

docker network create -d bridge reverse_proxy

4. Запуск#

docker compose up -d

Интерфейс доступен по https://<ip_или_localhost>:9443.

5. Настройка публичного IP#

Environments → Edit → Public IP — указать публичный IP.

6. Caddyfile#

В Caddyfile (вместо domain.ru — свой домен):

portainer.domain.ru {
    reverse_proxy portainer:9443 {
        transport http {
            tls_insecure_skip_verify
        }
    }
}

Полезно знать#

Служебное Значение
/srv/portainer/portainer_data постоянное хранилище данных
reverse_proxy сеть прокси; можно заменить на свою, например caddy_external
порт 9443 HTTPS-порт Portainer
порт 9000 HTTP, по умолчанию закомментирован
security_opt: no-new-privileges контейнер не получает привилегий выше родительского процесса

Результат#

Последнее обновление: