前言

折折腾腾,终于把halo博客部署好,并且配置了又拍云全站加速。特在此记录一下“丰功伟绩”。下面正式开始折腾之旅。

1、安装MySQL5.7

首先保证服务器的软件包是最新版本的

update yum -y

1.1 安装MySQL源

# 下载
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

# 安装 mysql 源
yum localinstall mysql57-community-release-el7-11.noarch.rpm

1.2 检查MySQL源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

如下图即表示安装成功

image.png

1.3 安装MySQL5.7

yum install -y mysql-community-server

1.4 设置开机自启

systemctl enable mysqld

1.5 启动MySQL服务

systemctl start mysqld

1.6 查看MySQL状态

systemctl status mysqld

如下图即表示MySQL已经正常运行

image.png

1.7 修改root密码

mysql 安装完成之后,生成的默认密码在 /var/log/mysqld.log 文件中。使用 grep 命令找到日志中的密码。

grep 'temporary password' /var/log/mysqld.log

如下图,localhost:之后的 WZ?J1dEryfAs 就是初始密码

image.png

首次通过初始密码登录后,使用以下命令修改密码。

# 登录
mysql -uroot -p

# 修改
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

注意:mysql5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误。

1.8 设置默认编码为utf8

mysql 安装后默认不支持中文,需要修改编码。
修改 /etc/my.cnf 配置文件,在相关节点(没有则自行添加)下添加编码配置,如下:

[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

重启mysql服务,查询编码。

# 重启
systemctl restart mysqld

# 登录
mysql -uroot -p
# 查看
show variables like 'character%';

如下图即表示编码修改成功

image.png

1.9 修改root账户远程访问

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改 root 为允许远程连接。(官方不推荐修改root用户为允许远程访问,推荐的做方法是创建一个允许远程访问的账户。)

# 登录
mysql -uroot -p
# 切换数据库
use mysql;

# 修改root账户访问权限
UPDATE user SET Host='%' WHERE User='root';

# 刷新权限
flush privileges;

至此,阿里云服务器上就已经安装好了MySQL5.7,使用可视化工具连接MySQL,并创建halo博客的数据库。

create database halodb character set utf8mb4 collate utf8mb4_bin;

2、安装halo

2.1 安装 Java 运行环境

# 安装 OpenJRE
sudo yum install java-1.8.0-openjdk -y

# 检测是否安装成功
java -version

2.2 下载配置文件

# 下载配置文件到 ~/.halo 目录
curl -o ~/.halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml

2.3 修改配置文件

# 使用 Vim 工具修改配置文件
vim ~/.halo/application.yaml

注释掉 h2 数据库的连接信息,放开 MySQL 相关的配置,并将密码修改为之前安装 MySQL5.7 时设置的密码,此处为:MyNewPass4!

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 的配置。
    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: MyNewPass4!

  # H2 Database 的控制台相关配置,如果你使用的是 MySQL ,请注释掉下方内容。
  h2:
    console:
      settings:
        web-allow-others: false
      path: /h2-console
      enabled: false

修改完成后保存退出即可。

2.4 运行 Halo

# 下载最新的 Halo 安装包,{{version}} 为版本号,不带 v,更多下载地址请访问 https://halo.run/archives/download.html
wget https://dl.halo.run/release/halo-{{version}}.jar -O halo-latest.jar

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

如看到以下日志输出,则代表启动成功。

run.halo.app.listener.StartedListener    : Halo started at         http://127.0.0.1:8090
run.halo.app.listener.StartedListener    : Halo admin started at   http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener    : Halo has started successfully!

提示:
以上的启动仅仅为测试 Halo 是否可以正常运行,如果我们关闭 ssh 连接,Halo 也将被关闭。要想一直处于运行状态,请继续看下面的教程。

2.5 进阶配置

# 下载 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

打开之后我们可以看到

[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target

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

StandError=inherit

[Install]
WantedBy=multi-user.target

参数说明:

  • -Xms256m:为 JVM 启动时分配的内存,请按照服务器的内存做适当调整,512 M 内存的服务器推荐设置为 128,1G 内存的服务器推荐设置为 256,默认为 256。
  • -Xmx256m:为 JVM 运行过程中分配的最大内存,配置同上。
  • YOUR_JAR_PATH:Halo 安装包的绝对路径,此处为 /root/halo-latest.jar
# 修改 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

完成以上操作即可通过 IP:端口 访问了。不过在此之前,最好先完成后续操作,我们还需要让域名也可以访问到 Halo,请继续往下看。

3、配置域名访问

3.1 安装nginx

# 添加 Nginx 源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 安装 Nginx
sudo yum install -y nginx

# 启动 Nginx
sudo systemctl start nginx.service

# 设置开机自启 Nginx
sudo systemctl enable nginx.service

3.2 配置nginx

# 下载 Halo 官方的 Nginx 配置模板
curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf

# 使用 vim 编辑 halo.conf
vim /etc/nginx/conf.d/halo.conf

打开之后可以看到

server {
    listen 80;

    server_name example.com;

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8090/;
    }
}

注意:请把 example.com 改为自己的域名。

修改完成之后

# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

3.3 配置ssl证书

创建证书存放目录

mkdir -p /etc/nginx/ssl

然后将下载的证书放到 /etc/nginx/ssl 目录下。

image.png

修改 halo.conf 配置文件

vim /etc/nginx/conf.d/halo.conf

修改为如下所示

server {
    listen 80;
    server_name codesensi.top;

    return  301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;

    server_name codesensi.top;
  
    ssl_certificate              /etc/nginx/ssl/4312001_codesensi.top.pem;
    ssl_certificate_key          /etc/nginx/ssl/4312001_codesensi.top.key;
    ssl_session_cache? ?         shared:SSL:1m;
    ssl_session_timeout?         5m;
    ssl_ciphers?                 HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers?   on;
    
    client_max_body_size 1024m;

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8090/;
    }
}

修改完成之后

# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

至此,halo博客的部署已经完成,可以用域名进行访问。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议