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

rsuchecki/renderer

rsuchecki

Rendering env for Rmarkdown bookdown

下载次数: 0状态:社区镜像维护者:rsuchecki仓库类型:镜像最近更新:6 年前
让 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

镜像简介
下载命令
镜像标签列表与下载命令
轩辕镜像,不浪费每一次拉取。
点击查看

https://img.shields.io/github/release/csiro-crop-informatics/repset.svg?style=flat-square&logo=github&label=latest%20release](https://github.com/csiro-crop-informatics/repset/releases) https://img.shields.io/github/commits-since/csiro-crop-informatics/repset/latest.svg?style=flat-square&logo=github](https://github.com/csiro-crop-informatics/repset/releases) https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-orange.svg?style=flat-square](https://www.nextflow.io/)

REPSET or RREPSET or R²EPSET is a Reproducible, Reusable, Extensible, Portable and Scalable Evaluation Tool for short read aligners

Table of Contents

  • Dependencies
  • Preliminaries
    • Note on terminology (mapping vs alignment)
  • Running the pipeline
    • Execution profiles
      • Running with docker
      • Running with singularity (local or Slurm cluster)
      • Running on AWS batch
    • Mapping modes
    • Evaluated mappers
    • Alternative input data sets
  • Computational resources
  • Capturing results and run metadata
  • Experimental pipeline overview
  • Execution environment
  • Adding another mapper
    • Template variables
      • Indexing
      • Mapping
    • Separate template files (optional)
    • Non-core mapping parameters (optional)
    • Notes on container specification in conf/mappers.config
  • Per-tool container images and docker automated builds
    • Setting-up an automated build
    • Adding or updating a Dockerfile
  • Report
    • Rendering outside the pipeline
      • Using docker
      • Using singularity
      • Natively
  • Manuscript
    • Rendering
    • Bibliography

Dependencies

  • Nextflow https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-orange.svg](https://www.nextflow.io/) - you may *** using the exact version of Nextflow by setting the appropriate environmental variable export NXF_VER=19.10.0 before running the workflow.
  • and
    • either Singularity https://img.shields.io/badge/Singularity-%E2%89%A53.1.1-orange.svg](https://www.sylabs.io/singularity/)
    • or Docker

Preliminaries

The pipeline consists of several, partly dependent paths which facilitate the evaluation of mappers using either DNA- or RNA-Seq data, either real (temporarily unavailable) or simulated. The paths can be executed separately or in a single run. When running separately or re-running the pipeline the -resume flag ensures that previously computed results (or partial results) are re-used.

Default execution will simulate, align and evaluate reads from a few small data sets defined in conf/simulations.config.

Note on terminology (mapping vs alignment)

Terms related to read mapping, alignment and related such as pseudoalignment and quasi mapping are used in bioinformatics inconsistently (which would make many a mathematician cringe). We hereby atte*** to strictly follow this convention by consistently propagating these inconsistencies.

Running the pipeline

Execution profiles

There are several ways to execute the pipeline, each requires Nextflow and either Docker or Singularity. See nextflow.config for available execution profiles (or to add your own!), e.g. for local execution this could be

Running with docker

nextflow run csiro-crop-informatics/repset -profile docker

Running with singularity (local or Slurm cluster)

Tu run the workflow with Singularity on

  • a local machine,
  • a standalone server
  • in an interactive session on a cluster

First make sure that recent version of Singularity is available and then run

nextflow run csiro-crop-informatics/repset -profile singularity

On a Slurm cluster you can run

nextflow run csiro-crop-informatics/repset -profile slurm,singularity

Note! Multiple container images will be pulled in parallel from Docker Hub (and potentially other repositories. A https://github.com/nextflow-io/nextflow/issues/1210 (?) in singularity may cause the parallel processing to fail with an error message similar to

Error executing process > 'indexGenerator ([[species:Saccharomyces_cerevisiae, version:R64-1-1.44, seqtype:DNA], [tool:hisat2, version:2.1.0]])'

Caused by:
  Failed to pull singularity image
  command: singularity pull  --name rsuchecki-hisat2-2.1.0_4cb1d4007322767b562e98f69179e8ebf6d31fb1.img docker://rsuchecki/hisat2:2.1.0_4cb1d4007322767b562e98f69179e8ebf6d31fb1 > /dev/null
  status : 255

Until this is https://github.com/sylabs/singularity/issues/3634, our workaround is to run the following prior to running the main script, run

nextflow run csiro-crop-informatics/repset/pull_containers.nf

which will pull most of the containers used by the workflow (the remaining ones are unlikely to be pulled in parallel).

Note that singularity must be available on the node where you execute the pipeline, e.g. by running module load singularity/3.2.1 prior to running the pipeline. It is also required on each compute node. Your cluster configuration should ensure that, if it does not, the additional execution profile singularitymodule can be modified in nextflow.config to match your singularity module name and used at run-time.

Running on AWS batch

If you are new to AWS batch and/or nextflow, follow this blog post, once you are done, or you already use AWS batch, simply run

nextflow run csiro-crop-informatics/repset \
  -profile awsbatch \
  -work-dir s3://your_s3_bucket/work \

after replacing your_s3_bucket with a bucket you have created on S3.

To reduce potential connectivity issues you may *** running the workflow from an EC2 instance. This may guide your decision on where the result file(s) should be placed. If you wish to deposit the result file(s) on s3, you can specify e.g. --outdir s3://your_s3_bucket/results, otherwise you can find them under ./results.

https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/monitoring-costs.html

Mapping modes

The workflow incorporates three ways of mapping and evaluating reads, dna2dna, rna2rna, rna2dna and by default all are executed. To restrict execution to one or two of those, you can run the workflow with e.g.

  • --mapmode dna2dna - evaluate DNA-Seq read mapping to genome
  • --mapmode rna2rna|rna2dna - evaluate RNA-Seq read mapping to genome and transcriptome

Evaluated mappers

An alignment/mapping tool is included in the evaluation if appropriate templates are included as specified below in Adding another mapper. To execute the workflow for only a subset of the available tools, you can specify e.g.

  • --mappers star - only evaluate a single tool
  • --mappers 'bwa|bowtie2|biokanga' - evaluate a subset of tools
  • `--mappers '^((?!bwa).)* - evaluate all but this tool

Other regular expressions can be specified to taylor the list of evaluated tools.

Alternative input data sets

To run the pipeline with alternative input data you can use the -params-file flag to specify a JSON or a YAML file to overwrite conf/simulations.config, for example

nextflow run main.nf -params-file path/to/conf/simulations.json

Alternatively, you can simply edit the content of conf/simulations.config`.

Computational resources

Resources required for running the workflow can be substantial and will vary greatly depending on multiple factors, such as

  • input genomes sizes
  • simulated read coverage
  • number and choice of mappers evaluated
  • mapping mode(s) selected

We have empirically derived simple functions to allow resource requests auto-scaling for key processes such as genome indexing and read mapping. These depend on either the reference size or the number of reads and were based on tools which were slowest or required the most memory. Clearly if e.g. a slower tool is added, these will need to be revised. However, failed tasks are re-submitted with increased resources as long as valid comparisons can be made between different tools' results. For that reason, CPUs and memory limits are not increased on re-submission of the mapping process but the maximum allowed wall-clock time is. In the case of the indexing process, the initial time and memory limits are increased on each task re-submission as indexing performance is not well suited for comparisons anyway. For example, many indexing processes are single-threaded, in other cases it might make sense to skip the indexing process and allow for on-the-fly index generation. Resource auto-scaling is subject to constraints which may need to be adjusted for particular compute environment either at run time (e.g. --max_memory 64.GB --max_cpus 32 --max_time 72.h) or by editing (conf/requirements.config)[conf/requirements.config] where the dynamic scaling functions can also be adjusted.

Capturing results and run metadata

Each pipeline run generates a number of files including

  • results in the form of report, figures, tables etc.
  • run metadata reflecting information about the pipeline version, software and compute environment etc.

These can be simply collected from the output directories but for full traceability of the results, the following procedure is preferable:

  1. Fork this repository

  2. (Optional) select a tagged revision or add a tag (adhering to the usual semantic versioning approach)

  3. Generate a https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line which will allow the pipeline to create releases in your forked repset repository, when creating the token it should suffice to select only the following scope:

    public_repo Access public repositories

    (assuming your fork of repset remains public)

  4. Make the access token accessible as an environmental variable

  5. Run the pipeline from the remote repository, specifying

    • the --release flag
    • the appropriate -profile
    • the intended revision e.g. -revision v0.9.10 (optional)

For example,

CODE_TOKEN_7

On successful completion of the pipeline a series of API calls will be made to

  1. create a new release
  2. upload results and metadata files as artefacts for that release
  3. finalize the release (skipped if --draft flag used)

The last of this calls will trigger minting of a DOI for that release if Zenodo integration is configured and enabled for the repository. To keep your release as a draft use the --draft flag.

Experimental pipeline overview

Execution environment

Execution environment is captured in runmeta.json.

Adding another mapper

A mapper may be included for any or all of the mapping modes (dna2dna, rna2dna, rna2rna). In each case the same indexing template will be used.

After you have cloned this repository add another entry in conf/mappers.config, under

CODE_TOKEN_8

For example, to add a hypothetical my_mapper version 1.0 you might add the following:

CODE_TOKEN_9

Additional script templates can be added for rna2rna and rna2dna mapping modes. Script templates must be wrapped in either single ('script') or triple single ('''script''') quotes. If you would rather keep the templates in separate files follow these instructions.

Template variables

Applicable nextflow (not bash!) variables resolve as follows:

Indexing

  • ${task.cpus} - number of cpu threads available to the indexing process
  • ${ref} - the reference FASTA filename - we use it both to specify the input file and the basename of the generated index

Mapping

  • ${task.cpus} - number of logical cpus available to the alignment process
  • ${ref} - basename of the index file (sufficient if aligner uses basename to find multi-file index, otherwise appropriate extension may need to be appended, e.g. ${ref}.idx).
  • ${reads[0]} and ${reads[1]} - filenames of paired-end reads
  • ${ALIGN_PARAMS} any additional params passed to the aligner
    • Empty by default but one or more sets of params can be defined in conf/mapping_params.config. When multiple sets of params are specified each set is used in separate execution.

Separate template files (optional)

If you would rather keep the templates in separate files rather than embedded in conf/mappers.config you can place each file under the appropriate template directory:

  • templates/index
  • templates/dna2dna
  • templates/rna2dna
  • templates/rna2rna

and instead of including the script template string directly in conf/mappers.config as we did above, set

  • rna2dna: true, which will be resolved to templates/rna2dna/my_mapper.sh

or, when using a different file name,

  • rna2dna: 'foo_bar.sh', which will be resolved to templates/rna2dna/foo_bar.sh

See the header of conf/mappers.config for more details and limitations.

Non-core mapping parameters (optional)

Add one or more sets of mapping parameters to conf/mapping_params.config, this is meant for parameter space exploration and should include any fine tuning params while the template should only include core params essential to mapper execution.

Notes on container specification in conf/mappers.config

You can upload a relevant container image to a docker registry (such as Docker Hub) or locate an existing one https://quay.io/organization/biocontainers. If you opt for an existing one, chose one with a specific version tag and a Dockerfile. Alternatively, follow our procedure below for defining per-tool container images and docker automated builds

We opt for Docker containers which can also be executed using Singularity. Container images are pulled from Docker Hub, but nextflow is able to access other registries and also local images, see relevant https://www.nextflow.io/docs/latest/singularity.html#singularity-docker-hub

Per-tool container images and docker automated builds

Dockerfiles for individual tools used can be found under dockerfiles/. This includes various mappers but also other tools used by the pipeline. For each tool (or tool-set) we created a docker hub/cloud repository and configured automated builds.

Setting-up an automated build

Builds can be triggered from branches and tags.

The following approach relies on creating a branch for a specific version of a tool. The same can be achieved by simply tagging the relevant commit, but this may result in proliferation of tags while branches can be merged into master and deleted while preserving the history. If you'd rather use tags, in (2) change the 'Source type' below to 'Tag' and later tag an appropriate commit using docker/tool/version pattern rather than committing to a dedicated branch. (tags can be problematic - if tag is based on version of a tool and container needs to be updated, tags may have to be removed/re-added)

  1. Create https://cloud.docker.com/ repo for your tool - do not link to specific GitHub repo or configure automated build at this stage, but only after it has been created - otherwise the tags for containers built later may be malformed.
  2. Link the created a https://cloud.docker.com/ repo with this GitHub repo (go to Builds -> Configure Automated Builds)
  3. Add an automated build rule (replace tool with the name of the tool).
Source typeSourceDocker TagDockerfile locationBuild Context
Branch/^docker\/tool\/(.*)$/{\1}tool.Dockerfile/dockerfiles

Adding or updating a Dockerfile

Checkout a new branch replacing tool and version with the intended tool name and version, respectively. For example,

CODE_TOKEN_10

CODE_TOKEN_11

Add, create or modify dockerfiles/${tool}.Dockerfile as required.

Commit and push to trigger an automated build

CODE_TOKEN_12

This should trigger an automated build in the linked Docker Hub/cloud repository.

In case the automated build is not triggered for a newly created Docker repo, it may help to delete the Docker repo and repeat steps 1-3 above. Then push some innocuous change to the branch to trigger the build.

If everything works as intended, you may update conf/containers.config to the new tool version.

Then either create a PR to merge the new branch into master or, if you have write permissions for this repository or working on your fork of it, checkout master and merge.

CODE_TOKEN_13

Report

TODO: add information on

  • how to edit the report template
  • how the final report gets generated

If report template is sufficiently generic we will be able to easily render to html and PDF, otherwise we should settle for HTML(?).

Rendering of the report constitutes the final step of the pipeline and relies on a container defined in dockerfiles/renderer.Dockerfile for rendering environment.

Rendering outside the pipeline

There are several ways for rendering of the report outside the pipeline, with docker being the preferred option.

Using docker

CODE_TOKEN_14

Using singularity

CODE_TOKEN_15

Natively

If you'd like to render the report without docker/singularity, you will need the following:

  • R e.g. on ubuntu sudo apt apt install r-base-core
  • pandoc e.g. on ubuntu sudo apt install pandoc pandoc-citeproc
  • LaTeX e.g. on ubuntu sudo apt install texlive texlive-latex-extra
  • R packages:
    • rmarkdown
    • rticles
    • bookdown

Then:

CODE_TOKEN_16

Manuscript

Manuscript source is under manuscript/ sub directory on manuscript branch which should not be merged into master. Application note is drafted in https://rmarkdown.rstudio.com/ in manuscript/repset.Rmd file. RMarkdown is well integrated in RStudio, but can be written/edited in a text editor of your choice.

Rendering

The manuscript will be rendered the pipeline is executed while manuscript branch is checked out, either

  • locally or
  • by specifying -revision manuscript at run-time

Appropriate revision of the master branch should first be mnerged into the manuscript branch.

The manuscript can be rendered outside the pipeline in a fashion analogous to how this can be done for the report, just replace any use of report by manuscript.

Bibliography

Among the https://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html#specifying_a_bibliography we opted for BibTeX, see writing/references.bib.

` - evaluate all but this tool

Other regular expressions can be specified to taylor the list of evaluated tools.

Alternative input data sets

To run the pipeline with alternative input data you can use the CODE_TOKEN_35 flag to specify a JSON or a YAML file to overwrite CODE_TOKEN_36, for example

nextflow run main.nf -params-file path/to/conf/simulations.json

Alternatively, you can simply edit the content of conf/simulations.config__CODE_TOKEN_37__--max_memory 64.GB --max_cpus 32 --max_time 72.h__CODE_TOKEN_38__conf/requirements.config__CODE_TOKEN_39__public_repo__CODE_TOKEN_40__--release__CODE_TOKEN_41__-profile__CODE_TOKEN_42__-revision v0.9.10__CODE_TOKEN_43__--draft__CODE_TOKEN_44__--draft__CODE_TOKEN_45__runmeta.json__CODE_TOKEN_46__dna2dna, rna2dna, rna2rna__CODE_TOKEN_47__conf/mappers.config__CODE_TOKEN_48__my_mapper__CODE_TOKEN_49__1.0__CODE_TOKEN_50__rna2rna__CODE_TOKEN_51__rna2dna__CODE_TOKEN_52__'script'CODE_TOKEN_53'''script'''CODE_TOKEN_54${task.cpus}CODE_TOKEN_55${ref}CODE_TOKEN_56${task.cpus}CODE_TOKEN_57${ref}CODE_TOKEN_58${ref}.idx__CODE_TOKEN_59__${reads[0]}CODE_TOKEN_60${reads[1]}CODE_TOKEN_61${ALIGN_PARAMS}__CODE_TOKEN_62__conf/mappers.config__CODE_TOKEN_63__templates/index__CODE_TOKEN_64__templates/dna2dna__CODE_TOKEN_65__templates/rna2dna__CODE_TOKEN_66__templates/rna2rna__CODE_TOKEN_67__conf/mappers.config__CODE_TOKEN_68__rna2dna: true,__CODE_TOKEN_69__templates/rna2dna/my_mapper.sh__CODE_TOKEN_70__rna2dna: 'foo_bar.sh',__CODE_TOKEN_71__templates/rna2dna/foo_bar.sh__CODE_TOKEN_72__conf/mappers.config__CODE_TOKEN_73__conf/mappers.config__CODE_TOKEN_74__dockerfiles/CODE_TOKEN_75__docker/tool/version__CODE_TOKEN_76__tool__CODE_TOKEN_77/^docker/tool/(.*)$/CODE_TOKEN_78{\1}CODE_TOKEN_79__tool.Dockerfile__CODE_TOKEN_80/dockerfiles__CODE_TOKEN_81__tool__CODE_TOKEN_82__version__CODE_TOKEN_83__dockerfiles/${tool}.Dockerfile__CODE_TOKEN_84__dockerfiles/renderer.Dockerfile__CODE_TOKEN_85__R__CODE_TOKEN_86__sudo apt apt install r-base-core__CODE_TOKEN_87__pandoc__CODE_TOKEN_88__sudo apt install pandoc pandoc-citeproc__CODE_TOKEN_89__LaTeX__CODE_TOKEN_90__sudo apt install texlive texlive-latex-extra__CODE_TOKEN_91__R__CODE_TOKEN_92__rmarkdown__CODE_TOKEN_93__rticles__CODE_TOKEN_94__bookdown__CODE_TOKEN_95__manuscript/CODE_TOKEN_96__manuscript__CODE_TOKEN_97__manuscript/repset.Rmd__CODE_TOKEN_98__manuscript__CODE_TOKEN_99-revision manuscript__CODE_TOKEN_100__manuscript__CODE_TOKEN_101__report__CODE_TOKEN_102__manuscript__CODE_TOKEN_103__writing/references.bib`](writing/references.bib).

镜像拉取方式

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

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

docker pull docker.xuanyuan.run/rsuchecki/renderer:<标签>

使用方法:

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

DockerHub 原生拉取命令

docker pull rsuchecki/renderer:<标签>

更多 renderer 镜像推荐

renderer/y9j3-download-batch logo

renderer/y9j3-download-batch

renderer
暂无描述
1万+ 次下载
5 年前更新
renderer/transcode-s3-file logo

renderer/transcode-s3-file

renderer
暂无描述
1万+ 次下载
6 年前更新
renderer/sv-download-batch logo

renderer/sv-download-batch

renderer
暂无描述
1万+ 次下载
6 年前更新
renderer/download-07zzc-to-s3 logo

renderer/download-07zzc-to-s3

renderer
暂无描述
1万+ 次下载
5 年前更新
renderer/runpod-expression-change logo

renderer/runpod-expression-change

renderer
暂无描述
684 次下载
2 年前更新
renderer/transcode-s3-file logo

renderer/transcode-s3-file

renderer
暂无描述
1万+ 次下载
6 年前更新

查看更多 renderer 相关镜像

轩辕镜像配置手册

按平台快速找到配置文档

一键安装

一键安装 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

轻量级集群

面板 / 网络

爱快路由

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访问体验非常流畅,大镜像也能快速完成下载。"

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