好久没有写文章了,前段时间又稍微学习了一下docker。
99ai是通过nodejs,pm2 运行的,在1panel不支持pm2方式部署。
除了直接安装nodejs环境,docker是另一种很好的方式。
上传文件到目录并解压
将压缩包上传并解压到程序目录
打包镜像并运行容器
这里要通过docker配置打包镜像,有三个文件需要修改。
.env.docker
# server base
PORT=9520
DB_HOST=1Panel-mysql-IA12
DB_PORT=3306
DB_USER=aidatabasename
DB_PASS=FxY1rGsBNtFphb17
DB_DATABASE=aidatabasename
DB_SYNC=true
# Redis
REDIS_PORT=6379
REDIS_HOST=1Panel-redis-1fRh
REDIS_PASSWORD=123456
REDIS_USER=
REDIS_DB=0
# 是否测试环境
ISDEV=FALSE
# 自定义微信URL
weChatOpenUrl=https://open.weixin.qq.com
weChatApiUrl=https://api.weixin.qq.com
weChatMpUrl=https://mp.weixin.qq.com
# 自定义后台路径
ADMIN_SERVE_ROOT=/admin
Dockerfile
//这里好像没什么特别的
//有时候不同操作系统可能会出现一些彩蛋,自己看着处理
//我忘了用默认出什么报错了,好像是npm那里,我将编译和构建的镜像都修改成了node:22.9.0-alpine
# 编译阶段
FROM node:22.9.0-alpine AS build
# 运行阶段
FROM node:22.9.0-alpine AS runner
docker-compose.yml
services:
99ai:
build: ./
container_name: 99ai
restart: always
ports:
- "9520:9520"
volumes:
- /home/docker/data/ai/.env:/app/.env
- /home/docker/data/ai/file:/app/public/file
environment:
- TZ=Asia/Shanghai
networks:
- 1panel-network
networks:
1panel-network:
external: true
关于docker-compose.yml文件
这里应为我是使用的1panel,已经安装过redis、MySQL,就将文件里带的删除了。
关于volumes
这里使用的挂载将文件映射到主机
主要特点:
- 持久性:卷中的数据不会随着容器的删除而丢失。即使容器被删除或重建,卷中的数据仍然存在。
- 共享数据:可以在多个容器之间共享卷,使得它们能够访问同一份数据。
- 性能:卷通常比容器内的文件系统更高效,尤其是在写入数据时。
- 备份和恢复:可以很方便地备份卷中的数据,或者将其恢复到其他位置。
我将.env和file文件夹映射了出来,可根据自己需求修改文件名和路径。
.env是.env.docker容器里映射出来的配置文件
file文件夹是使用本地上传时的文件目录,确保删除/重建容器时上传的文件不被删除。
关于network
因为其他容器使用的1panel的默认docker网络,所以这里添加修改了这一点。
修改完成上述三个文件后进入终端(确保在该文件目录)执行命令:
docker-compose build
docker-compose up -d
这样到容器页面(或终端执行docker ps)即可看到一个99ai程序已经运行起来了。
绑定域名
在网站处创建网站,选择反向代理,主域名处填写你的域名,在代理地址处填写127.0.0.7:9520创建即可。