部署方式
提示:以下部署方法基于开源版进行介绍。商业版和企业版拥有专属的授权(或源码)及部署方式,详情请参阅相关文档或联系支持团队获取更多信息。
Chat Nio 提供多种部署方式,以满足不同用户的需求。无论是个人用户、开发者还是企业用户,都可以根据自身的需求选择最合适的部署方式。以下是几种常见的部署方式:
- Zeabur 一键部署:适合希望快速上手的用户,通过简单的点击即可在短时间内完成部署。
- Docker Compose 安装:推荐用于建站,适合需要灵活配置和管理的用户。
- Docker 安装:适合轻量运行时,常用于 Docker Runtime 平台或外置 MySQL 和 Redis 等服务的情况。
- 编译安装:适合需要自定义配置的用户,可以完全掌控部署过程。 (需有开发经验)
运行环境
最低服务器运行要求 2C4G, 高并发推荐使用 4C8G 及以上。
- Linux(推荐):Chat Nio 在 Linux 环境下运行最为稳定和高效,是我们首选的推荐环境。
- Windows:支持在 Windows 服务器上部署,适合 Windows 用户或特定的 Windows 环境需求。
- MacOS Server:可以在 MacOS 服务器上运行,适合 Mac 用户或开发环境。
- Docker:提供 Docker 镜像,便于容器化部署和管理。
- Kubernetes:支持在 Kubernetes 集群中部署,适合大规模分布式环境。
Zeabur 部署
Zeabur 提供一定的免费额度,可以使用非付费区域进行一键部署,同时也支持计划订阅和弹性计费等方式进行扩展。
- 点击
Deploy
进行部署,并输入您希望绑定的域名,等待部署完成。 - 部署完成后,请访问您的域名,并使用用户名
root
和密码chatnio123456
登录后台管理,请按照提示在 Chat Nio 后台及时修改密码。
Docker Compose 部署
运行成功后,宿主机映射地址为 http://localhost:8000
git clone --depth=1 --branch=main --single-branch https://github.com/zmh-program/chatnio.git
cd chatnio
docker-compose up -d
- MySQL 数据库挂载目录项目 ~/db
- Redis 数据库挂载目录项目 ~/redis
- 配置文件挂载目录项目 ~/config
手动版本更新
docker-compose down
docker-compose pull
docker-compose up -d
稳定版本
如需使用稳定版本,请使用以下命令进行部署:
docker-compose -f docker-compose.stable.yaml up -d
。
此命令将启动稳定版本的 Chat Nio,确保您在生产环境中获得最佳性能和稳定性。
请注意,使用稳定版本可以减少潜在的错误和不兼容问题,建议在正式环境中优先选择稳定版本进行部署。
启用自动更新
启用 Watchtower 可以帮助您自动更新 Docker 容器,确保您始终使用最新版本的应用程序。要启用 Watchtower 进行自动更新,请执行命令 docker-compose -f docker-compose.watch.yaml up -d
。
Docker 部署
请注意,使用 Docker 部署 Chat Nio 需要依赖 MySQL 和 Redis 服务。请确保在部署前已正确配置并启动 MySQL 和 Redis 服务。
运行成功后, 宿主机地址为 http://localhost:8094
。
docker run -d --name chatnio \
--network host \
-v ~/config:/config \
-v ~/logs:/logs \
-v ~/storage:/storage \
-e MYSQL_HOST=localhost \
-e MYSQL_PORT=3306 \
-e MYSQL_DB=chatnio \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=chatnio123456 \
-e REDIS_HOST=localhost \
-e REDIS_PORT=6379 \
-e SECRET=secret \
-e SERVE_STATIC=true \
programzmh/chatnio:latest
参数 | 说明 |
---|---|
--network host | 指使用宿主机网络,使 Docker 容器使用宿主机的网络,可自行修改 |
SECRET | JWT 密钥,自行生成随机字符串修改 |
SERVE_STATIC | 是否启用静态文件服务(正常情况下不需要更改此项,详见下方常见问题解答) |
-v ~/config:/config | 挂载配置文件 |
-v ~/logs:/logs | 挂载日志文件的宿主机目录 |
-v ~/storage:/storage | 挂载附加功能的生成文件 |
其他 | 需配置 MySQL 和 Redis 服务,请自行参考上方信息修改环境变量 |
稳定版本
如果您希望使用稳定版本的 Chat Nio,请使用以下命令进行部署:
docker run -d --name chatnio \
--network host \
-v ~/config:/config \
-v ~/logs:/logs \
-v ~/storage:/storage \
-e MYSQL_HOST=localhost \
-e MYSQL_PORT=3306 \
-e MYSQL_DB=chatnio \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=chatnio123456 \
-e REDIS_HOST=localhost \
-e REDIS_PORT=6379 \
-e SECRET=secret \
-e SERVE_STATIC=true \
programzmh/chatnio:stable
手动版本更新
docker stop chatnio
docker rm chatnio
docker pull programzmh/chatnio:latest
编译部署
部署成功后, 默认端口为 8094, 访问地址为 http://localhost:8094
环境变量可覆盖 Config 配置项, 如
MYSQL_HOST
环境变量可覆盖mysql.host
配置项,具体参考 Go Viper 的环境变量配置项覆盖规则。
git clone https://github.com/zmh-program/chatnio.git
cd chatnio
cd app
npm install -g pnpm
pnpm install
pnpm build
cd ..
go build -o chatnio
由于这是编译安装,我们假设您已经具备开发经验,因此无需提供额外的提示,您可以自己配置运行方式 (如使用 nohup 或 systemd 等)。
下一步
您已经成功部署了 Chat Nio,接下来您可以访问进行访问,并按照提示进行登录和密码重置。 接下来,您可以在渠道管理中添加渠道,并在模型市场中添加模型。这将是您成功使用 Chat Nio 的第一步,通过这些简单的操作,您将能够快速配置并开始使用系统。
修改密码
部署成功后,管理员账号为 root
,密码默认为 chatnio123456
请务必在部署完成后及时更改默认密码,以确保系统安全。
修改 Root 密码步骤:
- 登录后台管理系统。
- 点击左侧菜单中的
系统设置
。 - 在系统设置页面中,找到
修改 Root 密码
选项。 - 输入新密码并确认。
- 点击
保存
以应用更改。
请务必记住新密码,并妥善保管,以确保系统安全。
高级部署配置(可选)
域名严格跨域检测
在默认情况下,后端对所有域名开放跨域。如果没有特殊需求,无需开启严格跨域检测 (CORS Detection)。
开启严格跨域检测的主要目的是为了提高应用的安全性。通过限制允许访问的域名,可以有效防止恶意网站对您的后端服务进行跨域请求攻击。
如果需要开启严格跨域检测,可以在后端环境变量中配置 ALLOW_ORIGINS
,例如 ALLOW_ORIGINS=chatnio.net,chatnio.app
。不需要加协议前缀,www
解析无需手动添加,后端将自动识别并允许跨域。这样配置后,将支持严格跨域检测,例如 http://www.chatnio.app
和 https://chatnio.net
等前端的域名将会被允许,其他前端的域名将会被拒绝。
即使在开启严格跨域检测的情况下,/v1
接口仍然会允许所有域的跨域请求,以保证中转 API 的正常使用。
前后端分离部署支持
什么是前后端分离部署模式? 在默认情况下,后端提供前端的服务,API 地址为 /api。前后端分离部署指前端和后端分别部署在不同的服务上,前端使用静态文件服务 (如 Nginx, Vercel 等),后端仅提供 API 服务。
举个例子:
- 配置环境变量
VITE_BACKEND_ENDPOINT
为你的后端地址,例如VITE_BACKEND_ENDPOINT=https://api.chatnio.net
并打包前端 - 将打包后的前端静态文件通过 Nginx 部署,部署的域名为 https://www.chatnio.net (opens in a new tab)
- 配置后端环境变量
SERVE_STATIC=false
,使后端服务不提供静态文件服务 - 使用 Docker Compose 部署后端,部署的域名为 https://api.chatnio.net (opens in a new tab)
前后端分离部署的好处在于可以更好地利用各自的资源,提高系统的性能和安全性。前端可以使用 CDN 加速静态资源的加载,后端可以专注于处理 API 请求,减少服务器的负载。
Kubernetes (K8s) 部署
Kubernetes (K8s) 是一个强大的容器编排平台,可以帮助您更有效地管理和扩展 Chat Nio 实例的部署。以下是在 Kubernetes 上部署 Chat Nio 的基本步骤:
-
准备 Kubernetes 集群: 确保您有一个可用的 Kubernetes 集群。您可以使用云服务提供商的托管 Kubernetes 服务,或者自行搭建集群。
-
创建配置文件: 创建一个
chatnio-deployment.yaml
文件,包含 Deployment、Service 和 ConfigMap 的定义。以下是一个示例配置:apiVersion: v1 kind: ConfigMap metadata: name: chatnio-config data: MYSQL_HOST: "your-mysql-host" MYSQL_PORT: "3306" MYSQL_DB: "chatnio" MYSQL_USER: "root" MYSQL_PASSWORD: "your-mysql-password" REDIS_HOST: "your-redis-host" REDIS_PORT: "6379" SECRET: "your-secret-key" SERVE_STATIC: "true" --- apiVersion: apps/v1 kind: Deployment metadata: name: chatnio spec: replicas: 3 selector: matchLabels: app: chatnio template: metadata: labels: app: chatnio spec: containers: - name: chatnio image: programzmh/chatnio:latest ports: - containerPort: 8094 envFrom: - configMapRef: name: chatnio-config volumeMounts: - name: config mountPath: /config - name: logs mountPath: /logs - name: storage mountPath: /storage volumes: - name: config emptyDir: {} - name: logs emptyDir: {} - name: storage emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: chatnio-service spec: selector: app: chatnio ports: - protocol: TCP port: 80 targetPort: 8094 type: LoadBalancer
请根据您的实际环境修改配置中的数据库连接信息和其他参数。
-
应用配置: 使用以下命令应用配置:
kubectl apply -f chatnio-deployment.yaml
-
验证部署: 使用以下命令检查部署状态:
kubectl get deployments kubectl get pods kubectl get services
-
访问应用: 如果您使用了 LoadBalancer 类型的 Service,Kubernetes 将为您分配一个外部 IP。使用以下命令获取该 IP:
kubectl get services chatnio-service
然后,您可以通过该 IP 地址访问 Chat Nio 应用。
-
扩展和管理:
- 要扩展应用,可以修改 Deployment 中的
replicas
数量。 - 使用 Kubernetes 的滚动更新功能进行版本升级。
- 考虑使用 Kubernetes 的 Ingress 资源来管理外部访问和 SSL 终止。
- 要扩展应用,可以修改 Deployment 中的
请注意,这只是一个基本的 Kubernetes 部署示例。在生产环境中,您可能需要考虑更多因素,如持久化存储、密钥管理、网络策略等。建议根据您的具体需求和安全要求进行适当的调整和优化。 如果您已经购买商业版、企业版,请联系我们获取更多帮助,我们将为您提供更详细的指导和优化建议以及远程部署指导。