У каждого сервера здесь есть полноценный файловый менеджер в браузере и учётные данные 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.
# 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 и что здесь работает:
# 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, данные игроков, а в большинстве игр и файлы конфигурации, потому что они читаются один раз при старте. Затем:
- Сделайте бэкап. Это одна кнопка, и это единственная версия прежнего состояния, которая у вас будет.
- Остановите сервер и дождитесь, пока консоль подтвердит, что он действительно остановился, а не просто что вы нажали кнопку. Именно чистая остановка запускает финальное сохранение.
- Загрузите или отредактируйте.
- Запустите и следите по консоли за строкой загрузки, которая называет, что загружено.
Читать безопасно, пока сервер работает. Открытие latest.log в файловом менеджере, скачивание копии конфига, чтобы посмотреть, проверка того, что jar мода нужного размера, - ничто из этого не мешает. В статье чтение консоли описано, на что смотреть в выводе при запуске, когда изменённый вами файл не вступил в силу, а процедура переноса мира в руководстве по выделенному серверу Valheim - тот же танец в конкретной игре.
Права, окончания строк и архивы#
Три механические проблемы, которые выглядят как баги и ими не являются.
Бит исполнения. Скрипт .sh, загруженный через браузер, приходит без права на исполнение, и сервер при попытке его запустить сообщает permission denied. Графические клиенты SFTP умеют это исправлять: в FileZilla есть File permissions в контекстном меню, в WinSCP - Properties. Выставьте файлу 0755. Если ваш клиент не умеет менять права, chmod работает из приглашения sftp:
sftp> chmod 755 start.shsftp> ls -l start.sh-rwxr-xr-x 1 container container 412 Sep 21 09:14 start.shОкончания строк Windows. Файл, отредактированный в Блокноте и загруженный, сохраняет возвраты каретки, и shell-скрипт с ними падает с сообщением, которое сбивает людей с толку тридцать лет:
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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.