04 октября 2023 Linux docker ftp proFTPD


Современный backend может не содержать на физическом сервере своих привычных файлов, там может даже не было СУБД и Веб-сервера потому что вся система размещается в контейнерах Docker

Для того чтобы предоставить доступ к файлам в таком контейнере можно воспользовать образом proFTPD и включить его в конфигурацию docker-compose

Ниже представлена настройка такого контейнера

  ftp:
    image: instantlinux/proftpd
    container_name: ${APP_NAME}-ftp
    ports:
      - "2100:21"
      - "30091-30100:30091-30100"
    env_file: .env
    volumes:
      - ./ftp/secrets:/run/secrets
      - ./site:/home/site/
    environment:
      - PASV_ADDRESS=0.0.0.0
      - ANONYMOUS_DISABLE=on
      - TZ=Europe/Moscow
      - SFTP_ENABLE=off
      - PASV_MAX_PORT=30100
      - PASV_MIN_PORT=30091

так же предполагается наличие  .env файла в котором необходимо определить следующие переменные

FTPUSER_UID=1000
FTPUSER_NAME=ftp_user
FTPUSER_PASSWORD_SECRET=Yhatztna7%$4A8hag

Переменная FTPUSER_UID должна быть равна ID текущего пользовать от имени которого запускается контейнер

Переменные FTPUSER_NAME и FTPUSER_PASSWORD_SECRET ипользуется для генерации пароля и поиска этого пароля в специальном файле в директории /run/secrets

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

python3 -c "import crypt,random,string;  print(crypt.crypt('$FTPUSER_PASSWORD_SECRET', '\$6\$' + ''.join( [random.choice(string.ascii_letters + string.digits)   for _ in range(16)])))" > ftp/secrets/$FTPUSER_PASSWORD_SECRET

в результате получится вот такой файл с паролем

cat  ftp/secrets/Yhatztna7%\$4A8hag 
$6$XyHVN6aqgQvgj7Vv$Ac/9hKk0WYOmYPPh/hcG/yLvMAAgi91.k5lC2U4Dx/1PEe0KtW8NsLOhN6GBzcX8TKQPF51JHmyBX580pZ9.A0

Если хочется дополнительных опцией автозапуска то достаточно изучить файл инициализации контейнера

docker-compose exec ftp cat /usr/local/bin/entrypoint.sh