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

从零部署 Debian 服务器:Nginx 静态站点、自动备份与安全加固实战源码分享

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

Debian 实战案例分享|附源码

在服务器运维、开发环境搭建、自动化部署以及私有化服务建设中,Debian 一直是非常受欢迎的 Linux 发行版。它以稳定、安全、软件仓库丰富著称,尤其适合作为生产服务器系统使用。相比一些追求新版本软件的发行版,Debian 更强调长期稳定性,这对于企业应用、个人服务器、NAS、内网服务等场景来说非常重要。

本文将通过一个完整的 Debian 实战案例,分享如何在 Debian 系统上完成一个“轻量级 Web 服务部署 + 自动化备份 + 系统安全加固”的实践过程。文章会包含实际命令、配置思路以及可直接使用的源码脚本,适合正在学习 Linux 运维、Debian 服务器部署或希望搭建个人服务的读者参考。


一、案例背景

假设我们有一台云服务器或本地虚拟机,系统安装的是 Debian 12,目标是部署一个简单的 Web 服务,并完成以下任务:

  1. 更新 Debian 系统环境;
  2. 安装 Nginx 作为 Web 服务器;
  3. 部署一个静态网站;
  4. 配置防火墙;
  5. 创建自动化备份脚本;
  6. 使用 Cron 定时执行备份;
  7. 编写一键初始化脚本,提高部署效率;
  8. 对系统进行基础安全加固。

这个案例虽然简单,但涵盖了日常服务器运维中非常常见的操作。掌握这些内容之后,可以进一步扩展到 Node.js、Python Flask、Django、PHP、Docker 等实际生产环境。


二、实验环境说明

本文使用的环境如下:

项目 内容
操作系统 Debian 12
Web 服务 Nginx
备份工具 tar、gzip
防火墙 ufw
Shell Bash
用户权限 sudo 或 root

如果你使用的是 Debian 11,大部分命令同样适用。若是 Ubuntu,也可以参考,因为 Ubuntu 本身基于 Debian。


三、系统初始化与软件更新

服务器安装完成后,第一件事通常不是马上部署服务,而是更新软件包索引和系统软件。这样可以避免使用旧版本软件带来的安全风险。

sudo apt update
sudo apt upgrade -y

如果系统中有不再需要的软件包,可以执行:

sudo apt autoremove -y

为了方便后续操作,还可以安装一些常用工具:

sudo apt install -y vim curl wget git unzip tar htop net-tools ufw

这些工具的作用如下:

工具 作用
vim 编辑配置文件
curl/wget 下载文件、测试接口
git 拉取源码
unzip/tar 解压缩文件
htop 查看系统资源
net-tools 使用 netstat 等网络工具
ufw 简化防火墙管理

四、安装并配置 Nginx

Nginx 是一款高性能 Web 服务器,在静态资源服务、反向代理、负载均衡等场景中非常常见。

安装 Nginx:

sudo apt install -y nginx

安装完成后启动服务:

sudo systemctl start nginx

设置开机自启:

sudo systemctl enable nginx

查看运行状态:

sudo systemctl status nginx

如果状态中显示 active running,说明 Nginx 已经正常运行。

此时可以在浏览器中访问服务器 IP,例如:

http://你的服务器IP

如果看到 Debian 或 Nginx 默认欢迎页面,就说明服务已经部署成功。


五、部署一个静态网站

接下来我们创建一个简单的网站目录:

sudo mkdir -p /var/www/debian-demo

创建首页文件:

sudo vim /var/www/debian-demo/index.html

写入以下内容:




    
    Debian 实战案例
    


Debian 实战案例分享

这是一个运行在 Debian + Nginx 环境下的静态网站。

当前服务目录:/var/www/debian-demo

如果你能看到这个页面,说明部署成功。

接着创建 Nginx 站点配置文件:

sudo vim /etc/nginx/sites-available/debian-demo

写入以下配置:

server {
    listen 80;
    server_name _;

    root /var/www/debian-demo;
    index index.html index.htm;

    access_log /var/log/nginx/debian-demo.access.log;
    error_log /var/log/nginx/debian-demo.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

启用该站点:

sudo ln -s /etc/nginx/sites-available/debian-demo /etc/nginx/sites-enabled/debian-demo

如果不需要默认站点,可以删除默认配置软链接:

sudo rm -f /etc/nginx/sites-enabled/default

检查 Nginx 配置是否正确:

sudo nginx -t

如果输出类似:

syntax is ok
test is successful

说明配置没有问题。重新加载 Nginx:

sudo systemctl reload nginx

再次访问服务器 IP,就可以看到我们刚刚创建的静态页面。


六、配置防火墙 UFW

服务器暴露在公网时,防火墙配置非常重要。Debian 默认可能没有启用防火墙,我们可以使用 UFW 简化管理。

允许 SSH 连接:

sudo ufw allow OpenSSH

允许 HTTP 服务:

sudo ufw allow 'Nginx HTTP'

如果后续配置 HTTPS,也可以允许:

sudo ufw allow 'Nginx HTTPS'

启用防火墙:

sudo ufw enable

查看状态:

sudo ufw status verbose

输出可能类似:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere

这里要特别注意:启用防火墙之前一定要先允许 SSH,否则可能会把自己挡在服务器外面。


七、自动化备份需求分析

静态网站虽然简单,但仍然需要备份。我们至少应该备份以下内容:

  1. 网站目录:/var/www/debian-demo
  2. Nginx 站点配置:/etc/nginx/sites-available/debian-demo
  3. 可选:日志文件或系统配置

为了避免备份文件无限增长,我们还需要设置自动清理策略,例如只保留最近 7 天的备份。

备份目录可以设置为:

/backup/debian-demo

备份文件命名格式可以是:

debian-demo-20250101-120000.tar.gz

这样通过文件名就能判断备份时间。


八、备份脚本源码

下面是一个可以直接使用的 Bash 备份脚本。

创建脚本文件:

sudo mkdir -p /opt/scripts
sudo vim /opt/scripts/backup_debian_demo.sh

写入以下源码:

#!/bin/bash

# =========================================================
# Debian Demo 网站自动备份脚本
# 功能:
# 1. 备份网站目录
# 2. 备份 Nginx 配置
# 3. 自动生成压缩包
# 4. 自动清理过期备份
# =========================================================

set -e

APP_NAME="debian-demo"
WEB_DIR="/var/www/debian-demo"
NGINX_CONF="/etc/nginx/sites-available/debian-demo"
BACKUP_ROOT="/backup/${APP_NAME}"
LOG_FILE="${BACKUP_ROOT}/backup.log"
RETENTION_DAYS=7

DATE_TIME=$(date +"%Y%m%d-%H%M%S")
BACKUP_FILE="${BACKUP_ROOT}/${APP_NAME}-${DATE_TIME}.tar.gz"
TMP_DIR="/tmp/${APP_NAME}-backup-${DATE_TIME}"

log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "${LOG_FILE}"
}

check_path() {
    if [ ! -e "$1" ]; then
        log "错误:路径不存在:$1"
        exit 1
    fi
}

main() {
    mkdir -p "${BACKUP_ROOT}"
    mkdir -p "${TMP_DIR}"

    log "开始备份 ${APP_NAME}"

    check_path "${WEB_DIR}"
    check_path "${NGINX_CONF}"

    mkdir -p "${TMP_DIR}/www"
    mkdir -p "${TMP_DIR}/nginx"

    cp -a "${WEB_DIR}" "${TMP_DIR}/www/"
    cp -a "${NGINX_CONF}" "${TMP_DIR}/nginx/"

    tar -czf "${BACKUP_FILE}" -C "${TMP_DIR}" .

    rm -rf "${TMP_DIR}"

    log "备份完成:${BACKUP_FILE}"

    log "开始清理 ${RETENTION_DAYS} 天前的备份文件"
    find "${BACKUP_ROOT}" -name "${APP_NAME}-*.tar.gz" -type f -mtime +${RETENTION_DAYS} -delete
    log "清理完成"
}

main

保存后赋予执行权限:

sudo chmod +x /opt/scripts/backup_debian_demo.sh

手动执行一次测试:

sudo /opt/scripts/backup_debian_demo.sh

查看备份结果:

ls -lh /backup/debian-demo

查看日志:

cat /backup/debian-demo/backup.log

如果能看到 .tar.gz 文件,说明备份脚本运行成功。


九、配置 Cron 定时备份

手动备份不可靠,最佳方式是使用 Cron 定时执行。例如每天凌晨 2 点自动备份一次。

编辑 root 用户的定时任务:

sudo crontab -e

添加以下内容:

0 2 * * * /opt/scripts/backup_debian_demo.sh >/dev/null 2>&1

含义如下:

字段 含义
0 第 0 分钟
2 凌晨 2 点
* 每天
* 每月
* 每周任意一天

查看定时任务:

sudo crontab -l

为了验证 Cron 是否正常执行,也可以临时设置为每分钟执行一次:

* * * * * /opt/scripts/backup_debian_demo.sh >/dev/null 2>&1

确认没有问题后,再恢复为每天凌晨执行。


十、一键初始化脚本源码

为了提高部署效率,我们可以编写一个一键初始化脚本。它会自动完成软件安装、网站目录创建、Nginx 配置生成、防火墙配置和备份脚本安装。

创建文件:

vim init_debian_demo.sh

源码如下:

#!/bin/bash

set -e

APP_NAME="debian-demo"
WEB_DIR="/var/www/${APP_NAME}"
NGINX_CONF="/etc/nginx/sites-available/${APP_NAME}"
NGINX_LINK="/etc/nginx/sites-enabled/${APP_NAME}"
SCRIPT_DIR="/opt/scripts"
BACKUP_SCRIPT="${SCRIPT_DIR}/backup_${APP_NAME}.sh"

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

echo "==> 更新系统软件包"
apt update
apt upgrade -y

echo "==> 安装必要软件"
apt install -y nginx ufw curl wget vim tar gzip

echo "==> 创建网站目录"
mkdir -p "${WEB_DIR}"

cat > "${WEB_DIR}/index.html" <<'EOF'



    
    Debian Demo
    


Debian Demo 部署成功

这是通过一键初始化脚本部署的 Nginx 静态网站。

系统:Debian

服务:Nginx

EOF echo "==> 写入 Nginx 配置" cat > "${NGINX_CONF}" < 启用站点" ln -sf "${NGINX_CONF}" "${NGINX_LINK}" rm -f /etc/nginx/sites-enabled/default echo "==> 检查 Nginx 配置" nginx -t echo "==> 启动并设置 Nginx 开机自启" systemctl enable nginx systemctl restart nginx echo "==> 配置防火墙" ufw allow OpenSSH ufw allow 'Nginx HTTP' ufw --force enable echo "==> 创建备份脚本" mkdir -p "${SCRIPT_DIR}" cat > "${BACKUP_SCRIPT}" <<'EOF' #!/bin/bash set -e APP_NAME="debian-demo" WEB_DIR="/var/www/debian-demo" NGINX_CONF="/etc/nginx/sites-available/debian-demo" BACKUP_ROOT="/backup/${APP_NAME}" LOG_FILE="${BACKUP_ROOT}/backup.log" RETENTION_DAYS=7 DATE_TIME=$(date +"%Y%m%d-%H%M%S") BACKUP_FILE="${BACKUP_ROOT}/${APP_NAME}-${DATE_TIME}.tar.gz" TMP_DIR="/tmp/${APP_NAME}-backup-${DATE_TIME}" log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "${LOG_FILE}" } check_path() { if [ ! -e "$1" ]; then log "错误:路径不存在:$1" exit 1 fi } main() { mkdir -p "${BACKUP_ROOT}" mkdir -p "${TMP_DIR}" log "开始备份 ${APP_NAME}" check_path "${WEB_DIR}" check_path "${NGINX_CONF}" mkdir -p "${TMP_DIR}/www" mkdir -p "${TMP_DIR}/nginx" cp -a "${WEB_DIR}" "${TMP_DIR}/www/" cp -a "${NGINX_CONF}" "${TMP_DIR}/nginx/" tar -czf "${BACKUP_FILE}" -C "${TMP_DIR}" . rm -rf "${TMP_DIR}" log "备份完成:${BACKUP_FILE}" find "${BACKUP_ROOT}" -name "${APP_NAME}-*.tar.gz" -type f -mtime +${RETENTION_DAYS} -delete log "过期备份清理完成" } main EOF chmod +x "${BACKUP_SCRIPT}" echo "==> 添加 Cron 定时任务" CRON_JOB="0 2 * * * ${BACKUP_SCRIPT} >/dev/null 2>&1" if crontab -l 2>/dev/null | grep -Fq "${BACKUP_SCRIPT}"; then echo "Cron 任务已存在,跳过添加" else (crontab -l 2>/dev/null; echo "${CRON_JOB}") | crontab - fi echo "==> 执行一次备份测试" "${BACKUP_SCRIPT}" echo "==> 部署完成" echo "请访问:http://服务器IP"

赋予执行权限:

chmod +x init_debian_demo.sh

执行脚本:

sudo ./init_debian_demo.sh

执行完成后,整个静态网站、Nginx、备份脚本和防火墙都会配置好。


十一、系统安全加固建议

完成基础服务部署后,还应进行必要的安全加固。

1. 禁止 root 远程登录

编辑 SSH 配置:

sudo vim /etc/ssh/sshd_config

找到或添加:

PermitRootLogin no

重启 SSH:

sudo systemctl restart ssh

在禁用 root 登录之前,一定要确认已经创建了普通用户,并且该用户可以使用 sudo。

创建普通用户示例:

sudo adduser deploy
sudo usermod -aG sudo deploy

2. 修改 SSH 默认端口

默认的 22 端口经常被扫描,可以改成其他端口,例如 2222:

Port 2222

修改后需要先放行新端口:

sudo ufw allow 2222/tcp

然后重启 SSH:

sudo systemctl restart ssh

确认新端口可以正常登录后,再删除旧规则:

sudo ufw delete allow OpenSSH

3. 使用 fail2ban 防暴力破解

安装 fail2ban:

sudo apt install -y fail2ban

启动并设置开机自启:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

查看状态:

sudo systemctl status fail2ban

fail2ban 可以根据日志自动封禁频繁尝试登录的 IP,对公网服务器非常实用。


4. 定期更新系统

可以定期执行:

sudo apt update
sudo apt upgrade -y

如果希望自动安装安全更新,可以安装:

sudo apt install -y unattended-upgrades

启用配置:

sudo dpkg-reconfigure unattended-upgrades

十二、常见问题排查

1. Nginx 启动失败

可以先检查配置:

sudo nginx -t

查看错误日志:

sudo journalctl -u nginx

常见原因包括:

  • 配置文件语法错误;
  • 端口 80 被其他程序占用;
  • 网站目录不存在;
  • 文件权限不正确。

查看端口占用:

sudo ss -tunlp | grep :80

2. 浏览器无法访问网站

排查顺序如下:

  1. Nginx 是否运行:
sudo systemctl status nginx
  1. 防火墙是否放行:
sudo ufw status
  1. 云服务器安全组是否放行 80 端口;
  2. 本地是否能访问:
curl http://127.0.0.1

如果本地可以访问,但公网不能访问,多半是云安全组或防火墙问题。


3. Cron 没有执行备份

检查定时任务:

sudo crontab -l

查看系统日志:

sudo grep CRON /var/log/syslog

确认脚本具有执行权限:

ls -l /opt/scripts/backup_debian_demo.sh

也可以在 Cron 中使用绝对路径,这是一个非常好的习惯。


十三、案例总结

通过本文的 Debian 实战案例,我们完成了从系统初始化到 Web 服务部署,再到自动化备份和基础安全加固的一整套流程。这个案例看似只是部署了一个简单的静态网站,但实际上已经包含了服务器管理中的多个核心环节。

本文重点包括:

  • Debian 软件包管理;
  • Nginx 安装与站点配置;
  • 静态网站部署;
  • UFW 防火墙配置;
  • Bash 自动化备份脚本;
  • Cron 定时任务;
  • 一键初始化部署脚本;
  • SSH 与系统安全加固;
  • 常见故障排查方法。

在真实生产环境中,可以在此基础上继续扩展。例如,给 Nginx 配置 HTTPS 证书、使用 Docker 部署应用、通过 Git 自动拉取代码、使用 rsync 远程备份、接入 Prometheus 监控、使用 Ansible 批量管理服务器等。

Debian 的优势不只在于稳定,更在于它适合构建可维护、可复制、可自动化的服务器环境。只要掌握了系统初始化、服务配置、日志排查、备份恢复和安全加固这些基础能力,就可以应对大多数中小型服务器运维场景。

目录结构
全文