安装 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:
注意:修改上面代码中
alo.external-url=http://localhost:8090/
的http://localhost:8090/
改成自己的域名如:https://xxx.abc.com.test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
的http://localhost:8090
改成自己的域名如:https://xxx.abc.com.spring.r2dbc.password=o#DwN&JSa56
修改密码!与下面保持一致MYSQL_ROOT_PASSWORD=o#DwN&JSa56
修改密码!与上面保持一致
参数详解
参数名 | 描述 |
---|---|
spring.r2dbc.url |
数据库连接地址,详细可查阅下方的 数据库配置 |
spring.r2dbc.username |
数据库用户名 |
spring.r2dbc.password |
数据库密码 |
spring.sql.init.platform |
数据库平台名称,支持 postgresql 、mysql 、h2 |
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 标记和未被容器使用的镜像
评论区