适用人群:完全没接触过服务器的小白,或曾经被LNMP环境配置折磨到放弃的“半吊子”,你不需要懂Linux内核,不需要手编译软件,只需一台云服务器、一个域名,以及照做下面每一步的耐心。
网站上线零门槛,用Docker Compose把博客从零搬到公网
第一步:准备一台“空房间”——服务器与系统选择
先别急着装任何东西,去阿里云/腾讯云买一台最便宜的“轻量应用服务器”,地域选离你近的,系统镜像务必选 Ubuntu 22.04 LTS(纯净版,不要装自带的宝塔面板),如果你有旧服务器,请重装系统——这一步能省掉后面80%的权限混乱问题。
拿到服务器的公网IP后,用终端工具(Mac自带的Terminal或Windows的PowerShell)登录:
ssh root@你的服务器IP
输入密码后,先更新系统:
apt update && apt upgrade -y
第二步:安装“万能工具箱”——Docker与Compose
Docker是一个容器平台,Compose则是它的编排工具,我们不需要理解原理,只当它们是两个命令。
一键安装Docker:
curl -fsSL https://get.docker.com | bash
安装Compose插件(新版Docker已内置,检查一下):
docker compose version
如果提示找不到,执行:
apt install docker-compose-plugin
踩坑提醒:国内服务器访问Docker官方源可能超时,若安装失败,请修改Docker源为清华源(/etc/docker/daemon.json 写入镜像加速地址,并重启服务)。
第三步:定义“房间布局”——编写compose.yml
我们要用一份配置文件描述网站的所有组件,先创建一个项目目录:
mkdir myblog && cd myblog
用 nano 或 vim 创建 compose.yml 文件,内容是:
version: '3.8'
services:
db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: myrootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
这是最经典的 WordPress 博客组合。关键点:数据库和网站程序分离,数据分别存于两个名命卷(volume),即使删除容器,数据也不丢失。
第四步:启动“房间”——拉取镜像并运行
保存文件后,执行:
docker compose up -d
首次会下载两个镜像,约5分钟,看到 Started 表示成功。
验证:在浏览器访问 http://你的服务器IP:8080,如果出现WordPress语言选择界面,恭喜你——网站核心已跑起来。
第五步:绑定“门牌号”——域名解析与HTTPS
现在你有IP加端口,但拥有正式域名才算真正的网站,购买域名后,在域名服务商控制台添加 A记录:主机记录填 和 www,记录值填你的服务器IP,TTL默认即可。
修改compose.yml,让WordPress直接监听80端口(去掉冒号前的8080):
ports: - "80:80"
然后重新加载:
docker compose down && docker compose up -d
用 http://你的域名 就能访问了。
踩坑提醒:别急着开启HTTPS,先登录WordPress后台(/wp-admin),在“设置-常规”里把WordPress地址和站点地址改成你的域名,否则后台与前台会出现CSS错乱。
第六步:安装“防盗门”——Nginx反向代理与SSL
直接在WordPress容器上开HTTPS很麻烦,我们加一个Nginx容器做“门卫”:
在compose.yml中追加:
nginx:
image: nginx:alpine
depends_on:
- wordpress
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
删除wordpress的ports段(只保留内部端口80),然后创建 nginx.conf 替换默认配置:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://wordpress:80;
proxy_set_header Host $host;
}
}
用 certbot 命令申请免费SSL证书(需先把域名解析生效):
docker run --rm -v ./certbot/conf:/etc/letsencrypt -v ./certbot/www:/var/www/certbot certbot/certbot certonly --webroot -w /var/www/certbot -d yourdomain.com
最后修改nginx.conf添加443端口配置及证书路径,再次加载,步骤稍多,但每步都有回报。
常见踩坑总清单
- 权限不足:所有命令前加
sudo,或直接用root用户。 - 端口占用:执行
lsof -i:80检查,如有进程请先释放。 - 数据库连不上:检查compose.yml中的
MYSQL_DATABASE是否与wordpress环境变量完全一致。 - 上传文件大小限制:在Nginx配置中添加
client_max_body_size 64M;。 - 备份策略:每天用
docker compose exec db导出SQL文件,存至对象存储或Git仓库。
从零到上线的最终检查
修改解析记录后,等待几分钟,访问 https://你的域名,如果绿锁出现且页面正常,你就完成了从零建站的全过程,整个过程大约耗时1小时,但这1小时换来的是一套完全可控、易于迁移的网站架构——以后想换主题、加插件、改语言,只需修改compose.yml重新执行 docker compose up -d,一切如行云流水。
关掉教程,动手吧,真正的网站,从你第一次输入命令开始。



发表评论