Co-authored-by: linxi <linxi@enjoysoftware.cn>
This commit is contained in:
10
README.md
10
README.md
@@ -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`,生成随机数据库密码,从 GitHub Container Registry 拉取网页与后端镜像,并启动网页、后端、PostgreSQL 和 Redis。数据库和上传文件使用 Docker 数据卷持久保存,重新启动容器不会丢失。
|
||||
脚本会自动安装 Docker 和 Docker Compose,把项目源码安装到 `/opt/open-ai-canvas`,生成随机数据库密码,在服务器本地构建网页与后端镜像,并启动网页、后端、PostgreSQL 和 Redis。该流程不依赖 GitHub Container Registry(GHCR)的匿名拉取权限;数据库和上传文件使用 Docker 数据卷持久保存,重新启动容器不会丢失。
|
||||
|
||||
完成后打开 `http://服务器IP:3000`。第一个注册的账号会自动成为管理员;登录后在系统设置中配置模型渠道即可开始使用。公开注册默认关闭,但不影响第一个管理员注册。
|
||||
|
||||
@@ -83,11 +83,11 @@ curl -fsSL https://raw.githubusercontent.com/ddcat-ai/open-ai-canvas/main/script
|
||||
|
||||
```bash
|
||||
cd /opt/open-ai-canvas
|
||||
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
|
||||
sudo docker compose --env-file .env -f docker-compose.deploy.yml -f docker-compose.build.yml ps
|
||||
sudo docker compose --env-file .env -f docker-compose.deploy.yml -f docker-compose.build.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`。
|
||||
首次部署需要下载构建依赖并编译前后端,耗时和资源占用会高于直接拉取镜像;后续更新会复用 Docker 构建缓存。需要固定代码版本时,可通过 `REPOSITORY_REF` 指定分支或标签。
|
||||
|
||||
### 直接使用 GitHub Packages 镜像
|
||||
|
||||
@@ -97,7 +97,7 @@ sudo docker compose --env-file .env -f docker-compose.deploy.yml logs -f --tail=
|
||||
curl -fsSL https://raw.githubusercontent.com/ddcat-ai/open-ai-canvas/main/scripts/install-server-image.sh | sudo bash
|
||||
```
|
||||
|
||||
默认使用 `latest` 标签。固定版本或修改端口可在首次执行后编辑 `/opt/open-ai-canvas/.env`,然后重新执行脚本;使用私有 GHCR 镜像时,请先执行 `docker login ghcr.io`,或在直接运行脚本时提供 `GHCR_USERNAME` 和 `GHCR_TOKEN` 环境变量完成登录。
|
||||
该快速脚本仍依赖 GHCR 容器包的可见性。容器包尚未公开时,必须先执行 `docker login ghcr.io`,或在直接运行脚本时提供 `GHCR_USERNAME` 和 `GHCR_TOKEN` 环境变量完成登录;未配置凭据时请使用上方推荐的源码构建脚本。默认使用 `latest` 标签,固定版本或修改端口可在首次执行后编辑 `/opt/open-ai-canvas/.env`,然后重新执行脚本。
|
||||
|
||||
部署配置和 PostgreSQL 密码保存在 `/opt/open-ai-canvas/.env`,不要发送给他人,也不要删除 `backend-data`、`postgres-data` 和 `redis-data` 数据卷。数据卷持久化不等于备份,请定期备份 PostgreSQL 和上传文件。直接使用 IP 访问仅适合首次配置;公网长期使用必须绑定域名并配置 HTTPS。
|
||||
|
||||
|
||||
14
docker-compose.build.yml
Normal file
14
docker-compose.build.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
services:
|
||||
backend:
|
||||
image: open-ai-canvas-backend:server
|
||||
build:
|
||||
context: .
|
||||
dockerfile: backend/Dockerfile
|
||||
args:
|
||||
GOPROXY: ${GOPROXY:-https://proxy.golang.org,direct}
|
||||
|
||||
web:
|
||||
image: open-ai-canvas-web:server
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
@@ -126,7 +126,9 @@ download_compose() {
|
||||
|
||||
start_services() {
|
||||
step "拉取并启动 GHCR 网页与后端镜像"
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" pull
|
||||
if ! docker compose --env-file .env -f "$COMPOSE_FILE" pull; then
|
||||
fail "GHCR 镜像拉取失败;如果容器包尚未公开,请通过 GHCR_USERNAME 和 GHCR_TOKEN 登录后重试"
|
||||
fi
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" up -d --remove-orphans --wait --wait-timeout 600
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ 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"
|
||||
BUILD_COMPOSE_FILE="docker-compose.build.yml"
|
||||
|
||||
step() {
|
||||
printf '\n==> %s\n' "$1"
|
||||
@@ -25,7 +25,6 @@ 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() {
|
||||
@@ -92,12 +91,6 @@ 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
|
||||
|
||||
@@ -111,7 +104,6 @@ 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=
|
||||
@@ -120,9 +112,12 @@ EOF
|
||||
}
|
||||
|
||||
start_services() {
|
||||
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
|
||||
step "从源码构建网页与后端镜像"
|
||||
# 标准一键部署已下载完整仓库,直接本地构建可避免公开项目被 GHCR 包可见性阻断。
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" -f "$BUILD_COMPOSE_FILE" build backend web
|
||||
|
||||
step "启动 PostgreSQL、Redis、后端和网页服务"
|
||||
docker compose --env-file .env -f "$COMPOSE_FILE" -f "$BUILD_COMPOSE_FILE" up -d --remove-orphans --wait --wait-timeout 600
|
||||
}
|
||||
|
||||
print_result() {
|
||||
@@ -133,7 +128,7 @@ print_result() {
|
||||
printf '\n部署完成。\n'
|
||||
printf '访问地址:http://%s:%s\n' "$local_ip" "$CANVAS_HTTP_PORT"
|
||||
printf '安装目录:%s\n' "$INSTALL_DIR"
|
||||
printf '查看状态:cd %q && docker compose --env-file .env -f %s ps\n' "$INSTALL_DIR" "$COMPOSE_FILE"
|
||||
printf '查看状态:cd %q && docker compose --env-file .env -f %s -f %s ps\n' "$INSTALL_DIR" "$COMPOSE_FILE" "$BUILD_COMPOSE_FILE"
|
||||
printf '\n首次打开后注册的第一个账号会自动成为管理员。公网长期使用前请配置 HTTPS。\n'
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user