開發個人Ollama-Chat–7 服務部署
服務部署
go-ChatGPT
項目涉及的中間件服務較多,以下部署文件目錄:
|-- 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
version: '3.8'services:user-rpc:image: eilinge/open-ui-user-rpccontainer_name: user-rpcports:- "9001:9001"volumes:- ./user-rpc/etc/config.yaml:/app/etc/config.yaml- ./user-rpc/logs:/app/logsnetworks:- defaultdepends_on:- mysql- redis- etcduser-api:image: eilinge/open-ui-user-apicontainer_name: user-apiports:- "8081:8081"volumes:- ./user-api/etc/config.yaml:/app/etc/config.yaml- ./user-api/logs:/app/logsnetworks:- defaultdepends_on:- mysql- redis- etcdchat-rpc:image: eilinge/open-ui-chat-rpccontainer_name: chat-rpcports:- "9002:9002"volumes:- ./chat-rpc/etc/config.yaml:/app/etc/config.yaml- ./chat-rpc/logs:/app/logsnetworks:- defaultdepends_on:- mysql- redis- etcdchat-api:image: eilinge/open-ui-chat-apicontainer_name: chat-apiports:- "8082:8082"volumes:- ./chat-api/etc/config.yaml:/app/etc/config.yaml- ./chat-api/logs:/app/logsnetworks:- defaultdepends_on:- mysql- redis- etcdredis: # 服務名稱image: redis:7.2.4 # redis鏡像版本container_name: openui-redis # 容器名稱volumes:- ./redis/data:/data # 映射數據目錄,宿主機:容器restart: always # 容器開機自啟ports:- 6379:6379privileged: true # 獲取宿主機root權限networks:- defaultmysql: # 服務名稱image: mysql:8.2.0 # redis鏡像版本container_name: openui-mysql # 容器名稱environment:- MYSQL_ROOT_PASSWORD=123456volumes:- ./mysql/data:/data # 映射數據目錄,宿主機:容器restart: always # 容器開機自啟ports:- 3306:3306privileged: true # 獲取宿主機root權限networks:- defaultetcd:image: "bitnami/etcd:latest" # 使用bitnami的etcd鏡像container_name: openui-etcdenvironment:- ALLOW_NONE_AUTHENTICATION=yes # 允許無認證訪問- ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 # 客戶端訪問地址- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379ports:- 2379:2379- 2380:2380networks:- defaultetcdkeeper:container_name: openui-etcdkeeperimage: evildecay/etcdkeeper:v0.7.6ports:- "8099:8080"networks:- defaultnginx:image: nginx:latestcontainer_name: openui-nginxports:- "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:- defaultollama:volumes:- ./ollama:/root/.ollamacontainer_name: ollamatty: truerestart: unless-stoppedimage: ollama/ollamaenvironment:- name=valueports:- 11434:11434networks:- defaultdeploy:resources:reservations:devices:- driver: nvidiacount: 1capabilities: [gpu]networks:default:external: truename: openui-net
Nginx 配置
經過前面幾章的學習,相信一步一步走過來的同學會發現,user-api
和chat-api
是2個獨立的服務,各自啟動在不同端口上,router
也不一致,open-webUI
如何實現調用一個統一
的服務入口,就可以分別調用多個不同服務呢?
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)