侧边栏壁纸
博主头像
babajaja博主等级

种一棵树最好的时机是十年前,其次是现在。

  • 累计撰写 6 篇文章
  • 累计创建 7 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

快速搭建一个Blog网站-Docker+Halo

babajaja
2024-06-27 / 0 评论 / 0 点赞 / 84 阅读 / 8620 字

背景

在早之前基于Hexo+Gitee搭建了一个网站,近期无法访问了,发现是Gitee Pages服务暂停服务了。

刚好自己有一台云服务器和一个域名,那就重新再搭建一个网站,经过之前的使用体验,Hexo主题很多且好看,问题也很容易找到答案,因为也支持了docker,搭建很方便。但使用Hexo搭建的静态网站还是感觉存在一些麻烦,如:

  • Hexo没有后台,需要在本地配置环境进行触发部署更新(NodeJS、Gitee的一系列配置)

  • Markdown文件只能在本地编辑,不能在线编辑,所以图片只能加载OSS存储的方式插入(需额外使用OSS)

  • 没有评论系统,需要外接评论系统

需求

  • 搭建在云服务器上,使用域名访问

  • 能编辑Markdown文档,图片直接插入

  • 维护方便,包括文档更新,文档数量增加后加载不慢

通过对比市面上的博客框架,发现Halo能完美符合要求,可以使用Docker快速部署和维护,社区也较活跃,除了稍微吃资源,服务器内存需1G+

搭建

安装Docker

建议安装官方的最新版本Docker,低版本的Docker安装Halo坑会出现不兼容情况

创建Halo安装目录

sudo -i

mkdir  -p /usr/local/software/halo

cd /usr/local/software/halo

创建docker-compose.yml文件

vim docker-compose.yml

i插入内容(英文输入法)

如果粘贴时,出现自动缩进和连续注释,可以通过 :set paste 进入粘贴插入模式再粘贴

version: "3"

services:
  halo:
    image: halohub/halo:2.16
    container_name: babajajaBlog
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://babajaja.cn/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=admin
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=P@88w0rd

  halodb:
    image: mysql:8.1.0
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    command:
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:

注:docker-compose.yml中halo:2.16是安装版本2.16.x的版本,可在https://github.com/halo-dev/halo/releases 查看最新版本

"8090:8090" 中前面8090是服务器的端口,可以更改为自己想要对外的端口,后面8090是halo容器里的进程端口

--halo.external-url=http://babajaja.cn/ ,其中的http://babajaja.cn/ 需要更改为你的域名,如果你打算用的域名是abc.com也就是要改成--halo.external-url=https://abc.com,官方默认是http://localhost:8090/

--spring.r2dbc.password=o#DwN&JSa56MYSQL_ROOT_PASSWORD=o#DwN&JSa56 一定要改密码,两个密码要保持一致

--halo.security.initializer.superadminpassword=P@88w0rd 记得改密码

MySQL的端口不是"3306:3306"是安全考虑,不在公网暴露halo数据库的端口

然后按一下esc,然后 :wq 保存退出。

开放端口

在云服务器的 控制台-实例-安全组 对外开发端口8090,这里每个人可能是不同服务器厂商和不同端口,自行按情况配置哈。

如果服务器上还开启了防火墙(大部分云服务器都是默认关闭),可以关闭防火墙或者设置防火墙的端口出入规则

查看端口是否被占用

lsof -i:8090

如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~

如果出现

-bash: lsof: command not found

就需要安装lsof

yum -y install lsof     # Centos系统执行yum安装
apt install lsof 	    # Debian、Ubuntu系统执行apt安装

安装Halo2.0

安装Halo

执行命令安装

cd /usr/local/software/halo #到docker-compose.yml文件目录下

docker-compose up -d 

正常情况下,我们到浏览器输入http://babajaja.cn:8090/就可以访问了

后续可以考虑配置nginx进行端口转发,访问就可以不带端口了

更新Halo

cd /usr/local/software/halo

docker-compose down 

cp -r /usr/local/software/halo /usr/local/software/halo.archive  # 万事先备份,以防万一

docker-compose pull

docker-compose up -d    # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像

卸载Halo

cd /usr/local/software/halo

docker-compose down

cd ..

rm -rf /usr/local/software/halo  # 完全删除映射到本地的数据

安装主题

浏览器输入http://babajaja.cn:8090/console/ 网址+/console可以访问后台

进入后台页面后,点击 主题-主题管理-应用市场 选择自己喜欢的风格的主题,我选择的是Joe 3.0,点击安装

也可以直接到应用市场浏览主题

安装完后,你会发现实际还没生效,需要到 主题-主题管理-已安装 在想要的主题下点击启用即可

插件安装

插件-安装-应用市场,选择想要的插件,点击安装

参考文档

【好玩儿的Docker项目】好用又强大的开源建站工具——Halo 2.0:https://blog.laoda.de/archives/docker-compose-install-halo-version-2

Halo 文档:https://docs.halo.run/

Halo GitHub地址:https://github.com/halo-dev/halo

Halo插件地址:https://github.com/halo-sigs/awesome-halo

Docker 安装文档:https://docs.docker.com/engine/install/

Docker Compose 安装文档:https://docs.docker.com/compose/install/

0

评论区