Создаем FTP-хранилище и мигрируем данные из swift-хранилища

В прошлой статье я показал, как можно буквально в несколько команд настроить собственное облачное хранилище файлов — Nextcloud. Но что делать, если красивые интерфейсы не нужны, а нужен доступ по ftp с любого устройства, из любых ОС и ЯП? Ответ прост: поднять свой ftp-сервер.

В этот раз без консоли не обойтись. Заряжайте биты в байты, делайте sudo apt update и готовьтесь создавать собственное ftp-хранилище с возможностью быстрой миграции данных из swift-хранилища.

Установка и настройка ftp-сервера

Для создания FTP-хранилища будем использовать FTP-сервер vsftpd и VPS на базе Open source под управлением Ubuntu 20. К ресурсам VPS FTP-сервер не требователен, можно использовать минимальную конфигурацию, главное — это объем дискового пространства.

Установка vsftpd

Хорошо, VPS заказали и вошли в него по SSH. Из коробки FTP-сервера в Ubuntu нет. Установим FTP-сервер: sudo apt update && apt install -y vsftpd. Проверим запущен ли демон FTP-сервера: sudo systemctl status vsftpd. Если все установилось и запустилось корректно, вы увидите следующий вывод команды:

Служба установлена и запущена, теперь добавим её в автозагрузку, чтобы она сама стартовала после перезагрузки сервера: sudo systemctl enable vsftpd. Переходим к настройке правил Firewall.

Открытие портов в Firewall

Откроем порты 20, 21 и 990 для подключения пользователей по FTP и 22 порт для подключения по SSH, а также откроем порты с 40000 по 50000 для подключения пользователей к FTP-серверу, когда тот находится в так называемом «пассивном режиме работы»:

sudo ufw allow 20:22,990,40000:50000/tcp

Обратите внимание, что если вы не откроете 22 порт на файерволе — у вас пропадёт возможность подключаться по SSH. Применим новые правила командой sudo ufw enable. Проверить статус новых правил командой sudo ufw status. Команда должна вернуть вывод следующего вида:

Теперь самое интересное — настройка FTP-сервера.

Настройка vsftpd

Конфигурационный файл FTP-сервера расположен по пути: /etc/vsftpd.conf. Сразу переименуем его: mv /etc/vsftpd.conf /etc/vsftpd.conf_original, если что-то сломается в настройках FTP — у нас будет исходник, из которого можно будет все вернуть обратно.

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

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES
pasv_min_port=40000
pasv_max_port=50000

user_sub_token=$USER
local_root=/home/$USER/ftp

Сохраните файл и перезапустите службу vsftpd, чтобы применились новые настройки: sudo systemctl restart vsftpd. Убедитесь, что служба работает исправно: sudo systemctl status vsftpd — должен быть статус active.

Теперь можно создавать пользователя, от имени которого будет производиться работа по ftp.

Создание пользователя для работы с FTP

Создадим пользователя, например, ftp_client командой adduser ftp_client. При создании пользователя вам будет предложено придумать обязательный пароль для пользователя и ответить на ряд вопросов, которые можно игнорировать, нажатием на Enter.

После создания пользователя в директории /home появится одноименная директория пользователя, в ней создадим поддиректорию ftp: sudo mkdir /home/ftp_client/ftp. Назначим ей пользователя и группу: sudo chown nobody:nogroup /home/ftp_client/ftp. Зададим права этой директории: sudo chmod a-w /home/ftp_client/ftp.

После этого создадим ещё одну поддиректорию внутри директории ftp: sudo mkdir /home/ftp_client/ftp/files. Укажем владельца этой директории: sudo chown ftp_client: ftp_client /home/ftp_client/ftp/files.

В итоге структура директорий будет выглядеть так:

Отлично, теперь у нас всё готово для подключения по ftp. Убедимся ещё раз в том, что vsfpd работает исправно — systemctl status vsftpd. Статус actived — можно двигаться дальше.

Подключение по FTP

Подключимся 3 разными способами: через Windows CMD, CyberDuck и FileZilla.

Подключение через Windows CMD

Вызовем CMD через меню поиск или пуск, вводим команду ftp. Затем введем команду open [ip-адрес сервера], далее нам нужно ввести имя пользователя, в нашем случае это ftp_client, а затем пароль. Всё мы вошли на сервер:

Сейчас мы находимся в директории ftp нашего пользователя, нам нужно перейти на один уровень ниже — в поддиректорию files. Сделать это можно командой cd files:

Теперь попробуем загрузить что-нибудь по ftp. Я загружу картинку в формате jpg со своей локальной машины: put D:\photo.jpg ph.jpg.

Все отлично работает. Со скачиванием ситуация такая же: используем команду get, с указанием файла, который нужно скачать и пути, куда нужно скачать:

Теперь попробуем всё то же самое в FileZilla.

Подключение через FileZilla

FileZilla — это бесплатное ПО для работы с FTP. Скачать можно отсюда. Запустим FileZilla и укажем следующие параметры для подключения:

  • Хост — IP-сервера;
  • Имя пользователя — пользователь ftp;
  • Пароль — пароль пользователя ftp;
  • Порт можно не указывать.

После подключения вы увидите справа проводник FTP-сервера. Копировать файлы и папки можно простым перетаскиванием, удалить кнопкой delete или с помощью выпадающего меню. Например, я скопировал папку с фотографиями со своего локального компьютера на ftp-сервер:

Всё отлично работает. Попробуем теперь другой путь — будем использовать популярный швейцарский нож для подключения — CyberDuck.

Подключения через CyberDuck

CyberDuck в отличие от FileZilla поддерживает множество протоколов подключения. Один из которых — это, конечно же, FTP. CyberDuck — это shareware ПО, с очень ненавязчивыми попытками получения доната — а-ля WinRAR.

Запускаем CyberDuck, в списке протоколов для подключения выбираем FTP и вводим следующие данные:

  1. Сервер — IP-адрес сервера;
  2. Пользователь — пользователь ftp;
  3. Пароль — пароль пользователя ftp.

После подключения CyberDuck выведет список директорий и файлов. В моём случае это выглядит так:

Копирование, перемещение, удаление и прочие операции здесь делаются также, как и в FileZilla — через drag-n-drop и стандартные клавиши Windows.

С подключениями из разных программ по FTP — разобрались. Всё работает. Давайте теперь рассмотрим кейс миграции файлов из уже существующего swift-хранилища в наше новое ftp-хранилище.

Миграция файлов из swift- в ftp-хранилище

Есть два пути миграции: сложный путь, с установкой Python-пакетов, OpenStack-клиента и выкачкой swift-контейнера на сервер; простой путь, без установки дополнительного софта на сервер, но с прокачкой большого количества трафика через вашу локальную машину.

Мы рассмотрим простой путь. Для быстрой миграции файлов и директорий из swift- в ftp-хранилище нам понадобиться рассмотренная выше программа — CyberDuck. Суть в том, чтобы одновременно открыть 2 сетевых соединения и просто перекинуть файлы между двумя открытыми окнами CyberDuck.

Запустим сначала одну копию CyberDuck и подключимся по FTP. Затем откроем вторую копию программы и подключимся к swift-хранилищу. Вот как выглядит подключение CyberDuck к S3-хранилищу 1cloud:

  1. Протокол подключения — OpenStack Swif (Ketstone 2.0);
  2. Сервер — Endpoint: https://1cloud.store:443/
  3. TennantID:Access Key — TenantId: TenantId и AccessKey: C4595_admin
  4. Secret Key — Password: 0C5UsjTyOop7

Расположим теперь две копии CyberDuck в режиме split-mode экрана и просто перетянем папку с файлами из swift-хранилища в директорию files в FTP-хранилище:

Всё! Копирование пошло. В ряде случаев, может потребоваться несколько раз подтвердить вход на ftp-сервер паролем пользователя ftp. Итак, давайте подведём итог.

Кратко об установке и настройке FTP-хранилища

Вот как максимально кратко может выглядеть инструкция по установке и настройке FTP-сервера:

  1. Установка vsftpd и настройка FireWall:
    • sudo apt update && apt install -y vsftpd;
    • sudo systemctl enable vsftpd;
    • sudo ufw allow 20:22,990,40000:50000/tcp;
    • sudo ufw enable;
    • ufw status verbose.
  2. Создание пользователя ftp:
    • sudo adduser ftp_client;
    • sudo mkdir /home/ftp_client/ftp;
    • sudo chown nobody:nogroup /home/ftp_client/ftp;
    • sudo chmod a-w /home/ftp_client/ftp;
    • sudo mkdir /home/ftp_client/ftp/files;
    • sudo chown ftp_client: ftp_client /home/ftp_client/ftp/files;
  3. Настройка vsftpd:
    • mv /etc/vsftpd.config /etc/vsftpd.config_orig;
    • vim /etc/vsftpd.config:
      listen=NO
      listen_ipv6=YES
      anonymous_enable=NO
      local_enable=YES
      write_enable=YES
      local_umask=022
      dirmessage_enable=YES
      use_localtime=YES
      xferlog_enable=YES
      connect_from_port_20=YES
      chroot_local_user=YES
      secure_chroot_dir=/var/run/vsftpd/empty
      pam_service_name=vsftpd
      force_dot_files=YES
      pasv_min_port=40000
      pasv_max_port=50000

      user_sub_token=$USER
      local_root=/home/$USER/ftp
    • systemctl restart vsftpd.

Для подключения к FTP-серверу можно использовать Windows CMD, CyberDuck, FileZilla и прочие программы коннекторы. Преимущества собственного FTP-хранилища на базе VPS:

  1. тонкая настройка политик безопасности и доступов;
  2. установка любого дополнительного софта на сервер;
  3. отслеживание действий на сервере по логам;
  4. быстрая миграция данных с сервера;
  5. настройка WEB-интерфейса через Nginx;
  6. масштабируемость хранилища (только Enterprise VPS).

Отдельно подсветим то, что FTP-хранилище абсолютно не требовательно к мощности сервера. Достаточно будет самой простой конфигурации, например, VPS на базе Open Source с 1 CPU, 1 RAM и 100 Gb SSD,если вам хочется масштабировать хранилище в будущем, стоит обратить внимание на Enterprise VPS.