Перейти к содержимому
Главная страница » Установка Portainer за Traefik Proxy

Установка Portainer за Traefik Proxy

Готовый сервер с установленным Portainer и IP всего за 145 рублей

Portainer — это популярный веб-интерфейс для управления Docker и Kubernetes. В этой статье мы рассмотрим, как установить Portainer и настроить его работу за Traefik в качестве reverse proxy.

У нас уже есть статья об установке Portainer в Docker

В данном гайде рассмотрим установку в docker совместно с Traefik.

Предварительные требования

  • Docker и Docker Compose установлены на сервере
  • Доменное имя для Portainer (например, portainer.example.com)
  • Email адрес для Let’s Encrypt (для получения SSL сертификатов)

Установка Traefik

Перед установкой Portainer необходимо настроить Traefik. Traefik будет работать как reverse proxy и автоматически получать SSL сертификаты от Let’s Encrypt.

Создание структуры директорий

Создайте директорию для Traefik и перейдите в неё:

mkdir -p traefik
cd traefik

Создание docker-compose.yml для Traefik

Создайте файл docker-compose.yml со всей конфигурацией Traefik:

version: '3.8'

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./acme.json:/acme.json
      - /etc/localtime:/etc/localtime:ro
    networks:
      - traefik
    command:
      # API и Dashboard
      - --api.dashboard=true
      - --api.insecure=false
      # Entrypoints
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      # HTTP to HTTPS redirect
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --entrypoints.web.http.redirections.entrypoint.scheme=https
      - --entrypoints.web.http.redirections.entrypoint.permanent=true
      # Docker provider
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --providers.docker.network=traefik
      # Let's Encrypt
      - --certificatesresolvers.letsencrypt.acme.email=your-email@example.com
      - --certificatesresolvers.letsencrypt.acme.storage=/acme.json
      - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.example.com`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
      - "traefik.http.services.traefik.loadbalancer.server.port=8080"

networks:
  traefik:
    name: traefik
    external: false

Важно: Замените your-email@example.com на ваш реальный email адрес в строке с certificatesresolvers.letsencrypt.acme.email.

Создание файла для SSL сертификатов

Создайте файл acme.json и установите правильные права доступа:

touch acme.json
chmod 600 acme.json

Запуск Traefik

Запустите Traefik:

docker-compose up -d

Проверьте статус контейнера:

docker-compose ps
docker logs traefik

Проверка работы Traefik

  1. Проверьте, что контейнер запущен: docker ps | grep traefik
  2. Проверьте логи: docker logs traefik
  3. Traefik должен быть доступен по адресу https://traefik.example.com (если вы настроили домен)

Установка Portainer

После того как Traefik успешно запущен, можно приступать к установке Portainer.

Шаг 1: Создание docker-compose.yml для Portainer

Создайте файл docker-compose.yml для Portainer:

version: '3.8'

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - portainer_data:/data
    networks:
      - traefik
    labels:
      # Traefik labels
      - "traefik.enable=true"
      
      # HTTP Router
      - "traefik.http.routers.portainer.rule=Host(`portainer.example.com`)"
      - "traefik.http.routers.portainer.entrypoints=websecure"
      - "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
      
      # HTTP Service
      - "traefik.http.services.portainer.loadbalancer.server.port=9000"
      
      # Middleware (опционально)
      - "traefik.http.routers.portainer.middlewares=portainer-auth"
      
      # Redirect HTTP to HTTPS (если нужен)
      - "traefik.http.routers.portainer-http.rule=Host(`portainer.example.com`)"
      - "traefik.http.routers.portainer-http.entrypoints=web"
      - "traefik.http.routers.portainer-http.middlewares=redirect-to-https"
      - "traefik.http.routers.portainer-http.middlewares=redirect-to-https@file"

networks:
  traefik:
    external: true

volumes:
  portainer_data:

Шаг 2: Настройка доменного имени

Замените portainer.example.com на ваше реальное доменное имя в файле docker-compose.yml.

Шаг 3: Подключение к сети Traefik

Убедитесь, что Traefik работает в сети с именем traefik. Если ваша сеть называется иначе, измените название в секции networks:

# Проверить существующие сети
docker network ls

# Если сеть traefik не существует, создайте её
docker network create traefik

Шаг 4: Запуск Portainer

Запустите контейнер Portainer:

docker-compose up -d

Проверьте статус контейнера:

docker-compose ps
docker logs portainer

Шаг 5: Первоначальная настройка Portainer

  1. Откройте браузер и перейдите по адресу https://portainer.example.com
  2. При первом запуске вам будет предложено создать администратора
  3. Выберите тип окружения: Docker или Kubernetes
  4. Для Docker выберите Local и нажмите Connect

Дополнительные настройки

Базовая аутентификация (опционально)

Если вы хотите добавить дополнительный уровень защиты, можно использовать базовую аутентификацию Traefik. Добавьте в docker-compose.yml:

labels:
  # ... другие labels ...
  - "traefik.http.middlewares.portainer-auth.basicauth.users=admin:$$apr1$$..."

Для генерации хеша пароля используйте:

htpasswd -nb admin password | sed s/\\$/\\$\\$/g

Ограничение доступа по IP (опционально)

Добавьте middleware для ограничения доступа:

labels:
  - "traefik.http.middlewares.portainer-ipwhitelist.ipwhitelist.sourcerange=192.168.1.0/24,10.0.0.0/8"
  - "traefik.http.routers.portainer.middlewares=portainer-ipwhitelist"

Headers (опционально)

Для безопасности можно добавить security headers:

labels:
  - "traefik.http.middlewares.portainer-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
  - "traefik.http.middlewares.portainer-headers.headers.customrequestheaders.X-Real-IP="
  - "traefik.http.routers.portainer.middlewares=portainer-headers"

Структура файлов

После создания файлов у вас должна быть следующая структура:

portainer/
├── docker-compose.yml
└── .env (опционально, для переменных окружения)

Проверка работы

  1. Проверьте, что контейнер запущен: docker ps | grep portainer
  2. Проверьте логи: docker logs portainer
  3. Откройте в браузере https://portainer.example.com
  4. Убедитесь, что SSL сертификат работает корректно

Обновление Portainer

Для обновления Portainer выполните:

docker-compose pull
docker-compose up -d

Устранение неполадок

Portainer недоступен

  1. Проверьте логи Traefik: docker logs traefik
  2. Проверьте логи Portainer: docker logs portainer
  3. Убедитесь, что домен правильно настроен в DNS
  4. Проверьте, что контейнеры находятся в одной сети: docker network inspect traefik

Проблемы с SSL сертификатом

  1. Убедитесь, что certresolver=letsencrypt настроен в Traefik
  2. Проверьте, что домен указывает на ваш сервер
  3. Проверьте логи Traefik для ошибок получения сертификата

Ошибка подключения к Docker

Если Portainer не может подключиться к Docker:

  1. Проверьте, что /var/run/docker.sock правильно смонтирован
  2. Убедитесь, что у пользователя есть права на доступ к Docker socket

Безопасность

  • Всегда используйте HTTPS для доступа к Portainer
  • Регулярно обновляйте Portainer до последней версии
  • Используйте сильные пароли для администратора
  • Рассмотрите возможность добавления базовой аутентификации Traefik
  • Ограничьте доступ по IP, если это возможно

Заключение

Теперь Portainer установлен и настроен для работы за Traefik. Вы можете управлять вашими Docker контейнерами через удобный веб-интерфейс, доступный по защищенному HTTPS соединению.

Дополнительные ресурсы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *