Debian 12 服务器从安装到上线:Nginx、HTTPS、数据库与脚本实战指南
Debian 部署完整教程|附源码
本文面向希望在服务器、虚拟机或本地环境中部署 Debian 系统及常见 Web 服务的用户,内容覆盖 Debian 安装、初始化配置、SSH 安全加固、软件源配置、Nginx 部署、PHP/Python/Node.js 环境安装、数据库部署、防火墙配置、HTTPS 证书申请、服务守护、项目上线以及常用自动化脚本源码。
适合新手按步骤操作,也适合有经验的运维人员作为部署清单参考。
一、Debian 简介
Debian 是一个非常稳定、开放、社区驱动的 Linux 发行版。它以稳定性、安全性和软件包管理体系完善著称,被广泛应用于服务器、云主机、容器环境以及嵌入式系统中。
相比 Ubuntu,Debian 更偏向稳定和保守;相比 CentOS/Rocky Linux,Debian 的软件包管理更加简洁,社区文档也非常丰富。因此,如果你的目标是部署一台长期稳定运行的服务器,Debian 是非常值得选择的系统。
本文以 Debian 12 Bookworm 为主要示例,其他版本如 Debian 11 也可以参考,大部分命令基本一致。
二、部署前准备
在正式安装和部署 Debian 之前,需要准备以下内容。
1. 一台服务器或虚拟机
你可以选择以下任意一种环境:
- 云服务器:阿里云、腾讯云、华为云、AWS、Vultr、DigitalOcean 等
- 本地虚拟机:VMware、VirtualBox、PVE、Hyper-V
- 物理服务器:公司机房或家用服务器
- 容器环境:Docker、LXC 等
建议最低配置:
| 项目 | 推荐配置 |
|---|---|
| CPU | 1 核及以上 |
| 内存 | 1GB 起步,推荐 2GB+ |
| 磁盘 | 20GB 起步 |
| 系统 | Debian 12 64 位 |
| 网络 | 可访问公网 |
如果是生产环境,建议至少使用:
- 2 核 CPU
- 4GB 内存
- 40GB 以上磁盘
- 独立公网 IP
- 正确解析的域名
2. 准备 Debian 镜像
Debian 官方下载地址:
https://www.debian.org/download
如果是云服务器,一般在创建实例时可以直接选择 Debian 系统镜像,无需手动下载安装 ISO。
如果是本地虚拟机,可以下载 Debian ISO 镜像:
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
推荐选择:
debian-12.x.x-amd64-netinst.iso
netinst 是网络安装镜像,体积较小,安装过程中会从网络下载所需软件包。
三、安装 Debian 系统
如果你使用的是云服务器,通常服务商已经帮你完成了系统安装,可以直接跳到“系统初始化配置”部分。
如果你使用虚拟机或物理服务器,可以按照以下步骤安装 Debian。
1. 启动安装程序
将 Debian ISO 挂载到虚拟机或服务器光驱中,启动后选择:
Graphical install
也可以选择:
Install
图形安装和文本安装最终效果相同。
2. 选择语言和地区
建议生产服务器使用英文界面:
Language: English
Location: United States 或 China
Keyboard: American English
使用英文系统的好处是日志、错误提示和文档搜索更方便。
3. 配置主机名
例如:
debian-server
如果有域名,也可以设置域名,例如:
example.com
主机名后续可以修改,不必过于纠结。
4. 设置 root 密码和普通用户
Debian 安装过程中会要求设置 root 密码,并创建普通用户。
建议:
- root 密码设置复杂一些
- 创建一个普通用户用于日常登录
- 后续通过
sudo提权管理系统
例如创建用户:
deploy
5. 分区建议
如果是新手,可以选择:
Guided - use entire disk
推荐分区结构:
/
swap
对于普通 Web 服务器来说,默认分区已经足够。
如果是生产环境,可以单独划分:
/ 系统目录
/home 用户目录
/var 日志和服务数据目录
数据库服务器建议给 /var/lib/mysql 或 /var/lib/postgresql 独立磁盘或分区。
6. 软件选择
安装过程中会出现软件选择界面,建议选择:
SSH server
standard system utilities
不建议在服务器上安装桌面环境,除非确实需要图形界面。
四、首次登录 Debian
安装完成后,通过 SSH 登录服务器。
假设服务器 IP 为:
192.168.1.100
登录命令:
ssh root@192.168.1.100
如果使用普通用户:
ssh deploy@192.168.1.100
云服务器一般会提供 root 密码或密钥登录方式。
五、系统初始化配置
1. 更新系统软件包
登录后第一件事是更新软件源和系统包。
apt update
apt upgrade -y
如果需要完整升级:
apt full-upgrade -y
清理无用依赖:
apt autoremove -y
apt clean
2. 安装常用工具
apt install -y vim curl wget git sudo unzip zip tar htop net-tools lsof tree ca-certificates gnupg software-properties-common
这些工具用途如下:
| 工具 | 用途 |
|---|---|
| vim | 编辑文本文件 |
| curl/wget | 下载文件或请求接口 |
| git | 拉取源码 |
| sudo | 普通用户提权 |
| unzip/zip | 解压和压缩文件 |
| htop | 查看系统资源 |
| net-tools | 提供 ifconfig 等命令 |
| lsof | 查看端口占用 |
| tree | 树形查看目录 |
| ca-certificates | HTTPS 证书支持 |
| gnupg | GPG 密钥管理 |
3. 配置 sudo 权限
如果普通用户没有 sudo 权限,可以执行:
usermod -aG sudo deploy
然后重新登录。
测试:
sudo whoami
如果输出:
root
说明配置成功。
六、配置 Debian 软件源
Debian 默认软件源可能较慢,如果服务器在中国大陆,可以更换为国内镜像源。
备份原配置:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑文件:
vim /etc/apt/sources.list
以 Debian 12 为例,可以使用清华源:
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
保存后更新:
apt update
如果你在海外服务器上,建议使用官方源或服务商推荐源,通常速度更稳定。
七、SSH 安全加固
服务器部署后,SSH 是最重要的入口,必须做好安全配置。
1. 修改 SSH 端口
编辑 SSH 配置文件:
vim /etc/ssh/sshd_config
找到或添加:
Port 2222
这里将默认 22 端口改为 2222,你也可以使用其他端口。
重启 SSH:
systemctl restart ssh
注意:在断开当前连接之前,请另开一个终端测试新端口是否可用:
ssh -p 2222 deploy@服务器IP
2. 禁止 root 远程登录
编辑:
vim /etc/ssh/sshd_config
设置:
PermitRootLogin no
重启:
systemctl restart ssh
以后使用普通用户登录,再通过 sudo 管理系统。
3. 使用密钥登录
在本地电脑生成密钥:
ssh-keygen -t ed25519 -C "deploy@example"
将公钥复制到服务器:
ssh-copy-id -p 2222 deploy@服务器IP
测试密钥登录成功后,可以关闭密码登录。
编辑:
vim /etc/ssh/sshd_config
设置:
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH:
systemctl restart ssh
八、防火墙配置
Debian 常用防火墙工具有 ufw 和 nftables。对新手来说,ufw 更简单。
1. 安装 ufw
apt install -y ufw
2. 放行 SSH 端口
如果你修改了 SSH 端口为 2222:
ufw allow 2222/tcp
放行 HTTP 和 HTTPS:
ufw allow 80/tcp
ufw allow 443/tcp
启用防火墙:
ufw enable
查看状态:
ufw status verbose
输出示例:
Status: active
To Action From
-- ------ ----
2222/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
九、部署 Nginx Web 服务
Nginx 是非常常用的高性能 Web 服务器,可以用于静态网站、反向代理、负载均衡等。
1. 安装 Nginx
apt install -y nginx
启动并设置开机自启:
systemctl start nginx
systemctl enable nginx
查看状态:
systemctl status nginx
浏览器访问:
http://服务器IP
如果看到 Debian/Nginx 默认页面,说明 Nginx 安装成功。
2. Nginx 常用目录
| 路径 | 说明 |
|---|---|
/etc/nginx/nginx.conf |
主配置文件 |
/etc/nginx/sites-available/ |
可用站点配置 |
/etc/nginx/sites-enabled/ |
已启用站点配置 |
/var/www/html/ |
默认网站目录 |
/var/log/nginx/access.log |
访问日志 |
/var/log/nginx/error.log |
错误日志 |
3. 创建网站目录
假设域名是:
example.com
创建目录:
mkdir -p /var/www/example.com
chown -R www-data:www-data /var/www/example.com
创建测试页面:
vim /var/www/example.com/index.html
写入:
Debian 部署成功
Debian + Nginx 部署成功
这是一个运行在 Debian 服务器上的网站。
4. 创建 Nginx 站点配置
创建配置文件:
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;
}
}
启用站点:
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
检查配置:
nginx -t
重载 Nginx:
systemctl reload nginx
十、部署 HTTPS 证书
生产环境建议开启 HTTPS。这里使用 Let’s Encrypt 免费证书。
1. 安装 Certbot
apt install -y certbot python3-certbot-nginx
2. 申请证书
确保域名已经解析到服务器 IP,然后执行:
certbot --nginx -d example.com -d www.example.com
按照提示输入邮箱、同意协议、选择是否重定向 HTTP 到 HTTPS。
申请成功后,Certbot 会自动修改 Nginx 配置。
3. 测试自动续期
Let’s Encrypt 证书有效期为 90 天,Certbot 会自动续期。可以手动测试:
certbot renew --dry-run
查看定时任务:
systemctl list-timers | grep certbot
十一、部署 PHP 环境
如果你要部署 WordPress、Laravel、ThinkPHP 等 PHP 项目,需要安装 PHP-FPM。
1. 安装 PHP
apt install -y php php-fpm php-cli php-mysql php-curl php-gd php-mbstring php-xml php-zip php-bcmath
查看 PHP 版本:
php -v
查看 PHP-FPM 状态:
systemctl status php*-fpm
2. 配置 Nginx 支持 PHP
创建项目目录:
mkdir -p /var/www/php-demo
chown -R www-data:www-data /var/www/php-demo
创建测试文件:
vim /var/www/php-demo/index.php
写入:
创建 Nginx 配置:
vim /etc/nginx/sites-available/php-demo
写入示例:
server {
listen 80;
server_name php.example.com;
root /var/www/php-demo;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
注意:php8.2-fpm.sock 需要根据实际版本调整。可以查看:
ls /run/php/
启用配置:
ln -s /etc/nginx/sites-available/php-demo /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
十二、部署 MariaDB 数据库
Debian 默认软件源中通常提供 MariaDB,它与 MySQL 高度兼容。
1. 安装 MariaDB
apt install -y mariadb-server mariadb-client
启动并设置开机自启:
systemctl enable mariadb
systemctl start mariadb
查看状态:
systemctl status mariadb
2. 初始化安全配置
执行:
mysql_secure_installation
建议选择:
Switch to unix_socket authentication: Y
Change the root password: Y 或 N
Remove anonymous users: Y
Disallow root login remotely: Y
Remove test database: Y
Reload privilege tables now: Y
3. 创建数据库和用户
登录数据库:
mysql -u root -p
执行 SQL:
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
测试登录:
mysql -u app_user -p app_db
十三、部署 PostgreSQL 数据库
如果你的项目使用 PostgreSQL,可以执行:
apt install -y postgresql postgresql-contrib
查看状态:
systemctl status postgresql
切换到 postgres 用户:
sudo -u postgres psql
创建数据库和用户:
CREATE DATABASE app_db;
CREATE USER app_user WITH ENCRYPTED PASSWORD 'StrongPassword123!';
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
\q
如果需要远程访问 PostgreSQL,需要修改:
vim /etc/postgresql/*/main/postgresql.conf
设置:
listen_addresses = '*'
再修改:
vim /etc/postgresql/*/main/pg_hba.conf
添加:
host all all 0.0.0.0/0 md5
重启:
systemctl restart postgresql
同时防火墙放行:
ufw allow 5432/tcp
生产环境不建议直接对公网开放数据库端口,建议通过内网、VPN 或 SSH 隧道访问。
十四、部署 Node.js 环境
如果你要部署 Vue、React、Next.js、Nuxt、NestJS、Express 等项目,需要 Node.js。
1. 使用 NodeSource 安装 Node.js
以 Node.js 20 为例:
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
查看版本:
node -v
npm -v
安装 pnpm:
npm install -g pnpm
安装 PM2:
npm install -g pm2
2. 使用 PM2 启动 Node 项目
假设项目目录为:
/var/www/node-app
进入目录:
cd /var/www/node-app
安装依赖:
npm install
启动项目:
pm2 start app.js --name node-app
如果是 Next.js:
npm run build
pm2 start npm --name next-app -- start
保存 PM2 进程:
pm2 save
设置开机自启:
pm2 startup
根据输出提示执行对应命令。
3. Nginx 反向代理 Node.js
假设 Node 服务运行在:
127.0.0.1:3000
创建 Nginx 配置:
vim /etc/nginx/sites-available/node-app
写入:
server {
listen 80;
server_name node.example.com;
access_log /var/log/nginx/node-app.access.log;
error_log /var/log/nginx/node-app.error.log;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Real-IP $remote_addr;
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";
}
}
启用:
ln -s /etc/nginx/sites-available/node-app /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
十五、部署 Python 环境
如果你要部署 Django、Flask、FastAPI 等项目,可以使用 Python 虚拟环境配合 Gunicorn/Uvicorn。
1. 安装 Python 工具
apt install -y python3 python3-pip python3-venv
查看版本:
python3 --version
pip3 --version
2. 创建虚拟环境
假设项目目录为:
/var/www/python-app
执行:
cd /var/www/python-app
python3 -m venv venv
source venv/bin/activate
安装依赖:
pip install -r requirements.txt
如果是 FastAPI:
pip install fastapi uvicorn gunicorn
3. 使用 systemd 管理 Python 服务
创建服务文件:
vim /etc/systemd/system/python-app.service
示例内容:
[Unit]
Description=Python FastAPI Application
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/python-app
Environment="PATH=/var/www/python-app/venv/bin"
ExecStart=/var/www/python-app/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
重新加载 systemd:
systemctl daemon-reload
启动服务:
systemctl start python-app
systemctl enable python-app
查看状态:
systemctl status python-app
查看日志:
journalctl -u python-app -f
4. Nginx 反向代理 Python 服务
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
}
十六、Docker 部署方式
如果你希望更方便地部署应用,可以在 Debian 上安装 Docker。
1. 安装 Docker
apt update
apt install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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" \
> /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
查看版本:
docker version
docker compose version
设置开机自启:
systemctl enable docker
systemctl start docker
2. Docker Compose 示例源码
创建目录:
mkdir -p /opt/demo
cd /opt/demo
创建 docker-compose.yml:
version: "3.8"
services:
nginx:
image: nginx:stable
container_name: demo-nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: always
创建网页:
mkdir html
cat > html/index.html <
Docker Debian Demo
Docker Compose 部署成功
当前服务运行在 Debian + Docker 环境中。
EOF
启动:
docker compose up -d
访问:
http://服务器IP:8080
十七、项目部署完整示例
下面以一个静态网站项目为例,从源码拉取到上线完整演示。
1. 创建部署目录
mkdir -p /var/www/my-site
chown -R deploy:www-data /var/www/my-site
2. 拉取源码
cd /var/www/my-site
git clone https://github.com/example/my-site.git .
如果是私有仓库,需要先配置 SSH Key。
3. 构建项目
如果是普通静态网站,无需构建。
如果是 Vue/React 项目:
npm install
npm run build
构建产物通常在:
dist
build
4. 配置 Nginx
Vue 项目示例:
server {
listen 80;
server_name site.example.com;
root /var/www/my-site/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
access_log /var/log/nginx/site.example.com.access.log;
error_log /var/log/nginx/site.example.com.error.log;
}
React 项目类似,只需将 root 指向 build 目录即可。
十八、自动化部署脚本源码
下面提供一个适用于 Debian 12 的初始化部署脚本。该脚本会自动完成系统更新、安装常用工具、安装 Nginx、配置 UFW、防火墙放行常用端口等操作。
使用前建议先阅读脚本内容,确认符合你的服务器需求。
创建脚本:
vim debian-init.sh
写入以下源码:
#!/bin/bash
set -e
echo "======================================"
echo " Debian Server Init Script"
echo "======================================"
if [ "$(id -u)" -ne 0 ]; then
echo "请使用 root 用户或 sudo 执行该脚本"
exit 1
fi
echo "[1/8] 更新系统软件包..."
apt update
apt upgrade -y
echo "[2/8] 安装常用工具..."
apt install -y \
vim \
curl \
wget \
git \
sudo \
unzip \
zip \
tar \
htop \
net-tools \
lsof \
tree \
ca-certificates \
gnupg \
software-properties-common
echo "[3/8] 安装 Nginx..."
apt install -y nginx
systemctl enable nginx
systemctl start nginx
echo "[4/8] 安装 UFW 防火墙..."
apt install -y ufw
echo "[5/8] 配置防火墙规则..."
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
echo "[6/8] 启用防火墙..."
ufw --force enable
echo "[7/8] 设置系统时区为 Asia/Shanghai..."
timedatectl set-timezone Asia/Shanghai
echo "[8/8] 清理系统..."
apt autoremove -y
apt clean
echo "======================================"
echo " 初始化完成"
echo " Nginx 状态:"
systemctl status nginx --no-pager
echo "======================================"
赋予执行权限:
chmod +x debian-init.sh
执行脚本:
./debian-init.sh
如果你已修改 SSH 端口,请务必把脚本中的:
ufw allow 22/tcp
改为你的实际端口,例如:
ufw allow 2222/tcp
否则启用防火墙后可能导致 SSH 无法连接。
十九、自动化创建 Nginx 站点脚本源码
下面提供一个自动创建 Nginx 站点的脚本,输入域名后自动生成网站目录、测试首页和 Nginx 配置。
创建脚本:
vim create-nginx-site.sh
源码如下:
#!/bin/bash
set -e
if [ "$(id -u)" -ne 0 ]; then
echo "请使用 root 用户或 sudo 执行该脚本"
exit 1
fi
read -rp "请输入域名,例如 example.com: " DOMAIN
if [ -z "$DOMAIN" ]; then
echo "域名不能为空"
exit 1
fi
WEB_ROOT="/var/www/$DOMAIN"
NGINX_CONF="/etc/nginx/sites-available/$DOMAIN"
echo "创建网站目录:$WEB_ROOT"
mkdir -p "$WEB_ROOT"
cat > "$WEB_ROOT/index.html" <
$DOMAIN 部署成功
$DOMAIN 部署成功
当前网站运行在 Debian + Nginx 环境中。
EOF
chown -R www-data:www-data "$WEB_ROOT"
echo "创建 Nginx 配置:$NGINX_CONF"
cat > "$NGINX_CONF" <
执行:
chmod +x create-nginx-site.sh
./create-nginx-site.sh
二十、常用排错方法
1. 查看服务状态
systemctl status nginx
systemctl status ssh
systemctl status mariadb
2. 查看端口占用
ss -tunlp
或:
lsof -i:80
3. 查看 Nginx 日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
4. 检查 Nginx 配置
nginx -t
5. 查看系统日志
journalctl -xe
查看指定服务日志:
journalctl -u nginx -f
6. 检查磁盘空间
df -h
7. 检查内存使用
free -h
8. 检查 CPU 和进程
top
或:
htop
二十一、部署安全建议
部署完成后,不要只关注服务能否访问,还要重视安全。
1. 定期更新系统
apt update
apt upgrade -y
可以每周执行一次,也可以配置自动安全更新。
安装:
apt install -y unattended-upgrades
启用:
dpkg-reconfigure unattended-upgrades
2. 使用强密码
数据库、系统用户、后台管理员账号都要使用强密码。强密码建议包含:
- 大写字母
- 小写字母
- 数字
- 特殊符号
- 长度不少于 12 位
3. 禁止数据库公网暴露
MySQL/MariaDB、PostgreSQL、Redis 等服务不建议直接开放到公网。如果确实需要远程访问,建议:
- 只允许指定 IP
- 使用 VPN
- 使用 SSH 隧道
- 设置复杂密码
- 开启访问日志
4. 配置备份策略
至少需要备份:
- 网站源码
- 上传文件
- 数据库
- Nginx 配置
- SSL 证书
- 环境变量配置
备份方式可以选择:
- rsync
- tar
- mysqldump
- pg_dump
- 对象存储
- 云服务器快照
二十二、数据库备份脚本源码
下面提供一个 MariaDB/MySQL 自动备份脚本。
创建目录:
mkdir -p /opt/backup
创建脚本:
vim /opt/backup/mysql-backup.sh
源码:
#!/bin/bash
BACKUP_DIR="/opt/backup/mysql"
DATE=$(date +"%Y%m%d_%H%M%S")
DB_NAME="app_db"
DB_USER="app_user"
DB_PASS="StrongPassword123!"
mkdir -p "$BACKUP_DIR"
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
gzip "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
find "$BACKUP_DIR" -type f -name "*.gz" -mtime +7 -delete
echo "数据库备份完成:$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
赋权:
chmod +x /opt/backup/mysql-backup.sh
测试:
/opt/backup/mysql-backup.sh
添加定时任务:
crontab -e
每天凌晨 2 点备份:
0 2 * * * /opt/backup/mysql-backup.sh >> /opt/backup/mysql-backup.log 2>&1
二十三、网站文件备份脚本源码
创建脚本:
vim /opt/backup/web-backup.sh
源码:
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_DIR="/opt/backup/web"
DATE=$(date +"%Y%m%d_%H%M%S")
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/web_${DATE}.tar.gz" "$SOURCE_DIR"
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
echo "网站文件备份完成:$BACKUP_DIR/web_${DATE}.tar.gz"
赋权并测试:
chmod +x /opt/backup/web-backup.sh
/opt/backup/web-backup.sh
添加定时任务:
30 2 * * * /opt/backup/web-backup.sh >> /opt/backup/web-backup.log 2>&1
二十四、常见问题 FAQ
1. Debian 和 Ubuntu 该选哪个?
如果你追求稳定、干净、长期运行,推荐 Debian。如果你希望软件版本较新、教程更多,也可以选择 Ubuntu。服务器生产环境中,两者都非常常见。
2. Nginx 启动失败怎么办?
先检查配置:
nginx -t
再查看日志:
journalctl -u nginx -xe
常见原因包括端口被占用、配置语法错误、证书路径错误、站点目录不存在等。
3. 修改 SSH 端口后无法连接怎么办?
可能是以下原因:
- 防火墙未放行新端口
- 云服务器安全组未放行新端口
- SSH 配置错误
- SSH 服务未重启
- 使用旧端口连接
建议修改 SSH 配置时保留一个已登录终端,不要立即断开。
4. HTTPS 证书申请失败怎么办?
检查:
- 域名是否正确解析到服务器 IP
- 80 端口是否开放
- Nginx 是否正常运行
- 防火墙和云安全组是否放行 80/443
- 域名是否被 CDN 代理影响
5. PHP 文件被下载而不是执行怎么办?
通常是 Nginx 没有正确配置 PHP-FPM。检查:
ls /run/php/
确认 fastcgi_pass 的 sock 文件路径是否正确。
6. 网站显示 403 Forbidden 怎么办?
常见原因:
- 网站目录权限错误
- 没有 index 文件
- Nginx root 指向错误
- SELinux/AppArmor 策略限制
Debian 中一般检查目录权限即可:
chown -R www-data:www-data /var/www/example.com
chmod -R 755 /var/www/example.com
二十五、总结
本文完整介绍了 Debian 的部署流程,从系统安装、初始化配置、软件源优化、SSH 安全、防火墙设置,到 Nginx、HTTPS、PHP、MariaDB、PostgreSQL、Node.js、Python、Docker 等常见服务部署,并提供了多个可直接使用的脚本源码。
如果你只是部署一个简单网站,最核心的步骤是:
apt update
apt install -y nginx
mkdir -p /var/www/example.com
vim /etc/nginx/sites-available/example.com
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
如果你要部署生产环境,则建议额外完成:
- 修改 SSH 端口
- 禁止 root 登录
- 使用密钥登录
- 开启 UFW 防火墙
- 配置 HTTPS
- 定期备份数据
- 定期更新系统
- 不开放数据库公网端口
- 使用 systemd 或 PM2 管理应用进程
Debian 的优势在于稳定、简洁和可控。只要按照规范部署和维护,它可以长期稳定运行,为你的 Web 项目、API 服务、数据库服务或容器化应用提供可靠的基础环境。