身为程序员,一直想拥有一个自己的博客,因为各种原因(懒)拖延了很久。这次心血来潮总算想起来,在此分享下我的建站经历和踩过的坑。
环境搭建
- 租赁云服务器
首先我需要一个服务器来运行相关程序。云服务器厂商有很多,阿里云、京东云、华为云等等,我自己随便选了个京东云(有优惠)。因为博客不需要太好的配置,租一个轻量云主机就够了

- 系统初始化
租好服务器后,服务器会引导你选择场景来搭建系统。

我尝试了里面提供的Ubuntu系统和Windows Server系统,发现使用起来很困难,最后选择了宝塔面板。
| Ubuntu | 纯命令行,操作麻烦 |
| Windows Server | 需要远程接入操控,操作有延迟且搭建开发环境繁琐 |
| 宝塔面板 | 提供可视化操作,方便新手使用,可以一键安装各种环境 |
宝塔面板:
第一次进入宝塔会自动帮你安装Docker、Mysql等环境
[!IMPORTANT]
由于服务器的防火墙规则会对入流量进行控制,如果想从公网访问服务器内的应用(宝塔控制面板、博客等),需要在主机的管理面板对相应端口添加规则
例如:宝塔面板默认端口是8888,则需要给8888端口添加规则
部署博客
常用的开源博客有Wordpress、halo、hexo等。其中Wordpress是功能最强大的,社区也是最活跃的。不过我还是选择了用halo搭建博客,因为halo是用Java编写的,方便我以后自己改造。
部署步骤
使用Docker Compose部署(参考页面)
在初始化宝塔面板时已经安装好了Docker和Docker Compose,可以立即开始部署
- 创建halo项目的文件夹
mkdir ~/halo && cd ~/halo
- 在halo目录下新建docker-compose.yaml文件
文档中提供了几种场景的配置方法,我最终选的是使用外部数据库的方案
~/halo/docker-compose.yaml:
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20
restart: on-failure:3
network_mode: "host"
volumes:
- ./halo2:/root/.halo2
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx256m -Xms256m
command:
# 修改为自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
- --spring.r2dbc.username=root
- --spring.r2dbc.password= #自己的mysql密码
- --spring.sql.init.platform=mysql
# 外部访问地址,localhost改为自己服务器的公网ip
- --halo.external-url=http://localhost:8090/
# 端口号 默认8090
- --server.port=8090
[!NOTE]
一开始我选择的是文档中的Halo + MySQL部署方案,但是部署完毕后启动halo的容器一直失败,日志报错显示容器无法连接上Mysql。上论坛搜了下发现是因为这个方案分为博客程序容器和数据库容器,博客容器需要配置参数链接到数据库容器才行,试了几个方案都没能成功,最后还是选择了外部数据库部署方案,只需要管理一个博客容器就行
- 启动 Halo服务
docker-compose up -d
可以实时查看日志:
docker-compose logs -f
如果成功启动的话,就能通过 http://服务器公网ip:8090/console 访问 Halo 管理页面
记得要在防火墙中给端口8090增加规则
域名管理
此时已经能通过公网ip加端口号访问博客了,但是一个合格的博客还需要拥有自己的域名。一般可以直接在自己服务商那里申请。

- 挑选自己想要的域名(需要付费)
- 域名备案:拥有域名后需要备案才能正常使用,跟着流程填写相关信息和相关资料后等待官方审核通过即可(一般要十几天)。期中服务商会打电话确认,要注意不要漏接
- 备案通过后需要通过DNS解析将域名指向我们主机的公网ip。
这些在自己服务器控制台中都有详细指引,照着操作没有难度
反向代理
反向代理指客户端访问反向代理服务器,反向代理再将请求转发给目标服务器。可以隐藏目标服务器的真实身份,提高安全性。一般用Nginx作为反向代理
由于Nginx配置需要一定基础,可以按Halo说明文档中安装 Nginx Proxy Manager 来简易配置

这样便可以用博客的子域名直接访问博客所在端口号,同时还能一键申请SSL证书,提高安全性
这样博客就搭建完成可以正常使用了。如果有流量问题,后面我会考虑购买CDN服务减少流量压力。