docker搭建halo博客系统
1. 安装docker
#移除旧的版本:避免安装中出现冲突导致安装失败
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
#安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#添加软件源信息,使用阿里云的镜像,不配置镜像下载可能会很慢
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新 yum 缓存:
sudo yum makecache fast
#安装 Docker-ce:
sudo yum -y install docker-ce
#启动 Docker 后台服务
sudo systemctl start docker
docker -v
查看是否安装成功
2. 安装mysql(不配置数据库默认使用halo自带的H2数据库,用于生产最好还是重新安装一个数据库)
#拉取镜像
docker pull mysql:8.0.30
#创建目录()
mkdir -p /app/docker/mysql/data
mkdir -p /app/docker/mysql/conf
mkdir -p /app/docker/mysql/log
#启动容器
docker run -p 3306:3306 --name mysql \
-v /app/docker/mysql/log:/var/log/mysql \
-v /app/docker/mysql/data:/var/lib/mysql \
-v /app/docker/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql:8.0.30
#进入mysql
docker exec -it mysql bash
mysql -uroot -p1234
3. 创建数据库
#创建数据库 halodb
CREATE DATABASE IF NOT EXISTS halodb
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
4. 创建工作目录,并下载统一配置文件到该目录
mkdir ~/.halo && cd ~/.halo
#下载配置文件,完成后会出现一个application.yaml的文件
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml --no-check-certificate
#修改配置文件
vi application.yaml
使用mysql需要修改配置文件,不使用mysql的话不用修改配置文件
使用mysql,修改后的配置文件:
server:
port: 8090
# Response data gzip.
compression:
enabled: false
spring:
datasource:
# MySQL database configuration.
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.17.0.2:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 1234
halo:
# Your admin client path is https://your-domain/{admin-path}
admin-path: admin
# memory or level
cache: memory
注意:
由于使用的是docker部署,docker容器之间没有配置网络的话是不能通过127.0.0.1环回地址访问另一个容器中的mysql容器的,需要知道mysql容器暴露的ip才行。
#查看mysql的容器名称
docker ps -a
#查看容器信息
docke inspect mysql(容器名)
IPAddress就是对应的id地址啦
得到ip后把url中的ip,还有数据库密码替换掉就可以了
5. 拉取镜像,因为一些主题不支持高版本,所以我这里还是使用的较低版本。高版本的安装可以通过docker compose统一安装。
#拉取镜像
docker pull halohub/halo:1.5.2
docker run -it -d --name halo \ #容器名称
-p 8090:8090 \ #配置容器到主机的端口映射
-v ~/.halo:/root/.halo \ #数据重定向到指定目录
--restart=unless-stopped halohub/halo:1.5.2 #镜像名称
安装完成后就可以通过就可以通过主机公网ip+8090端口进行访问了。如果不能访问,可以查看/root/.halo/log目录下的启动日志进行查看。
6. Nginx代理域名
docker pull nginx
# 创建挂载目录
mkdir -p ~/docker/nginx/conf
mkdir -p ~/docker/nginx/log
#容器中的nginx.conf文件和conf.d文件夹复制到宿主机
# 生成容器
docker run -it -d --name nginx -p 9960:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf ~/docker/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d ~/docker/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html ~/docker/nginx
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
# 删除正在运行的nginx容器
docker rm -f nginx
#重新启动容器,并配置启动参数
docker run \
-p 9960:80 \
--name nginx \
-v ~/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v ~/docker/nginx/log:/var/log/nginx \
-v ~/docker/nginx/html:/usr/share/nginx/html \
-d nginx:latest
若nginx启动成功,可以通过主机公网 ip + 9960 访问到nginx的欢迎界面。
进入 ~/docker/nginx/conf/nginx.conf
目录下修改default.conf配置文件,halo容器的端口跟mysql一样,用 docker inspect name
查看
upstream halo {
server 172.17.0.3:8090;
}
server {
listen 80;
listen [::]:80;
server_name www.yourdomain.com;
client_max_body_size 1024m;
location / {
proxy_pass http://halo;
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;
}
}
重启容器nginx容器使配置生效。
docker restart nginx
最后就可以通过域名访问到你的博客啦!