环境:甲骨文云 ARM 服务器(2 核 12G),1Panel【版本】,Halo,域名、 Cloudflare 日期:2026 年 10 月 适合:新手
我想做什么
在自己的服务器和域名上搭一个博客,用来整理折腾笔记和工具。能自己维护、手机电脑都能写文章、访客可以评论。最后选了 Halo:后台是网页,手机浏览器就能写,自带评论、分类和 RSS。
整体思路
访客 → Cloudflare 解析 → OpenResty(1Panel 里的 Nginx,负责 HTTPS)→ 本机的 Halo(127.0.0.1:8090)→ PostgreSQL(存数据)
所以要装三样东西:OpenResty、PostgreSQL、Halo,外加域名解析和证书。
首先:先摸清服务器上跑了什么
我的服务器上之前跑过别的东西,所以动手前先看了端口占用:
sudo ss -tlnp
docker ps -a重点看 80 和 443 有没有被占。我这台的 443 被另一个服务占着,而 OpenResty 需要用 443,所以我先把那个服务的监听端口改成了别的端口,并在甲骨文安全列表和系统防火墙里放行新端口,再确认 443 已经空出来:
sudo ss -tlnp | grep -E ':80 |:443 '没有输出,就说明 80 和 443 都空着。
第 1 步:Cloudflare 添加解析
添加一条记录:类型 A,名称 blog,内容填服务器公网 IP,代理状态选“仅 DNS”(灰云),直接解析到服务器,最简单。公网 IP 可以在服务器上用 curl ifconfig.me 查。
第 2 步:放行 80 和 443
甲骨文有两层防火墙,都要放行:
甲骨文控制台 → 虚拟云网络 → 子网 → 安全列表,添加入站规则,放行 TCP 80 和 443。
服务器系统防火墙:
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save只改控制台不够,系统自己的规则也要放行。用 ufw 的话改成 sudo ufw allow 80/tcp 和 sudo ufw allow 443/tcp。
第 3 步:安装 OpenResty
1Panel → 应用商店 → 搜索 OpenResty → 安装,端口保持默认的 80 和 443。装完用上面的 ss 命令确认 80、443 已经被占用。
第 4 步:安装 PostgreSQL
1Panel 里装 Halo 需要选数据库,而一开始没有任何数据库实例,所以要先装数据库。应用商店搜索 PostgreSQL,安装时设一个强密码,并关闭“端口外部访问”。
小知识:勾选“端口外部访问”后,1Panel 会替你在防火墙放行这个端口,任何人都能直接连上。数据库只给本机的 Halo 用,不需要对外,所以要关掉。
第 5 步:安装 Halo
应用商店搜索 Halo,安装时:
数据库服务选 PostgreSQL,实例选刚装好的那个
端口保持 8090,关闭“端口外部访问”
外部访问地址填
https://blog.你的域名/,不要保留默认的本机地址,否则文章链接会指向本机
第 6 步:申请 HTTPS 证书
在 Cloudflare 创建 API 令牌:权限选“编辑区域 DNS”,区域只限你的这个域名。令牌是敏感信息,不要发给任何人。
1Panel → 网站 → 证书 → DNS 账户,添加类型为 Cloudflare 的账户并填入凭据。
申请证书,域名填
blog.你的域名,验证方式选这个 DNS 账户,提供商选 Let’s Encrypt。
用 DNS 验证的好处是不需要占用 80 端口。证书免费,有效期 90 天,1Panel 会自动续期。
第 7 步:创建反向代理网站
1Panel → 网站 → 创建网站 → 反向代理:
主域名:
blog.你的域名代理地址:
127.0.0.1:8090
创建后进入网站设置 → HTTPS,选刚签发的证书并开启,同时打开“HTTP 自动跳转 HTTPS”。
第 8 步:初始化 Halo
浏览器打开 https://blog.你的域名/console,创建管理员账号(密码设强)。登录后在系统设置里确认外部访问地址正确,再到后台开启备份,先手动备份一次。用手机浏览器打开同一个地址,也能登录和写文章。
第 9 步:主域名跳转到博客
Cloudflare 再加两条记录:A 记录
@指向服务器 IP,CNAME 记录www指向主域名,都选灰云。1Panel 申请一张包含主域名和
www的证书。创建一个静态网站,主域名填你的域名,并添加
www域名,开启 HTTPS。在网站设置的“重定向”里新增规则,目标写
https://blog.你的域名,类型选 301。
验证:
curl -I https://你的域名返回 301,并且 location 是 https://blog.你的域名/,就成功了。
踩坑记录
反向代理报
invalid port in upstream:代理地址我一开始写成了http://127.0.0.1:8090。1Panel 会把它原样放进 Nginx 的配置里,那里只接受“主机:端口”,所以只写127.0.0.1:8090。Halo 安装页的数据库下拉选不了:因为还没有数据库实例,先装 PostgreSQL,再回来装 Halo。
本机
curl -I http://127.0.0.1:8090/返回 404(JSON 格式):我当时以为出了问题,其实服务是正常的,最终以浏览器访问/console为准。主域名重定向多绕了一步:重定向目标一开始是
http://开头,访客会先跳到 http 再跳回 https,改成https://就一步到位。验证时用curl -I看location最直接。
总体来说,当你看到自己的网站能打开就已经成功一大半了.
有问题欢迎再评论区留言!!!!