RE:NODE

Руководства12 мин чтения

SFTP и файловый менеджер: как переносить файлы на сервер

Оба ведут к одной файловой системе. Что использовать для правки конфига, папки с плагинами или целого мира, и ловушки, которые тихо съедают загрузку.

Обновлено

0 прочтений

У каждого сервера здесь есть полноценный файловый менеджер в браузере и учётные данные SFTP для инструментов, к которым вы привыкли. Это две двери в одну файловую систему, и выбор между ними определяется размером правки, а не предпочтениями: одно значение в конфиге - работа для файлового менеджера, папка с плагинами на четыреста файлов - работа для SFTP, а если сделать наоборот, потеряешь целый день.

Проблемы создаёт не выбор. Их создают несколько вещей, которые на сервере ведут себя иначе, чем на вашей машине: файлы, которые удерживает открытыми работающий процесс, бит исполнения, который не может выставить загрузка через браузер, окончания строк Windows в shell-скрипте и тысяча мелких файлов, ползущих по протоколу, который на каждый открывает новый запрос. В этой статье оба инструмента разобраны как следует, а затем эти ловушки - в том порядке, в каком вы с ними столкнётесь.

Две двери в одну файловую систему#

Отдельной «зоны загрузки» не существует. Файловый менеджер и SFTP пишут в тот же каталог, который читает ваш серверный процесс, и в тот же момент. Файл, появившийся в одном, появляется и в другом после обновления, вместе с правами доступа.

Из этого вытекает следствие, которое нужно назвать прямо, прежде чем говорить о чём-то ещё: промежуточного шага нет и отмены нет. Удаление папки мира в файловом менеджере её удаляет. Перезапись server.properties через SFTP её перезаписывает. Между ошибкой и пересборкой стоит только бэкап, сделанный заранее, и поэтому последовательность для всего структурного всегда такая: бэкап, остановка, изменение, запуск - именно в таком порядке, каждый раз. Почему первый шаг не опционален, объясняет статья бэкапы, которые действительно восстанавливаются.

ЗадачаЧто использоватьПочему
Изменить одну настройку в конфигеФайловый менеджерНи скачивания, ни повторной загрузки, ни шанса потерять остальное
Прочитать лог или проверить, что файл добралсяФайловый менеджерПодсветка синтаксиса, и вы уже вошли
Загрузить один jar или модЛюбойПеретащите его или положите в открытую папку
Папка плагинов или модовSFTPСотни файлов; браузер - медленный путь
Мир, сохранение или файл базы данныхSFTP, сервер остановленБольшие, и удерживаются открытыми во время работы
Скачать весь сервер к себеSFTPОдна команда, и вы получаете настоящую локальную копию
Править в своём редактореSFTPВаши горячие клавиши, ваш линтинг, ваш поиск

Файловый менеджер - для правок, которые видно#

Файловый менеджер в браузере - настоящий редактор, а не просмотрщик. В нём есть подсветка синтаксиса для форматов, которые вы встретите на сервере, он сохраняет на месте и показывает PDF и изображения, так что можно убедиться, что рендер карты или иконка сервера действительно добрались, а не гадать по размеру файла.

В чём он по-настоящему лучше:

  • Правки одного значения. Изменить view-distance или номер порта. Нет шага скачивания, нет шага повторной загрузки и нет шанса залить вчерашнюю копию файла поверх сегодняшней.
  • Просто посмотреть. Открыть latest.log, чтобы проверить трассировку стека, убедиться после установки, что файл конфигурации корректен, увидеть, содержит ли папка plugins то, что вы думаете.
  • Закинуть файлы. Перетаскивание работает и для файлов, и для целых папок, что отлично покрывает случай «один jar».
  • Архивы. Загрузите .zip или .tar.gz и распакуйте на месте. Это самая полезная его возможность, а причина - в разделе о медленных передачах ниже.

Он перестаёт быть подходящим инструментом там, где есть структура. Браузер, загружающий четыреста мелких файлов, делает четыреста отдельных дел, и индикатор выполнения сообщит вам об этом в своё время. За ним также нет шелла, поэтому запустить unzip, chmod или find нельзя - кнопка распаковки на месте существует именно потому, что шелла нет.

SFTP - для всего структурного#

SFTP - это та же файловая система по протоколу, на котором говорят ваши привычные инструменты. Обращайтесь к нему, когда:

  • Вы загружаете папку плагинов, сборку модов, мир или что-либо ещё, что считается сотнями файлов.
  • Вам нужна копия всего сервера на собственном диске - единственный вид копии, которым вы полностью управляете.
  • Вы работаете из редактора, который уже открыт. У большинства редакторов есть расширение для удалённой файловой системы, а правка файла прямо на сервере лучше цикла «скачать - изменить - загрузить».
  • Вам нужна скриптовая передача, потому что вы будете делать это снова на следующей неделе.

Учётные данные выдаются на сервер, а не на аккаунт. В этом смысл, а не неудобство: если передать кому-то доступ по SFTP к общему серверу, он получит этот сервер и ничего больше, и доступ можно отобрать, не задев ничего вашего в других местах.

Данные для подключения показаны в настройках сервера в панели: хост, порт, который не 22, и имя пользователя. На порт стоит обратить внимание, потому что множество правил брандмауэров и корпоративных сетей пропускают 22 и ничего больше, а первый симптом - клиент, который зависает, а не тот, которому отказали.

Подключение и скрипты#

Подойдёт любой клиент SFTP. FileZilla, WinSCP и Cyberduck покрывают графический случай; sftp в командной строке установлен на каждой машине с Linux и macOS, а в Windows - вместе с OpenSSH.

bash
# Interactive, with the port from the panel$ sftp -P 2022 username@node.example.comsftp> cd pluginssftp> put -r ./build/EssentialsX.jarsftp> get latest.logsftp> bye

Для всего повторяющегося управляйте им из скрипта. sftp -b читает пакетный файл, а lftp умеет зеркалировать целый каталог параллельно, а это ближайшее, что есть у rsync и что здесь работает:

bash
# Push a local plugins folder up, four transfers at a time$ lftp -u "$SFTP_USER,$SFTP_PASS" sftp://node.example.com:2022 \    -e "mirror -R --parallel=4 --delete ./plugins /plugins; quit"

Два важных ограничения того, что может командная строка:

`rsync` не работает. Ему нужно запустить собственную копию на другом конце через SSH-шелл, а SFTP панели - это служба передачи файлов без шелла. Чинить тут нечего; используйте lftp mirror, который делает ту же работу по сравнению каталогов поверх SFTP.

`scp` зависит от версии. Свежие версии OpenSSH передают scp по протоколу SFTP, а не по старому пути удалённого выполнения, так что он может работать; старые падают так же, как rsync. sftp и lftp работают всегда, поэтому используйте их в скриптах и избавьте себя от отладки.

Файлы, которые сервер держит открытыми#

Вот это стоит людям миров и баз данных.

Работающий сервер не читает свои файлы данных с диска постоянно. Он загружает то, что ему нужно, держит текущее состояние в памяти и записывает его обратно с интервалом сохранения или при завершении. Если загрузить новый мир, пока сервер работает, вы замените файл, содержимое которого сервер уже не читает, - и при следующем сохранении он запишет свою версию из памяти прямо поверх только что загруженного. Загрузка прошла, файл был правильным четыре минуты, а потом исчез.

Правило: остановите сервер, прежде чем трогать что-либо, чем он владеет. Это миры и сохранения, базы данных SQLite или level, данные игроков, а в большинстве игр и файлы конфигурации, потому что они читаются один раз при старте. Затем:

  1. Сделайте бэкап. Это одна кнопка, и это единственная версия прежнего состояния, которая у вас будет.
  2. Остановите сервер и дождитесь, пока консоль подтвердит, что он действительно остановился, а не просто что вы нажали кнопку. Именно чистая остановка запускает финальное сохранение.
  3. Загрузите или отредактируйте.
  4. Запустите и следите по консоли за строкой загрузки, которая называет, что загружено.

Читать безопасно, пока сервер работает. Открытие latest.log в файловом менеджере, скачивание копии конфига, чтобы посмотреть, проверка того, что jar мода нужного размера, - ничто из этого не мешает. В статье чтение консоли описано, на что смотреть в выводе при запуске, когда изменённый вами файл не вступил в силу, а процедура переноса мира в руководстве по выделенному серверу Valheim - тот же танец в конкретной игре.

Права, окончания строк и архивы#

Три механические проблемы, которые выглядят как баги и ими не являются.

Бит исполнения. Скрипт .sh, загруженный через браузер, приходит без права на исполнение, и сервер при попытке его запустить сообщает permission denied. Графические клиенты SFTP умеют это исправлять: в FileZilla есть File permissions в контекстном меню, в WinSCP - Properties. Выставьте файлу 0755. Если ваш клиент не умеет менять права, chmod работает из приглашения sftp:

bash
sftp> chmod 755 start.shsftp> ls -l start.sh-rwxr-xr-x    1 container container      412 Sep 21 09:14 start.sh

Окончания строк Windows. Файл, отредактированный в Блокноте и загруженный, сохраняет возвраты каретки, и shell-скрипт с ними падает с сообщением, которое сбивает людей с толку тридцать лет:

code
bash: ./start.sh: /bin/bash^M: bad interpreter: No such file or directory

^M - это возврат каретки. Исправьте это, сказав редактору сохранять с окончаниями строк LF - VS Code показывает CRLF или LF в строке состояния, и переключение занимает один щелчок, - либо отредактировав файл в файловом менеджере панели, который пишет LF. Та же проблема ломает конфиги YAML более тонкими способами, так что стоит один раз задать значение по умолчанию в редакторе.

Архивы. Загрузка одного архива на 200 МБ и распаковка на месте несопоставимо быстрее, чем загрузка 4000 файлов, потому что медленная часть передачи мелких файлов - это обмен на каждый файл, а не байты. Сборка модов, которая файл за файлом идёт сорок минут, как zip занимает две. Две вещи стоит помнить: нужно место и под архив, и под его содержимое, так что сначала посмотрите цифру диска вашего тарифа, и удаляйте архив потом. На этом держится установка каждой сборки в статье Minecraft с модами без вылетов.

Кто ещё может добраться до этих файлов#

Доступ к файловой системе - это полный доступ. Тот, кто может прочитать файлы, прочитает ваш .env, учётные данные базы данных и данные игроков; тот, кто может их записать, заменит jar, который запускается при старте. Относитесь к этому соответственно.

  • Давайте доступ к файлам через субпользователей, а не передавая учётные данные. Роли здесь гранулярны, поэтому «только файлы, без консоли, без оплаты» - настоящий набор прав, и его можно ограничить по времени. Модель описана в статье субпользователи и минимальные привилегии.
  • У каждого сервера есть журнал активности. Если вы когда-нибудь не уверены, кто что-то удалил, загляните туда, прежде чем гадать.
  • Учётные данные SFTP выдаются на каждый сервер. Передача их ограничена одним этим сервером, а отзыв ничего другого из того, чем вы управляете, не затрагивает.
  • Включите 2FA на аккаунте, которому всё это принадлежит. Код из приложения-аутентификатора - разница между тем, что утёкший пароль неудобство, и тем, что это инцидент. См. двухфакторная защита аккаунта панели.
  • Проверяйте то, что загружаете. Jar с поста на форуме получает доступ к файловой системе в тот момент, когда сервер его запускает, и в этом вся атака. Именно об этой привычке статья как держать сервер с модами в чистоте.

Когда передача не удаётся или ползёт#

Медленно, и файлов тысячи. Заархивируйте, загрузите архив, распакуйте на месте. Либо поднимите число одновременных передач клиента до четырёх - у FileZilla по умолчанию две, а большинство клиентов ограничивают около десяти, и не без причины. Если поднять выше, чаще получится отказ в соединениях, а не ускорение.

Клиент подключается и зависает на «listing directory». Почти всегда это вмешательство пассивного режима или брандмауэра в корпоративной сети или в гостинице. Проверьте с точки доступа на телефоне; если там работает, дело в сети, а не в сервере.

Передачи останавливаются на полпути, снова и снова. Сначала посмотрите цифру диска в панели. Заполненный диск приводит к обрезанным файлам и запутанным ошибкам вместо ясного «нет места», и это самая частая причина загадочного наполовину загруженного мира.

Файл загружен, но сервер его игнорирует. Три кандидата: сервер работал и перезаписал его, файл лежит не в том каталоге (папки модов и плагинов зависят от игры и неумолимы) или неверно имя. В Linux регистр имеет значение - Plugins не plugins, - а Windows скрывает известные расширения, так что config.yml.txt - классика.

Вы не видите загруженный файл. Его имя начинается с точки. .env, .htaccess и .git по умолчанию скрыты в большинстве клиентов; в FileZilla есть «Force showing hidden files» в меню Server, а файловый менеджер панели их показывает.

Всё сломалось после правки конфига. Восстановите копию .bak, которую вы сделали, или восстановите бэкап. Затем меняйте по одной вещи. YAML-файл с одним неправильным отступом ломается так же полностью, как с пятьюдесятью, а ошибка редко называет строку, которую вы тронули; общий метод бисекции таких проблем - в статье что делать, когда обновление мода ломает сервер.

FAQ#

Можно ли использовать rsync с панелью хостинга?

Нет. rsync запускает собственную копию на удалённой стороне через SSH-шелл, а служба SFTP панели его не предоставляет. Используйте lftp mirror, который сравнивает каталоги и передаёт только различающееся по обычному SFTP, или функцию синхронизации в вашем графическом клиенте. Для скриптовых загрузок подойдёт sftp -b с пакетным файлом.

Какой пароль у SFTP?

Тот, что панель показывает для этого сервера. Учётные данные выдаются на каждый сервер, а не на аккаунт, поэтому данные одного сервера не подходят к другому, а передача их даёт доступ только к этому серверу. Если вы раздали их и хотите вернуть, смените их в панели, а не надейтесь.

Нужно ли останавливать сервер, чтобы загрузить файлы?

Для всего, что сервер держит открытым, - миры, сохранения, базы данных, данные игроков, а обычно и конфиги, - да, потому что работающий процесс держит состояние в памяти и записывает его поверх вашей загрузки при следующем сохранении. Чтение файлов, скачивание копий и проверка логов безопасны в любой момент. Загрузка jar плагина на остановленный сервер и запуск - к тому же единственный способ быть уверенным, что плагин присутствовал при загрузке.

Почему мой shell-скрипт пишет «bad interpreter»?

В файле окончания строк Windows, поэтому путь к интерпретатору в первой строке заканчивается невидимым возвратом каретки. Сохраните файл с окончаниями LF в редакторе или отредактируйте его в файловом менеджере панели, который пишет LF. Та же неисправность может ломать файлы конфигурации вообще без сообщения об ошибке.

Файловый менеджер так же функционален, как SFTP?

Для правки, чтения и загрузки горстки файлов - да, и он быстрее, потому что клиент не нужно настраивать. Для массовых передач, для всего, что нужно автоматизировать скриптом, и для скачивания полной копии сервера на свой диск инструмент - SFTP. Большинство в итоге пользуется обоими каждый день, не задумываясь.

Как получить локальную копию всего сервера?

Подключитесь по SFTP и скачайте корневой каталог или запустите lftp с mirror в направлении скачивания. На большом игровом сервере это десятки гигабайт и займёт время, поэтому стоит сделать это один раз как архив, а не каждую ночь. Для регулярной защиты используйте слоты бэкапов, которые идут с тарифом: они хранятся вне машины, которую защищают, а копия на том же диске - нет.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000