今天向同事请教了一下使用远程服务器的工作流程,感觉比我之前的流程更合理,分享给各位。
首先假设诸位已经熟悉通过 ssh 隧道与远程服务器建立连接的基础知识,这里不再赘述。
有服务器算力支持情况下,是在本地编程调试然后上传服务器运行,还是直接在服务器上编程调试运行呢?这取决于你与服务器的通信速度,还有代码编辑器的渲染速度。像我使用 vscode,如果直接在服务器上编程就得在服务器端安装 remote-ssh 插件以及编程语言所需的插件(譬如 python 使用的 pylance 语法高亮器)。运行速度本就很慢的 vscode,加上网络通信的延迟,运行结果在本地界面的渲染更慢——这也是我之前实习过程中那套工作流遇到的困境。
在同事的建议下,我们采取本地编程调试+服务器同步文件的工作流。这样就把与服务器的通信限制在必要内容上,减少无关渲染的通信延迟。具体而言,在 vscode 中我们用 syncRsync 插件将本地文件夹与服务器上的远程文件夹关联(这是为了方便在编程时的即时同步,编程始终在本地 vscode 而非在建立 ssh 连接的远程 vscode 中)。在 linux 中则可以利用 sshfs 将远程文件夹挂载到本地,并通过图形界面访问。这两样就代替来 vscode 的 remote-ssh。
这里方便大家给出我的配置。当然记得先安装 sshfs 以及 vscode 插件 sync-Rsync
~/mount
bash
#!/bin/bash
# default value
REMOTE_DIR=<remote-host>:<dir>/<subdir>
LOCAL_DIR=<localhost>:<dir>/<subdir>
# parse input
if [[ $# -gt 0 ]]; then
REMOTE_DIR=$1
fi
if [[ $# -gt 1 ]]; then
LOCAL_DIR=$2
fi
# create local directory if it does not exist
mkdir -p $LOCAL_DIR
# mount remote folder to local location
sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,follow_symlinks $REMOTE_DIR $LOCAL_DIR
运行mount.sh
,远程目录就挂载到本地对应目录了。
.workspace
json
{
"folders": [
{
"path": "."
}
],
"settings": {
"sync-rsync.sites": [
{
"localPath": "<same as LOCAL_DIR>",
"remotePath": "<same as REMOTE_DIR>"
}
],
"sync-rsync.onSave": true,
"sync-rsync.autoShowOutput": false,
"sync-rsync.autoShowOutputOnError": true,
"sync-rsync.exclude": [".git", ".vscode", "log", "data"]
}
}