楔子
作为一名研究生,避免不了日常使用服务器炼丹,一般使用的服务器分为:直接部署在组里的集群,云服务商提供的学术计算服务(更快的网络连接速度、更少的硬件维护、更高的稳定性)。
对于组里的集群来说,一般分配给普通用户的权限有限,且基本软件都已配置完整,本文可以参考的内容较少,请按需查看。
对于云服务商,一般提供的都是基于容器的方案,用户拥有root权限,可以从纯净的镜像进行各种DIY配置,本文主要针对的也是这一类型。
作者之前配置了很多平台(树莓派、Nezha、OrangePi-AIpro)还有各种云厂商的服务器,记录的配置经验散落于电脑各处。最近刚好需要重新配置一个新的环境,这里将基本的配置流程做一下整理汇总,方便查阅,后续也会持续更新。(以后也方便分享给师妹bushi
本文默认读者具有一定的linux系统基础,和对计算机网络的基本了解,在自己PC端会使用Clash等科学上网工具。
基础配置
换源&更新索引
参考链接:
这里推荐使用LinuxMirrors换源(无docker版本)
1 | # 使用wget代替curl,可能部分纯净ubuntu镜像没有curl包 |
推荐使用的脚本配置:阿里云、公网、HTTPS、更新索引、跳过更新软件包(可能会遇到一些问题)
如何解决遇到ppa.launchpadcontent.net等下载缓慢的问题
首选:先不要进行apt upgrade,等到后续配置好访问外网的条件后再下载
次选:将/etc/apt/sources.list.d/* 下文件中的 ppa.launchpadcontent.net (可能网址存在差别,需要注意)进行替换
1 | sudo sed -i 's|https://ppa.launchpadcontent.net|https://launchpad.proxy.ustclug.org|g' \ |
服务器使用自己PC端的代理
-
在PC端执行下述命令,将服务器端口转发
1
2#前面的为远程服务器端口,后者为本地端口,这里设置成两个不同的端口号方便理解
ssh -vvv -N -R 7898:localhost:7897 -p <远程服务器端口号> <username>@<server_ip>
检验成功与否的方法,在服务器执行
1
2
3# 7898与第一个命令保持一致
sudo apt -y install telnet && telnet 127.0.0.1 7898
# 输入quit即可退出
此时,通过export http_proxy等方法设置代理即可,但我更推荐使用proxychains,你可以主动选择是否使用代理。
-
在服务器端安装proxychains4并设置代理信息
1
2
3sudo apt install proxychains4
sudo nano /etc/proxychains4.conf
# 将文件末尾的sock5端口号修改为前文设置的7898.png)
-
检验成功与否
1
proxychains curl google.com
返回
<TITLE>301 Moved</TITLE></HEAD><BODY>即为设置成功以后如果需要使用代理,只需在运行命令之前加上proxychains即可,即可将流量强制使用PC端代理。
如何解决下载仍然很慢,看起来似乎代理没有生效的问题
举例:proxychains 对 apt upgrade 无效、速度依旧慢,99% 是因为 apt 本身走的是“独立进程 + 多线程下载”,而 proxychains 只能劫持“主进程”的 TCP,apt 调用的 /usr/lib/apt/methods/http 子进程并没有被 LD_PRELOAD 覆盖到
1 | #一次性解决方案:-E把当前 shell 的代理变量带给 root,apt 及其所有子进程都会继承,全程走代理。 |
sudo -E 选项的作用是让 sudo 保持当前用户的环境变量。然而,这并不意味着在 bash -c 内部执行的命令会自动以超级用户权限运行
好看的终端Oh-my-zsh(可跳过)
参考内容:
-
准备工作
1
2
3
4# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 zsh git curl
sudo apt install zsh git curl -y -
将终端切换到zsh
1
chsh -s /bin/zsh
.png)
-
安装oh-my-zsh,迁移原有的bashrc配置到zshrc
1
sh -c "$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"
-
推荐一个我在用的主题:pure: Pretty, minimal and fast ZSH prompt
.png)
Python环境管理工具
参考链接:
目前主流的python环境管理工具还是conda,除此之外也可以通过uv/python venv进行环境的创建和管理。
-
conda(搭配uv和mamba使用)
清华源:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站
使用wget下载所需版本bash安装即可。
在base环境下conda install mamba,使用mamba替换conda指令以多线程的方式对网络资源进行并行下载,从而大幅提升
Conda效率。在项目环境下pip install uv,使用uv pip install代替pip install指令获得比pip快十倍的安装速度,同时pip依赖的冲突检测也更有效。
1
2# uv使用自定义国内源下载,在~/.bashrc文件末尾增加:
export UV_INDEX_URL="http://mirrors.aliyun.com/pypi/simple" -
uv
安装uv管理工具
1
curl -LsSf https://astral.sh/uv/install.sh | sh
常用命令汇总,更多内容参考官方使用文档
1
2
3
4
5
6
7
8
9
10# 创建项目并指定python版本
uv init <project_name> --python <version>
# 管理依赖
uv add <package_name>
uv remove <package_name>
# 运行python代码:方式一
uv run *.py
# 运行python代码:方式二
source ./.venv/bin/activate
python *.pyuv-add和uv-pip-install的区别
-
是否把依赖写进项目配置
uv add <包名>:安装完成后自动把包(含版本约束、extras)写入pyproject.toml并更新uv.lock,后续uv sync可完整复现环境。uv pip install <包名>:仅执行“装包”这一步,不碰任何项目文件,项目里看不到这条依赖,别人克隆代码后不会自动装这个包 。 -
依赖解析与冲突策略
uv add会基于整个项目的已有依赖做一次全局解析,出现冲突时给出方案或报错,保证项目层面的一致性 。uv pip install采用类似 pip 的“现场解析”,以当前已安装包为基准,能装就装,可能留下隐性冲突,需要开发者自己pip freeze去固化版本 。
-
远程IDE连接
常见的IDE如vscode和pycharm都支持通过ssh连接服务器。
更推荐使用pycharm进行远程连接,选择pycharm有如下优点:
- 原生支持使用服务器python环境编译器进行断点调试。
- 终端便捷进行转口转发。
- 个人感觉对于python语言的支持度更好。
缺点:没有vscode丰富的插件生态。
这一部分比较简单,不再详细介绍,不过可能会在pycharm初始化连接时遇到服务器下载pycharm客户端速度过慢的问题,可以参考下述链接方案进行解决:
Vibe Coding
参考链接:
主要介绍国内环境如何使用原生codex、claude code等ai coding工具,使用国内的模型或者第三方api则比较简单。
安装nvm、通过nvm安装node、安装codex
1 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash |
设置codex代理,参考:服务器访问外网
1 | export https_proxy="http://127.0.0.1:7898" |
如果使用chatgpt-plus账号登录codex,为通过验证中的回调阶段,需要将PC端的1455端口转发到服务器端
1 | ssh -vvv -N -L 1455:localhost:1455 -p <远程服务器端口号> <username>@<server_ip> |
服务器端运行codex即可
其他实用工具
-
tmux:相较于screen更推荐tmux,比如screen的tqdm进度条会重复刷新霸屏(作者无法接受)。
Kimi:tmux让远端shell“后台常驻”——断开终端连接后程序照跑,重连瞬间恢复现场。
常用命令:
1
2
3
4
5
6
7
8
9
10
11# 查看有所有tmux会话
tmux ls
# 新建tmux窗口
tmux new -s <session-name>
# 分离会话 快捷键:Ctrl+b d
tmux detach
# 重新连接会话
tmux attach -t <session-name>
tmux at -t <session-name>
# 杀死会话
tmux kill-session -t <session-name>开启鼠标滚动功能:在
~/.tmux.conf文件中添加以下内容,输入命令刷新配置文件1
2set -g mouse on
tmux source-file ~/.tmux.conf开启鼠标滚动后,可能会发现无法用中键复制 tmux 中的文本。解决方法是在选择或复制时按住 Shift 键,这样可以恢复中键复制功能。
-
nvitop:高颜值nvidia GPU监控工具。
.png)