fnm + uv + rustup:打造 Debian/Ubuntu 下最丝滑的开发环境“三剑客”,彻底告别 Linux 权限地狱

fnm + uv + rustup:打造 Debian/Ubuntu 下最丝滑的开发环境“三剑客”,彻底告别 Linux 权限地狱

作为一名长期在 Linux 服务器上工作的开发者,我见过不少因权限管理不当导致的问题:有人为了装最新的 Node.js 强行添加了来源不明的 PPA,结果导致 apt 依赖损坏,系统无法正常更新;有人习惯了 sudo pip install,直到某天发现系统自带的工具因为 Python 库版本冲突而无法运行;还有的人在 npm i -g 时遇到 Permission denied,最后执行了 sudo chmod -R 777 /usr/lib

今天这篇文章,介绍如何用普通用户权限在 Debian/Ubuntu 下配置 Node.js、Python 和 Rust 开发环境,彻底避免上述问题。


为什么要坚持非 root 安装?

保护系统稳定性。 Debian/Ubuntu 的许多系统组件依赖自带的 Python 和特定版本的库文件。用普通用户身份安装开发环境,可以让开发环境与系统环境完全隔离,无论开发依赖怎么变动,系统本身不受影响。

降低安全风险。 npm 和 PyPI 上的第三方包质量参差不齐。如果某个包含有恶意代码,用 sudo 运行时它拥有完整的系统权限;用普通用户运行,它能访问的范围仅限于当前用户的目录。

多版本灵活切换。 项目 A 需要 Node 18,项目 B 需要 Node 22。用 apt 安装只能全系统共用一个版本,而版本管理工具可以按项目独立切换,互不干扰。


三个工具,覆盖 Node.js、Python、Rust

以下三个工具均安装在用户家目录下,完全不需要 root 权限。

Node.js:fnm

fnm(Fast Node Manager)是目前社区中较为推荐的 Node.js 版本管理工具,底层由 Rust 编写,安装和切换速度都很快。

安装:

curl -fsSL https://fnm.vercel.app/install | bash
source ~/.bashrc

基本用法:

fnm install --lts   # 安装当前最新 LTS 版本
fnm install 22      # 安装指定版本
fnm use 22          # 切换到指定版本

安装完成后,npm install -g 安装全局包也不再需要 sudo,也不会出现 EACCES 报错。

Python:uv

uv 由 Astral 开发,是目前 Python 生态中发展最快的工具之一,可以替代 pip、venv、pipx、poetry 等工具,并内置 Python 版本管理功能,在大多数场景下也可以取代 pyenv。

安装:

curl -LsSf https://astral.sh/uv/install.sh | sh

基本用法:

uv python install 3.12  # 下载并管理 Python 解释器
uv venv                 # 创建虚拟环境
uv run main.py          # 自动处理依赖并运行脚本

Python 解释器会安装在家目录下,不会影响系统自带的 Python。包的安装速度相比 pip 也有显著提升,在有缓存的情况下差距尤为明显。

Rust:rustup

rustup 是 Rust 官方提供的工具链管理器,默认就安装在用户目录下,是本文三个工具里最不需要额外说明的一个。

安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

基本用法:

rustup update    # 升级所有工具链
cargo build      # 编译项目

还需要 sudo 吗?

使用以上方案后,sudo 在日常开发中的使用频率会大幅降低,但不会完全消失。

日常开发中不再需要 sudo 的操作包括:安装语言版本、安装全局包(npm -g)、安装 Python 工具、编译和运行 Rust 项目。

仍然需要 sudo 的操作主要是系统级的:安装底层编译依赖(如 libssl-dev、libpq-dev)、配置 Nginx 或 Docker、修改防火墙规则等。一个实用的判断原则是:只有当报错提示缺少 .so 动态库或 .h 头文件时,才需要 sudo apt install


几点注意事项

安装完工具后如果命令不生效,执行 source ~/.bashrc 或重启终端即可。

如果之前已经用 sudo apt 安装了 Node 或 Python,建议先卸载,避免两套环境互相干扰。

如果使用 VS Code 配合 Remote-SSH,VS Code 会自动识别用户目录下的 fnm 和 uv 环境,无需额外配置。


结语

把开发环境安装在普通用户目录下,除了安全和隔离,还有一个实际好处:迁移服务器时,打包一个 home 目录基本就能恢复开发环境,不需要在新机器上重新配置一遍系统级的依赖。

你在配置开发环境时踩过什么坑?欢迎在评论区留言。

Read more

除了 127.0.0.1,你电脑里其实还住着 1600 万个“自己”

除了 127.0.0.1,你电脑里其实还住着 1600 万个“自己”

身为开发者,你一定每天都在和 127.0.0.1 打交道。 启动后端服务、连接 Redis、调试 API…… 在我们的潜意识里: 127.0.0.1 = localhost = 本机。 但你有没有想过: 为什么偏偏是 127? 既然 127.0.0.1 代表自己,那 127.0.0.2 又是谁? 甚至,为什么 Linux 里还有一个诡异的 127.0.1.1? 今天,我们拆开这个被用了 40 年的“回环地址”包裹,看看里面藏着哪些你不知道的秘密。 一、

By serverinf
全球机房探秘:第 5 期:韩国机房:全球网速最快国家的真相,北方用户的隐藏福利

全球机房探秘:第 5 期:韩国机房:全球网速最快国家的真相,北方用户的隐藏福利

摘要:千兆入户的"网速天堂",为什么连回国内却经常卡顿?KT、SK、LG 怎么选?韩国 VPS 到底适合谁? 在上一篇日本机房的文章里,我们聊了"白天法拉利,晚上拖拉机"的线路选择难题。今天,我们把目光投向一个自带光环的地方——韩国机房。 经常关注科技新闻的朋友都知道,在各类全球网速排行榜上,韩国经常霸占榜首,千兆(1Gbps)甚至万兆网络入户简直是家常便饭。 很多新手就会想:"既然韩国网速全球第一,那我买个韩国 VPS,速度岂不是原地起飞?" 先别急着掏钱! 理想很丰满,现实往往有点骨感。欢迎来到《全球机房探秘》第六站,今天我们来扒一扒"全球最快网速"背后的真相。 01 真相一:内网&

By serverinf
拒绝"挤爆"内存:部署 OpenClaw 到底需要多高配置的 VPS /云服务器?

拒绝"挤爆"内存:部署 OpenClaw 到底需要多高配置的 VPS /云服务器?

最近 AI 圈最火的开源项目,莫过于被称为“大龙虾”的 OpenClaw 了。 如果你还没听说过它,简单解释一下:它不是那种只能陪你聊天的机器人,而是一个真正的“数字员工”。它能自己查资料、写代码、操作你的服务器终端、甚至在浏览器里帮你下单购物。这种“自主性”让无数开发者直呼:AI 终于从“只会动嘴”进化到“能动手干活”了。目前 OpenClaw 在 GitHub 上已积累超过 68,000 个 Star,是目前增速最快的开源项目。 然而,很多新手兴冲冲地在自己吃灰多年的“1核 1G”入门级 VPS 上部署后,迎来的不是效率的飞跃,而是没完没了的断连、报错、卡死。 今天,我们就来拆解一下:想要稳稳地跑起

By serverinf
SSH一断开程序就死?教你让它永远跑在后台

SSH一断开程序就死?教你让它永远跑在后台

你有没有遇到过这种情况: 好不容易按照教程,把 PicoClaw 部署好了,在终端里跑起来,发消息给机器人,它也乖乖回复了。然后你关掉了 SSH 窗口,去睡了一觉。第二天打开d电报,发消息——没有任何回应。 重新连上服务器一看,进程早就不见了。 你不是操作失误,这是 Linux 的正常行为。今天这篇文章,就来彻底解决这个问题。 一、为什么关掉终端程序就死了? 要理解这个问题,先要知道一件事:你通过 SSH 连上服务器时,其实是开启了一个"会话"。你在这个会话里启动的所有程序,都是这个会话的"子进程"。 一旦你关闭 SSH 窗口,这个会话就结束了,系统会自动把它的所有子进程一并"清理"掉——包括你辛苦跑起来的 PicoClaw。

By serverinf