使用docker部署属于自己的Halo

1. 安装docker

以下方式来自菜鸟教程

1.1 使用 Docker 仓库进行安装,清华大学镜像

sudo dnf -y install dnf-plugins-core
sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

1.2 安装docker

sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.3 设置自启动并运行docker

sudo systemctl start docker
sudo systemctl enable docker

docker官方参考文档:https://docs.docker.com/engine/install/

2. 通过docker部署Halo

下载并创建容器

docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 -e JVM_OPTS="-Xmx256m -Xms256m" registry.fit2cloud.com/halo/halo:2.21

此命令默认使用自带的 H2 Database 数据库

3. 部署nginx,配置反向代理

下载并创建nginx容器

# 创建挂载用的文件夹
mkdir -p /data/docker/nginx/{conf,conf.d,html,logs}
#获取镜像
docker pull nginx:latest
# 创建临时容器获取Nginx默认配置
docker run -d --name nginx nginx
# 存放 Nginx 主配置文件
mkdir -p /data/docker/nginx/conf
# 存放虚拟主机配置
mkdir -p /data/docker/nginx/conf/conf.d
# 存放 Nginx 日志
mkdir -p /data/docker/nginx/log
# 存放网站静态文件
mkdir -p /data/docker/nginx/html
# 拷贝默认配置文件
docker cp nginx:/etc/nginx/nginx.conf /data/docker/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /data/docker/nginx/conf/
docker cp nginx:/usr/share/nginx/html /data/docker/nginx/
docker stop nginx
docker rm nginx
# 部署docker容器
docker run --restart=always -d --name nginx \
-p 80:80 \
-p 443:443 \
-v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/docker/nginx/log:/var/log/nginx \
-v /data/docker/nginx/html:/usr/share/nginx/html \
-v /mnt/volumn:/mnt/volumn \
nginx:latest

修改ngixn.conf配置文件,使网站可以通过域名访问

server {
        listen 80;
        server_name demo.fun www.demo.fun;
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        server_name demo.fun www.demo.fun;

        ssl_certificate SLL证书.pem的存放位置;
        ssl_certificate_key SSL证书.key的存放位置;
  
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass docker创建的虚拟网桥docker0的IP:8090;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

4. 测试能否访问

# 此时应该可以ping通域名
ping demo.fun
ping www.demo.fun
# 浏览器直接访问域名
https://www.demo.fun

5. 可能遇到的问题

80、443、8090端口没有放行,云服务的控制台里检查安全组里查看是否添加规则,终端里检查防火墙

# 检查防火墙状态
systemctl status firewalld
# 检查防火墙端口规则
firewall-cmd --list-all
# 永久开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重载配置生效
firewall-cmd --reload