从零开始:使用甲骨文 Oracle Cloud + Docker + Halo 搭建个人博客
写在前面
一直想拥有一个属于自己的博客。
相比于第三方平台,我更希望拥有一个完全属于自己的空间:
自己控制服务器
自己管理数据
自己记录技术成长
自己保存一路踩过的坑
于是决定使用 Oracle Cloud 免费服务器搭建一个个人博客。
最终架构如下:
用户
|
|
HTTPS
|
Nginx
|
Halo博客系统
|
MySQL数据库
|
Docker
|
Ubuntu服务器服务器选择:
Oracle Cloud ARM实例
Ubuntu 24.04
Docker部署
Halo 2.x博客系统
一、准备服务器
服务器系统:
Ubuntu 24.04 LTS查看系统信息:
uname -a输出:
Linux instance-20260717-1007
aarch64 GNU/Linux说明当前服务器为 ARM 架构。
二、安装 Docker
更新软件源:
sudo apt update安装依赖:
sudo apt install -y \
ca-certificates \
curl \
gnupg安装 Docker。
启动 Docker:
sudo systemctl enable docker
sudo systemctl start docker检查:
docker ps如果没有报错,说明 Docker 安装成功。
三、部署 MySQL
创建目录:
mkdir -p ~/docker
cd ~/docker
mkdir mysql halo nginx进入 MySQL:
cd ~/docker/mysql创建:
nano docker-compose.yml配置:
services:
mysql:
image: mysql:8.0
container_name: halo-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 设置你的密码
MYSQL_DATABASE: halo
ports:
- "127.0.0.1:3306:3306"
volumes:
- ./data:/var/lib/mysql启动:
docker compose up -d查看:
docker ps看到:
halo-mysql说明数据库运行成功。
四、部署 Halo 博客系统
进入目录:
cd ~/docker/halo创建:
nano docker-compose.yml配置:
services:
halo:
image: halohub/halo:2
container_name: halo
restart: always
ports:
- "8090:8090"
volumes:
- ./data:/root/.halo2
启动:
docker compose up -d查看日志:
docker logs -f halo看到:
Netty started on port 8090说明 Halo 启动成功。
测试:
curl http://127.0.0.1:8090五、配置域名解析
购买域名:
例如:
yankangcloud.com添加 DNS:
类型:
A名称:
blog地址:
服务器公网IP最终:
blog.yankangcloud.com
|
↓
161.xxx.xxx.xxx等待 DNS 生效:
ping blog.yankangcloud.com六、配置 Nginx 反向代理
安装:
sudo apt install nginx创建:
sudo nano /etc/nginx/conf.d/blog.conf配置:
server {
listen 80;
server_name blog.yankangcloud.com;
location / {
proxy_pass http://127.0.0.1:8090;
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;
}
}检测:
sudo nginx -t重启:
sudo systemctl restart nginx七、配置 HTTPS
安装 certbot:
sudo apt install certbot python3-certbot-nginx申请证书:
sudo certbot --nginx \
-d blog.yankangcloud.com成功后:
https://blog.yankangcloud.com即可访问。
八、遇到的问题记录
1. HTTPS无法访问
现象:
curl https://blog.yankangcloud.com一直连接失败。
排查:
Nginx正常:
ss -tlnp | grep nginx发现:
Ubuntu nftables 防火墙没有开放443。
查看:
sudo nft list ruleset发现:
tcp dport 80 accept
tcp dport 22 accept但是没有:
tcp dport 443解决:
sudo nft insert rule ip filter INPUT tcp dport 443 acceptHTTPS恢复。
九、最终效果
目前博客运行环境:
写在最后
这是我的第一篇博客。
从申请服务器,到配置 Docker,再到处理 HTTPS、防火墙问题。
中间遇到了不少坑:
DNS解析
Nginx代理
SSL证书
nftables规则
Docker网络
但解决问题的过程,本身就是成长的一部分。
以后这里会记录:
前端开发
Vue
uni-app
Linux
Docker
网络技术
服务器运维
希望几年后回来看,这里记录的不只是文章,而是一段技术成长轨迹。