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

Debian 12 服务器从零上线:初始化、安全加固到 Docker/Nginx 全流程命令指南

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

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

四、安装常用基础工具

部署服务器时,经常需要使用 curlwgetvimgithtop 等工具。

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 的优势在于稳定、可靠、生态成熟,非常适合作为长期运行的服务器系统。只要按照规范进行初始化、安全加固、日志监控和备份管理,就可以构建一个稳定、安全、易维护的生产环境。

目录结构
全文