Alibaba Cloud Linux 3 服务器环境搭建实战记录

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年,迁移成本最低。
  • 备选:如追求更新的内核和工具链,可考虑 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 等系统库较新的发行版。
  • 在 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/
  • 分析与解决
    1. Nginx 配置文件中的 ssl_certificatessl_certificate_key 指令路径必须正确。

    2. 更规范的做法 :将证书统一放在 /etc/nginx/ssl//etc/nginx/cert/ 目录下。

    3. 操作

      bash 复制代码
      sudo mkdir -p /etc/nginx/ssl/whyta.cn
      # 上传证书文件到该目录
      sudo chmod 600 /etc/nginx/ssl/whyta.cn/privkey.key  # 限制私钥权限
    4. 修改站点配置文件 /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 默认密码策略要求较高(大小写、数字、特殊字符)。
    • 临时方案:先设置一个复杂密码通过验证。

    • 永久调整 :修改策略后,再改为简单密码(生产环境不推荐 )。

      sql 复制代码
      SET 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=trueuseSSL=false
  • 问题三:阿里云安全组:远程访问还需在阿里云控制台安全组中放行 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-gtk3libwebkit2gtk-4.1.so.0
  • 原因:图形界面程序在服务器(通常无图形环境)上运行时,依赖大量 GTK、WebKit 等 GUI 库,而这些库在Linux默认源中缺失或不完整。
  • 决策 :放弃图形界面,改用命令行内核 mih*mo,更适合服务器环境,轻量且稳定。

7.2 安装与配置 Mih*mo

  1. 下载内核

    bash 复制代码
    wget 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
  2. 配置文件 (~/.config/mih*omo/config.yaml):

  3. 启动与管理

    bash 复制代码
    mih*omo -t -d ~/.config/mih*omo  # 测试配置
    mih*omo -d ~/.config/mih*omo &   # 后台启动
    export http_pro*xy=http://127.0.0.1:port  # 设置代理
  4. Web 控制面板 (Yacd)

    • 启动后,访问 http://你的服务器IP:9090/ui (默认端口 9090) 即可通过浏览器管理节点和切换模式。
    • 前提 :配置文件中需包含 external-controller: :9090。同时需在安全组放行 9090 端口。

8. 防火墙管理策略

  • 发现 :系统 firewalld 服务默认未启用。

  • 决策 :保持关闭,完全依赖阿里云安全组进行端口管控。

  • 原因:简化管理,避免双重配置冲突,是云上最佳实践。

  • 操作

    bash 复制代码
    sudo 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(满足要求且稳定)。

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
相关推荐
聚搜云——JuSouClouD42 分钟前
杭州腾讯云代理商:腾讯云2核4G服务器够用吗?网站、API和开发测试怎么选
服务器·云计算·腾讯云
迪康Defender1 小时前
公用电脑责任追溯难?迪康端点安全一体化管理系统用户模式详解
java·运维·开发语言·网络·其他·安全
迪康Defender2 小时前
迪康端点安全一体化管理系统文档安全:构建企业文档资产全链路防护体系
运维·网络·安全·web安全·终端安全管理
zhangguojia72 小时前
权限弹窗点击允许的授权流程
运维·服务器·数据库
AI备忘录2 小时前
(十九)华为华三锐捷迈普思科 交换机链路聚合配置命令(LACP/静态聚合五厂商对照)
运维·服务器·网络·网络协议·tcp/ip·华为
lucybean012 小时前
抗老化曝气管采购:主流品牌优劣及选型策略深度解析
运维
come112342 小时前
剪映零基础教程
java·linux·运维
瀚高PG实验室2 小时前
HAC 集群主节点状态在starting、running之间频繁切换
运维·数据库·postgresql·瀚高数据库
其实防守也摸鱼2 小时前
教育信息技术应用创新---基础软件信息赛
运维·服务器·数据库·github·copilot