Debian 12 服务器从零上线:初始化、安全加固到 Docker/Nginx 全流程命令指南
Debian 部署完整教程|附完整命令
Debian 是一款稳定、安全、开源的 Linux 发行版,广泛用于服务器、云主机、个人开发环境、企业生产环境等场景。相比一些滚动更新发行版,Debian 更强调稳定性,软件包经过充分测试,非常适合部署 Web 服务、数据库、Docker、反向代理、自动化运维环境等。
本文将以 Debian 12 为例,完整演示一台新服务器从初始化到部署常用服务的全过程,包含系统更新、用户创建、SSH 安全配置、防火墙、常用软件安装、Nginx、Docker、数据库、SSL 证书、系统监控与备份等内容,并附带完整命令。
适用场景:VPS、云服务器、物理服务器、本地虚拟机
适用系统:Debian 11 / Debian 12
示例用户:deploy
示例域名:example.com
请根据实际情况替换 IP、用户名、域名和路径。
一、连接 Debian 服务器
如果你购买的是云服务器,一般会获得公网 IP、用户名和密码,或者 SSH 密钥。
使用 SSH 连接服务器:
ssh root@你的服务器IP
例如:
ssh root@192.168.1.100
如果使用的是密钥:
ssh -i ~/.ssh/id_rsa root@你的服务器IP
首次连接时,系统可能提示:
Are you sure you want to continue connecting?
输入:
yes
然后回车即可。
二、检查系统版本
登录服务器后,先查看 Debian 版本:
cat /etc/os-release
也可以使用:
lsb_release -a
如果提示 lsb_release 命令不存在,可以安装:
apt update
apt install -y lsb-release
查看内核版本:
uname -a
查看系统架构:
dpkg --print-architecture
常见输出包括:
amd64
arm64
三、更新系统软件包
新服务器部署后,第一步一定要更新软件源和系统包。
apt update
apt upgrade -y
如果希望同时处理依赖变化,可以执行:
apt full-upgrade -y
清理无用包:
apt autoremove -y
apt autoclean
四、安装常用基础工具
部署服务器时,经常需要使用 curl、wget、vim、git、htop 等工具。
apt install -y \
curl \
wget \
vim \
git \
unzip \
zip \
tar \
sudo \
ufw \
htop \
net-tools \
ca-certificates \
gnupg \
lsb-release \
software-properties-common
说明:
| 工具 | 作用 |
|---|---|
| curl / wget | 下载文件、请求接口 |
| vim | 编辑配置文件 |
| git | 拉取代码 |
| unzip / zip | 解压缩文件 |
| sudo | 普通用户提权 |
| ufw | 防火墙管理 |
| htop | 查看系统资源 |
| net-tools | 提供 ifconfig 等命令 |
| ca-certificates | HTTPS 证书支持 |
五、创建普通用户并配置 sudo
生产服务器不建议长期使用 root 用户登录。可以创建一个普通用户,例如 deploy。
adduser deploy
根据提示设置密码。
将用户加入 sudo 组:
usermod -aG sudo deploy
切换到新用户:
su - deploy
测试 sudo 权限:
sudo whoami
如果输出:
root
说明配置成功。
六、配置 SSH 登录安全
1. 创建 SSH 密钥
在本地电脑执行:
ssh-keygen -t ed25519 -C "your_email@example.com"
一路回车即可。生成的公钥一般位于:
~/.ssh/id_ed25519.pub
2. 上传公钥到服务器
在本地执行:
ssh-copy-id deploy@你的服务器IP
如果没有 ssh-copy-id,可以手动复制公钥内容:
cat ~/.ssh/id_ed25519.pub
然后登录服务器:
mkdir -p ~/.ssh
vim ~/.ssh/authorized_keys
将公钥粘贴进去,保存后设置权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3. 修改 SSH 配置
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
建议修改以下配置:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 22
如果你想修改 SSH 端口,例如改为 2222:
Port 2222
注意:修改 SSH 端口前,务必先放行新端口,否则可能无法连接服务器。
重启 SSH 服务:
sudo systemctl restart ssh
Debian 上也可能是:
sudo systemctl restart sshd
测试新连接:
ssh deploy@你的服务器IP
如果修改了端口:
ssh -p 2222 deploy@你的服务器IP
确认可以正常登录后,再关闭旧窗口。
七、配置 UFW 防火墙
Debian 可以使用 UFW 简化防火墙管理。
安装 UFW:
sudo apt install -y ufw
放行 SSH:
sudo ufw allow OpenSSH
如果你修改了 SSH 端口,比如 2222:
sudo ufw allow 2222/tcp
放行 HTTP 和 HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
启用防火墙:
sudo ufw enable
查看状态:
sudo ufw status verbose
如果需要删除规则,例如删除 2222 端口:
sudo ufw delete allow 2222/tcp
八、设置系统时区
查看当前时间:
date
查看可用时区:
timedatectl list-timezones
设置为中国上海时区:
sudo timedatectl set-timezone Asia/Shanghai
再次查看:
timedatectl
安装时间同步服务:
sudo apt install -y systemd-timesyncd
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
九、配置主机名
查看当前主机名:
hostname
修改主机名:
sudo hostnamectl set-hostname debian-server
编辑 hosts 文件:
sudo vim /etc/hosts
加入或修改:
127.0.0.1 localhost
127.0.1.1 debian-server
验证:
hostnamectl
十、安装并配置 Nginx
Nginx 是常用的 Web 服务器和反向代理服务。
安装 Nginx:
sudo apt install -y nginx
启动 Nginx:
sudo systemctl start nginx
设置开机自启:
sudo systemctl enable nginx
查看状态:
sudo systemctl status nginx
在浏览器访问:
http://你的服务器IP
如果看到 Debian Nginx 默认页面,说明安装成功。
创建网站目录
sudo mkdir -p /var/www/example.com/html
设置权限:
sudo chown -R deploy:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
创建测试页面:
cat > /var/www/example.com/html/index.html <
Debian Nginx 部署成功
Debian Nginx 部署成功!
EOF
创建 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/
检查配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
十一、安装 HTTPS 证书
使用 Certbot 免费申请 Let’s Encrypt SSL 证书。
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d example.com -d www.example.com
按照提示输入邮箱、同意协议,并选择是否强制跳转 HTTPS。
查看证书:
sudo certbot certificates
测试自动续期:
sudo certbot renew --dry-run
Certbot 默认会自动配置定时任务。也可以查看:
systemctl list-timers | grep certbot
十二、安装 Docker
Docker 是现代部署中非常常用的容器化工具。
1. 卸载旧版本
sudo apt remove -y docker docker-engine docker.io containerd runc
2. 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg
3. 添加 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
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
5. 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
查看版本:
docker --version
docker compose version
7. 将当前用户加入 docker 组
sudo usermod -aG docker $USER
重新登录后测试:
docker run hello-world
十三、使用 Docker Compose 部署示例服务
创建项目目录:
mkdir -p ~/apps/nginx-demo
cd ~/apps/nginx-demo
创建 docker-compose.yml:
vim docker-compose.yml
写入:
services:
web:
image: nginx:latest
container_name: nginx-demo
restart: always
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
创建页面:
mkdir -p html
cat > html/index.html <Hello Docker on Debian!
EOF
启动服务:
docker compose up -d
查看容器:
docker ps
访问:
http://你的服务器IP:8080
停止服务:
docker compose down
十四、安装 MariaDB 数据库
MariaDB 是 MySQL 的开源分支,Debian 官方仓库中默认提供。
安装:
sudo apt install -y mariadb-server mariadb-client
启动并设置开机自启:
sudo systemctl enable mariadb
sudo systemctl start mariadb
查看状态:
sudo systemctl status mariadb
执行安全初始化:
sudo mysql_secure_installation
通常可以按以下建议选择:
Switch to unix_socket authentication? Y
Change the root password? Y
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database and access to it? Y
Reload privilege tables now? Y
登录数据库:
sudo mysql
创建数据库和用户:
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
测试登录:
mysql -u appuser -p appdb
十五、安装 PostgreSQL 数据库
如果项目使用 PostgreSQL,可以执行:
sudo apt install -y postgresql postgresql-contrib
启动服务:
sudo systemctl enable postgresql
sudo systemctl start postgresql
切换到 postgres 用户:
sudo -i -u postgres
进入 PostgreSQL:
psql
创建用户和数据库:
CREATE USER appuser WITH PASSWORD '强密码';
CREATE DATABASE appdb OWNER appuser;
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
\q
退出 postgres 用户:
exit
测试连接:
psql -U appuser -d appdb -h 127.0.0.1
十六、安装 Node.js 环境
如果部署前端、Node.js 后端或构建工具,可以安装 Node.js。
使用 NodeSource 安装 Node.js 20:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt install -y nodejs
查看版本:
node -v
npm -v
安装 pnpm:
sudo npm install -g pnpm
查看版本:
pnpm -v
安装 PM2:
sudo npm install -g pm2
启动 Node.js 项目示例:
cd ~/apps/my-node-app
npm install
pm2 start app.js --name my-node-app
pm2 save
pm2 startup
根据提示执行生成的命令,让 PM2 开机自启。
查看进程:
pm2 list
pm2 logs
十七、配置 Nginx 反向代理
假设 Node.js 应用运行在本地 3000 端口,需要使用 Nginx 转发域名访问。
编辑站点配置:
sudo vim /etc/nginx/sites-available/example.com
示例配置:
server {
listen 80;
server_name example.com www.example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
检查配置:
sudo nginx -t
重载:
sudo systemctl reload nginx
申请 HTTPS:
sudo certbot --nginx -d example.com -d www.example.com
十八、配置 Swap 交换空间
如果服务器内存较小,例如 1GB 或 2GB,建议配置 Swap,避免编译或运行服务时因内存不足崩溃。
查看是否已有 Swap:
free -h
swapon --show
创建 2GB Swap 文件:
sudo fallocate -l 2G /swapfile
如果 fallocate 不可用:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
设置权限:
sudo chmod 600 /swapfile
格式化为 Swap:
sudo mkswap /swapfile
启用:
sudo swapon /swapfile
写入开机自动挂载:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
查看:
free -h
调整 swappiness:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
立即生效:
sudo sysctl -p
十九、系统日志与资源监控
查看磁盘空间:
df -h
查看目录占用:
du -sh /var/log
du -sh /var/www/*
查看内存:
free -h
查看 CPU 和进程:
htop
查看服务状态:
systemctl status nginx
systemctl status docker
systemctl status mariadb
查看系统日志:
journalctl -xe
查看某个服务日志:
journalctl -u nginx
实时查看:
journalctl -u nginx -f
查看 Nginx 日志:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
二十、配置自动安全更新
Debian 服务器建议开启安全更新,减少漏洞风险。
安装:
sudo apt install -y unattended-upgrades apt-listchanges
启用:
sudo dpkg-reconfigure unattended-upgrades
也可以手动编辑配置:
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
确认包含类似内容:
Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=${distro_codename},label=Debian-Security";
};
配置自动更新周期:
sudo vim /etc/apt/apt.conf.d/20auto-upgrades
写入:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
二十一、配置 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 = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
如果 SSH 端口改成 2222:
port = 2222
启动:
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
查看状态:
sudo fail2ban-client status
sudo fail2ban-client status sshd
解封 IP:
sudo fail2ban-client set sshd unbanip 1.2.3.4
二十二、备份网站和数据库
1. 备份网站目录
mkdir -p ~/backup
tar -czvf ~/backup/www-example-$(date +%F).tar.gz /var/www/example.com
2. 备份 MariaDB
mysqldump -u appuser -p appdb > ~/backup/appdb-$(date +%F).sql
压缩:
gzip ~/backup/appdb-$(date +%F).sql
3. 备份 PostgreSQL
pg_dump -U appuser -h 127.0.0.1 appdb > ~/backup/appdb-$(date +%F).sql
4. 使用 rsync 同步到远程服务器
rsync -avz ~/backup/ user@远程服务器IP:/home/user/backup/
5. 创建自动备份脚本
vim ~/backup.sh
写入:
#!/bin/bash
BACKUP_DIR="$HOME/backup"
DATE=$(date +%F)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/www-example-$DATE.tar.gz" /var/www/example.com
mysqldump -u appuser -p'数据库密码' appdb | gzip > "$BACKUP_DIR/appdb-$DATE.sql.gz"
find "$BACKUP_DIR" -type f -mtime +7 -delete
授权:
chmod +x ~/backup.sh
测试:
~/backup.sh
添加定时任务:
crontab -e
每天凌晨 2 点备份:
0 2 * * * /home/deploy/backup.sh >> /home/deploy/backup.log 2>&1
二十三、常用服务管理命令
启动服务:
sudo systemctl start nginx
停止服务:
sudo systemctl stop nginx
重启服务:
sudo systemctl restart nginx
重载配置:
sudo systemctl reload nginx
设置开机自启:
sudo systemctl enable nginx
取消开机自启:
sudo systemctl disable nginx
查看状态:
sudo systemctl status nginx
查看所有运行中的服务:
systemctl list-units --type=service --state=running
二十四、常见问题排查
1. SSH 无法连接
检查 SSH 服务:
sudo systemctl status ssh
检查端口监听:
sudo ss -tulnp | grep ssh
检查防火墙:
sudo ufw status
查看日志:
sudo journalctl -u ssh -f
2. Nginx 启动失败
检查配置:
sudo nginx -t
查看错误日志:
sudo tail -f /var/log/nginx/error.log
检查端口占用:
sudo ss -tulnp | grep ':80'
sudo ss -tulnp | grep ':443'
3. Docker 无法启动
查看状态:
sudo systemctl status docker
查看日志:
sudo journalctl -u docker -f
重启 Docker:
sudo systemctl restart docker
4. 域名无法访问
检查域名解析:
ping example.com
或:
dig example.com
如果没有 dig:
sudo apt install -y dnsutils
检查 Nginx 配置:
sudo nginx -t
检查防火墙:
sudo ufw status
二十五、推荐的服务器安全清单
部署完成后,建议按照以下清单检查:
- [x] 系统已更新到最新版本
- [x] 已创建普通用户并配置 sudo
- [x] 禁止 root SSH 登录
- [x] 禁止 SSH 密码登录,改用密钥登录
- [x] 已开启 UFW 防火墙
- [x] 只开放必要端口,例如 22、80、443
- [x] 已安装 Fail2ban
- [x] 已配置自动安全更新
- [x] 已配置 HTTPS 证书
- [x] 已配置定期备份
- [x] 已测试服务重启和恢复流程
二十六、一键初始化命令示例
下面是一段适合新 Debian 服务器的基础初始化脚本。使用前请先阅读内容,并按需修改用户名、SSH 端口等配置。
#!/bin/bash
set -e
NEW_USER="deploy"
SSH_PORT="22"
apt update
apt upgrade -y
apt install -y \
sudo curl wget vim git unzip zip tar ufw htop net-tools \
ca-certificates gnupg lsb-release software-properties-common \
fail2ban unattended-upgrades apt-listchanges
if ! id "$NEW_USER" >/dev/null 2>&1; then
adduser "$NEW_USER"
usermod -aG sudo "$NEW_USER"
fi
timedatectl set-timezone Asia/Shanghai
ufw allow ${SSH_PORT}/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
systemctl enable fail2ban
systemctl restart fail2ban
dpkg-reconfigure -f noninteractive unattended-upgrades
apt autoremove -y
apt autoclean
echo "Debian 初始化完成!"
echo "请手动配置 SSH 密钥,并确认可登录后再禁用 root 和密码登录。"
保存为:
vim init-debian.sh
授权并执行:
chmod +x init-debian.sh
sudo ./init-debian.sh
总结
通过以上步骤,一台 Debian 服务器已经完成了从基础初始化到常用服务部署的完整流程。实际生产环境中,推荐优先完成系统更新、SSH 安全加固、防火墙配置、HTTPS 证书、自动备份和安全更新。随后再根据业务需求部署 Nginx、Docker、数据库、Node.js、PHP、Java 或其他应用环境。
Debian 的优势在于稳定、可靠、生态成熟,非常适合作为长期运行的服务器系统。只要按照规范进行初始化、安全加固、日志监控和备份管理,就可以构建一个稳定、安全、易维护的生产环境。