Alibaba Cloud Linux 3 服务器环境搭建实战记录
本文档记录了从 CentOS 7 迁移至 Alibaba Cloud Linux 3 并搭建完整运行环境的全过程,包含大量实际操作中遇到的典型问题、分析思路及最终解决方案。内容涵盖 Git、Node.js (nvm)、Nginx (含SSL)、MySQL、Docker、PM2 和 Claude Code。
1. 背景与系统选择
- 原系统:CentOS 7 (已停止维护,软件库陈旧,无法满足现代工具依赖)。
- 新系统选择 :Alibaba Cloud Linux 3.2104 LTS 64位。
- 理由 :兼容 CentOS 8 生态 (
yum/dnf),阿里云深度优化,支持至2031年,迁移成本最低。
- 理由 :兼容 CentOS 8 生态 (
- 备选:如追求更新的内核和工具链,可考虑 Alibaba Cloud Linux 4 LTS,但需额外验证软件兼容性。
2. 基础环境与 Git
操作:
bash
sudo dnf update -y
sudo dnf install -y curl wget vim git
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
说明:Alibaba Cloud Linux 3 的默认软件源较新,直接安装即可,无需额外配置。
3. Node.js 环境 (nvm)
3.1 安装与版本选择
操作:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 18 # 安装 Node.js 18 LTS
nvm alias default 18
3.2 踩坑记录:glibc 版本过低
- 问题描述 :在旧的 CentOS 7 上尝试安装 Node.js 22 时,报错
GLIBC_2.27 not found。 - 原因 :CentOS 7 的
glibc版本为 2.17,而 Node.js 22 需要 2.27 或更高。 - 解决方案 :
- 短期(旧系统) :降级安装 Node.js 18 (对
glibc要求较低,通常可用)。 - 根本解决:迁移至 Alibaba Cloud Linux 3 或 Ubuntu 22.04 等系统库较新的发行版。
- 短期(旧系统) :降级安装 Node.js 18 (对
- 在 Alibaba Cloud Linux 3 上 :此问题已不存在,系统
glibc版本满足要求,可直接安装最新 LTS 版本。
4. Web 服务器 Nginx
4.1 安装与基础配置
操作:
bash
sudo dnf install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
关键目录:
- 主配置:
/etc/nginx/nginx.conf - 站点配置:
/etc/nginx/conf.d/ - 网站根目录:
/usr/share/nginx/html/ - 日志目录:
/var/log/nginx/
4.2 SSL 证书配置与踩坑
目标 :为域名 whyta.cn 配置 HTTPS。
问题一:证书文件找不到
- 报错 :
cannot load certificate "/usr/local/nginx/cert/whyta.cn.cert.pem": No such file or directory - 原因 :配置文件中的路径指向了不存在的目录
/usr/local/nginx/cert/。 - 分析与解决 :
-
Nginx 配置文件中的
ssl_certificate和ssl_certificate_key指令路径必须正确。 -
更规范的做法 :将证书统一放在
/etc/nginx/ssl/或/etc/nginx/cert/目录下。 -
操作 :
bashsudo mkdir -p /etc/nginx/ssl/whyta.cn # 上传证书文件到该目录 sudo chmod 600 /etc/nginx/ssl/whyta.cn/privkey.key # 限制私钥权限 -
修改站点配置文件
/etc/nginx/conf.d/whyta.cn.conf中的路径。
-
问题二:证书文件名包含通配符
- 报错 :
cannot load certificate "/etc/nginx/cert/*.whyta.cn.cer" - 原因 :
ssl_certificate指令不支持*通配符,必须指定确切的文件名。 - 解决 :将路径修改为精确的文件名,例如
/etc/nginx/cert/whyta.cn.cer。
问题三:重载配置后未生效
-
正确流程 :
bash# 1. 测试配置文件语法 sudo nginx -t # 2. 平滑重载配置(不中断服务) sudo systemctl reload nginx -
原则 :修改配置后,务必先执行
nginx -t测试,再reload。避免直接restart。
5. 数据库 MySQL
5.1 安装
操作:
bash
# 安装兼容性依赖(关键!)
sudo dnf install -y compat-openssl10
# 添加 MySQL 8.0 官方源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
# 安装
sudo dnf install -y mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 获取临时密码
sudo grep 'temporary password' /var/log/mysqld.log
sudo mysql_secure_installation
5.2 踩坑:密码策略与远程连接
- 问题一:密码不符合策略 :MySQL 8.0 默认密码策略要求较高(大小写、数字、特殊字符)。
-
临时方案:先设置一个复杂密码通过验证。
-
永久调整 :修改策略后,再改为简单密码(生产环境不推荐 )。
sqlSET GLOBAL validate_password.policy = 0; SET GLOBAL validate_password.length = 4; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的简单密码'; -
注意:需在配置文件中持久化,否则重启失效。
-
- 问题二:远程连接失败 (Public Key Retrieval is not allowed) :
- 错误 :DBeaver 等客户端连接时提示
Public Key Retrieval is not allowed。 - 原因 :MySQL 8.0 默认认证插件
caching_sha2_password的安全机制。 - 解决 :在客户端连接字符串或驱动属性中添加
allowPublicKeyRetrieval=true和useSSL=false。
- 错误 :DBeaver 等客户端连接时提示
- 问题三:阿里云安全组:远程访问还需在阿里云控制台安全组中放行 3306 端口。
6. Docker
6.1 安装与源选择
操作:
bash
# 使用阿里云镜像源(解决官方源卡顿问题)
sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl start docker && sudo systemctl enable docker
6.2 踩坑:默认源未找到 Docker 包
- 报错 :
No match for argument: docker-ce。 - 原因:Alibaba Cloud Linux 3 默认软件源不包含 Docker。
- 解决:必须添加 Docker 官方源或阿里云镜像源。
7. 工具 Mih*mo (内核)
7.1 为何放弃图形界面?
- 背景 :最初尝试安装
cl*sh-ver*ge-rev(图形版) 的 RPM 包。 - 踩坑 :报错
nothing provides libayatana-appindicator-gtk3和libwebkit2gtk-4.1.so.0。 - 原因:图形界面程序在服务器(通常无图形环境)上运行时,依赖大量 GTK、WebKit 等 GUI 库,而这些库在Linux默认源中缺失或不完整。
- 决策 :放弃图形界面,改用命令行内核
mih*mo,更适合服务器环境,轻量且稳定。
7.2 安装与配置 Mih*mo
-
下载内核 :
bashwget https://github.com/MetaCubeX/mih*omo/releases/download/v1.18.0/mih*omo-linux-amd64-v1.18.0.gz gunzip mih*mo-linux-amd64-v1.18.0.gz chmod +x mih*mo-linux-amd64-v1.18.0 sudo mv mih*omo-linux-amd64-v1.18.0 /usr/local/bin/mih*omo -
配置文件 (
~/.config/mih*omo/config.yaml): -
启动与管理 :
bashmih*omo -t -d ~/.config/mih*omo # 测试配置 mih*omo -d ~/.config/mih*omo & # 后台启动 export http_pro*xy=http://127.0.0.1:port # 设置代理 -
Web 控制面板 (Yacd) :
- 启动后,访问
http://你的服务器IP:9090/ui(默认端口 9090) 即可通过浏览器管理节点和切换模式。 - 前提 :配置文件中需包含
external-controller: :9090。同时需在安全组放行 9090 端口。
- 启动后,访问
8. 防火墙管理策略
-
发现 :系统
firewalld服务默认未启用。 -
决策 :保持关闭,完全依赖阿里云安全组进行端口管控。
-
原因:简化管理,避免双重配置冲突,是云上最佳实践。
-
操作 :
bashsudo systemctl stop firewalld sudo systemctl disable firewalld
9. PM2 进程管理
9.1 安装
bash
# 使用 npm 全局安装 PM2
npm install pm2@latest -g
# 验证安装
pm2 --version
9.2 配置开机自启 (systemd)
bash
# 生成并配置启动脚本
pm2 startup systemd
# 系统会输出一条命令,复制并执行它(类似下面这样)
# sudo systemctl enable pm2-root
9.3 为项目配置 PM2 (以 Node.js 项目为例)
在项目目录(如 /www/free-apis-server)创建 ecosystem.config.js:
javascript
module.exports = {
apps: [{
name: 'free-apis-server',
script: './bin/www', // 入口文件(根据 package.json 的 main 字段)
instances: 1, // 可设为 'max' 使用多核
exec_mode: 'fork', // 或 'cluster'
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
},
error_file: '/var/log/nginx/free-apis-error.log',
out_file: '/var/log/nginx/free-apis-out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss',
}]
};
9.4 启动与保存进程列表
bash
# 使用配置文件启动
pm2 start ecosystem.config.js
# 保存当前进程列表(重启后恢复)
pm2 save
9.5 常用管理命令
bash
pm2 status # 查看所有进程状态
pm2 logs free-apis-server # 查看指定应用日志
pm2 restart free-apis-server
pm2 stop free-apis-server
pm2 monit # 监控面板
10. Claude Code (AI 编程助手)
10.1 安装前提
- Node.js 版本要求:必须使用 Node.js 22 或更高版本。
- 踩坑记录 :
- 问题 :在 CentOS 7 上使用 Node.js 16 安装时报错
sh: node: command not found。 - 原因 :Claude Code 需要 Node.js >= 22.0.0,但 Node.js 22 在 CentOS 7 上因
glibc版本过低无法安装。 - 解决方案:迁移至 Alibaba Cloud Linux 3,并安装 Node.js 18 LTS(满足要求且稳定)。
- 问题 :在 CentOS 7 上使用 Node.js 16 安装时报错
10.2 安装 Claude Code
bash
# 使用 npm 全局安装(使用国内镜像加速)
npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com
# 验证安装
claude --version
10.4 基本使用
bash
# 启动 Claude Code 交互式会话
claude
# 直接提问(非交互模式)
claude "解释这个函数的用途" --file app.js
# 查看帮助
claude --help