标签 容器化 下的文章

Traefik 优势与考量:本地部署的理想选择

Traefik 是一款功能强大的云原生边缘路由器(Edge Router),它为 Docker 等容器化环境带来了显著的便利和优势:

主要优势

  • 服务自动发现与配置: Traefik 能够自动检测容器中运行的新服务,并即时自动配置相应的反向代理(Reverse Proxy)和负载均衡规则,无需手动修改配置文件。
  • 简化的 SSL/TLS 管理: 它内置了对 Let's Encrypt 的支持,可以实现域名的 SSL 证书自动申请与自动续签,大大减轻了运维负担
  • 端口暴露最小化: 极大地提高了安全性。对于宿主机而言,Traefik 只需要对外暴露标准的 80 和 443端口,无需再为每个服务暴露额外的端口。

局限与考量

尽管 Traefik 优势显著,但在配置灵活性方面,它不如传统反向代理工具(如 Nginx)那样直观和强大:

  • 非容器化应用集成复杂: 对于不在 Docker 等容器中部署的传统应用,Traefik 的反向代理配置会相对复杂和繁琐。它主要面向动态的云原生环境,对静态配置的支持不如 Nginx 灵活
  • 特定配置的挑战: 在需要进行复杂、细致的反代逻辑配置时,可能会不如 Nginx 的配置文件那样灵活易读。
    在快速启动前,有必要说明一下,本教程是使用CF 作为域名ns进行申请泛域名证书,如果你想使用其他提供商,可以在 Traefik 的文档 更改 Provider Code和 Environment Variables 这两个值,当然我会在本篇配置文件有注释提醒。
    另外如果没有额外配置反代的需求(指不跑在docker的服务),需要建立config.yml 文件,当然还需要在traefik.yml 关闭注释。

快速启动 Traefik

请按照一下文件目录创建文件,其中acme.json只需要创建文件即可(注意必须要交建立哦,config文件根据自己需求建立即可)

文件目录:

|   .env    #文件配置
|   docker-compose.yaml        # docker-compose 文件
|
\---data
        acme.json    # SSL 文件
        config.yml    # 额外配置文件(配置额外反代例如宿主机的)
        traefik.yml # Traefik 配置文件

docker-compose.yaml 文件:

services:
  traefik:  # 定义名为 traefik 的服务
    image: traefik:v3.0  # 使用 Traefik 的 v3.0 版本镜像
    container_name: traefik  # 容器名称为 traefik
    restart: unless-stopped  # 容器自动重启,除非手动停止
    security_opt:
      - no-new-privileges:true  # 增加安全性,防止提权
    networks:
      - traefik-net  # 连接到名为 proxy 的外部网络
    ports:
      - 80:80  # 映射主机的 80 端口到容器的 80 端口 (HTTP)
      - 443:443  # 映射主机的 443 端口到容器的 443 端口 (HTTPS)
      - 443:443/tcp  # 映射主机的 443 TCP 端口到容器的 443 端口 (TCP 协议)
      - 443:443/udp  # 映射主机的 443 UDP 端口到容器的 443 端口 (UDP 协议)
    environment:
      CF_DNS_API_TOKEN_FILE: ${CF_DNS_API_TOKEN}  # 设置环境变量,使用 Cloudflare API 令牌,根据Traefik文档 选择你的服务提供商的token
      TRAEFIK_DASHBOARD_CREDENTIALS: ${TRAEFIK_DASHBOARD_CREDENTIALS}  # 设置环境变量,定义 Traefik 仪表板的凭据
    env_file: .env  # 从 .env 文件中加载环境变量
    volumes:
      - /etc/localtime:/etc/localtime:ro  # 挂载主机的时间设置到容器,确保时间同步,且只读
      - /var/run/docker.sock:/var/run/docker.sock:ro  # 挂载 Docker 的 socket 文件,允许 Traefik 访问 Docker API,只读
      - ./data/traefik.yml:/traefik.yml:ro  # 挂载本地的 traefik.yml 配置文件到容器内,只读
      - ./data/acme.json:/acme.json  # 挂载本地的 acme.json 文件,存储 SSL 证书信息
      - ./data/config.yml:/config.yml:ro  # 可选的配置文件挂载路径,若需要可取消注释
    labels:  # 设置 Traefik 的相关标签,用于路由和中间件配置
      - "traefik.enable=true"  # 启用 Traefik 服务
      - "traefik.http.routers.traefik.entrypoints=http"  # 配置 HTTP 入口点
      - "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_DASHBOARD_HOST}`)" # 定义 Traefik 仪表板的访问规则
      - "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_DASHBOARD_CREDENTIALS}"  # 为仪表板配置基本身份验证
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"  # 配置 HTTP 到 HTTPS 的重定向
      - "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https"  # 添加自定义请求头
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"  # 将重定向中间件应用到 HTTP 路由
      - "traefik.http.routers.traefik-secure.entrypoints=https"  # 配置 HTTPS 入口点
      - "traefik.http.routers.traefik-secure.rule=Host(`${TRAEFIK_DASHBOARD_HOST}`)" # 定义 HTTPS 路由的访问规则
      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"  # 为 HTTPS 路由应用基本身份验证中间件
      - "traefik.http.routers.traefik-secure.tls=true"  # 启用 TLS (HTTPS)
      - "traefik.http.routers.traefik-secure.tls.certresolver=${NS_Domain}"  # 使用 DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code
      - "traefik.http.routers.traefik-secure.tls.domains[0].main=${TLS_MAIN_DOMAIN}"  # 定义主域名
      - "traefik.http.routers.traefik-secure.tls.domains[0].sans=${TLS_SANS_DOMAIN}"  # 定义子域名通配符
      - "traefik.http.routers.traefik-secure.service=api@internal"  # 使用 Traefik 内部 API 服务

networks:
  traefik-net:
    external: false  # 使用外部定义的名为 proxy 的网络

.env 文件:


# .env 文件

# CF API
CF_DNS_API_TOKEN=

NS_Domain=cloudflare #根据你使用的DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code
# 设置环境变量,定义 Traefik 仪表板的凭据 ,默认账户名密码:admin
TRAEFIK_DASHBOARD_CREDENTIALS=admin:$$2y$$05$$aOXINGgHfnZ//t.kUs7o9ej3faUbj2yNxc8k3WVrBybFOxxaTsLTe

# Traefik Dashboard 域名
TRAEFIK_DASHBOARD_HOST=dash.docker.localhost

# TLS 主域名和子域名
TLS_MAIN_DOMAIN=docker.localhost
TLS_SANS_DOMAIN=*.docker.localhost

traefik.yml 文件:


api:
  dashboard: true  # 启用 Traefik 的仪表板,可以通过指定的路由访问
  debug: true  # 启用调试模式,输出更多的日志信息

entryPoints:
  http:
    address: ":80"  # 定义 HTTP 入口点,监听 80 端口
    http:
      redirections:
        entryPoint:
          to: https  # 重定向 HTTP 请求到 HTTPS
          scheme: https  # 使用 HTTPS 作为重定向的目标协议

  https:
    address: ":443"  # 定义 HTTPS 入口点,监听 443 端口

serversTransport:
  insecureSkipVerify: true  # 在与后端服务器通信时,跳过 TLS 证书验证(不推荐在生产环境中使用)

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"  # 指定 Docker API 的 socket 文件路径,Traefik 使用它来检测和管理 Docker 容器
    exposedByDefault: false  # 默认情况下,Docker 容器不会自动暴露给 Traefik,必须显式指定
    watch: true

  file:
    filename: /config.yml  # (已注释) 可选的文件提供者配置,用于从外部文件加载配置
    watch: true  # 允许 Traefik 自动监控和加载配置文件变化


certificatesResolvers:
  cloudflare: # 使用 DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code
    acme:
      email: youremail@email.com  # 申请 ACME 证书时使用的电子邮件地址
      storage: acme.json  # 存储证书信息的文件路径
      # caServer: https://acme-v02.api.letsencrypt.org/directory # 正式环境的 Let's Encrypt 服务器 (默认)
      caServer: https://acme-staging-v02.api.letsencrypt.org/directory # 测试环境的 Let's Encrypt 服务器 (用于调试)

      dnsChallenge:
        provider: cloudflare  # 使用 DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code 进行 DNS 验证以获取证书
        #disablePropagationCheck: true # (已注释) 如果通过 Cloudflare 获取证书有问题,可以取消注释此行以禁用传播检查
        #delayBeforeCheck: 60s # (已注释) 如果需要确保 TXT 记录准备就绪,可以取消注释此行并设置检查延迟
        resolvers:
          - "223.5.5.5:53"  # AliDNS 解析器
          - "119.29.29.29:53"  # 备用 DNS 解析器
          - "1.1.1.1" # 备用 DNS 解析器

config.yml 文件

可以选择配置,如果你宿主机有ng反代服务,你使用taerfik 的话会端口冲突,可以配置,但不过要把 docker-compose 和 Traefik的配置文件注释去掉即可:


http:
  #region routers 
  routers:
    hexo:
      entryPoints:
        - "https"  # 指定使用 HTTPS 入口点
      rule: "Host(`hexo.docker.localhost`)"  # 当访问的主机名为 hexo.local.shellscience.top 时,触发此路由
      middlewares:
        - default-headers  # 应用默认的安全头中间件
        - https-redirectscheme  # 应用 HTTPS 重定向中间件
      tls: {}  # 启用 TLS 加密
      service: hexo  # 指定将请求转发到名为 hexo 的服务

  #region services
  services:
    hexo:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:5000"  # 指定 Hexo 服务的后端服务器 URL
        passHostHeader: true  # 传递原始的 Host 头信息到后端服务
  #endregion

  middlewares:
    https-redirectscheme:
      redirectScheme:
        scheme: https  # 将 HTTP 请求重定向为 HTTPS
        permanent: true  # 使用永久重定向(HTTP 301)

    default-headers:
      headers:
        frameDeny: true  # 禁止网页被嵌入到框架中,防止点击劫持攻击
        browserXssFilter: true  # 启用浏览器的 XSS 过滤器,增强安全性
        contentTypeNosniff: true  # 防止浏览器 MIME 类型嗅探
        forceSTSHeader: true  # 强制启用 HSTS(HTTP 严格传输安全)
        stsIncludeSubdomains: true  # HSTS 规则应用于所有子域
        stsPreload: true  # 允许将域名加入 HSTS 预加载列表
        stsSeconds: 15552000  # HSTS 头的有效期(秒),这里是 180 天
        customFrameOptionsValue: SAMEORIGIN  # 允许内容在同源的 iframe 中加载
        customRequestHeaders:
          X-Forwarded-Proto: https  # 设置 X-Forwarded-Proto 头为 https,用于指示原始请求协议

    default-whitelist:
      ipAllowList:
        sourceRange:
        - "10.0.0.0/8"  # 允许来自 10.0.0.0/8 网段的 IP 地址
        - "192.168.0.0/16"  # 允许来自 192.168.0.0/16 网段的 IP 地址
        - "172.16.0.0/12"  # 允许来自 172.16.0.0/12 网段的 IP 地址

    secured:
      chain:
        middlewares:
        - default-whitelist  # 应用默认的 IP 白名单中间件
        - default-headers  # 应用默认的安全头中间件

配置完毕我们docker-compose up -d如果配置没有问题你就可以通过你配置的域名成功访问Traefik的面板。

反代代理Dcoekr应用

这里拿Memos的程序来举例子:

下面是我的Memos的docker-compose.yaml 文件,我们只需要把暴露的端口删除,添加labels标签以及下面几个配置(你想访问的域名、容器的端口、开启https、使用tls证书)以及让我们的程序接入Traefik的网络就好了。

version: "3.0"
services:
  memos:
    image: ghcr.io/usememos/memos:latest
    container_name: memos
    volumes:
      - ./data/:/var/opt/memos
    environment:
      - driver=sqlite
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.memos.rule=Host(`memos.local.com`)"
      - "traefik.http.services.memos.loadbalancer.server.port=<程序的端口>"
      - "traefik.http.routers.memos.entrypoints=https"
      - "traefik.http.routers.memos.tls=true"
    networks:
      - traefik-net

networks:
  traefik-net:
    external: true

Traefik DNS服务提供文档:https://doc.traefik.io/traefik/https/acme/#providers

Traefik Docker配置文档:https://doc.traefik.io/traefik/routing/providers/docker/

总结

这个是博主自己在搭建Traefik 时的总结与分享,当然在搭建时也去借鉴了很多的资料。

本文原发于我的博客:landonVPS

本文以麒麟V10为例,演示超简单离线部署k8s 1.32.11

1 说明

关于kt

kt是基于kk二次开发产物,具备kk的所有功能,二开重点适配了信创国产化环境。

主要改进包括:简化arm架构部署过程、支持国产化和国际环境在线、离线部署及一条命令所有节点初始化

支持arm64amd64架构操作系统,已适配芯片+操作系统 如下:

  • CPU: 鲲鹏、飞腾、海光、兆芯、intel、amd 等。
  • OS: Centos、Ubuntu、Debian、银河麒麟V10、麒麟国防版、麒麟信安、中标麒麟V7、统信UOS、华为欧拉、移动大云、阿里龙蜥、TencentOS等。

注:本文使用kt版本3.1.13

2.环境准备

服务器基本信息

主机名架构OS配置IP
masterx86_64麒麟V102核4G192.168.85.153

2.1 上传离线制品

操作系统不需要安装docker,不需要设置selinux,swap等操作,全新的操作系统即可。

将离线制品、配置文件、kt和sh脚本上传至服务器其中一个节点(本文以master为例),后续在该节点操作创建集群。

2.2 修改配置文件

根据实际服务器信息,配置到生成的config-sample.yaml

kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: master, address: 192.168.85.160, internalAddress: 192.168.85.143, user: root, password: "123123"}
  roleGroups:
    etcd:
    - master
    control-plane:
    - master
    worker:
    - master
    # 如需使用 kk 自动部署镜像仓库,请设置该主机组 (建议仓库与集群分离部署,减少相互影响)
    # 如果需要部署 harbor 并且 containerManager 为 containerd 时,由于部署 harbor 依赖 docker,建议单独节点部署 harbor
    registry:
    - master
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.32.11
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: docker
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    type: harbor
    registryMirrors: []
    insecureRegistries: []
    privateRegistry: "dockerhub.kubekey.local"
    namespaceOverride: "kubesphereio"
    auths: # if docker add by `docker login`, if containerd append to `/etc/containerd/config.toml`
      "dockerhub.kubekey.local":
        username: "admin"
        password: Harbor@123 # 此处可自定义,kk3.1.8新特性
        skipTLSVerify: true # Allow contacting registries over HTTPS with failed TLS verification.
        plainHTTP: false # Allow contacting registries over HTTP.
        certsPath: "/etc/docker/certs.d/dockerhub.kubekey.local"
  addons: []

2.3 系统初始化

解压kt-x86.tar.gz文件后执行./kt init-os -f config-sample.yaml 已适配操作系统和架构见1.说明

该命令kt会根据配置文件自动判断操作系统和架构以完成所有节点的初始化配置和依赖安装。

3 创建 Harbor私有仓库

3.1 创建镜像仓库

./kt init registry -f config-sample.yaml -a artifact-x86-k8s13211.tar.gz

此命令会在harbor节点自动安装dockerdocker-compose

3.2 创建harbor项目

创建 Harbor 项目

chmod +x create_project_harbor.sh && ./create_project_harbor.sh

4 创建k8s

./kt create cluster -f config-sample.yaml -a artifact-x86-k8s13211.tar.gz --with-local-storage

此命令kt会自动将离线制品中的镜像推送到harbor 私有仓库

执行后会有如下提示,输入yes/y继续执行

继续等待一段时间最终可以看到安装成功的消息

验证

5 总结

本文主要以离线方式部署,适用于在线和离线两种状态,而如果在线状态,那么步骤3可忽略,两条命令即可搞定。

配合最新版kt,系统初始化从未如此简单,不论x86还是arm,不论在线还是离线,不论国际还是国产操作系统,统统搞定。

最新消息,Apache DolphinScheduler 3.4.0 已正式发布!

本次版本带来了多租户调度隔离、工作流并行性能优化、任务重试与告警机制增强,以及资源管理和日志处理改进。无论是复杂企业业务场景,还是高并发任务调度,3.4.0 都让系统更高效、更可靠、更易用。立即升级,体验全新调度能力!

升级与下载

下载页面(可选择镜像下载):
https://dolphinscheduler.apache.org/zh-cn/download/3.4.0

GitHub Release 页面
https://github.com/apache/dolphinscheduler/releases/tag/3.4.0
升级时建议参考官方文档中的集群升级指南,确保兼容性和配置一致性。

核心功能增强与重要更新

通用 OIDC 认证支持

3.4.0 引入了对 OpenID Connect(OIDC)的通用支持,旨在简化与企业身份认证系统的集成。通过 OIDC,用户可以使用统一的身份提供商(如 Keycloak、Okta 等)进行 SSO 登录,无需额外实现复杂自定义逻辑。这提升了安全性和用户体验,尤其是在多系统联邦登录与统一认证场景中,能够使 DolphinScheduler 更自然地融入企业级认证体系,减少重复配置和验证成本,从而提高登录配置的扩展性和一致性。


(参考图)

gRPC 任务插件支持

本版本新增了 gRPC 任务插件能力,使调度器能够通过原生 gRPC 协议直接与远程服务交互。用户可以将后端微服务暴露的 gRPC 接口作为任务执行目标,无需中间脚本封装。这种方式特别适合微服务生态或跨语言执行场景,通过明确参数契约和高性能通信协议提升任务整合效率,从而减少资源调度延迟、提高任务可靠性。

支持工作流串行策略

实现了 工作流串行执行策略(Workflow Serial Strategy) 的核心逻辑重构,通过引入一个全新的串行命令队列机制(t_ds_serial_command 表及相关 DAO/Mapper),配合一套串行执行协调器(WorkflowSerialCoordinator)及策略处理器,使 DolphinScheduler 能更智能地管理串行类型的工作流(如 SERIAL_WAITSERIAL_PRIORITYSERIAL_DISCARD)。

该设计改进了工作流触发流程的执行类型判断、状态管理、命令队列处理等关键路径,使串行调度逻辑更清晰、更可靠,有助于提升串行工作流场景下的调度稳定性与可控性。同时,3.4.0 重构了触发器与状态机相关代码,增强该能力的可维护性和扩展性。

移除 PyTorch 任务类型

3.4.0 对任务类型体系进行了精简,正式移除了内置的 PyTorch 任务类型。该调整主要基于实际使用情况和长期维护成本的考量,因为原有 PyTorch 任务实现使用率较低,且与调度器核心任务模型耦合度较高,增加了版本演进和兼容性维护的复杂度。通过移除该任务类型,DolphinScheduler 能保持核心架构的简洁与稳定。

我们鼓励用户通过更通用的 Shell、Python 或插件化方式运行 PyTorch 作业,从而提升系统整体的可维护性和扩展性。

稳定性与重要修复

Kubernetes Worker 部署增强

在 Kubernetes 原生部署场景下,3.4.0 使 Worker StatefulSet 的 Helm Chart 支持注入 Secrets 和 InitContainers。通过 Secrets 注入,可以安全传递证书或凭据;InitContainers 允许在主容器启动前完成必要的初始化逻辑,如准备文件系统或校验环境依赖。

这些增强有助于在容器化环境下实现更安全、更一致的部署策略和生命周期管理。

SQL 任务取消能力

针对 SQL 任务类型,本次版本提供了对任务执行取消的原生支持。当执行的 SQL 语句由于逻辑错误或长期运行导致资源占用时,用户可以通过调度器下发取消操作,使任务尽快中止,而不是简单失败或等待超时。这一能力改善了任务控制能力,避免长时间运行对集群资源的无效占用,有助于提升整体资源利用率和执行调度体验。

条件任务节点在前置失败情况下执行逻辑修复

在某些复杂工作流中,当条件任务节点的前置任务失败时,条件节点未按预期执行。3.4.0 修复了这一调度核心逻辑,确保条件节点能够正确响应前置失败状态。这样,工作流分支逻辑能够按照既定 DAG 定义可靠运行,从而避免因逻辑错误导致的流程中断或不一致执行。

ZooKeeper 节点清理问题修复

在使用 ZooKeeper 作为协调组件的高可用部署中,部分用户反馈 Master Server 在启动失败后未正确清理已注册的 failover 节点路径,可能导致后续状态异常。该版本修复了这个问题,使 Master 在异常启动路径中能够正确清理关联注册节点,保持注册中心状态一致,确保高可用场景下集群状态的健康和可靠性。

Worker Group 分配逻辑错误修复

此前版本中,项目与 Worker Group 关联/移除操作可能在 API 层出现逻辑不一致,导致调度器未能正确识别项目与 Worker Group 的关系。本次版本修正了相关逻辑,使 API 行为与用户预期一致,从而改善 Worker 管控、资源隔离和调度分配体验。

此外,3.4.0 版本还进行了很多功能优化和问题修复,包括文档与配置规范完善(时区、安全、负载均衡)、核心调度与注册中心稳定性增强(TraceId、Failover 清理、可重入锁)、性能与资源管理优化(任务组索引)、前端与插件体验改进(日志查询、DataX 校验、文件展示)、依赖与安全更新(PostgreSQL JDBC、Spring Boot CVE 修复)等,篇幅所限不再一一展开,详情可查询完整更新列表:https://github.com/apache/dolphinscheduler/releases/tag/3.4.0

Bug 修复亮点

标记任务为 Inactive 状态逻辑修复

某些生命周期事件中,当任务状态需要被标记为 Inactive 时,状态变更可能未正确触发,导致 UI 和执行引擎状态不一致。此版本修复了这一逻辑,使状态标记与生命周期事件更加一致。

Workflow Lineage 删除逻辑优化

在工作流血缘关系删除操作中,系统可能未能彻底清理相关引用,导致历史血缘链路残留。3.4.0 改进了删除逻辑,使 DolphinScheduler 在删除血缘链时能够更精确地清理对应关系,避免分析后续依赖时出现错误链路。

其他 Bug 修复包括前置任务失败导致条件节点不执行问题修复、项目级 Worker Group 绑定与移除逻辑修正、子工作流触发参数丢失问题修复等,详情请查询完整 Release Note:https://github.com/apache/dolphinscheduler/releases/tag/3.4.0

文档更新

  1. 发布并完善 Apache DolphinScheduler 3.3.2 版本发布说明文档。
  2. 修复文档 CI 构建错误,提升文档发布流程的稳定性。
  3. 补充 Prometheus 指标接口的认证机制及其在 Kubernetes 环境下的使用说明。
  4. 同步更新 JdbcRegistry 引入事务机制后的相关文档描述,保证文档与实际行为一致。

致谢

本次版本发布离不开社区各位贡献者的热情参与与支持。特别感谢 @ Gallardot 作为 3.4.0 的 Release Manager,从版控、构建、候选版验证到最终投票组织,确保发布流程高质量推进。

同时,感谢以下本次版本的所有贡献者(GitHub ID,排名不分先后):

Gallardot、njnu‑seafish、det101、Mrhs121、EinsteinInIct、sanfeng‑lhh、ruanwenjun、tusaryan、qiong‑zhou、SbloodyS、kvermeulen、npofsi、CauliflowerEater、ChaoquanTao、dill21yu、sdhzwc、zhan7236、KwongHing、jmmc‑tools、liunaijie

感谢所有通过提交 PR、Issue、文档贡献、社区讨论、测试验证等方式参与 Apache DolphinScheduler 项目的人。正是你们的努力推进了 DolphinScheduler 的持续演进与社区繁荣,欢迎更多人加入我们的队伍!

前言

当主流云盘频繁亮起容量限制、限速通知,甚至出现文件被莫名屏蔽的状况时,“数据不由己”的焦虑感总会让人束手束脚。

Cloudreve 私人云盘正是终结这种被动的理想解决方案。它不仅提供拖拽上传、多格式预览、链接加密分享等全套实用功能,更核心的优势在于:您可以将其部署在您的专属服务器上,从根源上避开第三方平台的种种限制,真正实现数据自由。

借助 Docker 部署的便捷性,整个搭建过程无需复杂配置,只需短短几分钟,您就能拥有一个数据完全由自己掌控的私人云盘。从此,文件存储不必再看平台“脸色”,数据安全与使用自由,将牢牢掌握在您手中。

一:操作步骤

在部署 Cloudreve 项目之前,记得先开放5212端口,方便后续操作。

Push and Deploy

1.新建 Cloudreve 文件夹

mkdir cloudreve

2.进入 Cloudreve 文件夹

cd cloudreve

3.下载 Cloudreve 源文件包

wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_amd64.tar.gz

4.解压 Cloudreve 源文件包

tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz

5.赋予 Cloudreve 源文件包权限

`chmod +x ./cloudreve
`

6.启动 Cloudreve 项目

./cloudreve

Admin user name: 初始用户名
Admin password: 初始密码

运行成功后,不要关闭该命令行窗口,在新的浏览器页面地址输入:http://<服务器IP地址>:5212,即可访问 Cloudreve 服务。

初始密码忘记怎么办?在 Cloudreve 目录下执行以下命令,即可重置初始密码

./cloudreve --database-script ResetAdminPassword

二:持久化运行

运行成功后,不能关闭该命令行窗口,如果一不小心关掉了, Cloudreve 项目也就报错了,怎么办?在 Cloudreve 目录下执行以下操作,即可解决该问题:

1.先安装 screen(若未安装):

sudo apt update && sudo apt install screen -y

2.创建并进入一个新的 screen 会话:

`screen -S cloudreve
`

3.在新会话中重新启动 Cloudreve:

./cloudreve

按下 Ctrl + A 再按 D(或直接关闭该命令行窗口),即可脱离会话并关闭命令行窗口,程序仍在后台运行。

单容器部署

如果你觉得以上步骤过于繁琐,觉得麻烦,你也可以使用最简单的方法来部署 Cloudreve ,在自定义路径的 Cloudreve 根目录下,打开命令行终端复制以下命令,直接运行即可:

1.部署与上述操作版本保持一致(3.8.3版本):

docker run -d \
  --name cloudreve \
  -p 5212:5212 \
  -v ./data:/cloudreve/data \
  cloudreve/cloudreve:3.8.3

2.部署 Cloudreve 最新版本:

docker run -d \
  --name cloudreve \
  -p 5212:5212 \
  -v ./data:/cloudreve/data \
  cloudreve/cloudreve:latest

运行成功后,在浏览器地址输入:http://<服务器IP地址>:5212,即可访问 Cloudreve 服务。首次登录,先注册一个登录账号即可(即管理员账号)

端口占用

1.查询端口异常占用情况

netstat -tuln | grep :5212

netstat -tuln | grep :这里是要查询是否被占用的端口号 ,如果命令行有输出,则代表该端口已被占用;若命令行没有输出,直接返回 root@:/ cloudreve#,则没有没占用。

2.查询占用该端口的进程:

`lsof -i :5212
`

lsof -i :[查看占用5212端口的进程] ,如果命令行有输出,则显示占用该端口的进程PID;反之。

3.释放占用端口的进程

找到进程PID后,使用以下命令强制终止该进程,释放该端口:

kill -9 [进程ID]

总结

这就是博主今天分享的全部内容了,这只是博主在日常使用中总结的,如有不足之处欢迎大家了指点一二。
本文原发于我的博客:landonVPS

项目地址:GitHub - CandyMuj/DockerCN: 针对中国网络环境的 Docker 使用优化,解决 pull push login 的网络问题,优化镜像内 apt pip 等工具为国内源!支持多平台架构镜像构建!

已经优化的部分镜像:DockerHub - CandyMuj

现在部署项目基本都依赖于 Docker 了,但是国内的网络环境导致使用 Docker 很不方便

  • 看了下目前安装 Docker 的方式多种多样,但似乎都挺麻烦的,其实可以直接用如下简洁的命令一键安装(基于阿里云,这个似乎是很多年前在菜鸟教程看见的安装方式,我就一直用到了现在)

    不知为啥现在好多教程都搜不到这个命令了,刚刚看了下菜鸟教程的安装方式也不是这个命令了,但是这个命令确实还可以用的

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    
  • docker pull docker login docker push 直接用不了

  • 当上面的问题解决后,在使用 Docker 镜像的时候也会遇到问题,比如 apt pip maven npm 等都存在网络问题

  • 并且我希望这个东西更通用,除了可以用于 Docker,也可以直接用于优化国内的服务器

  • 执行优化可以高度自定义(自己想怎么优化就怎么优化,相当于提供一个框架,可以自定义实现)

我不希望每次使用的时候还要手动处理镜像源相关的问题,我就在想有没有可能直接开箱即用,镜像拉下来就可以使用,想了想,自己造一个吧,于是就花了两天实际造了这个项目

具体的使用及优化细节,可以看看 README,自认为写的还是比较详细的(甚至可能有点啰嗦)

希望对佬友们有用!减少不必要的时间,提升效率!

摘自:项目简介

旨在解决在中国使用 Docker 及 Docker 镜像时的网络问题!加速镜像构建和依赖下载,节省使用 Docker 的时间,让 Docker 更丝滑!

  • 由于官方 DockerHub 被墙,导致 pull push login 无法使用
    1. 解决 pull 问题:配置 Docker 镜像源
    2. 解决 docker 所有命令的网络问题:配置 Docker 代理
  • 优化 Docker 镜像,解决镜像内 包管理器(apt、apk) Python Pip Java Maven 等工具或环境的默认源缓慢或被墙导致无法使用的问题
    1. 理论上支持所有镜像的优化
    2. 使用本仓库的脚本进行优化:将自动配置国内镜像源并重新构建镜像 快速开始
  • 可优化本地镜像,某些镜像未 push 到中央仓库,仅在服务器本地存在,此时可 clone 本项目脚本到服务器,进行本地化的优化 快速开始 - 本地镜像优化
  • 亦可直接优化服务器,而非仅局限于 Docker 镜像 直接优化服务器
  • 极低侵入性:优化不会对原镜像做任何的其他修改,仅优化该优化了,比如:不会修改原有的工作目录、原有的启动命令、不夹带私货 (不安装任何软件包) 等
  • 支持多平台架构镜像构建!

鸣谢

其中关于 Docker 代理的配置方法参考自这位佬友的帖子 请教下佬们 docker login 登录报错问题 - #10,来自 yhp666

我也是试了很多方法去配置代理,一直没成功,然后在站内搜了下发现了这个佬友的帖子


📌 转载信息
转载时间:
2025/12/30 10:23:14

AI图像生成网页交互平台 - 基于Streamlit构建的Web应用,提供简洁的用户界面和实用的图像生成功能

应用预览

AI图像生成网页交互平台 - 基于Streamlit构建的Web应用,提供简洁的用户界面和实用的图像生成功能

项目结构

showimageweb/
├── app.py                    # 主应用文件(Streamlit界面)
├── Dockerfile               # Docker构建配置
├── requirements.txt         # Python依赖包
├── docker-compose.yml       # Docker Compose配置
├── LICENSE                  # MIT许可证
├── README.md                # 项目文档
└── assets/
    └── showimage-web-demo.png # 应用预览图

技术栈

  • 前端框架: Streamlit 1.29.0+
  • 后端语言: Python 3.9+
  • 容器化: Docker & Docker Compose
  • 核心依赖: requests, streamlit, base64

特性

  • 高性能: 基于Streamlit的快速响应界面
  • 美观UI: 现代化的卡片式设计,支持自定义画廊列数
  • 响应式: 自适应不同屏幕尺寸,适配移动端
  • 历史记录: 自动保存生成记录,支持无限数量存储
  • 配置选项: 支持随机/固定种子,自定义API配置
  • 实时状态: 生成进度实时显示,带有时间统计
  • 一键下载: PNG图片直接下载,自动命名
  • 通用API: 兼容多种AI图像生成服务
  • 内存管理: 智能存储管理,自动base64优化

快速开始

部署方式

方式一:Docker 部署(推荐)

# 克隆项目
git clone https://github.com/kaima2022/showimageweb.git
cd showimageweb

# 使用 Docker Compose 启动
docker compose up -d

方式二:本地部署

# 克隆项目
git clone https://github.com/kaima2022/showimageweb.git
cd showimageweb

# 安装依赖
pip install -r requirements.txt
# 启动
streamlit run app.py --server.address=0.0.0.0 --server.port=8501

访问应用

http://localhost:8501

演示

公开KEY:sk-zKTGcw8llBFZLpXAAsxTmMSmCfY8DNfe

API配置

应用支持任意兼容的AI图像生成API:

支持的API格式

  • 请求方式: POST
  • 认证方式: Bearer Token
  • 请求格式: {"prompt": "...", "seed": ...}
  • 响应格式: {"base64": "..."}

配置说明

  1. API URL: 完整的API接口地址(如:https://api.example.com/v1/generate
  2. API Key: 您的API密钥
  3. 种子设置: 支持随机种子或固定种子复现结果

兼容的服务

  • OpenAI DALL-E API
  • Stable Diffusion API
  • 自建AI图像服务
  • 任何支持标准格式的图像生成API

配置选项

环境变量(可选)

# Streamlit配置
STREAMLIT_SERVER_ADDRESS=0.0.0.0
STREAMLIT_SERVER_PORT=8501
STREAMLIT_SERVER_HEADLESS=true

# 时区设置
TZ=Asia/Shanghai

自定义配置

  • 画廊列数: 1-4列可调
  • API超时: 默认60秒
  • 图片格式: PNG格式输出
  • 文件命名: 时间戳自动命名

贡献指南

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

开源了一个基于 Docker 的星露谷物语服务器一键部署解决方案。

项目地址:
[bsgit user="truman-world"]puppy-stardew-server[/bsgit]
Stardew Server - Docker 一键部署星露谷物语开联机服务器

核心特性

这个项目最大的亮点是整合了几个自定义模组,带来了更好的多人游戏体验:

即时睡眠功能:任何一个玩家在床上选择睡觉,游戏会立刻为所有在线玩家存档并结束当天。再也不用互相等待离线或 AFK 的玩家。

24/7 专用服务器:基于 Docker 容器化,服务器可以 7x24 小时独立运行,房主无需在线。适合部署在 VPS 、云服务器或家用 NAS 上。

一键脚本部署:一条命令,3 分钟即可完成所有环境配置和启动。无需手动安装 SMAPI 、配置模组或设置环境。

跨平台联机:支持 PC 、Mac 、Linux ,以及 iOS 和 Android 玩家在同一个服务器中游戏。所有平台互通,无需复杂配置。

房主自动隐藏:主机玩家作为服务器运行,在游戏中自动隐身,不占用玩家名额,也不会干扰正常游戏。

存档自动加载:服务器重启后会自动加载最新的存档,无需手动操作。首次部署通过 VNC 创建存档后,之后完全自动化。

内置 VNC:首次创建世界时,可以通过浏览器或 VNC 客户端远程访问图形界面,操作简单。

自然技能升级( v1.0.58 新增):防止服务器强制房主升到 10 级,保持基于真实经验值的技能等级。玩家可以手动选择技能专精路线,保留游戏原有的成长乐趣。

一键启动

在任何一台安装了 Docker 的服务器上运行:

curl -sSL https://raw.githubusercontent.com/truman-world/puppy-stardew-server/main/quick-start.sh | bash

脚本会自动完成环境检查、配置文件生成、目录创建、权限设置和容器启动。

手动部署

如果你更喜欢手动控制:

1. 创建 docker-compose.yml

version: '3.8'
services:
  stardew-server:
    image: truemanlive/puppy-stardew-server:latest
    container_name: puppy-stardew
    restart: unless-stopped
    stdin_open: true
    tty: true
    environment:
      - STEAM_USERNAME=your_steam_username
      - STEAM_PASSWORD=your_steam_password
      - ENABLE_VNC=true
      - VNC_PASSWORD=stardew123
    ports:
      - "24642:24642/udp"
      - "5900:5900/tcp"
    volumes:
      - ./data/saves:/home/steam/.config/StardewValley:rw
      - ./data/game:/home/steam/stardewvalley:rw
      - ./data/steam:/home/steam/Steam:rw
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G

2. 设置权限并启动

mkdir -p data/{saves,game,steam}
chown -R 1000:1000 data/
docker compose up -d

3. 首次设置

使用 VNC 连接到 your-server-ip:5900(密码:stardew123),创建或导入存档。

4. 玩家连接

游戏中:Co-op → Join LAN Game → 输入 your-server-ip:24642

预装模组

  • SMAPI 4.3.2 - 官方模组加载器
  • Always On Server v1.20.3 - 无头服务器运行
  • Skill Level Guard v1.4.0 - 防止强制升级,保持自然技能进度
  • ServerAutoLoad v1.2.1 - 自动加载存档
  • AutoHideHost v1.2.2 - 隐藏房主,即时睡眠

系统要求

服务器端:

  • Docker 和 Docker Compose
  • 2GB 内存( 4+ 玩家推荐 4GB )
  • 2GB 磁盘空间
  • Steam 账号(拥有星露谷物语)

客户端:

  • 星露谷物语(任何平台)
  • 与服务器相同的游戏版本

v1.0.58 更新

修复:

  • Always On Server 自动启用问题(服务器现在可以自动暂停/恢复)
  • 玩家技能专精选择问题(可以手动选择路线)

改进:

  • 自然技能升级(基于真实经验值,不再强制 10 级)
  • 服务器空闲时自动暂停(节省资源)

已解决的问题:

  • 长时间空闲后无法连接
  • 地震等特殊事件冻结游戏
  • 无限等待其他玩家
  • 无需邀请码(直接用 IP 连接)

文档与支持

许可证

  • 项目: MIT License
  • 游戏: 需合法拥有星露谷物语( Steam )
  • SMAPI & Always On Server: GPL-3.0
  • 自定义模组: MIT License