准备工作

切换到root用户

1
sudo -i

升级packages
Debian系统比较干净,安装常用的软件

1
2
apt update -y  
apt install wget curl sudo vim git

halo官方要求mysql数据库需要5.7+,8.0需要6RAM以上,推荐就5.7。php和phpmyadmin选最新,其他随意。
默认是使用的H2数据库使用mysql数据库则将H2配置打上注释,将mysql配置注释放开修改username和password为mysql的账号和密码,密码在宝塔数据库界面可查看若在容器中使用数据库,则需要将127.0.0.1换成数据库的容器名,端口为容器内部端口 例:将127.0.0.1:3306换成blog_mysql:3306以下根据个人需求配置: port为halo博客运行的端口

(centos、ubuntu/debian)安装docker

1
2
3
4
5
6
#centos 安装 docker
yum -y install docker
#ubuntu/debian 安装 docker
wget -qO- https://get.docker.com/ | sh
#查看 Docker 版本
docker version

安装完成。
启动 Docker 后台服务

1
service docker start

启动 Docker 后台服务

1
service docker start

开机自动启动

1
systemctl enable docker.service

创建halo项目文件夹

1
mkdir ~/.halo && cd ~/.halo

下载示例配置文件到 工作目录

1
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

使用 Vim 工具修改配置文件application.yaml

vim ~/.halo/application.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
server:
port: 8090

# Response data gzip.
compression:
enabled: true
spring:
datasource:

# H2 database configuration.
# driver-class-name: org.h2.Driver
# url: jdbc:h2:file:~/.halo/db/halo
# username: admin
# password: 123456

# MySQL database configuration.
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.17.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123456

# H2 database console configuration.
# h2:
# console:
# settings:
# web-allow-others: false
# path: /h2-console
# enabled: false

halo:

# Your admin client path is https://your-domain/{admin-path}
admin-path: admin

# memory or level
cache: memory

①直接使用本地数据库

进入mysql

1
mysql -u root -p

创建halodb数据库

1
create database halodb character set utf8mb4 collate utf8mb4_bin;

注意这里官方要求字符集为utf8mb4,排序规则为utf8mb4_bin

拉取最新的 Halo 镜像

1
docker pull halohub/halo:1.6.1

从 1.4.3 开始,Docker 镜像已经转移到 halohub 组织,不再是 ruibaby/halo

创建halo容器并使用本地数据库

1
docker run -itd --net host --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.6.1

参数说明:

-i, 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
-t, 分配一个伪tty,一般与 -i 连用
-d,在后台运行容器,并且打印容器id

  • -name,容器名
  • -net,指定容器的网络配置
  • -net=bridge 这个是默认值,连接到默认的网桥。
  • -net=host 容器使用本地主机的网络,它拥有完全的本地主机接口访问权限
  • -net=container:NAME_or_ID 让Docker使用其他容器的网路,共享IP和PORT等网络资源,两者进程可以直接通过 lo 环回接口通信
  • -net=none 容器使用自己的网络,但是不进行网络配置,之后用户可以自行配置

-p, 容器内部端口绑定到指定的主机端口,主机端口:容器端口
-v, 挂载目录,这里是将主机的目录~/.halo挂载到容器的目录/root/.halo上
–restart=unless-stopped,当docker重启时,容器自动启动
docker默认的网络模式是bridge,因此默认容器内无法访问本地127.0.0.1

②利用容器间的关联使用容器中的数据库

拉取mysql5.7镜像

1
docker pull mysql:5.7

创建并启动mysql容器

1
2
3
4
5
6
7
#docker run -p 3306:3306 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-p : 端口映射,使得外部可以通过虚拟机的3306端口访问容器的3306端口
--name :the name of the container
-e :the password of the root user
-d :后台运行

docker run -p 3306:3306 --name halo_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • -name,容器名-e 设置环境变量,MYSQL_ROOT_PASSWORD为数据库密码,自行修改,用户名默认root

进入容器

1
docker exec -it halo_mysql /bin/bash

进入mysql并创建halo必要数据库halodb,注意字符集和排序规则

1
2
mysql -u root -p
create database halodb character set utf8mb4 collate utf8mb4_bin;

拉取最新的 Halo 镜像

1
docker pull halohub/halo:1.6.1

创建halo容器并使其关联数据库容器

1
docker run -itd --name halo --link halo_mysql -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.6.1

参数说明:

-i, 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
-t, 分配一个伪tty,一般与 -i 连用
-d,在后台运行容器,并且打印容器id

  • -name,容器名
  • -link,指定容器间的关联
    -p, 容器内部端口绑定到指定的主机端口,主机端口:容器端口
    -v, 挂载目录,这里是将主机的目录~/.halo挂载到容器的目录/root/.halo上
  • -restart=always,当docker重启时,容器自动启动
    PS:如果要使用外部数据库管理工具远程管理mysql,则需要用户开启远程登录功能
    1
    2
    Grant all privileges on *.* to 'root'@'%' identified by ‘password’with grant option;
    flush privileges; 刷新权限

    . 为 数据库.表 ,root为用户,%代表所有主机 ,password处填写用户密码

注意事项

创建并启动halo容器后,会有20s左右的初始化建表时间,初始化后在数据库halodb当中能看见自动创建的表,若没有表,请检查问题
Halo工作目录的绝对路径为 ~/.halo,这个工作目录是固定的,Halo容器运行后里面通常包含下列目录或文件:
db:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录
templates/themes:里面包含用户所下载的主题
static:相当于网站的根目录
logs:运行日志目录
application.yaml:配置文件

放行端口80 443 8090!!!
云服务器防火墙和宝塔的防火墙两边都要放行!!!

到这里我们就可以以http://ip:8090的方式访问halo安装程序了
可以先配置好域名访问和SSL再进行安装