开发个人Go-ChatGPT--5 模型管理 (三)

开发个人Go-ChatGPT--5 模型管理 (三)

服务部署

go-ChatGPT项目涉及的中间件服务较多,以下部署文件目录:

bash 复制代码
|-- chat-api
|   |-- etc
|   |   `-- config.yaml
|   `-- logs
|-- chat-rpc
|   |-- etc
|   |   `-- config.yaml
|   `-- logs
|-- docker-compose.yaml
|-- mysql
|   `-- data
|-- nginx
|   |-- conf
|   |   `-- conf.d
|   `-- data
|       `-- front
|-- ollama
|   |-- history
|   |-- id_ed25519
|   `-- id_ed25519.pub
|-- redis
|   `-- data
|       `-- dump.rdb
|-- user-api
|   |-- etc
|   |   `-- config.yaml
|   `-- logs
`-- user-rpc
    |-- etc
    |   `-- config.yaml
    `-- logs

docker-compose.yaml

yaml 复制代码
version: '3.8'

services:
  user-rpc:
    image: eilinge/open-ui-user-rpc
    container_name: user-rpc
    ports:
      - "9001:9001"
    volumes:
      - ./user-rpc/etc/config.yaml:/app/etc/config.yaml
      - ./user-rpc/logs:/app/logs
    networks:
      - default
    depends_on:
      - mysql
      - redis
      - etcd

  user-api:
    image: eilinge/open-ui-user-api
    container_name: user-api
    ports:
      - "8081:8081"
    volumes:
      - ./user-api/etc/config.yaml:/app/etc/config.yaml
      - ./user-api/logs:/app/logs
    networks:
      - default
    depends_on:
      - mysql
      - redis
      - etcd

  chat-rpc:
    image: eilinge/open-ui-chat-rpc
    container_name: chat-rpc
    ports:
      - "9002:9002"
    volumes:
      - ./chat-rpc/etc/config.yaml:/app/etc/config.yaml
      - ./chat-rpc/logs:/app/logs
    networks:
      - default
    depends_on:
      - mysql
      - redis
      - etcd

  chat-api:
    image: eilinge/open-ui-chat-api
    container_name: chat-api
    ports:
      - "8082:8082"
    volumes:
      - ./chat-api/etc/config.yaml:/app/etc/config.yaml
      - ./chat-api/logs:/app/logs
    networks:
      - default
    depends_on:
      - mysql
      - redis
      - etcd

  redis: # 服务名称
    image: redis:7.2.4 # redis镜像版本
    container_name: openui-redis # 容器名称
    volumes:
      - ./redis/data:/data # 映射数据目录,宿主机:容器
    restart: always # 容器开机自启
    ports:
      - 6379:6379
    privileged: true # 获取宿主机root权限
    networks:
      - default

  mysql: # 服务名称
    image: mysql:8.2.0 # redis镜像版本
    container_name: openui-mysql # 容器名称
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - ./mysql/data:/data # 映射数据目录,宿主机:容器
    restart: always # 容器开机自启
    ports:
      - 3306:3306
    privileged: true # 获取宿主机root权限
    networks:
      - default

  etcd:
    image: "bitnami/etcd:latest"  # 使用bitnami的etcd镜像
    container_name: openui-etcd
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes  # 允许无认证访问
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379  # 客户端访问地址
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
    ports:
      - 2379:2379
      - 2380:2380
    networks:
      - default

  etcdkeeper:
    container_name: openui-etcdkeeper
    image: evildecay/etcdkeeper:v0.7.6
    ports:
      - "8099:8080"
    networks:
      - default

  nginx:
    image: nginx:latest
    container_name: openui-nginx
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - ./nginx/conf/conf.d:/etc/nginx/conf.d
      - ./nginx/logs:/var/log/nginx
      - ./nginx/data/front:/data/front
      - /etc/nginx/ssl:/etc/nginx/ssl 
    networks:
      - default

  ollama:
    volumes:
      - ./ollama:/root/.ollama
    container_name: ollama
    tty: true
    restart: unless-stopped
    image: ollama/ollama
    environment:
      - name=value
    ports:
      - 11434:11434
    networks:
      - default
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

networks:
  default:
    external: true
    name: openui-net

Nginx 配置

经过前面几章的学习,相信一步一步走过来的同学会发现,user-apichat-api是2个独立的服务,各自启动在不同端口上,router也不一致,open-webUI如何实现调用一个统一的服务入口,就可以分别调用多个不同服务呢?

json 复制代码
server {
    listen       80;
    listen       443 ssl; 
    server_name  _;

    ssl_certificate     /etc/nginx/ssl/server.pem;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location /static/ {
        root /data/front;
    }
 
    location / {
        proxy_pass http://chat-api:8082;
        proxy_set_header X-Forwarded-Proto  $scheme; 
    }

    location /api/v1/auths {
        proxy_pass http://user-api:8081;
        proxy_set_header X-Forwarded-Proto  $scheme;
    }
}

答案就在 nginx的配置文件defalut.conf中,user服务的router会走/api/v1/auths,chat相关服务则会走/

项目目录

jackwillsmith/go-chatgpt-env: go chatgpt env deploy (github.com)

jackwillsmith/openui-backend-go: openui-backend-go (github.com)

jackwillsmith/openui-svelte-build (github.com)

相关推荐
喵叔哟15 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
狸克先生18 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
尘浮生21 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow35 分钟前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
小牛itbull1 小时前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i1 小时前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
闲暇部落1 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
GIS瞧葩菜1 小时前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
chnming19871 小时前
STL关联式容器之set
开发语言·c++
熬夜学编程的小王2 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list