Debian 服务器运维实战:从初始化到部署、备份与故障排查全流程命令指南
Debian 实战案例分享|附完整命令
Debian 一直以稳定、安全、可维护性强而著称,尤其适合作为服务器系统使用。无论是搭建 Web 服务、部署数据库、配置防火墙,还是实现自动化运维,Debian 都能提供非常可靠的基础环境。本文将以实战案例的形式,分享在 Debian 系统中常见的运维操作场景,并附上完整命令,方便读者直接参考和实践。
本文示例默认使用 Debian 12 Bookworm,大部分命令同样适用于 Debian 11。执行命令时,如果当前不是 root 用户,请在命令前加上 sudo。
一、系统初始化:从一台新 Debian 服务器开始
新安装的 Debian 系统通常需要先完成基础初始化,包括更新软件源、安装常用工具、创建普通用户、配置 SSH 登录等。
1. 更新系统软件包
首先更新软件包索引,并升级已安装的软件:
apt update
apt upgrade -y
如果系统内核或关键组件升级,建议重启服务器:
reboot
重启后查看系统版本:
cat /etc/debian_version
uname -a
也可以使用:
hostnamectl
2. 安装常用工具
一台服务器在日常维护中经常需要用到 curl、wget、vim、net-tools、htop 等工具:
apt install -y curl wget vim net-tools htop unzip zip git lsof tree ca-certificates gnupg
检查工具是否安装成功:
curl --version
wget --version
git --version
3. 创建普通用户并赋予 sudo 权限
不建议长期使用 root 用户直接操作服务器。可以创建一个普通用户,例如 admin:
adduser admin
根据提示设置密码和用户信息。然后将该用户加入 sudo 组:
usermod -aG sudo admin
验证用户所属组:
groups admin
切换到新用户:
su - admin
测试 sudo 权限:
sudo whoami
如果返回:
root
说明配置成功。
二、SSH 安全加固:禁用 root 远程登录
SSH 是服务器远程管理的入口,因此必须尽早进行安全配置。
1. 备份 SSH 配置文件
修改配置前先备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2. 编辑 SSH 配置
打开配置文件:
sudo vim /etc/ssh/sshd_config
建议修改以下配置:
PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
Port 22
如果你希望更安全,可以将 SSH 端口改为非默认端口,例如 2222:
Port 2222
注意:如果修改 SSH 端口,需要确保防火墙已放行新端口,否则可能无法连接服务器。
3. 重启 SSH 服务
Debian 12 中 SSH 服务通常名为 ssh:
sudo systemctl restart ssh
查看服务状态:
sudo systemctl status ssh
如果修改了端口,可以使用以下方式连接:
ssh admin@服务器IP -p 2222
三、防火墙配置:使用 UFW 管理端口
Debian 默认可能没有启用防火墙。对于服务器而言,只开放必要端口是非常重要的安全策略。
1. 安装 UFW
sudo apt install -y ufw
2. 放行 SSH 端口
如果 SSH 使用默认 22 端口:
sudo ufw allow 22/tcp
如果改成了 2222:
sudo ufw allow 2222/tcp
3. 放行 Web 服务端口
常见 Web 服务端口包括 HTTP 80 和 HTTPS 443:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
4. 启用防火墙
sudo ufw enable
查看状态:
sudo ufw status verbose
如果要删除某条规则,可以先查看编号:
sudo ufw status numbered
然后删除指定规则:
sudo ufw delete 规则编号
例如:
sudo ufw delete 3
四、实战案例一:部署 Nginx 静态网站
Nginx 是 Debian 服务器中非常常见的 Web 服务组件,适合部署静态站点、反向代理以及负载均衡。
1. 安装 Nginx
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
查看状态:
sudo systemctl status nginx
浏览器访问服务器 IP,如果看到 Nginx 默认欢迎页,说明部署成功。
2. 创建网站目录
假设域名为 example.com,创建网站目录:
sudo mkdir -p /var/www/example.com/html
设置权限:
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
创建测试页面:
sudo tee /var/www/example.com/html/index.html > /dev/null <<'EOF'
Debian Nginx 实战
网站部署成功
这是运行在 Debian 上的 Nginx 静态站点。
EOF
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/html;
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/
检查 Nginx 配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
如果本地没有配置域名解析,可以临时修改本机 hosts 文件进行测试,也可以直接将 server_name 改为服务器 IP。
五、实战案例二:为网站配置 HTTPS 证书
HTTPS 已经是现代网站的基本要求。这里使用 Certbot 自动申请 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
确保域名已经解析到服务器,并且 80 端口可访问,然后执行:
sudo certbot --nginx -d example.com -d www.example.com
根据提示输入邮箱、同意协议,并选择是否自动重定向 HTTP 到 HTTPS。
3. 查看证书状态
sudo certbot certificates
4. 测试自动续期
Let’s Encrypt 证书有效期为 90 天,Certbot 通常会自动配置续期任务。可以手动测试:
sudo certbot renew --dry-run
如果没有报错,说明自动续期配置正常。
六、实战案例三:部署 MariaDB 数据库
MariaDB 是 MySQL 的开源分支,在 Debian 中非常常用。
1. 安装 MariaDB
sudo apt install -y mariadb-server mariadb-client
启动并设置开机自启:
sudo systemctl enable mariadb
sudo systemctl start mariadb
查看状态:
sudo systemctl status mariadb
2. 安全初始化
执行安全配置脚本:
sudo mysql_secure_installation
常见选择建议如下:
Switch to unix_socket authentication [Y/n]: Y
Change the root password? [Y/n]: n
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
3. 创建数据库和用户
进入数据库:
sudo mariadb
创建数据库:
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
创建用户并授权:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
查看数据库:
SHOW DATABASES;
退出:
EXIT;
测试登录:
mysql -u appuser -p appdb
七、实战案例四:部署 PHP-FPM 与 Nginx 动态网站
如果要运行 WordPress、Laravel、Typecho 等 PHP 应用,需要安装 PHP-FPM。
1. 安装 PHP 及常用扩展
Debian 12 默认 PHP 版本通常为 PHP 8.2:
sudo apt install -y php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl
查看版本:
php -v
查看 PHP-FPM 服务状态:
systemctl status php8.2-fpm
2. 创建 PHP 测试文件
sudo tee /var/www/example.com/html/index.php > /dev/null <<'EOF'
3. 修改 Nginx 配置支持 PHP
编辑站点配置:
sudo vim /etc/nginx/sites-available/example.com
参考配置如下:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.php 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;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
检查配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
访问:
http://example.com/index.php
如果看到 PHP 信息页面,说明 PHP-FPM 已经与 Nginx 集成成功。
上线后请删除
phpinfo()页面,避免泄露服务器信息。
sudo rm -f /var/www/example.com/html/index.php
八、实战案例五:使用 Docker 部署应用
Docker 可以让应用运行在隔离环境中,便于部署和迁移。
1. 安装 Docker
先安装依赖:
sudo apt install -y ca-certificates curl gnupg
添加 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
添加 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
启动并设置开机自启:
sudo systemctl enable docker
sudo systemctl start docker
验证安装:
docker --version
docker compose version
2. 运行一个 Nginx 容器
sudo docker run -d \
--name nginx-demo \
-p 8080:80 \
nginx:latest
查看容器:
sudo docker ps
访问:
http://服务器IP:8080
查看日志:
sudo docker logs nginx-demo
停止并删除容器:
sudo docker stop nginx-demo
sudo docker rm nginx-demo
3. 使用 Docker Compose 部署应用
创建目录:
mkdir -p ~/docker/nginx-demo
cd ~/docker/nginx-demo
创建 compose.yml:
cat > compose.yml <<'EOF'
services:
web:
image: nginx:latest
container_name: nginx-compose-demo
ports:
- "8080:80"
restart: always
EOF
启动服务:
docker compose up -d
查看服务:
docker compose ps
停止服务:
docker compose down
九、实战案例六:配置定时备份任务
在生产环境中,备份是必不可少的。下面以备份网站目录和数据库为例。
1. 创建备份目录
sudo mkdir -p /backup
sudo chmod 700 /backup
2. 编写备份脚本
sudo vim /usr/local/bin/backup-site.sh
写入:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"
WEB_DIR="/var/www/example.com"
DB_NAME="appdb"
DB_USER="appuser"
DB_PASS="StrongPassword123!"
mkdir -p ${BACKUP_DIR}
tar -czf ${BACKUP_DIR}/web_${DATE}.tar.gz ${WEB_DIR}
mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_DIR}/db_${DATE}.sql
tar -czf ${BACKUP_DIR}/db_${DATE}.sql.tar.gz ${BACKUP_DIR}/db_${DATE}.sql
rm -f ${BACKUP_DIR}/db_${DATE}.sql
find ${BACKUP_DIR} -type f -mtime +7 -delete
赋予执行权限:
sudo chmod +x /usr/local/bin/backup-site.sh
手动测试:
sudo /usr/local/bin/backup-site.sh
查看备份文件:
sudo ls -lh /backup
3. 配置定时任务
编辑 root 的 crontab:
sudo crontab -e
添加每天凌晨 2 点执行备份:
0 2 * * * /usr/local/bin/backup-site.sh >> /backup/backup.log 2>&1
查看定时任务:
sudo crontab -l
查看日志:
sudo tail -f /backup/backup.log
十、实战案例七:查看系统资源与排查问题
服务器运行一段时间后,可能会遇到 CPU 占用高、内存不足、磁盘满、端口冲突等问题。下面列出常用排查命令。
1. 查看 CPU 和内存
top
更友好的方式:
htop
查看内存:
free -h
查看系统负载:
uptime
2. 查看磁盘空间
df -h
查看目录占用:
du -sh /*
查看当前目录下文件夹大小:
du -sh ./*
按大小排序:
du -ah /var | sort -rh | head -n 20
3. 查看端口占用
ss -tulnp
或:
sudo lsof -i -P -n
查看 80 端口:
sudo lsof -i:80
4. 查看服务日志
查看 Nginx 日志:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
查看系统日志:
sudo journalctl -xe
查看指定服务日志:
sudo journalctl -u nginx
实时查看:
sudo journalctl -u nginx -f
十一、实战案例八:使用 systemd 管理自定义服务
如果你有一个自己编写的程序,希望它开机自动运行,并且崩溃后自动重启,可以使用 systemd 管理。
1. 准备测试脚本
创建脚本:
sudo vim /opt/demo-app.sh
写入:
#!/bin/bash
while true
do
echo "$(date) demo app is running" >> /var/log/demo-app.log
sleep 5
done
赋予权限:
sudo chmod +x /opt/demo-app.sh
2. 创建 systemd 服务文件
sudo vim /etc/systemd/system/demo-app.service
写入:
[Unit]
Description=Demo App Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/demo-app.sh
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
3. 启动服务
重新加载 systemd:
sudo systemctl daemon-reload
启动服务:
sudo systemctl start demo-app
设置开机自启:
sudo systemctl enable demo-app
查看状态:
sudo systemctl status demo-app
查看日志:
sudo tail -f /var/log/demo-app.log
停止服务:
sudo systemctl stop demo-app
十二、常用维护命令速查
1. 软件包管理
搜索软件包:
apt search nginx
查看软件包信息:
apt show nginx
安装软件:
sudo apt install -y 软件包名
卸载软件:
sudo apt remove -y 软件包名
彻底卸载并删除配置:
sudo apt purge -y 软件包名
清理无用依赖:
sudo apt autoremove -y
清理缓存:
sudo apt clean
2. 服务管理
启动服务:
sudo systemctl start 服务名
停止服务:
sudo systemctl stop 服务名
重启服务:
sudo systemctl restart 服务名
重新加载配置:
sudo systemctl reload 服务名
设置开机自启:
sudo systemctl enable 服务名
取消开机自启:
sudo systemctl disable 服务名
查看服务状态:
sudo systemctl status 服务名
3. 用户管理
创建用户:
sudo adduser 用户名
删除用户:
sudo deluser 用户名
修改密码:
sudo passwd 用户名
添加到 sudo 组:
sudo usermod -aG sudo 用户名
查看用户:
cat /etc/passwd
查看登录记录:
last
十三、实践建议:让 Debian 服务器更稳定
在实际生产环境中,除了会敲命令,更重要的是养成良好的运维习惯。
第一,所有关键配置修改前都应该备份。例如修改 Nginx、SSH、数据库配置之前,先复制一份 .bak 文件,出现问题时可以快速恢复。
第二,尽量使用普通用户登录服务器,通过 sudo 执行管理命令。这样既能降低误操作风险,也方便审计操作记录。
第三,防火墙只开放必要端口。常见开放端口包括 SSH、HTTP、HTTPS,数据库端口一般不建议直接暴露到公网。
第四,定期更新系统。Debian 以稳定著称,但安全更新仍然非常重要:
sudo apt update
sudo apt upgrade -y
第五,重要服务应开启开机自启,并通过 systemctl status 和 journalctl 定期检查运行状态。
第六,备份一定要做恢复测试。没有经过恢复验证的备份,不能算真正可靠的备份。可以定期将备份文件复制到测试环境中进行恢复演练。
第七,建议将关键命令整理成文档或脚本,减少重复劳动,提高运维效率。
结语
Debian 的优势不仅在于稳定,更在于它拥有清晰的软件包管理体系、成熟的服务管理机制以及庞大的社区生态。本文围绕真实服务器运维场景,介绍了系统初始化、SSH 安全加固、防火墙配置、Nginx 部署、HTTPS 证书申请、MariaDB 数据库配置、PHP-FPM 集成、Docker 部署、定时备份、故障排查和 systemd 服务管理等内容。
如果你正在学习 Linux 运维,Debian 是非常值得深入掌握的发行版。建议不要只停留在阅读命令层面,而是准备一台云服务器或本地虚拟机,将本文中的案例逐个实践一遍。只有真正执行过、排查过、修复过,才能把这些命令转化为自己的实战能力。