侧边栏壁纸
博主头像
Links'Blog 博主等级

躬自厚而薄责于人

  • 累计撰写 39 篇文章
  • 累计创建 41 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Docker-Compose安装Halo

安装 Docker 与 Nginx Proxy Manager


升级 packages


sudo -i # 切换到 root 用户

apt update -y  # 升级 packages

apt install wget curl sudo vim git -y  # Debian 系统比较干净,安装常用的软件

安装 Docker 环境


wget -qO- get.docker.com | bash # 国外源 如果服务器在国外使用该源
curl -sSL https://get.daocloud.io/docker | sh # 国内源 如果服务器在国内使用该源
docker -v  #查看 docker 版本
systemctl enable docker  # 设置开机自动启动

安装 Docker-compose


sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 国外源 如果服务器在国外使用该源
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # 国内源 如果服务器在国内使用该源
chmod +x /usr/local/bin/docker-compose
docker-compose --version  #查看 docker-compose 版本
curl -sSL https://get.daocloud.io/docker | sh  
sudo chmod +x /usr/local/bin/docker-compose # 赋予权限
docker-compose --version  #查看 docker-compose 版本

修改 Docker 配置


以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘

cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

然后重启 Docker 服务:

systemctl restart docker

安装 Nginx Proxy Manager


创建安装目录

sudo -i

mkdir -p /root/data/docker_data/npm

cd /root/data/docker_data/npm

vim docker-compose.yml

英文输入法下,按 i,黏贴下面的代码

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'  # 保持默认即可,不建议修改左侧的80
      - '81:81'  # 冒号左边可以改成自己服务器未被占用的端口
      - '443:443' # 保持默认即可,不建议修改左侧的443
    volumes:
      - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
      - ./letsencrypt:/etc/letsencrypt  # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中

按一下 esc,然后输入 :wq 保存退出,之后去买服务器网站打开防火墙的端口 81,查看端口是否被占用(以 81 为例),输入:

lsof -i:81  #查看 81 端口是否被占用,如果被占用,重新自定义一个端口

如果出现:-bash: lsof: command not found,运行:

apt install lsof  #安装 lsof

如果被占用了就修改一下端口,比如改成 82,注意 docker 命令行里和防火墙都要改

运行并访问 Nginx Proxy Manager

cd /root/data/docker_data/npm   # 来到 dockercompose 文件所在的文件夹下

docker-compose up -d

理论上我们就可以输入 http://ip:81 访问了。

Email:    admin@example.com
Password: changeme

关于更新 Nginx Proxy Manager


cd /root/data/docker_data/npm

docker-compose down 

cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive  # 万事先备份,以防万一

docker-compose pull

docker-compose up -d    # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像

更新中提示:

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]   # 输入 y

关于卸载 Nginx Proxy Manager


cd /root/data/docker_data/npm

docker-compose down 

rm -rf /root/data/docker_data/npm  # 完全删除映射到本地的数据

Docker-compose 安装 Halo


创建安装目录


sudo -i

mkdir -p /root/data/docker_data/halo

cd /root/data/docker_data/halo

vim docker-compose.yml

英文输入法下,按 I

version: "3"

services:
  halo:
    image: halohub/halo:2.11
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:

注意:修改上面代码中

  1. alo.external-url=http://localhost:8090/http://localhost:8090/改成自己的域名如:https://xxx.abc.com.
  2. test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]http://localhost:8090改成自己的域名如:https://xxx.abc.com.
  3. spring.r2dbc.password=o#DwN&JSa56修改密码!与下面保持一致
  4. MYSQL_ROOT_PASSWORD=o#DwN&JSa56修改密码!与上面保持一致

参数详解

参数名 描述
spring.r2dbc.url 数据库连接地址,详细可查阅下方的 数据库配置
spring.r2dbc.username 数据库用户名
spring.r2dbc.password 数据库密码
spring.sql.init.platform 数据库平台名称,支持 postgresqlmysqlh2
halo.external-url 外部访问链接,如果需要在公网访问,需要配置为实际访问地址
halo.cache.page.disabled 是否禁用页面缓存,如需页面缓存,手动添加此配置,并设置为 false。开启缓存后,默认一个小时会清理掉不活跃的缓存。

数据库配置:

链接方式 链接地址格式 spring.sql.init.platform
PostgreSQL r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} postgresql
MySQL r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} mysql
MariaDB r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE} mysql
H2 Database r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE h2

打开防火墙的端口 8090,查看端口是否被占用

lsof -i:8090

如果出现:bash: lsof: command not found,则需要安装 lsof

apt install lsof

最后回到创建的halo目录运行docker-compose

cd /root/data/docker_data/halo

docker-compose up -d

理论上我们就可以输入 http://ip:8090 访问安装了.

关于更新


cd /root/data/docker_data/halo

docker-compose down 

cp -r /root/data/docker_data/halo /root/data/docker_data/halo.archive  # 万事先备份,以防万一

docker-compose pull

docker-compose up -d    # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
0

评论区