身为程序员,一直想拥有一个自己的博客,因为各种原因(懒)拖延了很久。这次心血来潮总算想起来,在此分享下我的建站经历和踩过的坑。

环境搭建

  1. 租赁云服务器

​ 首先我需要一个服务器来运行相关程序。云服务器厂商有很多,阿里云、京东云、华为云等等,我自己随便选了个京东云(有优惠)。因为博客不需要太好的配置,租一个轻量云主机就够了
云主机1.png

  1. 系统初始化

​ 租好服务器后,服务器会引导你选择场景来搭建系统。
云主机2.png

我尝试了里面提供的Ubuntu系统和Windows Server系统,发现使用起来很困难,最后选择了宝塔面板。

Ubuntu纯命令行,操作麻烦
Windows Server需要远程接入操控,操作有延迟且搭建开发环境繁琐
宝塔面板提供可视化操作,方便新手使用,可以一键安装各种环境

宝塔面板:云主机3.png
第一次进入宝塔会自动帮你安装Docker、Mysql等环境

[!IMPORTANT]

由于服务器的防火墙规则会对入流量进行控制,如果想从公网访问服务器内的应用(宝塔控制面板、博客等),需要在主机的管理面板对相应端口添加规则
例如:宝塔面板默认端口是8888,则需要给8888端口添加规则

部署博客

常用的开源博客有Wordpress、halo、hexo等。其中Wordpress是功能最强大的,社区也是最活跃的。不过我还是选择了用halo搭建博客,因为halo是用Java编写的,方便我以后自己改造。

halo首页

halo文档

部署步骤

使用Docker Compose部署(参考页面

在初始化宝塔面板时已经安装好了Docker和Docker Compose,可以立即开始部署

  1. 创建halo项目的文件夹

mkdir ~/halo && cd ~/halo
  1. 在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。上论坛搜了下发现是因为这个方案分为博客程序容器和数据库容器,博客容器需要配置参数链接到数据库容器才行,试了几个方案都没能成功,最后还是选择了外部数据库部署方案,只需要管理一个博客容器就行

  1. 启动 Halo服务
docker-compose up -d

可以实时查看日志:

docker-compose logs -f

如果成功启动的话,就能通过 http://服务器公网ip:8090/console 访问 Halo 管理页面
记得要在防火墙中给端口8090增加规则

域名管理

此时已经能通过公网ip加端口号访问博客了,但是一个合格的博客还需要拥有自己的域名。一般可以直接在自己服务商那里申请。
域名管理1.png

  1. 挑选自己想要的域名(需要付费)
  2. 域名备案:拥有域名后需要备案才能正常使用,跟着流程填写相关信息和相关资料后等待官方审核通过即可(一般要十几天)。期中服务商会打电话确认,要注意不要漏接
  3. 备案通过后需要通过DNS解析将域名指向我们主机的公网ip。
    这些在自己服务器控制台中都有详细指引,照着操作没有难度

反向代理

反向代理指客户端访问反向代理服务器,反向代理再将请求转发给目标服务器。可以隐藏目标服务器的真实身份,提高安全性。一般用Nginx作为反向代理
由于Nginx配置需要一定基础,可以按Halo说明文档中安装 Nginx Proxy Manager 来简易配置
反向代理.png
这样便可以用博客的子域名直接访问博客所在端口号,同时还能一键申请SSL证书,提高安全性


这样博客就搭建完成可以正常使用了。如果有流量问题,后面我会考虑购买CDN服务减少流量压力。