Administrator
发布于 2026-07-21 / 1 阅读
0
0

从零开始:使用甲骨文 Oracle Cloud + Docker + Halo 搭建个人博客

从零开始:使用甲骨文 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 accept

HTTPS恢复。


九、最终效果

目前博客运行环境:

项目

状态

服务器

Oracle Cloud

系统

Ubuntu 24.04

容器

Docker

博客

Halo 2

数据库

MySQL 8

Web服务器

Nginx

HTTPS

Let's Encrypt

域名

blog.yankangcloud.com


写在最后

这是我的第一篇博客。

从申请服务器,到配置 Docker,再到处理 HTTPS、防火墙问题。

中间遇到了不少坑:

  • DNS解析

  • Nginx代理

  • SSL证书

  • nftables规则

  • Docker网络

但解决问题的过程,本身就是成长的一部分。

以后这里会记录:

  • 前端开发

  • Vue

  • uni-app

  • Linux

  • Docker

  • 网络技术

  • 服务器运维

希望几年后回来看,这里记录的不只是文章,而是一段技术成长轨迹。


评论