Skip to content

Ubuntu 服务器初始化标准化 SOP ​

适用版本:Ubuntu 20.04 LTS / 22.04 LTS / 24.04 LTS 场景覆盖:物理机 (Laptop/MiniPC) / 云服务器 (ECS) / 虚拟机 (VM)

📋 0. 准备工作 ​

在开始之前,请确认:

  1. 物理机/VM:已完成系统基础安装,可进入终端。
  2. 云服务器:已获取公网 IP 及初始 root 密码或密钥。
  3. 网络:确认服务器具备互联网访问能力。

🚀 1. 账户与权限管理 (Access Control) ​

原则:禁止直接使用 root 账户进行日常操作,应使用具有 sudo 权限的普通用户。

1.1 创建运维用户 ​

创建一个用于日常维护的非 root 账号。

bash
# 1. 创建新用户 (将 'deployer' 替换为你常用的用户名)
sudo adduser deployer

# 2. 授予 sudo 权限
sudo usermod -aG sudo deployer

# 3. 验证权限
su - deployer
sudo whoami
# 应输出: root
exit

1.2 SSH 密钥登录配置 (推荐) ​

在本地电脑 (Client) 上执行,将公钥上传至服务器以实现免密且安全的登录。

bash
# [本地电脑] 生成密钥 (如已有可跳过)
# ssh-keygen -t ed25519 -C "your_email@example.com"

# [本地电脑] 上传公钥 (替换为实际 IP)
ssh-copy-id -i ~/.ssh/id_ed25519.pub deployer@<SERVER_IP>

🛠️ 2. 基础系统优化 (System Tuning) ​

2.1 切换国内镜像源 ​

针对国内环境,建议切换至阿里云或清华大学镜像源以提升软件下载速度。

注意:云服务器(如阿里云 ECS)通常已内置内网源,建议保留默认配置。物理机或虚拟机建议手动替换。

bash
# 1. 备份原始文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 2. 自动替换为阿里云源 (针对 x86_64 架构)
# 如果是 ARM 架构,请将 ubuntu 替换为 ubuntu-ports
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

# 3. 更新系统软件
sudo apt update && sudo apt upgrade -y

2.2 设置时区与时间同步 ​

确保系统时间为上海时间,防止日志时间错乱导致排障困难。

bash
sudo timedatectl set-timezone Asia/Shanghai

# 验证状态
timedatectl status

2.3 配置 Swap 交换分区 (内存 < 4GB 推荐) ​

在内存资源有限的服务器上配置 Swap 可以防止因内存溢出 (OOM) 导致的服务崩溃。

bash
# 检查现有 Swap
free -h

# 创建 4G Swap 文件 (大小可根据磁盘空间调整)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 配置开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 优化 Swappiness (设置为 10,优先使用物理内存)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

2.4 系统日志限制 ​

防止 systemd-journald 日志无限增长占满磁盘空间。

bash
sudo vim /etc/systemd/journald.conf
# 修改或添加以下行:
# SystemMaxUse=500M

# 重启日志服务生效
sudo systemctl restart systemd-journald

2.5 安装运维必备工具 ​

安装常用的系统管理与排障工具。

bash
sudo apt install -y \
    curl wget git vim htop tmux \
    net-tools unzip zip lsof ncdu \
    rsync tree jq build-essential

🛡️ 3. 安全加固 (Security Hardening) ​

3.1 SSH 服务端加固 ​

修改 /etc/ssh/sshd_config 提高远程访问安全性。

bash
sudo vim /etc/ssh/sshd_config

# 建议修改项:
PermitRootLogin no         # 禁止 root 直接登录
PasswordAuthentication no  # 禁止密码登录 (确保密钥登录已测试成功!)
PubkeyAuthentication yes   # 开启公钥登录
# Port 2222                # 可选:修改默认 22 端口以防扫描

# 重启 SSH 服务
sudo systemctl restart ssh

3.2 配置 UFW 防火墙 ​

Ubuntu 默认自带的极简防火墙管理工具。

bash
# 1. 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 2. 放行核心端口 (必须包含 SSH 端口)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 3. 启用防火墙
sudo ufw enable
sudo ufw status

3.3 Fail2Ban 防暴力破解 (推荐) ​

对于暴露在公网的服务器,建议安装 Fail2Ban 自动封禁尝试破解密码的恶意 IP。

bash
sudo apt install fail2ban -y
# 默认配置已足够保护 SSH
sudo systemctl enable --now fail2ban

3.4 自动安全更新 (长期运维建议) ​

开启自动更新以确保系统安全补丁能及时安装。

bash
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

✅ 4. Day-0 最终验证清单 ​

在开始部署应用前,请依次确认:

  • [ ] SSH: 尝试使用密钥能否正常登录?(验证后建议再禁用密码登录)
  • [ ] 防火墙: sudo ufw status 是否显示已启用且只放行了必要端口?
  • [ ] 时间: date 输出的时间是否与当前北京时间一致?
  • [ ] 存储: df -h 查看根目录或 /srv 所在分区空间是否充足?
  • [ ] Docker: docker ps 命令是否无需 sudo 即可执行?

方舟 · Ark