Nginx + Docker部署个人博客,从零到上线完整教程(2026最新版)

买了云服务器却不知道怎么部署博客?本文手把手带你用 Docker + Nginx 把博客跑起来,全程附命令,复制粘贴即可运行。


为什么选 Docker + Nginx?

很多人买了云服务器,第一件事就是手动装环境------装 Nginx、装 PHP、装 MySQL,结果一套下来花了半天,环境还装出问题了。

Docker 的核心价值:把应用和依赖打包在一起,换台服务器分分钟迁移,不再有「我本地好好的,服务器上跑不起来」的问题。

Nginx 的核心价值:高性能 Web 服务器 + 反向代理,处理静态资源贼快,配置 HTTPS 也简单。

两者配合,是目前个人博客/小型项目最主流的部署方案。


环境准备

所需材料

  • 云服务器一台(Ubuntu 20.04/22.04 推荐,CentOS 也行)
  • 域名一个(已备案更好,没有也可以用 IP 访问)
  • SSH 工具(Windows 用 Xshell/Tabby,Mac 直接终端)

服务器配置建议

用途 CPU 内存 带宽
个人博客(纯静态) 1核 1GB 1Mbps
WordPress博客 2核 2GB 3Mbps
带评论/会员功能 2核 4GB 5Mbps

Step 1:安装 Docker

连上服务器后,第一步安装 Docker。

bash 复制代码
# 更新包列表
sudo apt update

# 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
docker --version
# 输出类似:Docker version 26.x.x, build xxxxxx

国内服务器加速:如果拉取镜像慢,配置镜像加速器:

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://registry.docker-cn.com"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Step 2:安装 Docker Compose

bash 复制代码
# Docker 新版已内置 compose 插件,用以下命令验证
docker compose version
# 输出:Docker Compose version v2.x.x

# 如果没有,单独安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Step 3:部署静态博客(Hugo/Hexo 等)

如果你用的是 Hugo、Hexo 等静态博客生成器,部署最简单。

3.1 本地生成静态文件

bash 复制代码
# Hugo 示例
hugo build
# 生成的文件在 public/ 目录

# Hexo 示例
hexo generate
# 生成的文件在 public/ 目录

3.2 上传到服务器

bash 复制代码
# 使用 scp 上传(本地执行)
scp -r ./public/* root@你的服务器IP:/var/www/blog/

# 或者用 rsync(推荐,支持增量同步)
rsync -avz --delete ./public/ root@你的服务器IP:/var/www/blog/

3.3 创建 Nginx Docker 配置

在服务器上创建项目目录:

bash 复制代码
mkdir -p /opt/blog
cd /opt/blog

创建 docker-compose.yml

yaml 复制代码
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: blog-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/www/blog:/usr/share/nginx/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./ssl:/etc/nginx/ssl:ro          # 放 SSL 证书用
    restart: unless-stopped

创建 nginx.conf

nginx 复制代码
server {
    listen 80;
    server_name 你的域名.com www.你的域名.com;
    
    # 如果有 HTTPS,这里做重定向
    # return 301 https://$host$request_uri;
    
    root /usr/share/nginx/html;
    index index.html index.htm;
    
    # 静态资源缓存
    location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    # SPA 路由支持(如果是 Vue/React 单页应用)
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    # 开启 Gzip 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml;
    gzip_min_length 1000;
}

启动:

bash 复制代码
docker compose up -d

访问 http://你的服务器IP 就能看到博客了!


Step 4:部署 WordPress(动态博客)

WordPress 需要 PHP + MySQL,用 Docker Compose 一键搞定。

yaml 复制代码
# docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql:8.0
    container_name: wordpress-db
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: your_wp_password
    volumes:
      - db_data:/var/lib/mysql
    restart: unless-stopped

  wordpress:
    image: wordpress:latest
    container_name: wordpress-app
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: your_wp_password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    container_name: wordpress-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - wp_data:/var/www/html:ro
      - ./nginx-wp.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - wordpress
    restart: unless-stopped

volumes:
  db_data:
  wp_data:

WordPress 的 Nginx 配置 nginx-wp.conf

nginx 复制代码
server {
    listen 80;
    server_name 你的域名.com;
    
    root /var/www/html;
    index index.php index.html;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ .php$ {
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires 30d;
    }
    
    # 禁止访问敏感文件
    location ~ /. {
        deny all;
    }
}

启动:

bash 复制代码
docker compose up -d
# 等待 1 分钟让 MySQL 初始化完成
docker compose ps  # 检查所有容器状态为 Up

Step 5:配置 HTTPS(免费 SSL 证书)

方法一:腾讯云/阿里云免费证书

  1. 登录云控制台 → SSL 证书 → 申请免费证书
  2. 下载 Nginx 格式证书,得到 .crt.key 文件
  3. 上传到服务器的 /opt/blog/ssl/ 目录
  4. 修改 nginx.conf,添加 HTTPS 配置:
nginx 复制代码
server {
    listen 443 ssl http2;
    server_name 你的域名.com;
    
    ssl_certificate /etc/nginx/ssl/你的域名.crt;
    ssl_certificate_key /etc/nginx/ssl/你的域名.key;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    
    # 其余配置同上...
}

server {
    listen 80;
    server_name 你的域名.com;
    return 301 https://$host$request_uri;
}

重启容器:

bash 复制代码
docker compose restart nginx

方法二:Certbot 自动申请(Let's Encrypt)

bash 复制代码
# 安装 certbot
sudo apt install -y certbot

# 临时停止 80 端口占用
docker compose stop nginx

# 申请证书
sudo certbot certonly --standalone -d 你的域名.com -d www.你的域名.com

# 证书位置:/etc/letsencrypt/live/你的域名.com/
# 重启 nginx
docker compose start nginx

Step 6:常用运维命令

bash 复制代码
# 查看容器状态
docker compose ps

# 查看 nginx 日志(实时)
docker compose logs -f nginx

# 重启某个服务
docker compose restart nginx

# 进入容器调试
docker exec -it blog-nginx sh

# 更新镜像
docker compose pull && docker compose up -d

# 备份数据库(WordPress)
docker exec wordpress-db mysqldump -u wpuser -pyour_wp_password wordpress > backup_$(date +%Y%m%d).sql

常见问题 FAQ

Q:访问 IP 显示 nginx 默认页面,不是我的博客?

A:检查 nginx.confroot 路径是否正确,确认 /var/www/blog/ 下有 index.html

Q:WordPress 安装页面一直转圈?

A:等 MySQL 初始化完成,用 docker compose logs db 查看日志,出现 ready for connections 后再访问。

Q:HTTPS 证书申请失败?

A:确认域名已经解析到服务器 IP,80 端口已开放(云服务器安全组要放行)。

Q:容器重启后数据丢失?

A:确认 volumes 配置正确,数据库和 WordPress 文件都要挂载到宿主机目录。


总结

博客类型 推荐方案 难度
静态博客(Hugo/Hexo) Nginx + Docker
WordPress MySQL + WordPress + Nginx ⭐⭐
自研博客(Node/Python) 应用容器 + Nginx反代 ⭐⭐⭐

Docker + Nginx 的方案一旦配好,迁移服务器只需要把 docker-compose.yml 和数据目录拷贝过去,docker compose up -d 即刻恢复,省心程度远超手动安装环境。


关于作者

长期关注大模型应用落地与云服务器实战,专注技术在企业场景中的落地实践。

个人博客:yunduancloud.icu ------ 持续更新云计算、AI大模型实战教程,欢迎访问交流。

相关推荐
榴莲omega2 小时前
第12天:CSS(一)| Flexbox 布局完全指南
前端·css·html·js八股
fqrj20262 小时前
企业官网如何设计?专业公司网站设计制作要点解析
css·html·网站建设·网站开发
阿捞23 小时前
在 .NET 中使用 Moonshot Kimi + AgentFramework:从 SDK 到 Agent 的完整实践
html·.net·xhtml
Reisentyan3 小时前
[vue3]HTML Learn Data Day 9
前端·vue.js·html
希望永不加班4 小时前
SpringBoot 邮件发送:文本邮件与 HTML 邮件
java·spring boot·后端·spring·html
MinterFusion21 小时前
HTML DOM元素的定位问题
前端·css·html
Hilaku1 天前
一周狂揽40K+ Star⭐ 的 Pretext 到底有多变态?
前端·javascript·html
银河系的一束光1 天前
旅游网站html、css、bootstrap
css·html·旅游
前端老石人1 天前
文本级语义与变更标记
前端·html