Debian 生产服务器从安装到加固:一套可直接落地的部署流程
Debian 部署完整教程|生产环境实测
Debian 是目前服务器领域最稳定、最可靠的 Linux 发行版之一。它以软件包稳定、社区成熟、安全更新及时、系统资源占用低而著称,非常适合用于生产环境部署 Web 服务、数据库服务、容器平台、反向代理、监控系统以及各类企业级应用。
本文将以生产环境实测部署流程为主线,从系统安装、基础配置、安全加固、软件源配置、常用服务部署、性能优化、日志与备份等方面,完整讲解 Debian 服务器的部署方法。本文适合首次部署 Debian 服务器的运维人员、开发者,也适合希望规范生产环境初始化流程的团队参考。
一、部署前准备
在正式部署 Debian 之前,需要先明确服务器用途、硬件规格、网络规划以及系统版本。
1. 推荐系统版本
生产环境建议选择 Debian Stable 版本,例如:
- Debian 12 Bookworm
- Debian 11 Bullseye
如果是新部署服务器,推荐使用 Debian 12。它的软件包较新,同时仍然保持了 Debian 一贯的稳定性。
2. 服务器硬件建议
不同业务场景对硬件要求不同,以下是常见配置参考:
| 场景 | CPU | 内存 | 磁盘 | 说明 |
|---|---|---|---|---|
| 轻量 Web 服务 | 2 核 | 2GB | 40GB SSD | 适合博客、小型 API |
| 中型应用服务 | 4 核 | 8GB | 100GB SSD | 适合企业后台、商城 |
| 数据库服务器 | 4 核以上 | 16GB 以上 | SSD/NVMe | 建议独立部署 |
| Docker / Kubernetes 节点 | 4 核以上 | 8GB 以上 | 100GB 以上 | 根据容器数量扩展 |
3. 网络规划
生产环境中,建议提前规划:
- 服务器公网 IP
- 内网 IP
- 网关地址
- DNS 地址
- 主机名
- SSH 端口
- 是否需要防火墙
- 是否需要堡垒机登录
- 域名解析是否已完成
例如:
公网 IP:203.0.113.10
内网 IP:10.0.0.10
主机名:prod-web-01
SSH 端口:22222
域名:www.example.com
二、Debian 系统安装
1. 获取 Debian 镜像
可以从 Debian 官方网站下载 ISO 镜像:
https://www.debian.org/
生产环境建议选择:
- netinst 网络安装镜像
- DVD 镜像
- 云服务器平台提供的官方 Debian 镜像
如果是云服务器,如阿里云、腾讯云、AWS、Azure、Google Cloud,建议直接选择平台提供的官方 Debian 镜像,部署更方便。
2. 安装过程关键选项
安装 Debian 时,重点关注以下选项:
选择语言
生产服务器建议选择英文环境,便于日志排查和兼容性:
Language: English
Locale: en_US.UTF-8
当然,如果团队习惯中文,也可以安装中文语言包,但生产环境一般更推荐英文。
设置主机名
例如:
prod-web-01
主机名应具有识别意义,建议包含环境、角色和编号。
创建用户
安装过程中会提示创建 root 密码和普通用户。生产环境建议:
- root 设置强密码
- 创建普通运维用户
- 后续禁用 root 远程 SSH 登录
- 使用 sudo 管理权限
例如创建用户:
deploy
磁盘分区建议
如果是普通 Web 服务器,可使用如下分区方案:
| 挂载点 | 大小 | 文件系统 |
|---|---|---|
| / | 30GB 以上 | ext4 |
| /var | 视日志和服务而定 | ext4 |
| /home | 可选 | ext4 |
| swap | 2GB - 8GB | swap |
对于生产环境,如果运行 Docker、数据库或大量日志服务,建议单独规划 /var,因为 Docker 镜像、容器数据、日志通常都在 /var 下。
例如:
/ 40GB
/var 100GB
swap 4GB
如果使用云服务器,也可以直接使用系统默认分区,后续再挂载数据盘到 /data。
三、系统初始化配置
安装完成后,使用 SSH 登录服务器。
ssh deploy@服务器IP
如果使用 root 登录:
ssh root@服务器IP
1. 更新系统软件包
首次登录后,第一件事是更新软件包索引并升级系统。
sudo apt update
sudo apt upgrade -y
如需完整升级依赖:
sudo apt full-upgrade -y
清理无用软件包:
sudo apt autoremove -y
sudo apt clean
2. 安装常用工具
生产环境常用工具建议一次性安装:
sudo apt install -y \
vim \
curl \
wget \
git \
net-tools \
htop \
iotop \
iftop \
lsof \
unzip \
zip \
tar \
ca-certificates \
gnupg \
software-properties-common \
apt-transport-https \
rsync \
cron \
sudo
这些工具常用于网络诊断、资源监控、文件传输、证书验证和日常运维。
3. 设置时区
中国大陆服务器通常设置为上海时区:
sudo timedatectl set-timezone Asia/Shanghai
查看时间:
timedatectl
确保输出中显示:
Time zone: Asia/Shanghai
4. 配置主机名
查看当前主机名:
hostnamectl
设置主机名:
sudo hostnamectl set-hostname prod-web-01
修改 /etc/hosts:
sudo vim /etc/hosts
加入:
127.0.0.1 localhost
127.0.1.1 prod-web-01
这样可以避免部分服务启动时因为主机名解析异常导致报错。
四、配置 Debian 软件源
如果服务器在中国大陆,建议使用国内镜像源提升安装速度。以 Debian 12 为例,可以使用清华源、阿里云源或中科大源。
备份原配置:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑源文件:
sudo vim /etc/apt/sources.list
以清华源为例:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
更新索引:
sudo apt update
如果服务器位于海外,则建议使用官方源或云厂商所在区域源,避免因为跨境网络导致下载不稳定。
五、创建生产环境运维用户
生产环境不建议长期使用 root 用户操作。可以创建一个专用用户,例如 deploy。
sudo adduser deploy
加入 sudo 组:
sudo usermod -aG sudo deploy
切换用户测试:
su - deploy
sudo whoami
如果返回:
root
说明 sudo 权限正常。
六、SSH 安全加固
SSH 是服务器最常见的入口,也是攻击最频繁的入口。生产环境必须进行基础加固。
1. 修改 SSH 端口
编辑 SSH 配置:
sudo vim /etc/ssh/sshd_config
修改或增加:
Port 22222
注意:修改端口前,需要先确保防火墙放行新端口,否则可能无法登录。
2. 禁止 root 远程登录
在配置文件中设置:
PermitRootLogin no
3. 禁止密码登录,使用密钥登录
生成本地 SSH 密钥:
ssh-keygen -t ed25519 -C "deploy@prod"
将公钥复制到服务器:
ssh-copy-id -p 22222 deploy@服务器IP
服务器端配置:
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH:
sudo systemctl restart ssh
测试登录:
ssh -p 22222 deploy@服务器IP
注意:在确认新连接可正常登录前,不要关闭原有 SSH 会话,避免误操作导致服务器无法远程访问。
七、防火墙配置
Debian 上常用的防火墙工具是 ufw,配置简单,适合大多数服务器。
1. 安装 ufw
sudo apt install -y ufw
2. 放行 SSH 端口
如果 SSH 端口为 22222:
sudo ufw allow 22222/tcp
3. 放行 Web 服务端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
4. 启用防火墙
sudo ufw enable
查看状态:
sudo ufw status verbose
如果服务器还需要数据库端口,如 MySQL 的 3306、PostgreSQL 的 5432,建议只允许内网访问,不要直接暴露到公网。例如:
sudo ufw allow from 10.0.0.0/24 to any port 3306 proto tcp
八、安装 Nginx Web 服务
Nginx 是生产环境最常用的 Web 服务器和反向代理服务器。
1. 安装 Nginx
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
查看状态:
sudo systemctl status nginx
访问服务器 IP:
http://服务器IP
如果出现 Nginx 默认页面,说明安装成功。
2. 配置站点目录
创建网站目录:
sudo mkdir -p /var/www/example.com
sudo chown -R deploy:deploy /var/www/example.com
创建测试页面:
echo "Hello Debian Production" > /var/www/example.com/index.html
3. 创建 Nginx 站点配置
sudo vim /etc/nginx/sites-available/example.com
写入:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
测试配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
九、配置 HTTPS 证书
生产环境必须启用 HTTPS。推荐使用 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d example.com -d www.example.com
按照提示选择是否强制 HTTP 跳转 HTTPS,生产环境建议开启跳转。
3. 测试自动续期
sudo certbot renew --dry-run
查看定时任务:
systemctl list-timers | grep certbot
Let’s Encrypt 证书有效期通常为 90 天,Certbot 会自动续期,但建议定期检查。
十、部署数据库服务
以下以 MariaDB 为例。MariaDB 是 MySQL 的常见替代方案,在 Debian 上安装简单。
1. 安装 MariaDB
sudo apt install -y mariadb-server mariadb-client
启动服务:
sudo systemctl enable mariadb
sudo systemctl start mariadb
2. 安全初始化
sudo mysql_secure_installation
建议配置:
Set root password? Y
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database? Y
Reload privilege tables? Y
3. 创建业务数据库和用户
登录数据库:
sudo mysql
执行:
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
如果应用和数据库不在同一台服务器,应根据内网 IP 授权,不建议使用 % 开放所有来源。
十一、部署 Docker 环境
如果生产环境采用容器化部署,可以安装 Docker。
1. 卸载旧版本
sudo apt remove -y docker docker-engine docker.io containerd runc
2. 安装依赖
sudo apt install -y ca-certificates curl gnupg
3. 添加 Docker 官方 GPG Key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4. 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新并安装:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. 验证 Docker
sudo docker version
sudo docker run hello-world
将当前用户加入 Docker 组:
sudo usermod -aG docker deploy
重新登录后验证:
docker ps
十二、系统性能优化
Debian 默认已经比较稳定,但生产环境仍可进行一些基础优化。
1. 调整文件句柄限制
查看当前限制:
ulimit -n
编辑:
sudo vim /etc/security/limits.conf
增加:
* soft nofile 65535
* hard nofile 65535
如果是 systemd 服务,还需要在服务配置中设置:
LimitNOFILE=65535
2. 内核参数优化
编辑:
sudo vim /etc/sysctl.conf
加入:
net.ipv4.ip_forward = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192
fs.file-max = 1048576
使配置生效:
sudo sysctl -p
注意:内核参数不要盲目复制,应结合业务压力、连接数和系统资源进行调整。
3. Swap 设置建议
查看 Swap:
free -h
如果服务器内存较小,可以创建 Swap 文件:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
写入 /etc/fstab:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
调整 swappiness:
sudo vim /etc/sysctl.conf
加入:
vm.swappiness = 10
生效:
sudo sysctl -p
生产环境中,Swap 可以作为兜底机制,但不能依赖 Swap 承载高负载。
十三、日志管理与排查
1. 查看系统日志
Debian 使用 systemd,可通过 journalctl 查看日志:
sudo journalctl -xe
查看某个服务日志:
sudo journalctl -u nginx
sudo journalctl -u mariadb
实时查看:
sudo journalctl -u nginx -f
2. 查看传统日志文件
常见日志路径:
/var/log/syslog
/var/log/auth.log
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mysql/
查看登录失败记录:
sudo grep "Failed password" /var/log/auth.log
查看最近登录:
last
查看当前登录用户:
who
3. 日志轮转
Debian 默认安装 logrotate,可避免日志无限增长。查看配置:
ls /etc/logrotate.d/
例如 Nginx 日志轮转配置通常位于:
/etc/logrotate.d/nginx
如果自定义应用日志,应手动添加轮转规则,防止磁盘被日志打满。
十四、备份策略
生产环境部署完成后,备份必须同步规划。没有备份的生产环境是不完整的。
1. 需要备份的内容
通常包括:
- 应用代码
- 配置文件
- 数据库
- 用户上传文件
- SSL 证书
- Nginx 配置
- Docker Compose 文件
- 定时任务配置
重要目录示例:
/etc/nginx/
/etc/ssh/
/var/www/
/data/
/etc/letsencrypt/
/var/spool/cron/
2. 数据库备份示例
MariaDB/MySQL 备份:
mysqldump -u app_user -p app_db > app_db_$(date +%F).sql
压缩:
gzip app_db_$(date +%F).sql
3. 使用 rsync 远程备份
rsync -avz /var/www/ backup@backup-server:/backup/prod-web-01/www/
4. 定时备份
编辑定时任务:
crontab -e
例如每天凌晨 2 点备份数据库:
0 2 * * * /usr/bin/mysqldump -u app_user -p'密码' app_db | gzip > /data/backup/app_db_$(date +\%F).sql.gz
建议备份后上传到远程服务器或对象存储,避免服务器本机故障导致备份同时丢失。
十五、安全加固建议
1. 安装 Fail2ban
Fail2ban 可以自动封禁暴力破解 SSH 的 IP。
sudo apt install -y fail2ban
创建本地配置:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑:
sudo vim /etc/fail2ban/jail.local
开启 sshd:
[sshd]
enabled = true
port = 22222
maxretry = 5
bantime = 3600
findtime = 600
重启:
sudo systemctl restart fail2ban
查看状态:
sudo fail2ban-client status sshd
2. 定期更新安全补丁
手动更新:
sudo apt update
sudo apt upgrade -y
如果希望自动安装安全更新,可以安装:
sudo apt install -y unattended-upgrades
配置:
sudo dpkg-reconfigure unattended-upgrades
生产环境开启自动更新前,需要评估业务影响。对于关键服务,建议在测试环境验证后再更新。
3. 最小化开放端口
查看监听端口:
sudo ss -tulnp
只保留业务需要的端口,例如:
- SSH:22222
- HTTP:80
- HTTPS:443
数据库、Redis、管理后台等服务尽量只监听内网地址或本地地址。
十六、生产环境部署检查清单
上线前建议逐项检查:
- [ ] 系统已更新到最新安全版本
- [ ] 已配置正确的软件源
- [ ] 已创建普通运维用户
- [ ] 已禁用 root SSH 登录
- [ ] 已启用 SSH 密钥登录
- [ ] 已修改默认 SSH 端口
- [ ] 防火墙已开启
- [ ] 只开放必要端口
- [ ] Nginx 配置已通过测试
- [ ] HTTPS 证书已申请并自动续期
- [ ] 数据库已完成安全初始化
- [ ] 日志轮转正常
- [ ] 备份任务已配置
- [ ] 备份恢复流程已测试
- [ ] 监控和告警已配置
- [ ] 应用服务已设置开机自启
- [ ] 磁盘空间、内存、CPU 使用率正常
十七、常见问题排查
1. SSH 无法登录
检查 SSH 服务状态:
sudo systemctl status ssh
检查端口监听:
sudo ss -tulnp | grep ssh
检查防火墙:
sudo ufw status
如果刚修改 SSH 配置后无法登录,优先检查:
- 端口是否写错
- 防火墙是否放行
- 云服务器安全组是否放行
- sshd_config 是否存在语法错误
2. Nginx 启动失败
测试配置:
sudo nginx -t
查看日志:
sudo journalctl -u nginx -xe
常见原因包括:
- 配置文件语法错误
- 端口被占用
- 证书路径错误
- root 目录不存在
- server_name 配置错误
3. HTTPS 证书申请失败
常见原因:
- 域名未解析到服务器
- 80 端口未开放
- 防火墙或安全组阻断
- Nginx 配置错误
- DNS 生效延迟
可以先测试:
curl -I http://example.com
确认能正常访问后再申请证书。
4. 磁盘空间不足
查看磁盘:
df -h
查看大目录:
sudo du -sh /* 2>/dev/null
常见占用位置:
/var/log/
/var/lib/docker/
/var/cache/apt/
/var/www/
/data/
清理 apt 缓存:
sudo apt clean
清理 Docker 无用资源:
docker system prune -a
十八、总结
Debian 的优势在于稳定、可靠、简洁,非常适合作为生产环境服务器系统。一个合格的 Debian 生产环境部署,不仅仅是安装系统和启动服务,还应包含系统初始化、安全加固、防火墙策略、服务部署、HTTPS 配置、日志管理、备份策略、性能优化和上线检查。
在实际生产环境中,建议将本文中的初始化流程整理成标准化脚本或 Ansible Playbook,实现自动化部署。这样不仅可以减少人为失误,还能保证多台服务器之间的环境一致性。
最终,一个稳定的 Debian 生产环境应当具备以下特点:
- 系统版本稳定,软件包来源可靠;
- SSH 登录安全,权限管理清晰;
- 防火墙策略严格,只开放必要端口;
- Web 服务和数据库配置规范;
- HTTPS、日志、备份、监控全部到位;
- 出现故障时能够快速定位、快速恢复。
如果你正在准备部署一台长期运行的 Linux 服务器,Debian 是非常值得信赖的选择。只要按照规范流程完成初始化和安全加固,它完全可以胜任绝大多数企业级生产环境需求。