Docker 部署 Halo2.20 | Hello Halo

JC39
JC39
Published on 2024-10-29 / 102 Visits
0
0

序1:Docker 常用命令

docker

# 列出所有镜像
docker images
# 拉取镜像
docker pull <image_name>:<tag>
# 删除镜像
docker rmi <image_name>:<tag>
docker rmi <image_id>
# 查看镜像信息
docker manifest inspect <image_name>:<tag>

# 启动容器并进入 shell 环境,开发和测试用
docker run -it <image_name>:<tag>      # 退出后手动清理
docker run -it --rm <image_name>:<tag> # 退出后自动清理
docker run -it --entrypoint /bin/bash <image_name>:<tag>
# 启动容器,后台运行
docker run -d <image_name>:<tag>
docker run -d --name <container_name> <image_name>:<tag> # 指定容器名称
# 停止运行
docker stop <container_name_or_id>
# 删除容器
docker rm <container_name_or_id>

# 进入运行中容器的 shell 环境
docker exec -it <container_name_or_id> /bin/bash
docker exec -it <container_name_or_id> /bin/sh
# 查看日志,追踪模式
docker logs -f <container_name_or_id>

# 构建镜像,设置标签,最后一个'.'将使用当前目录
docker build -t <image_name>:<tag> .
# 导出镜像
docker save -o <tar_name>.tar <image_name>:<tag>
# 导入镜像
docker load -i <tar_name>.tar

docker compose

# 全部重启 restart.sh
#!/bin/sh
sudo docker compose -f docker-compose.yml down        # 停止
sudo docker compose -f docker-compose.yml up --detach # 启动

# 单个重启 restart1.sh
#!/bin/sh
if [ -z "${1}" ]; then
    echo "error: server-name is empty."
    exit 1
fi
sudo docker compose -f docker-compose.yml stop ${1}        # 停止
yes | sudo docker compose -f docker-compose.yml rm ${1}    # 删除
sudo docker compose -f docker-compose.yml up ${1} --detach # 启动

序2:PostgreSQL 常用命令

\du          # 列出全部用户
\l           # 列出全部数据库
\c <db_name> # 切换数据库
\q           # 退出

select rolname, rolpassword from pg_authid; # 查看用户密码状态

拉取资源

sudo docker pull linuxserver/nginx:latest
sudo docker pull postgres:15
sudo docker pull halohub/halo:2.20
sudo docker images # 查看已安装镜像

编写 docker-compose 配置文件

mkdir docker-compose && cd docker-compose # 之后所有操作都在此文件夹下进行
mkdir docker-volume
touch docker-compose.yml # docker-compose 配置文件

PostgreSQL15 容器配置

services:
  postgresql15:
    image: postgres:15
    container_name: postgresql15
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: "P@ssword123"
    volumes:
      - ./docker-volume/postgresql/data:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - app_net


networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: "172.16.240.0/24"

环境变量中的账密只作用于首次启动时的初始化操作,之后再修改这里并不能同步修改数据库的账密。

sudo docker compose -f docker-compose.yml up postgresql15 --detach,启动 PG15 容器。

sudo docker ps,等待 PG15 状态变成 healthy,开始初始化 halo 数据库:

sudo docker exec -it postgresql15 psql -U postgres # 进入容器,并使用默认用户登录
CREATE USER halo WITH PASSWORD 'P@ssword123';      # 创建 halo 账密
CREATE DATABASE halo2_db OWNER halo;               # 创建 halo2_db 数据库
GRANT ALL PRIVILEGES ON DATABASE halo2_db TO halo; # 授权
exit                                               # 退出容器

Nginx、Halo2 容器配置

services:
  nginx:
    image: linuxserver/nginx:latest
    container_name: nginx
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./docker-volume/nginx/config:/config
    ports:
      - 8902:8902 # http
      - 8904:8904 # https
    restart: unless-stopped
    networks:
      - app_net

  halo2:
    image: halohub/halo:2.20
    container_name: halo2
    depends_on:
      postgresql15:
        condition: service_healthy
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://postgresql15/halo2_db
      - --spring.r2dbc.username=halo
      - --spring.r2dbc.password=P@ssword123
      - --spring.sql.init.platform=postgresql
      - --halo.external-url=http://localhost:8090/
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      - JVM_OPTS=-Xmx256m -Xms256m
    volumes:
      - ./docker-volume/halo2:/root/.halo2
    restart: unless-stopped
    networks:
      - app_net

  postgresql15:
    image: postgres:15
    container_name: postgresql15
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: "P@ssword123"
    volumes:
      - ./docker-volume/postgresql/data:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - app_net


networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: "172.16.240.0/24"

sudo docker compose -f docker-compose.yml up --detach,启动全部容器,用于自动创建挂载卷的文件夹。

vim docker-volume/nginx/config/nginx/site-confs/default.conf,编辑 Nginx 配置:

server {
    listen 8902          default_server;
    listen [::]:8902     default_server;
    listen 8904 ssl      default_server;
    listen [::]:8904 ssl default_server;

    server_name _;

    include /config/nginx/ssl.conf;


    # halo2
    location / {
        proxy_pass http://halo2: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;
        proxy_redirect off;
    }
}

生成自签证书:

openssl genpkey -algorithm RSA -out docker-volume/nginx/config/keys/cert.key
openssl req -x509 -key docker-volume/nginx/config/keys/cert.key -out docker-volume/nginx/config/keys/cert.crt -days 3650 # 有效期 10 年,按实际情况填写其余信息

重启全部容器,生效修改的配置:

sudo docker compose -f docker-compose.yml down
sudo docker compose -f docker-compose.yml up --detach

其他

  • 访问 http://127.0.0.1:8902 或 https://127.0.0.1:8904,完成 Halo2 初始化。

  • 默认主题遇到 404 时,显示的返回首页按钮指向的 URL 是 localhost 而不是真实对外 IP,可以直接隐藏掉按钮。编辑docker-volume/halo2/themes/theme-earth/templates/error/error.html,注释掉包含<span th:text="#{page.error.backToHome}">的整个<a>标签。

Hello Halo

Hello Halo

如果你看到了这一篇文章,那么证明你已经安装成功了,感谢使用 Halo 进行创作,希望能够使用愉快。

相关链接

在使用过程中,有任何问题都可以通过以上链接找寻答案,或者联系我们。

这是一篇自动生成的文章,请删除这篇文章之后开始你的创作吧!


Comment