服务器选型与初始化

买服务器最容易犯两个错:一是按“越多核越好”买,把预算花在永远用不满的 CPU 上;二是买完直接装环境,连普通用户、时区、swap 都没配,后面每一步都在填坑。本章先讲选型看哪几个指标,再给出一份可以照着敲的初始化流程,最后约定一套目录规范。

选型要看哪几个指标

指标说明小站建议踩坑提示
CPU应用并发能力的基础2 核起步,Java/编译型服务 4 核单核跑 Java 编译或 Node 构建会非常慢
内存最容易成为瓶颈的资源4 GB 起步,8 GB 更稳MySQL + Java + 构建同时跑,2 GB 必 OOM
带宽决定“同时多少人在下载”3~5 Mbps 起步,静态资源上 CDN带宽按峰值计费,图片直传公网极烧钱
系统盘装系统、日志、镜像40~60 GB ESSD/SSD用高效云盘跑数据库,IOPS 会成为瓶颈
数据盘放数据库与上传文件有数据库就单独挂一块数据与系统同盘,重装系统等于丢数据
地域物理距离决定延迟用户在哪就选哪个地域选错地域,境外用户访问会多几百毫秒
计费包年包月 vs 按量付费长期跑用包年包月,测试用按量按量付费忘关机,账单很难看

2C4G 能跑什么

部署内容是否可行说明
Nginx + 静态站点非常轻松单机可扛数万 QPS 的静态请求
Nginx + Go/Python 单体 API可行注意 Gunicorn/uWSGI 的 worker 数别超过核数
Nginx + Node 单体 API可行用 pm2 或 systemd 起 2 个实例即可
MySQL 8 + Redis可行但需调参innodb_buffer_pool_size 给 1~1.5 GB,别再给 4 GB
Spring Boot + MySQL + Redis勉强堆内存压到 -Xmx1g,否则随时 OOM
同时跑构建 + 数据库 + 应用不建议构建会抢占内存,容易把线上服务打挂

结论:小站不要在同一台机器上做构建,镜像和产物在本地或 CI 构建好再推上去,是最省心的做法。

系统怎么选

发行版包管理特点适合谁
Ubuntu 22.04/24.04 LTSapt文档最多、社区最活跃、Docker 支持最好绝大多数人,默认推荐
Debian 12apt更精简稳定,软件版本偏旧追求稳、能接受旧版本的人
Alibaba Cloud Linux 3dnf阿里云自研,内核与镜像源针对云优化用阿里云 ECS 且想省事的人
Anolis OS / OpenAnolisdnfCentOS 停更后的国产替代需要 RHEL 兼容生态的场景
CentOS Stream 9dnf滚动预览,介于 Fedora 与 RHEL 之间明确知道自己在做什么的人

取舍观点:新机器一律优先 Ubuntu LTS 或 Alibaba Cloud Linux 3。CentOS 7 已于 2024 年 6 月停止维护,不要再新装;CentOS Stream 是上游预览版,生产环境要慎重。

初始化步骤

# 1) 更新系统并装常用工具(Ubuntu / Debian)
sudo apt update && sudo apt -y upgrade
sudo apt -y install curl wget git vim unzip htop lsof net-tools chrony ca-certificates

# 1b) Alibaba Cloud Linux / RHEL 系把上面两条换成
# sudo dnf -y update
# sudo dnf -y install curl wget git vim unzip htop lsof net-tools chrony

# 2) 创建普通用户并授予 sudo(不要长期用 root 登录)
sudo adduser deploy
sudo usermod -aG sudo  deploy    # Debian / Ubuntu
# sudo usermod -aG wheel deploy  # Alibaba Cloud Linux / CentOS / RHEL

# 3) 主机名与时区,时区错了日志时间会全部偏 8 小时
sudo hostnamectl set-hostname web-prod-01
sudo timedatectl set-timezone Asia/Shanghai
timedatectl status

# 4) 时间同步(chrony 比旧 ntpd 更准,云环境默认就有)
sudo systemctl enable --now chrony
chronyc sources -v
# 5) 小内存机器加 swap,避免偶发 OOM 直接把进程杀掉
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

# 6) 让 swap 只做兜底,不要过早换出(值越小越少用 swap)
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
sudo sysctl --system

# 7) 文件句柄数,Nginx 与高并发服务的常见天花板
echo -e '* soft nofile 65535\n* hard nofile 65535' | sudo tee /etc/security/limits.d/99-nofile.conf

目录规范

路径用途说明
/opt/appname第三方/自建应用的安装目录自带完整目录结构、可整目录替换的应用放这里
/srv/appname对外提供的服务数据与站点根目录静态站点产物、Compose 的 docker-compose.yml
~/apps/appname部署用户自己的应用目录免 sudo 就能读写,适合个人项目与 CI 部署
/var/log/appname应用日志配合 logrotate,避免写满系统盘
/data数据盘挂载点MySQL 数据目录、上传文件目录放这里

推荐约定:代码与配置放 ~/apps/<name>,站点产物放 /srv/www/<name>,数据放 /data/<name>。三处分离,重装系统或换机器时只需要迁移 /data

验证方法

# 时区与时间同步是否生效
timedatectl | grep -E 'Time zone|synchronized'

# swap 是否挂上,能否开机自动挂载
free -h && swapon --show

# 普通用户是否能正常 sudo
su - deploy -c 'sudo -n true && echo sudo-ok'

# 句柄数在新会话中是否生效(重新登录后执行)
ulimit -n

# 系统负载与磁盘水位
uptime && df -hT

timedatectl 显示 synchronized: yesswapon --show 有输出、ulimit -n 是 65535,初始化就算合格。

常见坑

后果做法
一直用 root 登录误删文件、被爆破后直接失守建普通用户 + sudo,root 只用于救援
不改时区日志、cron、证书校验全错 8 小时timedatectl set-timezone Asia/Shanghai
忘记 swap内存瞬时冲高直接 OOM Kill加 1~2 倍内存的 swap 兜底
swap 太激进数据库被换出,延迟抖动vm.swappiness=10
数据与系统同盘重装系统后数据全丢单独挂数据盘,挂到 /data
在服务器上编译内存被吃满,线上服务受影响本地或 CI 构建,只上传产物
忘记记录买过什么换机器时对不上配置把机型、镜像、磁盘、带宽记进运维文档

小结:选型先看内存和带宽,再看 CPU,2C4G 足够跑中小站点的 Nginx + 单体应用 + 数据库,但别在同一台机上做构建;系统默认选 Ubuntu LTS 或 Alibaba Cloud Linux 3,初始化务必完成更新、普通用户、时区、时间同步、swap、句柄数六件事,目录按代码、数据、日志三处分离,后面换机器才不痛苦。

笔记加载中…