Настройка FTP-сервера с использованием Docker и Traefik 🛠️


Создайте структуру каталогов для FTP-сервера 📂

Выполните следующую команду для создания необходимых каталогов:

mkdir -p ./ftpd/{logs,passwd} && cd ftpd    

📂 Структура каталогов будет выглядеть так:

ftpd/
├── logs/
└── passwd/

Настройка переменных окружения ⚙️

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

DOMAINE=example.com
USERNAME=ftpuser
PASSWORD=ftppassword
TRAEFIK_NETWORK=traefik_network

⚠️ Примечание: Замените значения example.com, ftpuser, ftppassword, и traefik_network на ваши собственные данные.


Конфигурация docker-compose.yml для FTP-сервера 📝

Теперь создайте файл docker-compose.yml в папке ftpd и добавьте в него следующую конфигурацию:

version: '3.3'
services:
  ftpd:
    image: stilliard/pure-ftpd
    container_name: ftpd
    #    ports:
    #      - "21:21"
    #      - "30000-30009:30000-30009"
    volumes:
      - "/data/ftp:/home"
      - "./passwd:/etc/pure-ftpd/passwd"
      - "./logs:/var/log/pure-ftpd"
    environment:
      FTP_MAX_CLIENTS: "10"
      ADDED_FLAGS: "-d -d"
      PUBLICHOST: ftp.${DOMAINE}
      FTP_USER_NAME: ${USERNAME}
      FTP_USER_PASS: ${PASSWORD}
      FTP_USER_HOME: /home/backup
    restart: always
    labels:
      - traefik.enable=true
      - traefik.tcp.routers.router-ftp.entrypoints=entrypoint-ftp
      - traefik.tcp.routers.router-ftp.rule=HostSNI(`*`)
      - traefik.tcp.routers.router-ftp.service=service-ftp

      # Настройки для пассивного режима
      - traefik.tcp.routers.router-ftp-passive-0.entrypoints=entrypoint-ftp-passive-0
      - traefik.tcp.routers.router-ftp-passive-0.rule=HostSNI(`*`)
      - traefik.tcp.routers.router-ftp-passive-0.service=service-ftp-passive-0
      # Добавьте следующие лейблы для портов 30001-30009 для пассивного режима
      - traefik.tcp.services.service-ftp.loadbalancer.server.port=21
      - traefik.tcp.services.service-ftp-passive-0.loadbalancer.server.port=30000
      - traefik.tcp.services.service-ftp-passive-1.loadbalancer.server.port=30001
      - traefik.tcp.services.service-ftp-passive-2.loadbalancer.server.port=30002
      - traefik.tcp.services.service-ftp-passive-3.loadbalancer.server.port=30003
      - traefik.tcp.services.service-ftp-passive-4.loadbalancer.server.port=30004
      - traefik.tcp.services.service-ftp-passive-5.loadbalancer.server.port=30005
      - traefik.tcp.services.service-ftp-passive-6.loadbalancer.server.port=30006
      - traefik.tcp.services.service-ftp-passive-7.loadbalancer.server.port=30007
      - traefik.tcp.services.service-ftp-passive-8.loadbalancer.server.port=30008
      - traefik.tcp.services.service-ftp-passive-9.loadbalancer.server.port=30009

    networks:
      default:
        external:
          name: ${TRAEFIK_NETWORK}

Дополнение конфигурации Traefik ⚙️

Добавьте в секцию command для Traefik следующие строки, чтобы настроить порты для FTP и пассивного режима:

command:
  - --entrypoints.entrypoint-ftp.address=:21
  - --entrypoints.entrypoint-ftp-passive-0.address=:30000
  - --entrypoints.entrypoint-ftp-passive-1.address=:30001
  - --entrypoints.entrypoint-ftp-passive-2.address=:30002
  - --entrypoints.entrypoint-ftp-passive-3.address=:30003
  - --entrypoints.entrypoint-ftp-passive-4.address=:30004
  - --entrypoints.entrypoint-ftp-passive-5.address=:30005
  - --entrypoints.entrypoint-ftp-passive-6.address=:30006
  - --entrypoints.entrypoint-ftp-passive-7.address=:30007
  - --entrypoints.entrypoint-ftp-passive-8.address=:30008
  - --entrypoints.entrypoint-ftp-passive-9.address=:30009

В секцию ports добавьте:

ports:
  - "21:21"
  - "30000-30009:30000-30009"

Запуск FTP-сервера и перезапуск Traefik 🚀

После того как конфигурация будет готова, запустите FTP-сервер с помощью следующей команды:

docker-compose up -d

Перезапустите контейнер Traefik, чтобы применить новые настройки:

docker-compose up -d

Результат: FTP-сервер теперь доступен через Traefik, и работает с использованием активного и пассивного режима на указанных портах.


Примечания 📋:

  • Убедитесь, что порты 21 и 30000-30009 открыты в вашем фаерволе и доступны для входящих соединений.
  • Для работы с FTP-сервером через Traefik необходимо правильно настроить DNS-записи для вашего домена.

Важные компоненты:

  • Traefik — прокси-сервер для маршрутизации трафика.
  • Pure-FTPd — легкий и безопасный FTP-сервер, настроенный в контейнере Docker.

Теперь ваш FTP-сервер полностью настроен и работает с Traefik! 🎉