上一篇 下一篇 分享链接 返回 返回顶部

Debian 服务器上线手册:从安全加固到一键初始化部署

发布人:慈云数据-客服中心 发布时间:8小时前 阅读量:0

Debian 生产环境部署指南|一键部署

在企业级应用、Web 服务、数据库服务、容器平台以及自动化运维场景中,Debian 一直是非常受欢迎的 Linux 发行版之一。它以稳定、安全、软件包管理成熟、社区生态完善而著称,尤其适合部署在生产环境中。相比一些更新节奏较快的发行版,Debian 更强调系统长期稳定运行,这对于生产环境来说非常重要。

本文将围绕 Debian 生产环境部署 展开,介绍从系统初始化、安全加固、基础软件安装、网络配置、SSH 加固、防火墙配置、时间同步、日志管理、自动更新、Docker 部署到一键部署脚本的完整流程。文章适合服务器管理员、后端开发者、运维工程师以及希望快速搭建稳定 Debian 生产环境的用户参考。


一、为什么选择 Debian 作为生产环境?

Debian 是一个历史悠久、社区驱动的 Linux 发行版,在服务器领域拥有非常高的认可度。选择 Debian 作为生产环境,主要有以下几个原因:

1. 稳定性强

Debian Stable 分支的软件包经过长期测试,相比追求最新版本的系统,它更注重稳定性。对于线上服务而言,稳定往往比“最新”更重要。

2. 安全维护及时

Debian 拥有专门的安全团队,能够及时发布安全补丁。生产服务器可以通过安全源快速获取漏洞修复。

3. 软件包生态成熟

Debian 使用 apt 作为包管理工具,软件仓库丰富,安装和维护常见服务非常方便。

4. 适合自动化部署

Debian 的系统结构清晰,配置文件规范,适合结合 Shell、Ansible、Terraform、Docker 等工具进行自动化部署。

5. 资源占用低

相比一些桌面化发行版,Debian Server 环境非常轻量,适合云服务器、物理机以及边缘计算设备。


二、生产环境部署前的准备

在正式部署 Debian 生产环境之前,需要先做好基础规划。

1. 推荐系统版本

建议优先选择:

Debian 12 Bookworm

Debian 12 是当前主流稳定版本,适合新项目生产部署。如果已有业务运行在 Debian 11,也可以继续使用,但新环境建议使用 Debian 12。

2. 推荐服务器配置

根据应用规模不同,配置有所区别。以下是通用参考:

使用场景 CPU 内存 磁盘 带宽
小型网站 1-2 核 1-2 GB 20-40 GB SSD 1-5 Mbps
中型 API 服务 2-4 核 4-8 GB 40-100 GB SSD 5-20 Mbps
数据库服务 4 核以上 8 GB 以上 高性能 SSD 视业务而定
Docker 容器平台 4 核以上 8 GB 以上 100 GB 以上 视业务而定

3. 推荐磁盘分区

如果使用云服务器,通常默认分区即可。如果是物理机或自建环境,建议将系统与数据分离:

/        系统分区
/var     日志、缓存、服务数据
/home    用户数据
/data    业务数据

生产环境中,尤其是数据库、日志、文件上传等业务场景,建议将业务数据放在单独的数据盘,例如 /data


三、系统初始化配置

完成 Debian 安装后,首先需要进行系统初始化。

1. 更新软件源

登录服务器后,先更新软件包索引:

sudo apt update
sudo apt upgrade -y

如果当前用户不是 root,并且没有 sudo 权限,需要先切换 root:

su -

2. 安装基础工具

生产环境常用基础工具包括:

sudo apt install -y \
  curl \
  wget \
  vim \
  nano \
  git \
  unzip \
  tar \
  htop \
  net-tools \
  lsof \
  ca-certificates \
  gnupg \
  software-properties-common \
  apt-transport-https

这些工具可以帮助我们进行网络测试、文件下载、系统监控、证书校验和软件源管理。

3. 设置主机名

合理的主机名有助于多服务器环境中的识别和管理。

sudo hostnamectl set-hostname prod-debian-01

然后编辑 hosts 文件:

sudo vim /etc/hosts

添加或修改:

127.0.0.1   localhost
127.0.1.1   prod-debian-01

查看当前主机名:

hostnamectl

四、创建普通用户并配置 sudo

生产环境不建议长期使用 root 用户直接登录,应创建普通用户,并给予必要的 sudo 权限。

1. 创建用户

例如创建用户 deploy

adduser deploy

根据提示设置密码。

2. 添加 sudo 权限

usermod -aG sudo deploy

切换用户测试:

su - deploy
sudo whoami

如果输出:

root

说明 sudo 权限配置成功。


五、SSH 安全加固

SSH 是生产服务器最常见的远程入口,必须重点加固。

1. 修改 SSH 默认端口

默认端口 22 容易被扫描,可以修改为其他端口,例如 22222

编辑配置文件:

sudo vim /etc/ssh/sshd_config

修改或添加:

Port 22222

2. 禁止 root 远程登录

在同一个配置文件中设置:

PermitRootLogin no

3. 禁用密码登录,使用密钥登录

如果已经配置好 SSH 公钥,建议关闭密码登录:

PasswordAuthentication no
PubkeyAuthentication yes

用户公钥一般放在:

/home/deploy/.ssh/authorized_keys

权限需要正确:

chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
chown -R deploy:deploy /home/deploy/.ssh

4. 重启 SSH 服务

修改完成后,先检查配置:

sudo sshd -t

如果没有输出错误,再重启 SSH:

sudo systemctl restart ssh

注意:修改 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,不要直接暴露到公网,除非已经配置严格的访问控制。


七、时间同步配置

时间同步对日志分析、证书校验、分布式系统、数据库一致性都非常重要。

Debian 12 默认支持 systemd-timesyncd,可以直接启用:

sudo timedatectl set-timezone Asia/Shanghai
sudo systemctl enable systemd-timesyncd
sudo systemctl restart systemd-timesyncd

查看时间状态:

timedatectl

如果看到:

System clock synchronized: yes

说明时间同步正常。


八、系统资源限制优化

生产环境中,文件句柄、进程数等限制可能影响高并发服务。

1. 查看当前限制

ulimit -n

如果默认值较低,可以进行调整。

2. 修改 limits.conf

编辑:

sudo vim /etc/security/limits.conf

添加:

* soft nofile 65535
* hard nofile 65535
* soft nproc  65535
* hard nproc  65535

3. systemd 服务限制

对于 systemd 管理的服务,需要在服务文件中单独设置:

[Service]
LimitNOFILE=65535
LimitNPROC=65535

修改后执行:

sudo systemctl daemon-reload
sudo systemctl restart your-service

九、内核参数优化

对于 Web 服务、代理服务、高并发连接场景,可以适当调整内核参数。

编辑:

sudo vim /etc/sysctl.d/99-production.conf

添加以下内容:

net.core.somaxconn = 65535
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
fs.file-max = 2097152
vm.swappiness = 10

应用配置:

sudo sysctl --system

说明:

  • somaxconn:控制监听队列长度;
  • tcp_fin_timeout:减少 FIN-WAIT 时间;
  • ip_local_port_range:扩大本地临时端口范围;
  • swappiness:降低系统使用 swap 的倾向。

不同业务场景参数不完全相同,建议上线前结合压测结果调整。


十、安装 Nginx

Nginx 是生产环境中最常见的 Web 服务器和反向代理组件。

1. 安装 Nginx

sudo apt install -y nginx

2. 启动并设置开机自启

sudo systemctl enable nginx
sudo systemctl start nginx

查看状态:

sudo systemctl status nginx

3. 测试访问

浏览器访问服务器 IP,如果看到 Nginx 默认页面,说明安装成功。

也可以使用 curl 测试:

curl -I http://127.0.0.1

十一、配置 HTTPS 证书

生产环境中,HTTPS 几乎是必选项。可以使用 Let’s Encrypt 免费证书。

1. 安装 Certbot

sudo apt install -y certbot python3-certbot-nginx

2. 申请证书

假设域名是:

example.com

执行:

sudo certbot --nginx -d example.com -d www.example.com

根据提示填写邮箱并确认。

3. 测试自动续期

sudo certbot renew --dry-run

Let’s Encrypt 证书有效期为 90 天,Certbot 会配置自动续期任务。


十二、安装 Docker 与 Docker Compose

如果生产环境采用容器化部署,Docker 是非常常见的选择。

1. 安装依赖

sudo apt install -y ca-certificates curl gnupg

2. 添加 Docker 官方 GPG 密钥

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

3. 添加 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

4. 安装 Docker

sudo apt update

sudo apt install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

5. 启动 Docker

sudo systemctl enable docker
sudo systemctl start docker

查看版本:

docker version
docker compose version

6. 将普通用户加入 docker 组

sudo usermod -aG docker deploy

重新登录后生效。

注意:docker 组用户拥有接近 root 的权限,生产环境中应谨慎授予。


十三、日志管理与磁盘保护

生产环境中,日志如果不加限制,可能占满磁盘,导致服务异常。

1. 使用 journalctl 查看日志

journalctl -xe

查看某个服务日志:

journalctl -u nginx -f

2. 限制 systemd journal 日志大小

编辑:

sudo vim /etc/systemd/journald.conf

设置:

SystemMaxUse=1G
RuntimeMaxUse=512M
MaxRetentionSec=30day

重启:

sudo systemctl restart systemd-journald

3. 配置 logrotate

Debian 默认安装 logrotate。可检查:

ls /etc/logrotate.d/

例如 Nginx 日志轮转配置在:

/etc/logrotate.d/nginx

对于自定义应用,也建议配置日志轮转,避免单个日志文件无限增长。


十四、自动安全更新

生产环境中安全补丁非常重要,可以启用 unattended-upgrades 自动安装安全更新。

1. 安装组件

sudo apt install -y unattended-upgrades apt-listchanges

2. 启用自动更新

sudo dpkg-reconfigure unattended-upgrades

选择:

Yes

3. 检查配置

配置文件通常在:

/etc/apt/apt.conf.d/50unattended-upgrades

可以根据需要控制是否自动重启。对于核心业务服务器,不建议随意自动重启,应该结合维护窗口进行处理。


十五、安装 Fail2ban 防暴力破解

Fail2ban 可以根据日志检测异常登录行为,并自动封禁攻击 IP。

1. 安装 Fail2ban

sudo apt install -y fail2ban

2. 创建本地配置

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑:

sudo vim /etc/fail2ban/jail.local

找到 SSH 配置,示例:

[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

3. 启动服务

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

查看状态:

sudo fail2ban-client status
sudo fail2ban-client status sshd

十六、备份策略设计

任何生产环境都必须有备份方案。没有备份的系统不是真正的生产系统。

1. 需要备份的内容

通常包括:

  • 数据库数据;
  • 用户上传文件;
  • 应用配置文件;
  • Nginx 配置;
  • Docker Compose 文件;
  • SSL 证书;
  • 定时任务;
  • 系统关键配置。

2. 备份原则

建议遵循 3-2-1 备份原则:

3 份数据副本
2 种不同存储介质
1 份异地备份

3. 简单备份示例

例如备份 /data/etc/nginx

sudo tar -czf /backup/server-$(date +%F).tar.gz /data /etc/nginx

可以结合 crontab 定期执行:

crontab -e

添加:

0 3 * * * /usr/local/bin/backup.sh

生产环境建议将备份上传到对象存储、远程服务器或专用备份系统中。


十七、监控与告警

生产环境不仅要能运行,还要能及时发现问题。

1. 基础监控指标

至少应监控:

  • CPU 使用率;
  • 内存使用率;
  • 磁盘使用率;
  • 磁盘 I/O;
  • 网络流量;
  • 服务端口;
  • 进程状态;
  • HTTP 状态码;
  • 数据库连接数;
  • 容器状态。

2. 常见监控方案

可以选择:

  • Prometheus + Grafana;
  • Zabbix;
  • Netdata;
  • VictoriaMetrics;
  • 云厂商监控;
  • Uptime Kuma。

对于中小型项目,Uptime Kuma 非常适合做网站可用性监控;对于复杂系统,Prometheus + Grafana 更适合指标采集和可视化。


十八、一键部署脚本

下面提供一个适用于 Debian 12 的基础生产环境一键部署脚本。该脚本主要完成以下操作:

  • 更新系统;
  • 安装基础工具;
  • 设置时区;
  • 安装 UFW;
  • 开放 SSH、HTTP、HTTPS 端口;
  • 安装 Nginx;
  • 安装 Fail2ban;
  • 安装 Docker;
  • 配置系统参数;
  • 启用常用服务。

使用前请根据实际情况修改 SSH_PORTUSERNAME

一键部署脚本

创建脚本:

vim debian-production-init.sh

写入以下内容:

#!/usr/bin/env bash

set -e

USERNAME="deploy"
SSH_PORT="22222"
TIMEZONE="Asia/Shanghai"
HOSTNAME="prod-debian-01"

echo "========== Debian Production Init =========="

if [ "$(id -u)" -ne 0 ]; then
  echo "请使用 root 用户执行此脚本"
  exit 1
fi

echo "[1/12] 更新系统软件包..."
apt update
apt upgrade -y

echo "[2/12] 安装基础工具..."
apt install -y \
  sudo \
  curl \
  wget \
  vim \
  nano \
  git \
  unzip \
  tar \
  htop \
  net-tools \
  lsof \
  ca-certificates \
  gnupg \
  apt-transport-https \
  software-properties-common \
  ufw \
  fail2ban \
  unattended-upgrades \
  apt-listchanges

echo "[3/12] 设置主机名..."
hostnamectl set-hostname "${HOSTNAME}"

echo "[4/12] 设置时区..."
timedatectl set-timezone "${TIMEZONE}"
systemctl enable systemd-timesyncd || true
systemctl restart systemd-timesyncd || true

echo "[5/12] 创建普通用户..."
if id "${USERNAME}" >/dev/null 2>&1; then
  echo "用户 ${USERNAME} 已存在,跳过创建"
else
  adduser --gecos "" "${USERNAME}"
fi
usermod -aG sudo "${USERNAME}"

echo "[6/12] 配置 SSH..."
SSHD_CONFIG="/etc/ssh/sshd_config"

cp "${SSHD_CONFIG}" "${SSHD_CONFIG}.bak.$(date +%F-%H%M%S)"

sed -i "s/^#\?Port .*/Port ${SSH_PORT}/" "${SSHD_CONFIG}" || true

if ! grep -q "^Port ${SSH_PORT}" "${SSHD_CONFIG}"; then
  echo "Port ${SSH_PORT}" >> "${SSHD_CONFIG}"
fi

sed -i "s/^#\?PermitRootLogin .*/PermitRootLogin no/" "${SSHD_CONFIG}" || true
sed -i "s/^#\?PubkeyAuthentication .*/PubkeyAuthentication yes/" "${SSHD_CONFIG}" || true

sshd -t
systemctl restart ssh

echo "[7/12] 配置防火墙 UFW..."
ufw --force reset
ufw default deny incoming
ufw default allow outgoing
ufw allow "${SSH_PORT}/tcp"
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable

echo "[8/12] 安装 Nginx..."
apt install -y nginx
systemctl enable nginx
systemctl restart nginx

echo "[9/12] 配置 Fail2ban..."
cat > /etc/fail2ban/jail.local < /etc/sysctl.d/99-production.conf < /etc/apt/sources.list.d/docker.list

apt update
apt install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

systemctl enable docker
systemctl restart docker
usermod -aG docker "${USERNAME}"

echo "[12/12] 启用自动安全更新..."
dpkg-reconfigure -f noninteractive unattended-upgrades || true

echo "========== 部署完成 =========="
echo "普通用户: ${USERNAME}"
echo "SSH 端口: ${SSH_PORT}"
echo "请确认可以通过新端口登录后,再关闭当前终端。"
echo "示例:ssh ${USERNAME}@服务器IP -p ${SSH_PORT}"

赋予执行权限:

chmod +x debian-production-init.sh

执行脚本:

sudo ./debian-production-init.sh

十九、一键脚本使用注意事项

虽然一键部署脚本可以显著提高效率,但生产环境仍应谨慎使用。

1. 执行前先审查脚本

不要直接运行来源不明的脚本。脚本可能修改 SSH、防火墙、用户权限、软件源等关键配置。

2. 确保云服务器安全组已放行端口

如果你的云服务器使用安全组,还需要在云平台控制台放行 SSH 新端口,例如 22222,否则即使系统防火墙放行,也无法连接。

3. 不要立刻关闭当前 SSH 会话

修改 SSH 配置后,应重新打开一个终端测试登录:

ssh deploy@服务器IP -p 22222

确认可登录后,再退出旧会话。

4. 密钥登录建议手动配置

脚本没有自动关闭密码登录,因为如果没有提前配置公钥,可能导致无法登录。建议确认公钥登录成功后,再手动关闭密码登录:

PasswordAuthentication no

然后重启 SSH:

sudo systemctl restart ssh

二十、生产环境部署后的检查清单

部署完成后,建议按以下清单逐项检查。

1. 系统版本

cat /etc/debian_version

2. 服务状态

systemctl status ssh
systemctl status nginx
systemctl status docker
systemctl status fail2ban

3. 防火墙状态

sudo ufw status verbose

4. 端口监听

ss -tulnp

5. 磁盘空间

df -h

6. 内存状态

free -h

7. 系统负载

uptime

8. Docker 状态

docker info
docker compose version

二十一、常见问题排查

1. 修改 SSH 端口后无法登录

可能原因:

  • 云服务器安全组未放行新端口;
  • UFW 未放行新端口;
  • SSH 配置文件写错;
  • SSH 服务未正常重启;
  • 客户端连接仍使用默认 22 端口。

排查命令:

sudo sshd -t
sudo systemctl status ssh
sudo ufw status
ss -tulnp | grep ssh

2. Docker 安装失败

可能原因:

  • 网络无法访问 Docker 官方源;
  • GPG 密钥配置失败;
  • Debian 版本过旧;
  • 软件源缓存异常。

可尝试:

sudo apt update
sudo apt install -f

如果服务器在国内网络环境,可能需要使用镜像源。

3. Nginx 启动失败

检查配置:

sudo nginx -t

查看日志:

journalctl -u nginx -xe

常见原因是端口被占用:

sudo ss -tulnp | grep ':80'

4. 磁盘被日志占满

查看大文件:

sudo du -ah /var/log | sort -rh | head -20

清理 journal 日志:

sudo journalctl --vacuum-time=7d

或限制大小:

sudo journalctl --vacuum-size=1G

二十二、生产环境安全建议

最后,总结一些关键安全建议:

  1. 禁止 root 远程登录;
  2. 使用 SSH 密钥登录;
  3. 修改默认 SSH 端口;
  4. 只开放必要端口;
  5. 数据库不要直接暴露公网;
  6. 定期安装安全补丁;
  7. 配置 Fail2ban;
  8. 配置日志轮转;
  9. 建立自动备份机制;
  10. 对重要服务配置监控告警;
  11. 使用 HTTPS;
  12. 对 Docker 权限进行严格控制;
  13. 定期检查系统用户和登录记录;
  14. 对生产配置文件进行版本管理;
  15. 上线前进行压测和恢复演练。

结语

Debian 是一个非常适合作为生产环境的 Linux 发行版。它稳定、可靠、资源占用低,并且拥有成熟的软件包管理体系。一个合格的生产环境,不只是能安装软件和启动服务,还应该具备安全加固、日志管理、备份恢复、监控告警、故障排查和自动化部署能力。

本文从 Debian 系统初始化讲起,覆盖了用户管理、SSH 加固、防火墙、时间同步、系统优化、Nginx、HTTPS、Docker、Fail2ban、日志管理、自动更新、备份策略以及一键部署脚本等核心内容。你可以基于本文提供的方案快速完成一台 Debian 生产服务器的基础初始化,也可以根据业务特点继续扩展数据库、中间件、CI/CD、容器编排和监控体系。

对于生产环境而言,自动化部署只是第一步,持续维护、持续监控和持续优化才是保障系统长期稳定运行的关键。

目录结构
全文