Конфигурация в порядке. Проблема решена после установки firewall-cmd
и добавления правила для порта 443
В итоге я нашел два решения этой проблемы.
unison
. Это утилита командной строки для зеркалирования локального каталога на удаленном сервере. Он похож на rsync
, но немного более сложный и эргономичный при работе с большим количеством файлов. Их репозиторий на github довольно активен, хотя на веб-странице говорится, что разработка в значительной степени остановлена, а главный недостаток заключается в том, что unison
— утилита, запускаемая -один раз, а не что-то, что работает в фоновом режиме. Вы можете использовать что-то вроде cron
для периодического запуска unison
, но я не уверен, приведет ли это к длительным задержкам синхронизации (1 минута+ )и как будет работать ручное разрешение конфликтов. lsyncd
. Эта программа предназначена именно для моего варианта использования :. Она постоянно отслеживает заданный каталог и немедленно синхронизирует любые изменения всего за 1 секунду. Однако последний коммит был 2 года назад, поэтому я не уверен, насколько это жизнеспособно в долгосрочной перспективе. В итоге я использовал lsyncd
, потому что он может работать непрерывно. Для lsyncd
вы должны предоставить «профиль», который представляет собой файл Lua, который сообщает lsyncd
, какой каталог синхронизировать, где и как (, например. игнорировать ли некоторые файлы ). Я использовал следующий профиль:
settings {
nodaemon = true,
statusInterval = 1
}
sync {
default.rsync,
source = "/home/donentolon/github/my-awesome-codebase",
target = "remote-machine:/home/remote-user/my-awesome-codebase",
delay = 1,
exclude = { '/.git', '/.idea' }
}
Это сообщает от lsyncd
до:
config
настроен так, что ssh remote-machine
будет подключаться к нему)delay
)Когда я включаю свой компьютер, я открываю терминал и запускаю lsyncd my-lsyncd-profile.lua
, и он начинает работать и печатать оперативные обновления о том, что он делает. Я оставляю терминал открытым, занимаюсь разработкой и убиваю lsyncd
в конце дня, когда закончу.
Я не использую git для отслеживания изменений в удаленном каталоге, хотя мог бы. Если я хочу зафиксировать свои изменения в git,Я запускаю git commit
и другие команды на своем локальном компьютере, который lsyncd
синхронизирует с . Поскольку локальный каталог на самом деле является локальным, а не удаленным локально, функции PyCharm (, такие как индексирование ), работают нормально.
Есть фоновый режим, но я им не пользовался, потому что мне нравится видеть статус lsyncd
. Его можно настроить на автозапуск стандартными методами Linux, но я предпочитаю ручной метод.
lsyncd
перечислены некоторые альтернативы с похожими вариантами использования, поэтому, если вам не нравится это решение, вы можете взглянуть на них.
Этот вариант использования на самом деле очень распространен (, особенно при разработке встраиваемых систем ), потому что, как вы упомянули, иногда случается, что локальная машина не может иметь правильную среду для запуска приложения.
Таким образом, многие/большинство IDE имеют функцию удаленного запуска, но у меня нет опыта работы с PyCharm. См. здесь специально для PyCharm.
Другой, более независимый от среды способ сделать это — использовать scp
или rsync
для передачи/синхронизации файлов, а затем запускать их удаленно.
Чтобы это работало должным образом, вы должны настроить аутентификацию с открытым ключом ssh от вашего хоста к цели с помощьюssh-copy-id user@target
Затем вы можете использовать сценарий, подобный следующему, для передачи папки на удаленный компьютер, и, если передача прошла успешно, -выполнить некоторые команды:
#!/bin/bash
TARGET="<your-remote-here>";
USER="<your-user-name-on-remote-here>";
FOLDER_TO_TRANSMIT="<folder-to-transmit>";
FOLDER_TO_TRANSMIT_TO="<folder-path-on-target>";
REMOTE_COMMANDS="touch ~/testdir/z; ls ~/testdir;"
#transmit only (inefficiant, transmits everything, every time)
#scp -r $dir_to_transmit $USER@$TARGET:$FOLDER_TO_TRANSMIT_TO;
rsync -rv --delete $dir_to_transmit $USER@$TARGET:$FOLDER_TO_TRANSMIT_TO
if [ $? -eq 0 ]
then
ssh -t $USER@$TARGET "$REMOTE_COMMANDS"
fi
Единственное, о чем вам нужно беспокоиться при такой настройке, — это о правильной очистке папки, в которую вы каждый раз передаете данные. (rsync :только с --delete
все, что не находится в исходной папке, также удаляется в папке назначения, этого можно избежать с помощью шаблонов исключения)(scp :, если применимо, вы можете, например, просто удалить все удаленная папка, если хотите)
Если ваша процедура установки немного сложнее, вы также можете создать сценарий, который также будет передаваться каждый раз, а затем просто вызываться.