轩辕镜像 官方专业版
轩辕镜像
专业版
轩辕镜像 官方专业版
轩辕镜像
专业版
首页个人中心搜索镜像
交易
充值流量¥7起我的订单
文档
工具
提交工单页面收录
cheminova-backend

artcom/cheminova-backend

artcom

Cheminova网站的Wagtail CMS与API后端,提供首页图片支持、安全图片上传与授权、自定义图片模型及JSON API接口,支持Docker容器化开发与部署。

下载次数: 0状态:社区镜像维护者:artcom仓库类型:镜像最近更新:2 个月前
让 AI 帮你使用轩辕镜像? · 展开查看说明 · 点击收起说明

如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。

只需在 AI 对话中先发送下面这句话即可:

请先完整阅读并严格遵守以下文档中的全部规则与要求:

https://xuanyuan.cloud/agents.md

在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。

查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

中文简介
下载命令
镜像标签列表与下载命令
使用轩辕镜像,把时间还给真正重要的事。
点击查看

Cheminova后端

Cheminova网站的Wagtail CMS和API后端,提供以下功能:

  • 支持图片的单“首页”页面
  • 安全的图片上传和按请求授权
  • 带渲染版本和实时页面跟踪的自定义图片模型
  • 页面和图片的JSON API端点
  • 基于Docker和Docker Compose的容器化开发与部署

目录

  • 前提条件
  • 安装
  • 本地开发(Docker Compose)
  • 运行测试
  • 部署
  • 数据库转储与S3备份
  • 恢复数据库
  • 图片上传流程
  • 图片请求流程(带认证)
  • 图片API请求流程(元数据)

前提条件

  • uv
  • Docker & Docker Compose(用于容器化工作流)

使用uv和invoke运行脚本

脚本定义在tasks.py中,可通过uv运行:

bash
uv run invoke $TASK_NAME

列出可用任务:

bash
uv run invoke --list

可用任务:

  • admin-user:创建或更新管理员用户。
  • bump:使用uv版本更新版本号并创建Git标签。
  • clean-assets:删除数据库中未引用的媒体文件。
  • dev:通过Docker Compose运行开发服务器。
  • export-dump:转储数据库并导出到S3。
  • format:使用ruff格式化代码。
  • import-dump:从S3导入转储并加载到数据库。
  • init-site:用给定URL初始化默认Wagtail站点。
  • randomize-timestamps:随机化图片时间戳。
  • remove-edit-history:从数据库中删除所有Wagtail编辑历史。
  • sync-assets:在S3和本地存储之间同步静态和媒体资源。
  • test:使用Django测试框架运行测试。

安装

克隆仓库:

bash
git clone https://github.com/artcom/cheminova-backend.git
cd cheminova-backend

本地开发(Docker Compose)

  • 配置环境变量

    bash
    cp .env.example .env
    

    编辑.env设置所需变量。

  • 配置Minio客户端

    bash
    cp config/mc/config.json.example config/mc/config.json
    

    编辑以设置不同环境的访问密钥和秘密密钥。

  • 启动完整栈(Postgres、Wagtail、Nginx、Minio)

    bash
    uv run invoke dev
    
  • 应用数据库迁移

    bash
    docker compose exec wagtail uv run manage.py migrate
    
  • 创建超级用户

    bash
    uv run invoke admin-user --password $ADMIN_PASSWORD
    
  • 创建默认站点

    bash
    uv run invoke init-site --site-url http://localhost
    
  • 从实时环境导入站点数据(可选)

    从S3桶获取最新转储文件名。

    bash
    uv run invoke import-dump --file-name $LATEST_DUMP_FILENAME
    
  • 从S3同步媒体资源(可选)

    bash
    uv run invoke sync-assets
    
  • 将前端站点复制到frontend目录(可选)

    bash
    wget https://github.com/artcom/cheminova-frontend/releases/download/v1.0.7/cheminova-frontend-v1.0.7.tar.gz
    rm -rf frontend/*
    tar -xzf cheminova-frontend-v1.0.7.tar.gz -C frontend
    
  • Wagtail运行于 http://localhost:8000/cms

  • 前端运行于 http://localhost:8080/

  • Wagtail CMS管理后台运行于 http://localhost:8080/cms/admin/

  • 后端API运行于 http://localhost:8080/cms/api/

  • Minio web UI运行于 http://localhost:9001/

运行测试

```bash
uv run invoke test
```

部署

  1. 构建并推送Docker镜像。

  2. 在生产环境中,确保设置以下环境变量: • SECRET_KEY • POSTGRES_DB、POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_HOST • (可选)如果在子路径下服务,设置BASE_PATH

  3. production.py设置模块将配置: • 安全代理头 • CSRF信任源 • Wagtail管理后台基础URL

数据库转储与S3备份

bash
docker compose exec wagtail uv run manage.py export_dump

恢复数据库

选择S3桶中的转储文件。要从转储文件恢复数据库,可使用以下命令:

bash
docker compose exec wagtail uv run manage.py import_dump $DUMP_FILENAME

除非提供--no-restore-local-data标志,否则用户和站点数据将从本地数据库恢复。

图片上传流程

mermaid
sequenceDiagram
    participant Client
    participant nginx as nginx:8080
    participant wagtail as Wagtail:8000
    participant upload_view as image_upload.views
    participant serializer as ImageModelSerializer
    participant model as CustomImage Model
    participant db as PostgreSQL
    participant fs as File System

    Client->>nginx: POST /api/upload/<br/>(multipart/form-data with image)
    nginx->>wagtail: proxy_pass to wagtail:8000/api/upload/
    wagtail->>upload_view: upload_image_view(request)

    upload_view->>upload_view: Extract file from request.data
    upload_view->>upload_view: Generate UUID filename<br/>(original-{uuid}.ext)
    upload_view->>serializer: ImageModelSerializer(data={file, title})
    serializer->>serializer: validate()

    alt validation successful
        serializer->>model: CustomImage.objects.create()
        model->>db: INSERT image record
        model->>fs: Save image file to /media/original_images/
        model->>serializer: return created instance
        serializer->>upload_view: return serialized data
        upload_view->>wagtail: Response(data, status=201)
        wagtail->>nginx: HTTP 201 with image data
        nginx->>Client: HTTP 201 with image metadata
    else validation failed
        serializer->>upload_view: return errors
        upload_view->>wagtail: Response(errors, status=400)
        wagtail->>nginx: HTTP 400
        nginx->>Client: HTTP 400 with error details
    end

图片请求流程(带认证)

mermaid
sequenceDiagram
    participant Client
    participant nginx as nginx:8080
    participant wagtail as Wagtail:8000
    participant auth_view as image_auth.views
    participant model as CustomImage Model
    participant db as PostgreSQL
    participant fs as File System

    Client->>nginx: GET /media/images/some-image.jpg
    nginx->>nginx: auth_request /api/image-auth/

    nginx->>wagtail: GET /api/image-auth/<br/>(internal, X-Original-URI header)
    wagtail->>auth_view: check_permissions(request)

    alt user is authenticated
        auth_view->>wagtail: Response(200, "OK")
        wagtail->>nginx: HTTP 200
        nginx->>fs: serve file from /media/
        fs->>nginx: image file content
        nginx->>Client: HTTP 200 with image
    else user not authenticated
        auth_view->>auth_view: get_image_file(X-Original-URI)
        auth_view->>auth_view: get_image_type(image_path)

        alt image type is "rendition"
            auth_view->>model: RenditionModel.objects.get(file=path)
            model->>db: SELECT rendition
            db->>model: rendition record
            model->>auth_view: rendition.image
        else image type is "original"
            auth_view->>model: CustomImage.objects.get(file=path)
            model->>db: SELECT image
            db->>model: image record
            model->>auth_view: image
        end

        auth_view->>model: image.get_referenced_live_pages()
        model->>db: Query page references
        db->>model: live page references

        alt image has live page references
            model->>auth_view: [live_pages]
            auth_view->>wagtail: Response(200, "OK")
            wagtail->>nginx: HTTP 200
            nginx->>fs: serve file from /media/
            fs->>nginx: image file content
            nginx->>Client: HTTP 200 with image
        else no live page references
            model->>auth_view: []
            auth_view->>wagtail: Response(401, "Unauthorized")
            wagtail->>nginx: HTTP 401
            nginx->>Client: HTTP 401 Unauthorized
        end
    end

图片API请求流程(元数据)

mermaid
sequenceDiagram
    participant Client
    participant nginx as nginx:8080
    participant wagtail as Wagtail:8000
    participant api_view as custom_images.views
    participant serializer as CustomImageModelSerializer
    participant model as CustomImage Model
    participant db as PostgreSQL

    Client->>nginx: GET /api/images/<br/>(with Authorization header)
    nginx->>wagtail: proxy_pass to wagtail:8000/api/images/
    wagtail->>api_view: CustomImageViewSet.list(request)

    api_view->>api_view: Check IsAuthenticated permission

    alt user is authenticated
        api_view->>model: CustomImage.objects.all()
        model->>db: SELECT * FROM custom_images
        db->>model: image records

        loop for each image
            model->>serializer: CustomImageModelSerializer(image)
            serializer->>model: get_referenced_live_pages()
            model->>db: Query page references
            db->>model: live page references
            model->>serializer: live pages list
            serializer->>serializer: set 'live' field (len > 0)
            serializer->>api_view: serialized image data
        end

        api_view->>wagtail: Response with image list
        wagtail->>nginx: HTTP 200 with JSON
        nginx->>Client: HTTP 200 with image metadata
    else user not authenticated
        api_view->>wagtail: Response(401, "Unauthorized")
        wagtail->>nginx: HTTP 401
        nginx->>Client: HTTP 401 Unauthorized
    end

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

轩辕镜像加速拉取命令点我查看更多 cheminova-backend 镜像标签

docker pull docker.xuanyuan.run/artcom/cheminova-backend:<标签>

使用方法:

  • 登录认证方式
  • 免认证方式

DockerHub 原生拉取命令

docker pull artcom/cheminova-backend:<标签>

轩辕镜像配置手册

按平台快速找到配置文档

一键安装

一键安装 Docker

Linux Docker 一键安装

AI

用 AI 使用轩辕镜像

agents.md · AI 对话 · 提示词

Docker

登录仓库拉取

登录认证 · 私有仓库

专属域名拉取

免登录 · 高速拉取

Linux

Docker 镜像配置

Windows / Mac

Docker Desktop 配置

MacOS OrbStack

OrbStack 容器

Apple Container

macOS 原生容器

Docker Compose

Compose 项目配置

NAS

群晖

Synology 配置

飞牛

fnOS 镜像配置

绿联

绿联 NAS

威联通

QNAP 配置

极空间

极空间 NAS

Unraid

Unraid NAS

企业仓库

其他仓库

ghcr · Quay · nvcr

Harbor 镜像源

Proxy Repository 对接

Portainer 镜像源

Registries 配置

Nexus 镜像源

Docker Proxy 缓存

开发工具

Dev Containers

VS Code 开发容器

Podman

Podman 配置指南

Singularity / Apptainer

HPC 科学计算容器

Kubernetes

K8s Containerd

Kubernetes · Containerd

K3s

轻量级集群

面板 / 网络

爱快路由

爱快 4.0 · iKuai 镜像加速

宝塔面板

一键配置镜像源

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

功能

版本功能对比

功能对比 · 版本选择

支持的镜像仓库

Docker Hub · GCR · GHCR

专属域名用法

专属域名 · 开启停用 · 多仓库

新手拉取配置

登录 · 专属域名 · 配置

docker search 限制

专属域名 · Hub 搜索

不支持 push

仅支持 pull · 不支持

拉取速度原因

带宽 · 缓存 · 冷热镜像

错误码

402 与流量用尽

402 · 流量包 · 充值

401 认证失败

401 · docker login

manifest unknown

标签错误 · 镜像不存在

410 Gone 排查

410 · Docker 升级

429 限流

免费版 · 专业版 · 企业版 · 请求频率

其他报错

DNS 超时

DNS 解析 · 网络超时

TLS 证书失败

no matching manifest(架构)

账号

失败是否计费

manifest · blob · 计费

申请开发票(企业 / 个人)

企业 · 个人 · 工单

修改登录密码

网站 · 仓库 · 重置

注销账户

工单 · 数据 · 注销

原理

mirrors 不生效

daemon.json · 重启

去掉域名前缀

docker tag · 重命名

指定架构拉取

ARM64 · AMD64 · 多架构

latest 与「最新」

digest · 版本号 · 标签

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
artcom/cheminova-backend
定价查看流量套餐与价格
博客Docker 镜像公告与技术博客
专业版 · 高速稳定拉取镜像
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
50GB 仅 ¥7/年
专业版 · 高速稳定拉取镜像
50GB 仅 ¥7/年
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
用户协议·隐私政策·增值电信业务经营许可证:浙B2-20261007·©2024-2026 源码跳动©2024-2026 杭州源码跳动科技有限公司·商务合作:点击复制邮箱

更多 cheminova-backend 镜像推荐

penpotapp/backend logo

penpotapp/backend

penpotapp
Penpot后端服务,支持设计与代码协作的开源设计工具后端组件
23 次收藏100万+ 次下载
11 天前更新
okteto/backend logo

okteto/backend

okteto
暂无描述
50万+ 次下载
6 天前更新
docker/docker-model-backend-llamacpp logo

docker/docker-model-backend-llamacpp

Docker 官方工具与组件镜像
暂无描述
2 次收藏5000万+ 次下载
4 天前更新
sublimesec/strelka-backend logo

sublimesec/strelka-backend

sublimesec
Sublime Security Strelka后端组件,用于文件与邮件安全数据的处理及分析,支持威胁检测与安全监控。
10万+ 次下载
30 天前更新
dynatrace/easytravel-backend logo

dynatrace/easytravel-backend

dynatrace
Dynatrace easyTravel演示应用的业务后端组件(Java)。
5 次收藏100万+ 次下载
2 年前更新
elestio/taiga-backend logo

elestio/taiga-backend

elestio
Taiga是由Elestio验证和打包的免费开源项目管理工具,适用于跨职能敏捷团队高效协作,提供自动化更新、及时的功能修复和严格的质量控制,确保服务安全稳定运行。
1万+ 次下载
10 天前更新

查看更多 cheminova-backend 相关镜像