使用项目中默认的docker compose文件,没能成功部署,提示架构不同,于是通过本地构建镜像方式重新部署成功。记录下部署的过程,主要分为以下几个步骤:1.拉取项目。2.构建镜像。3.创建数据库,并配置好数据库权限。4.nginx配置。5.编辑docker compose文件并运行。
拉取项目
git clone https://github.com/songquanpeng/one-api.git
cd one-api
构建镜像
docker build -t one-api:local .
数据库设置
通过终端登录到你的MySQL服务器:
mysql -u root -p
执行以下SQL命令来创建数据库、用户,并授权:
CREATE DATABASE `one-api`;
CREATE USER 'oneapi'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `one-api`.* TO 'oneapi'@'%';
FLUSH PRIVILEGES;
设置数据库权限
ip link #从ip link命令输出中,假设看到网络接口enp0s3是活动的(state UP),这很可能是你宿主机连接网络的接口。下一步是获取该接口的IP地址。
ip addr show enp0s3 #在命令的输出中,找到与inet关键字相关联的行,这行信息会给出enp0s3接口的IPv4地址。
这个ip地址为宿主机的内部IP地址
开放端口
sudo ufw allow 3000/tcp
sudo ufw reload
sudo ufw allow from any to 10.0.0.198 port 3306
sudo ufw reload
10.0.0.198为上述查询到的宿主机内网ip地址。
nginx配置
# 为 oneapi.junjies.com 配置的服务器 - 处理 HTTP 到 HTTPS 的重定向
server {
listen 80;
server_name oneapi.junjies.com;
return 301 https://$host$request_uri;
}
# 为 oneapi.junjies.com 配置的 SSL 服务器 - 反向代理到本地的 3000 端口
server {
listen 443 ssl;
server_name oneapi.junjies.com;
ssl_certificate /etc/letsencrypt/live/junjies.com/fullchain.pem; # 使用通配符证书
ssl_certificate_key /etc/letsencrypt/live/junjies.com/privkey.pem; # 私钥路径
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
编辑docker compose文件并运行
version: '3.4'
services:
one-api:
image: one-api:local # 使用新构建的镜像
container_name: one-api
restart: always
command: --log-dir /app/logs
ports:
- "3000:3000"
volumes:
- ./data/oneapi:/data
- ./logs:/app/logs
environment:
- SQL_DSN=oneapi:password@tcp(10.0.0.198:3306)/one-api
- REDIS_CONN_STRING=redis://redis:6379
- SESSION_SECRET=string
- TZ=Asia/Shanghai
depends_on:
- redis
redis:
image: "${REGISTRY:-docker.io}/redis:latest"
container_name: redis
restart: always
ports:
- "6380:6379"
docker-compose up -d --force-recreate one-api
#这个命令会停止one-api服务的当前实例(如果正在运行),并基于更新后的配置重新启动它。