好久没有写文章了,前段时间又稍微学习了一下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

这里使用的挂载将文件映射到主机

主要特点:

  1. 持久性:卷中的数据不会随着容器的删除而丢失。即使容器被删除或重建,卷中的数据仍然存在。
  2. 共享数据:可以在多个容器之间共享卷,使得它们能够访问同一份数据。
  3. 性能:卷通常比容器内的文件系统更高效,尤其是在写入数据时。
  4. 备份和恢复:可以很方便地备份卷中的数据,或者将其恢复到其他位置。

我将.env和file文件夹映射了出来,可根据自己需求修改文件名和路径。

.env是.env.docker容器里映射出来的配置文件

file文件夹是使用本地上传时的文件目录,确保删除/重建容器时上传的文件不被删除。

关于network

因为其他容器使用的1panel的默认docker网络,所以这里添加修改了这一点。

修改完成上述三个文件后进入终端(确保在该文件目录)执行命令:

docker-compose build
docker-compose up -d

运行docker命令

这样到容器页面(或终端执行docker ps)即可看到一个99ai程序已经运行起来了。

绑定域名

在网站处创建网站,选择反向代理,主域名处填写你的域名,在代理地址处填写127.0.0.7:9520创建即可。

最后修改:2025 年 04 月 25 日
如果觉得我的文章对你有用,请随意赞赏