买了云服务器却不知道怎么部署博客?本文手把手带你用 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 证书)
方法一:腾讯云/阿里云免费证书
- 登录云控制台 → SSL 证书 → 申请免费证书
- 下载 Nginx 格式证书,得到
.crt和.key文件 - 上传到服务器的
/opt/blog/ssl/目录 - 修改
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.conf 中 root 路径是否正确,确认 /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大模型实战教程,欢迎访问交流。