VPS 初始化实战:新云服务器到手后的配置清单

新买云服务器或 VPS 后先做什么?这份 Ubuntu 初始化教程覆盖 sudo 用户、SSH 公钥权限、终端环境、Go、Node.js、Nginx、MySQL 和 Redis。

新买一台云服务器或 VPS 后,我不会急着部署业务,而是先完成一套固定的 Ubuntu 初始化配置。这份清单适合准备部署网站、API、Node/Nuxt 项目或轻量 AI 工具服务的人,重点放在 SSH 公钥、sudo 用户、终端环境和常用服务这些真正容易踩坑的地方。

VPS 初始化配置清单:SSH、Nginx、Node.js 和常用服务
先把机器打磨到“可上线、可维护、可复盘”的状态,再开始部署业务。

一、创建用户

云厂商的默认账号不统一,阿里云通常是 root,腾讯云有时是 ubuntu。我的习惯是统一新建一个 work 用户来操作,不直接用 root。

# 创建用户,-m 自动建 home 目录,-s 指定 bash
useradd -m -s /bin/bash work

也可以用 useradd -m -s /bin/bash work 一步到位,自动建 home 目录并设好 shell,不需要再手动改 /etc/passwd

二、赋予 sudo 权限

visudo  # 推荐用 visudo,保存时会自动检查语法

root 那行下面加上:

%work   ALL=(ALL) NOPASSWD: ALL

visudo 而不是直接 vim /etc/sudoers,写错语法会导致 sudo 整个失效,很麻烦。

三、配置 SSH 公钥登录

mkdir -p /home/work/.ssh
vim /home/work/.ssh/authorized_keys
# 把本地 ~/.ssh/id_rsa.pub 的内容粘贴进去

# 权限必须设对,否则 sshd 会拒绝
chown -R work:work /home/work/.ssh
chmod 700 /home/work/.ssh
chmod 600 /home/work/.ssh/authorized_keys

只需要把公钥(id_rsa.pub)放到服务器,私钥(id_rsa)留在本地,不要复制到服务器上。

权限设置这两行不能省,chmod 700chmod 600 如果缺失,sshd 会直接拒绝公钥登录,是新手最容易踩的坑。

四、初始化终端环境

这一步很多人会跳过,但配置好之后每天都在省时间。核心是两个配置文件:.bashrc.inputrc

.inputrc:让方向键有“记忆”

创建 ~/.inputrc,写入以下内容:

set match-hidden-files off

"\ep": history-search-backward
"\e[A": history-search-backward
"\e[B": history-search-forward

立即生效:

bind -f ~/.inputrc
创建 ~/.inputrc 文件
写入配置内容
执行 bind -f ~/.inputrc 使配置生效

重点是中间这三行。默认情况下按 是从最近一条历史往前翻。配置之后是:先输入前缀,再按 ,只在匹配前缀的历史里搜索。

比如输入 git,再按 ,只会在 git 开头的历史命令里循环,不会跳到其他命令。实际效果:

输入 git 后按 ,只在 git 命令中循环

第一行 match-hidden-files off 是让 Tab 补全时不显示隐藏文件(.git.env 之类),补全列表更干净。

.bashrc:终端基础配置

历史记录增强

export HISTCONTROL=ignoredups        # 不记录连续重复的命令
export HISTTIMEFORMAT='%F %T '       # 历史命令显示时间戳

执行 history 时会看到每条命令的执行时间,排查问题时很有用。

高频 alias

alias la='ls -Aalth'      # 列全部文件,按时间排序,人类可读大小
alias tf='tail -f'        # 看实时日志:tf /var/log/nginx/access.log
alias wget='wget -c'      # 默认断点续传
alias grep='grep --color=always'
alias vi='vim'
alias vih='sudo vim /etc/hosts'   # 快速编辑 hosts
alias rscp='rsync -v -P -e ssh'   # 带进度条的 scp

时间戳互转(对接接口、查日志时常用)

dt2um "2024-06-01 12:00:00"   # → 1717214400000
um2dt 1717214400000            # → 2024-06-01 12:00:00

提示符显示 Git 分支

配置之后,进入 git 仓库时提示符会自动显示当前分支名,效果类似:

[work@hostname:/your/project] → main#

完整的 .bashrc 可以从这里获取:mini-linux-env

# 下载后直接移到 home 目录
git clone https://gitee.com/tetang1230/mini-linux-env.git
cd mini-linux-env
mv .bashrc .inputrc .gitconfig ..
cd ..
source .bashrc
bind -f ~/.inputrc

五、安装必要软件包

sudo apt update && sudo apt upgrade -y

# 编译工具链
sudo apt install -y build-essential

# 常用库(编译 nginx 等会用到)
sudo apt install -y libpcre3-dev libssl-dev zlib1g-dev libxslt1-dev

# 运维日常工具
sudo apt install -y git curl wget jq htop tree unzip net-tools lsof rsync silversearcher-ag ctags

build-essential 已包含 gcc、g++、make 等,比单独安装更规范,后续编译其他软件也会用到。

六、安装 Go

前往 go.dev/dl 查看当前稳定版本号,替换下面的版本字符串。

# 下载并解压到 /work/service
sudo mkdir -p /work/service /work/go
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo tar -C /work/service -xzf go1.22.4.linux-amd64.tar.gz
sudo chown -R work:work /work/go
rm go1.22.4.linux-amd64.tar.gz

~/.bashrc 末尾添加环境变量:

export GOPROXY=https://goproxy.io
export PATH=$PATH:/work/service/go/bin
export GOPATH=/work/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
source ~/.bashrc
go version  # 验证

七、安装 Node.js 与 Yarn

安装前先去 nodejs.org 确认当前 Active LTS 的版本号,再替换脚本里的数字。Node.js 只有偶数版本才会进入长期支持(LTS),生产环境不要装奇数版。

截至本文写作时,当前 LTS 是 Node.js 24

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs

node -v && npm -v   # 验证

npm install -g yarn

Node.js 只有偶数版本才会进入 LTS(长期支持),奇数版本生命周期很短,生产环境只装偶数版。

八、安装 Nginx

Ubuntu 自带源的 Nginx 版本通常很旧,推荐加官方源安装,后续 apt upgrade 可以自动跟进新版本。

# 导入签名密钥
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
curl https://nginx.org/keys/nginx_signing.key \
  | gpg --dearmor \
  | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null

# 添加官方稳定版源
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
  https://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
  | sudo tee /etc/apt/sources.list.d/nginx.list

# 设置优先级,防止被系统源覆盖
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
  | sudo tee /etc/apt/preferences.d/99nginx

sudo apt update
sudo apt install -y nginx

nginx -v
sudo systemctl enable nginx && sudo systemctl start nginx

Ubuntu 自带源的 Nginx 版本通常很旧(22.04 自带的还是 1.18),官方源始终跟着稳定版走。

如果需要加载第三方模块(Lua、Brotli 等),再考虑源码编译,否则 apt 安装完全够用。

九、安装 MySQL 8

sudo apt install -y mysql-server

# 查看初始维护账号密码
sudo cat /etc/mysql/debian.cnf

# 用上面的账号登录,修改 root 密码
mysql -u debian-sys-maint -p

登录后执行:

USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

生产环境请设置足够复杂的密码,切勿使用 root123456 等弱密码。

十、安装 Redis

sudo apt install -y redis-server

redis-cli ping  # 返回 PONG 表示正常

总结

以上就是我每次新开 VPS 会做的全部事情,从用户权限到服务安装,做完之后这台机器基本就可以直接投入使用了。

常见问题

新买 VPS 或云服务器后,第一步应该做什么?

先确认登录方式并创建日常操作用户,再配置 sudo 和 SSH 公钥登录。把权限和入口稳定下来后,再安装运行时和业务服务。

SSH 公钥登录为什么总是失败?

最常见原因是 .ssh 目录和 authorized_keys 权限不对。通常目录用 700,authorized_keys 用 600,并确保属主是实际登录用户。

VPS 初始化时一定要安装 Nginx、Node.js、MySQL 和 Redis 吗?

不一定。本文是面向网站、API、Nuxt/Node 项目和轻量服务的常用基线。如果只是静态站或临时测试机,可以按需删减。