chore(release): 版本发布 - publish v1.0.2
This commit is contained in:
65
.github/workflows/publish-images.yml
vendored
Normal file
65
.github/workflows/publish-images.yml
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
name: Publish container images
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- "v*"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Publish ${{ matrix.image }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- image: open-ai-canvas-web
|
||||
dockerfile: Dockerfile
|
||||
- image: open-ai-canvas-backend
|
||||
dockerfile: backend/Dockerfile
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Generate image metadata
|
||||
id: metadata
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}
|
||||
tags: |
|
||||
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
|
||||
type=semver,pattern={{version}}
|
||||
type=sha,prefix=sha-
|
||||
|
||||
- name: Build and push image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.metadata.outputs.tags }}
|
||||
labels: ${{ steps.metadata.outputs.labels }}
|
||||
cache-from: type=gha,scope=${{ matrix.image }}
|
||||
cache-to: type=gha,mode=max,scope=${{ matrix.image }}
|
||||
@@ -2,6 +2,12 @@
|
||||
|
||||
## Unreleased
|
||||
|
||||
## v1.0.2
|
||||
|
||||
- 增加前端与后端多架构 GHCR 镜像发布,并让服务器一键部署直接拉取指定版本镜像。
|
||||
- 完善 Codex App 插件的仓库 marketplace 安装入口。
|
||||
- 修复 xAI 视频生成请求未使用官方字段的问题。
|
||||
|
||||
## v1.0.1
|
||||
|
||||
- 自定义模型渠道改由登录态后端中转,减少第三方接口 CORS 限制。
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/ddcat-ai/open-ai-canvas"><img src="https://img.shields.io/github/stars/ddcat-ai/open-ai-canvas?style=flat-square&logo=github" alt="GitHub stars"></a>
|
||||
<a href="VERSION"><img src="https://img.shields.io/badge/version-v1.0.1-2563eb?style=flat-square" alt="Version"></a>
|
||||
<a href="VERSION"><img src="https://img.shields.io/badge/version-v1.0.2-2563eb?style=flat-square" alt="Version"></a>
|
||||
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-f97316?style=flat-square" alt="License"></a>
|
||||
</p>
|
||||
|
||||
@@ -75,7 +75,7 @@ Issue 反馈、技术讨论和产品升级建议都可以在 QQ 群中沟通。
|
||||
curl -fsSL https://raw.githubusercontent.com/ddcat-ai/open-ai-canvas/main/scripts/install-server.sh | sudo bash
|
||||
```
|
||||
|
||||
脚本会自动安装 Docker 和 Docker Compose,把项目安装到 `/opt/open-ai-canvas`,生成随机数据库密码,并启动网页、后端、PostgreSQL 和 Redis。数据库和上传文件使用 Docker 数据卷持久保存,重新启动容器不会丢失。
|
||||
脚本会自动安装 Docker 和 Docker Compose,把部署配置安装到 `/opt/open-ai-canvas`,生成随机数据库密码,从 GitHub Container Registry 拉取网页与后端镜像,并启动网页、后端、PostgreSQL 和 Redis。数据库和上传文件使用 Docker 数据卷持久保存,重新启动容器不会丢失。
|
||||
|
||||
完成后打开 `http://服务器IP:3000`。第一个注册的账号会自动成为管理员;登录后在系统设置中配置模型渠道即可开始使用。公开注册默认关闭,但不影响第一个管理员注册。
|
||||
|
||||
@@ -87,6 +87,8 @@ sudo docker compose --env-file .env -f docker-compose.deploy.yml ps
|
||||
sudo docker compose --env-file .env -f docker-compose.deploy.yml logs -f --tail=200
|
||||
```
|
||||
|
||||
默认拉取 `ghcr.io/ddcat-ai/open-ai-canvas-web:latest` 和 `ghcr.io/ddcat-ai/open-ai-canvas-backend:latest`。发布版本还会生成去掉 `v` 前缀的版本标签;如需固定版本,可在 `.env` 中设置 `CANVAS_IMAGE_TAG=1.0.2`。
|
||||
|
||||
部署配置和 PostgreSQL 密码保存在 `/opt/open-ai-canvas/.env`,不要发送给他人,也不要删除 `backend-data`、`postgres-data` 和 `redis-data` 数据卷。数据卷持久化不等于备份,请定期备份 PostgreSQL 和上传文件。直接使用 IP 访问仅适合首次配置;公网长期使用必须绑定域名并配置 HTTPS。
|
||||
|
||||
## 本地开发
|
||||
|
||||
@@ -27,12 +27,7 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
backend:
|
||||
image: open-ai-canvas-backend:deploy
|
||||
build:
|
||||
context: .
|
||||
dockerfile: backend/Dockerfile
|
||||
args:
|
||||
GOPROXY: ${GOPROXY:-https://proxy.golang.org,direct}
|
||||
image: ghcr.io/ddcat-ai/open-ai-canvas-backend:${CANVAS_IMAGE_TAG:-latest}
|
||||
environment:
|
||||
CANVAS_BACKEND_ADDR: ":8080"
|
||||
CANVAS_BACKEND_DATA_DIR: /data
|
||||
@@ -54,10 +49,7 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
web:
|
||||
image: open-ai-canvas-web:deploy
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
image: ghcr.io/ddcat-ai/open-ai-canvas-web:${CANVAS_IMAGE_TAG:-latest}
|
||||
ports:
|
||||
- "${CANVAS_HTTP_PORT:-3000}:3000"
|
||||
depends_on:
|
||||
|
||||
@@ -6,6 +6,7 @@ REPOSITORY_URL="${REPOSITORY_URL:-https://github.com/ddcat-ai/open-ai-canvas.git
|
||||
REPOSITORY_REF="${REPOSITORY_REF:-main}"
|
||||
INSTALL_DIR="${INSTALL_DIR:-/opt/open-ai-canvas}"
|
||||
CANVAS_HTTP_PORT="${CANVAS_HTTP_PORT:-3000}"
|
||||
CANVAS_IMAGE_TAG="${CANVAS_IMAGE_TAG:-latest}"
|
||||
COMPOSE_FILE="docker-compose.deploy.yml"
|
||||
|
||||
step() {
|
||||
@@ -24,6 +25,7 @@ require_root() {
|
||||
[[ "$(uname -s)" == "Linux" ]] || fail "一键部署脚本仅支持 Linux 服务器"
|
||||
[[ "$CANVAS_HTTP_PORT" =~ ^[0-9]+$ ]] || fail "CANVAS_HTTP_PORT 必须是 1 到 65535 的数字"
|
||||
((CANVAS_HTTP_PORT >= 1 && CANVAS_HTTP_PORT <= 65535)) || fail "CANVAS_HTTP_PORT 必须是 1 到 65535 的数字"
|
||||
[[ "$CANVAS_IMAGE_TAG" =~ ^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$ ]] || fail "CANVAS_IMAGE_TAG 不是有效的 Docker 镜像标签"
|
||||
}
|
||||
|
||||
install_packages() {
|
||||
@@ -90,6 +92,12 @@ prepare_environment() {
|
||||
((configured_http_port >= 1 && configured_http_port <= 65535)) || fail ".env 中的 CANVAS_HTTP_PORT 无效"
|
||||
CANVAS_HTTP_PORT="$configured_http_port"
|
||||
fi
|
||||
local configured_image_tag
|
||||
configured_image_tag="$(sed -n 's/^CANVAS_IMAGE_TAG=//p' .env | tail -n 1)"
|
||||
if [[ -n "$configured_image_tag" ]]; then
|
||||
[[ "$configured_image_tag" =~ ^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$ ]] || fail ".env 中的 CANVAS_IMAGE_TAG 无效"
|
||||
CANVAS_IMAGE_TAG="$configured_image_tag"
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -103,6 +111,7 @@ POSTGRES_USER=open_ai_canvas
|
||||
POSTGRES_PASSWORD=${database_password}
|
||||
DATABASE_URL=postgresql://open_ai_canvas:${database_password}@postgres:5432/open_ai_canvas?sslmode=disable
|
||||
CANVAS_HTTP_PORT=${CANVAS_HTTP_PORT}
|
||||
CANVAS_IMAGE_TAG=${CANVAS_IMAGE_TAG}
|
||||
CANVAS_REGISTRATION_ENABLED=false
|
||||
CANVAS_ALLOW_PRIVATE_UPSTREAMS=false
|
||||
CANVAS_ALLOWED_PRIVATE_UPSTREAM_HOSTS=
|
||||
@@ -111,8 +120,9 @@ EOF
|
||||
}
|
||||
|
||||
start_services() {
|
||||
step "构建并启动 PostgreSQL、Redis、后端和网页服务"
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" up -d --build --remove-orphans --wait --wait-timeout 600
|
||||
step "拉取并启动 PostgreSQL、Redis、后端和网页服务"
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" pull
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" up -d --remove-orphans --wait --wait-timeout 600
|
||||
}
|
||||
|
||||
print_result() {
|
||||
|
||||
Reference in New Issue
Block a user