楔子

作为一名研究生,避免不了日常使用服务器炼丹,一般使用的服务器分为:直接部署在组里的集群,云服务商提供的学术计算服务(更快的网络连接速度、更少的硬件维护、更高的稳定性)。

对于组里的集群来说,一般分配给普通用户的权限有限,且基本软件都已配置完整,本文可以参考的内容较少,请按需查看。

对于云服务商,一般提供的都是基于容器的方案,用户拥有root权限,可以从纯净的镜像进行各种DIY配置,本文主要针对的也是这一类型。

作者之前配置了很多平台(树莓派、Nezha、OrangePi-AIpro)还有各种云厂商的服务器,记录的配置经验散落于电脑各处。最近刚好需要重新配置一个新的环境,这里将基本的配置流程做一下整理汇总,方便查阅,后续也会持续更新。(以后也方便分享给师妹bushi

本文默认读者具有一定的linux系统基础,和对计算机网络的基本了解,在自己PC端会使用Clash等科学上网工具。

基础配置

换源&更新索引

参考链接:

这里推荐使用LinuxMirrors换源(无docker版本)

1
2
# 使用wget代替curl,可能部分纯净ubuntu镜像没有curl包
wget -qO- https://linuxmirrors.cn/main.sh | sudo bash

推荐使用的脚本配置:阿里云、公网、HTTPS、更新索引、跳过更新软件包(可能会遇到一些问题)

如何解决遇到ppa.launchpadcontent.net等下载缓慢的问题

首选:先不要进行apt upgrade,等到后续配置好访问外网的条件后再下载

次选:将/etc/apt/sources.list.d/* 下文件中的 ppa.launchpadcontent.net (可能网址存在差别,需要注意)进行替换

1
2
sudo sed -i 's|https://ppa.launchpadcontent.net|https://launchpad.proxy.ustclug.org|g' \
/etc/apt/sources.list.d/*.list

服务器使用自己PC端的代理

  1. 在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,你可以主动选择是否使用代理。

  2. 在服务器端安装proxychains4并设置代理信息

    1
    2
    3
    sudo apt install proxychains4
    sudo nano /etc/proxychains4.conf
    # 将文件末尾的sock5端口号修改为前文设置的7898
    修改proxychains4.conf
    修改proxychains4.conf
  3. 检验成功与否

    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
2
#一次性解决方案:-E把当前 shell 的代理变量带给 root,apt 及其所有子进程都会继承,全程走代理。
sudo -E bash -c 'export http_proxy=http://127.0.0.1:7898 https_proxy=http://127.0.0.1:7898 && sudo apt upgrade'
Note

sudo -E 选项的作用是让 sudo 保持当前用户的环境变量。然而,这并不意味着在 bash -c 内部执行的命令会自动以超级用户权限运行

好看的终端Oh-my-zsh(可跳过)

参考内容:

  1. 准备工作

    1
    2
    3
    4
    # 更新软件源
    sudo apt update && sudo apt upgrade -y
    # 安装 zsh git curl
    sudo apt install zsh git curl -y
  2. 将终端切换到zsh

    1
    chsh -s /bin/zsh
    直接chsh需要输入密码的一个跳过方法
    直接chsh需要输入密码的一个跳过方法
  3. 安装oh-my-zsh,迁移原有的bashrc配置到zshrc

    1
    sh -c "$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"
  4. 推荐一个我在用的主题:pure: Pretty, minimal and fast ZSH prompt

    pure主题效果
    pure主题效果

Python环境管理工具

参考链接:

目前主流的python环境管理工具还是conda,除此之外也可以通过uv/python venv进行环境的创建和管理。

  1. 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"
  2. 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 *.py

    uv-add和uv-pip-install的区别

    1. 是否把依赖写进项目配置

      uv add <包名>:安装完成后自动把包(含版本约束、extras)写入 pyproject.toml 并更新 uv.lock,后续 uv sync 可完整复现环境。

      uv pip install <包名>:仅执行“装包”这一步,不碰任何项目文件,项目里看不到这条依赖,别人克隆代码后不会自动装这个包 。

    2. 依赖解析与冲突策略

      uv add 会基于整个项目的已有依赖做一次全局解析,出现冲突时给出方案或报错,保证项目层面的一致性 。

      uv pip install 采用类似 pip 的“现场解析”,以当前已安装包为基准,能装就装,可能留下隐性冲突,需要开发者自己 pip freeze 去固化版本 。

远程IDE连接

常见的IDE如vscode和pycharm都支持通过ssh连接服务器。

更推荐使用pycharm进行远程连接,选择pycharm有如下优点:

  1. 原生支持使用服务器python环境编译器进行断点调试。
  2. 终端便捷进行转口转发。
  3. 个人感觉对于python语言的支持度更好。

缺点:没有vscode丰富的插件生态。

这一部分比较简单,不再详细介绍,不过可能会在pycharm初始化连接时遇到服务器下载pycharm客户端速度过慢的问题,可以参考下述链接方案进行解决:

Vibe Coding

参考链接:

主要介绍国内环境如何使用原生codex、claude code等ai coding工具,使用国内的模型或者第三方api则比较简单。

安装nvm、通过nvm安装node、安装codex

1
2
3
4
5
6
7
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# 检查nvm是否安装成功
nvm -v
nvm install 22
# 检查node是否安装成功
node -v
npm i -g @openai/codex

设置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即可

其他实用工具

  1. 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
    2
    set -g mouse on
    tmux source-file ~/.tmux.conf

    开启鼠标滚动后,可能会发现无法用中键复制 tmux 中的文本。解决方法是在选择或复制时按住 Shift 键,这样可以恢复中键复制功能。

  2. nvitop:高颜值nvidia GPU监控工具。

    nvitop界面效果
    nvitop界面效果