Centos7部署halo

jefxff 153,863 2020-05-15

写这个的主要目的是为了腾讯云到期之后将halo博客部署到别的便宜的云服务器时简化部署, 不用再去网上一顿搜

主要有三个方面需要配置; 配置域名; 配置halo; 配置caddy

1. 配置域名

  1. 在各大云服务器厂商购买云服务器之后, 会分配一个公网IP, 需要做的就是将这个公网IP映射到自己购买的域名上, 这样的话, 就可以通过域名来访问购买的云服务器的IP

  2. 因为各大云服务器厂商的云服务器第一年费用基本上都在百元之内, 所以可以每年换一个云服务器厂商来降低使用成本

  3. 各大云服务器厂商购买链接

  4. 购买域名, 并且在域名管理页面上将域名映射到想要的Ip上面

2. 配置 Halo

  • 基础 - 更新软件包
sudo yum update -y
  • 基础 - 安装 Java 运行环境, 这是halo运行唯一需要的外部关联, 貌似Centos7是没有Java的, 需要自己安装
sudo yum install java-1.8.0-openjdk -y
  • 安装halo - 下载halo配置文件
# 下载配置文件到 ~/.halo 目录
curl -o ~/.halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml
  • 安装halo - 修改配置文件
# 使用 Vim 工具修改配置文件
vim ~/.halo/application.yaml

#-------------下面是application.yaml配置文件内容-------------

server:
  port: 8090 
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource

    # H2 Database 配置,如果你需要使用 MySQL,请注释掉该配置并取消注释 MySQL 的配置。
    driver-class-name: org.h2.Driver
    url: jdbc:h2:file:~/.halo/db/halo
    username: admin
    password: 123456

    # MySQL 配置,如果你需要使用 H2Database,请注释掉该配置并取消注释上方 H2Database 的配置。
    # 目前使用的是H2数据库, 如果要用MySQL, 需要使用5.7 以上版本, 而且预先创建halodb 数据库
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
#    username: root
#    password: 123456

  # H2 Database 的控制台相关配置,如果你使用的是 MySQL ,请注释掉下方内容。
  h2:
    console:
      settings:
        web-allow-others: false
      path: /h2-console
      enabled: false
  • 安装halo - 下载最新版halo, 并启动测试; 如果 wget 报错, 需要先安装 wget
# 下载最新的 Halo 安装包,{{version}} 为版本号,不带 v,更多下载地址请访问 https://halo.run/archives/download.html
wget https://dl.halo.run/release/halo-1.3.2.jar -O halo-latest.jar

# 启动测试
java -jar halo-latest.jar

2.1 完善 Halo 配置

  • 下载 Halo 官方的 halo.service 模板
sudo curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service
  • 修改下载的配置文件
# 修改 halo.service
sudo vim /etc/systemd/system/halo.service

#-------------下面是halo.service文件内容-------------
# 唯一需要修改的地方是 YOUR_JAR_PATH 改为下载的 halo-1.3.2.jar 的绝对路径
[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar /root/halo-1.3.2.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target

2.2 完善配置后, 常用命令

  • 每一次修改 halo.service 文件, 都需要刷新 Systemd
sudo systemctl daemon-reload
  • 设置 Halo 开机自启
sudo systemctl enable halo
  • 启动 Halo
sudo service halo start
  • 重启 Halo
sudo service halo restart
  • 停止 Halo
sudo service halo stop
  • 查看 Halo 的运行状态
sudo service halo status

3. 配置 Caddy

Caddy 是一款使用 Go 语言开发的 Web 服务器。其配置更为简洁,并可以自动申请及配置 SSL 证书

  • 安装 Caddy
# 安装 Caddy 软件包
yum install caddy -y
  • 配置 Caddy
# 下载 Halo 官方的 Caddy 配置模板
curl -o /etc/caddy/conf.d/Caddyfile.conf --create-dirs https://dl.halo.run/config/Caddyfile
  • 修改 Caddyfile.conf 配置文件
# 使用 vim 编辑 Caddyfile
vim /etc/caddy/conf.d/Caddyfile.conf

#-------------下面是Caddyfile.conf文件内容-------------	

https://xmcs.xyz {
  redir https://www.xmcs.xyz{url}
}

https://www.xmcs.xyz {
 gzip
 tls jefxff@outlook.com
 proxy / localhost:8090 {
  transparent
 }

3.1 Caddy 常用命令

  • 开启自启 Caddy 服务
systemctl enable caddy
  • 启动 Caddy
service caddy start
  • 停止运行 Caddy
service caddy stop
  • 重启 Caddy
service caddy restart
  • 查看 Caddy 运行状态
service caddy status

4. 用于启动的简易Shell小脚本

#! /bin/bash
# fileName: myhalo.sh

case $1 in 
   "start" )
        echo "[ 启动 ] halo ..."
        service halo start
        echo "[ 启动 ] Caddy ..."
        service caddy start
        ;;
   "stop")
        echo "[ 关闭 ] halo ..."
        service halo stop
        echo "[ 关闭 ] Caddy ..."
        service caddy stop
        ;;
    "status")
        echo "[ HALO ] 状态 ..."
        service halo status 
        echo "[ CADDY ] 状态 ..."
        service caddy status
        ;;
    "restart")
        echo "[ 重启 ] halo ..."
        service halo restart
        echo "[ 重启 ] Caddy ..."
        service caddy restart
        ;; 
esac
  • 赋予脚本执行的权限
# 赋予执行的权限
chmod +x myhalo.sh
# 或者
chmod 755 myhalo.sh

5. 使用nginx部署

之前使用Caddy部署是因为觉得简单,halo的教材很详细,这次(2021/6/16)部署的时候发现,halo的教程默认我们都能搞定,只是出了简单的CaddyFile, 所以就想着使用Nginx来部署,网上找了很多,发现都是利用宝塔面板来搞得,最终找到了 冷菌の博客是通过certbot来搞定SSL的,教程很详细,看着就能搞定!


# Linux 部署