build(release): 准备0.3.1-alpha.3安装包与Docker部署 [skip ci]

This commit is contained in:
2026-09-15 10:58:02 +08:00
parent 3bbd7a2e1b
commit 586c4bf049
15 changed files with 155 additions and 29 deletions
+19
View File
@@ -0,0 +1,19 @@
.env
.env.*
!.env.example
.git
.gitea
.venv
__pycache__
*.py[cod]
.pytest_cache
.ruff_cache
console/node_modules
console/dist
tests
tools
backups
data
vault
*.sqlite*
*.db
+2
View File
@@ -1,10 +1,12 @@
# 所有值由部署维护者生成;数据库 URL 中密码须进行 URL 编码。
OPENNEXUS_SYNC_TAG=0.3.1-alpha.3
POSTGRES_PASSWORD=
SYNC_DATABASE_URL=
MINIO_ROOT_USER=
MINIO_ROOT_PASSWORD=
SYNC_ACCESS_KEY_ID=
SYNC_SECRET_ACCESS_KEY=
SYNC_S3_BUCKET=opennexus
# 默认只监听本机;仅在已隔离的明文 HTTP 测试阶段显式改为 0.0.0.0。
SYNC_BIND_ADDRESS=127.0.0.1
SYNC_PORT=8080
+5
View File
@@ -7,6 +7,10 @@ COPY console ./
RUN pnpm build
FROM python:3.12-slim
ARG OPENNEXUS_SYNC_VERSION=0.3.1-alpha.3
LABEL org.opencontainers.image.title="OpenNexus Server Sync" \
org.opencontainers.image.version="${OPENNEXUS_SYNC_VERSION}" \
org.opencontainers.image.source="https://gitea.kronecker.cc/Kronecker/NotesAgentic"
COPY --from=ghcr.io/astral-sh/uv:0.9.24 /uv /bin/uv
WORKDIR /service
COPY pyproject.toml uv.lock ./
@@ -16,4 +20,5 @@ COPY --from=console /sync_server/static ./sync_server/static
RUN useradd --uid 10001 --create-home opennexus && mkdir /staging && chown opennexus /staging
USER 10001
ENV SYNC_STAGING_DIR=/staging
EXPOSE 8080
CMD ["/service/.venv/bin/python", "-m", "sync_server", "serve"]
+20 -4
View File
@@ -1,6 +1,6 @@
# OpenNexus Server Sync
当前发布版本为 **0.3.1-alpha.2**。协议及限制见 [Sync v1](../docs/contracts/Sync-v1契约.md)。服务独立于 AI Core,生产入口仅支持 PostgreSQL 和 S3 兼容对象存储。独立发布包包含服务源码、锁文件、Vue 3 + TypeScript 管理控制台静态文件、Dockerfile 与 Compose 模板,不包含任何 Vault、账户数据库、对象存储数据或部署密钥。
当前发布版本为 **0.3.1-alpha.3**。协议及限制见 [Sync v1](../docs/contracts/Sync-v1契约.md)。服务独立于 AI Core,生产入口仅支持 PostgreSQL 和 S3 兼容对象存储。独立发布包包含服务源码、锁文件、Vue 3 + TypeScript 管理控制台静态文件、Dockerfile 与 Compose 模板,不包含任何 Vault、账户数据库、对象存储数据或部署密钥。
服务根路径 `/``/console/` 提供同源的 Vue 3 + TypeScript Sync Console,可查看服务健康与依赖就绪状态,并使用普通 Sync 账户管理自己的 Vault 和设备。页面只调用公开的 Sync v1 API;密码在请求发出前从输入框清除,访问和刷新令牌只保留在页面内存,刷新或关闭页面即丢弃。控制台源码位于 `console/`,生产静态文件由 Docker 多阶段构建生成。
@@ -22,9 +22,25 @@ uv run pytest
## 自托管准备
从发布页下载 `OpenNexus-Server-Sync-0.3.1-alpha.2.zip` 并核对 `SHA256.json` 后,将压缩包解压到独立目录。升级现有实例时先备份数据库、对象存储和 `.env`,再使用新版镜像替换 Sync 服务;不要用发行包覆盖持久化卷。
从发布页下载 `OpenNexus-Server-Sync-0.3.1-alpha.3.zip` 并核对 `SHA256.json` 后,将压缩包解压到独立目录。升级现有实例时先备份数据库、对象存储和 `.env`,再使用新版镜像替换 Sync 服务;不要用发行包覆盖持久化卷。
1.`.env.example` 复制为 `.env`,生成独立数据库、MinIO 管理和同步访问凭据。数据库 URL 使用 `postgresql+psycopg://…`,其中密码须 URL 编码。
仓库提供以下 Docker 文件:
- `Dockerfile`:构建 Vue 控制台和只读运行镜像。
- `compose.yaml`:启动 PostgreSQL、MinIO、一次性初始化任务和 Sync 服务,默认只监听 `127.0.0.1:8080`
- `compose.test.yaml`:仅供隔离验收使用,将 Sync 暴露到 `0.0.0.0:18080` 并使用 MinIO 管理凭据。
- `.dockerignore`:排除密钥、数据库、Vault、测试缓存和本机依赖。
```powershell
Copy-Item .env.example .env
# 编辑 .env 后启动生产形态
docker compose up -d --build
# 或在隔离测试机直接开放 18080;需要 Docker Compose 2.24.4+
docker compose -f compose.yaml -f compose.test.yaml up -d --build
```
1.`.env.example` 复制为 `.env`,生成独立数据库、MinIO 管理和同步访问凭据。数据库 URL 使用 `postgresql+psycopg://…`,其中密码须 URL 编码。升级现有实例时,将 `SYNC_S3_BUCKET` 保持为原实例的 Bucket 名称。
2. 执行 `docker compose up -d`。一次性 `initialize` 服务等待依赖后幂等创建 schema 与 `opennexus` Bucket;重复运行只检查并补齐缺失资源,不覆盖已有行或对象。长期运行的 `sync` 服务继续使用只限该 Bucket 的同步账号,不使用 MinIO root 身份。
3. 全新数据库会生成账户 `admin` 和本次启动专用的随机密码。使用 `docker compose logs sync` 查找 `SYNC_BOOTSTRAP_CREDENTIALS`;随机密码不会写入镜像、环境变量或数据库明文。只要账户尚未固定,服务每次重启都会更换该密码并撤销旧会话。
4. 使用随机密码首次登录控制台后,必须立即修改账户名和密码。保存成功后凭据写入数据库,此后服务重启不再更换。已有正式账户的升级实例不会额外创建默认账户。仍可使用 `create-user` 运维命令增加独立账户,密码通过终端交互输入。
@@ -41,7 +57,7 @@ docker compose run --rm sync /service/.venv/bin/python -m sync_server bootstrap-
`initialize` 命令已通过真实 PostgreSQL/MinIO 的空实例与重复运行验证,并由 Compose 的一次性服务调用。MinIO 同步账号仍须由管理员创建并限制到 `opennexus` Bucket`.env` 中的 root 与同步凭据必须不同。
0.3.1-alpha.2 已使用真实 PostgreSQL/MinIO 双 worker 环境验证初始化、重复启动、固定凭据、健康检查和已有数据升级。测试专用 HTTP 地址、故障检查、完整验收记录与运维入口见[验收报告](../docs/development/OpenNexus验收报告-2026-09-08.md)。S-07 已在原生 PostgreSQL 17.11/MinIO 实例完成 1 GiB/10,000 文件的删除源实例与空实例恢复。测试阶段可以直接开放 HTTP 端口;生产上线仍需配置 TLS、访问控制、监控与异机备份。
0.3.1-alpha.3 使用真实 PostgreSQL/MinIO 环境验证初始化、重复启动、固定凭据、健康检查和已有数据升级。测试专用 HTTP 地址、故障检查、完整验收记录与运维入口见[验收报告](../docs/development/OpenNexus验收报告-2026-09-08.md)。S-07 已在原生 PostgreSQL 17.11/MinIO 实例完成 1 GiB/10,000 文件的删除源实例与空实例恢复。测试阶段可以直接开放 HTTP 端口;生产上线仍需配置 TLS、访问控制、监控与异机备份。
## 备份与空实例恢复
+9
View File
@@ -0,0 +1,9 @@
# 仅用于隔离的明文 HTTP 验收环境;生产部署不要加载此覆盖文件。
services:
sync:
environment:
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:?required}
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:?required}
ports: !override
- "0.0.0.0:${SYNC_PORT:-18080}:8080"
restart: unless-stopped
+18 -4
View File
@@ -20,12 +20,16 @@ services:
volumes:
- objects:/data
initialize:
build: .
build:
context: .
args:
OPENNEXUS_SYNC_VERSION: ${OPENNEXUS_SYNC_TAG:-0.3.1-alpha.3}
image: opennexus-sync:${OPENNEXUS_SYNC_TAG:-0.3.1-alpha.3}
command: ["/service/.venv/bin/python", "-m", "sync_server", "initialize"]
environment:
SYNC_DATABASE_URL: ${SYNC_DATABASE_URL:?required}
SYNC_S3_ENDPOINT: http://objects:9000
SYNC_S3_BUCKET: opennexus
SYNC_S3_BUCKET: ${SYNC_S3_BUCKET:-opennexus}
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:?required}
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:?required}
AWS_DEFAULT_REGION: us-east-1
@@ -36,11 +40,15 @@ services:
condition: service_started
restart: "no"
sync:
build: .
build:
context: .
args:
OPENNEXUS_SYNC_VERSION: ${OPENNEXUS_SYNC_TAG:-0.3.1-alpha.3}
image: opennexus-sync:${OPENNEXUS_SYNC_TAG:-0.3.1-alpha.3}
environment:
SYNC_DATABASE_URL: ${SYNC_DATABASE_URL:?required}
SYNC_S3_ENDPOINT: http://objects:9000
SYNC_S3_BUCKET: opennexus
SYNC_S3_BUCKET: ${SYNC_S3_BUCKET:-opennexus}
AWS_ACCESS_KEY_ID: ${SYNC_ACCESS_KEY_ID:?required}
AWS_SECRET_ACCESS_KEY: ${SYNC_SECRET_ACCESS_KEY:?required}
AWS_DEFAULT_REGION: us-east-1
@@ -57,6 +65,12 @@ services:
security_opt:
- no-new-privileges:true
cap_drop: [ALL]
healthcheck:
test: ["CMD", "/service/.venv/bin/python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/ready', timeout=3).read()"]
interval: 15s
timeout: 5s
retries: 8
start_period: 20s
volumes:
postgres:
objects:
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "opennexus-sync-console",
"private": true,
"version": "0.3.1-alpha.2",
"version": "0.3.1-alpha.3",
"packageManager": "pnpm@10.28.0",
"type": "module",
"scripts": {
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "notesagent-sync"
version = "0.3.1a2"
version = "0.3.1a3"
requires-python = ">=3.12"
dependencies = [
"fastapi>=0.116,<1", "uvicorn>=0.35,<1", "sqlalchemy>=2.0,<2.1",
+1 -1
View File
@@ -225,7 +225,7 @@ wheels = [
[[package]]
name = "notesagent-sync"
version = "0.3.1a2"
version = "0.3.1a3"
source = { virtual = "." }
dependencies = [
{ name = "boto3" },