Audio Pixel Studio部署教程:Traefik动态路由+Let's Encrypt自动证书签发

想快速搭建一个属于自己的在线音频工作站吗?Audio Pixel Studio就是这样一个开箱即用的工具。它界面清爽,功能直接,能帮你把文字变成语音,也能把歌曲里的人声和伴奏分开。

但今天我们不只讲怎么用,而是要把它部署到你的服务器上,并通过域名安全地访问。整个过程,我们会用Traefik这个“智能交通警察”来管理网络请求,并用Let's Encrypt自动搞定HTTPS证书,实现全自动化的部署和运维。

无论你是个人开发者想做个玩具,还是小团队需要一个轻量的音频处理工具,这篇教程都会带你一步步走通。我们尽量避开复杂的术语,用最直白的方式,让你在10分钟内看到成果。

1. 项目初探:Audio Pixel Studio是什么?

在动手部署之前,我们先花一分钟了解一下我们要部署的这个“像素工作站”到底能做什么。这能帮你判断它是不是你需要的工具。

1.1 核心功能一览

Audio Pixel Studio的核心功能非常聚焦,就两大块:

  • 说(语音合成):你输入一段文字,它就能用你选择的“声音”读出来。它背后用的是微软Edge浏览器的TTS(文字转语音)引擎,所以音质不错,支持的语言和音色也很多。比如,你可以让一个叫“晓晓”的女生用中文读新闻,或者让一个叫“Guy”的男生用英文朗读你的博客。
  • 分(人声分离):你上传一首歌,它能尝试把唱歌的人声和背景的伴奏音乐分开,生成两个独立的音频文件。这个功能基于一个简化版的UVR5算法,对于一般的流行歌曲效果尚可,适合快速处理,但不是那种需要训练好几个小时的顶级分离效果。

1.2 技术栈与特点

这个项目的技术选型决定了它为什么适合我们这样部署:

  • Web框架:基于 Streamlit 开发。这是一个专门为数据科学和机器学习应用快速构建界面的Python库。好处是开发快,一个Python脚本就能变成一个带有交互组件的网页。对我们部署者来说,这意味着它本质上是一个Python Web服务。
  • 设计风格:自称“明亮像素风”,界面比较简洁直观。
  • 轻量:从项目结构看,它没有复杂的数据库、消息队列等依赖,就是一个相对独立的Web应用。

简单来说,它是一个功能单一、依赖清晰、用Streamlit写的Python Web应用。我们的任务就是把这个应用在服务器上跑起来,并安全地暴露到公网。

2. 部署环境准备

工欲善其事,必先利其器。在开始部署前,我们需要准备好服务器和必要的工具。这里我假设你有一台安装了Linux系统(如Ubuntu 22.04)的云服务器,并且拥有它的root或sudo权限。

2.1 服务器基础配置

首先,通过SSH连接到你的服务器。我们进行一些基础配置:

  1. 更新系统包:确保系统软件包是最新的。
    sudo apt update && sudo apt upgrade -y
    
  2. 安装必要工具:安装一些后续会用到的工具,比如用于下载文件的wget
    sudo apt install -y wget curl git vim
    

2.2 安装Docker与Docker Compose

我们将使用Docker来运行Audio Pixel Studio和Traefik。Docker能帮我们解决环境依赖问题,让部署变得一致且简单。

  1. 安装Docker:使用Docker官方提供的便捷安装脚本。
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    
  2. 启动Docker并设置开机自启
    sudo systemctl start docker
    sudo systemctl enable docker
    
  3. 将当前用户加入docker组(避免每次都要用sudo):
    sudo usermod -aG docker $USER
    
    注意:执行此命令后,你需要退出当前SSH会话,并重新登录,这个改动才会生效。
  4. 安装Docker Compose:Docker Compose用于定义和运行多容器的应用。我们用它来编排服务。
    sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  5. 验证安装:分别运行以下命令,如果能看到版本号,说明安装成功。
    docker --version
    docker-compose --version
    

环境准备好了,接下来就是重头戏:配置我们的“智能网关”Traefik。

3. 配置Traefik作为反向代理

你可以把Traefik想象成你们公司的前台或者小区的门卫。所有外来访问(HTTP/HTTPS请求)都要先经过它。它的职责是:

  • 问路:根据来访者(请求)想找谁(域名或路径),把它指引到正确的内部服务(比如我们的Audio Pixel Studio)。
  • 办通行证:自动为来访者办理HTTPS加密通行证(SSL证书)。
  • 负载均衡:如果同一个服务有多个实例,它还能平均分配流量。

3.1 创建项目目录与Traefik配置

我们在服务器上创建一个目录来存放所有配置和文件。

mkdir -p ~/audio-pixel-studio
cd ~/audio-pixel-studio

在这个目录下,我们首先为Traefik创建配置。Traefik的配置通常通过动态文件和Docker标签完成,非常灵活。

  1. 创建Traefik的动态配置文件目录

    mkdir -p traefik/config
    
  2. 创建Traefik的静态配置文件 (traefik.yml):这个文件告诉Traefik一些基础运行方式。

    vim traefik/traefik.yml
    

    将以下内容粘贴进去(vim中按i进入编辑模式,粘贴后按ESC,输入:wq保存退出):

    # traefik/traefik.yml
    api:
      dashboard: true # 启用管理仪表板
      debug: true     # 启用调试模式(生产环境可关闭)
    
    providers:
      docker:
        endpoint: "unix:///var/run/docker.sock" # 监听Docker事件
        exposedByDefault: false # 默认不暴露所有容器,需要手动标签指定
      file:
        directory: /etc/traefik/config # 动态配置文件的目录
        watch: true # 监听文件变化,自动重载配置
    
    entryPoints:
      web:
        address: ":80" # HTTP入口点,用于HTTP到HTTPS的重定向和证书申请验证
      websecure:
        address: ":443" # HTTPS入口点
    
    certificatesResolvers:
      myresolver:
        acme:
          email: your-email@example.com # 替换为你的邮箱,用于证书到期提醒
          storage: /etc/traefik/acme/acme.json # 存储ACME证书的位置
          httpChallenge:
            entryPoint: web # 使用HTTP-01挑战方式验证域名所有权
    

    重要:请务必将 your-email@example.com 替换为你自己的真实邮箱地址。

  3. 创建动态配置文件 (dynamic_conf.yml):这个文件可以定义一些共享的、不依赖于具体Docker容器的配置,比如中间件。

    vim traefik/config/dynamic_conf.yml
    

    粘贴以下内容:

    # traefik/config/dynamic_conf.yml
    http:
      middlewares:
        https-redirect:
          redirectScheme:
            scheme: https
            permanent: true # 将HTTP请求永久重定向到HTTPS
    

    这个中间件的作用是,当有人用http://访问你的站点时,自动跳转到https://

3.2 创建Docker Compose文件编排服务

现在,我们来创建主力的docker-compose.yml文件,它将定义两个服务:traefikaudio-pixel-studio

在项目根目录 (~/audio-pixel-studio) 下创建该文件:

vim docker-compose.yml

粘贴以下内容,并仔细阅读注释,特别是需要替换的部分:

# docker-compose.yml
version: '3.8'

networks:
  web:
    external: true # 使用外部网络,方便其他服务接入
  internal:
    driver: bridge # 内部网络,用于服务间通信

services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - web
      - internal
    ports:
      - "80:80"    # HTTP端口
      - "443:443"  # HTTPS端口
      # - "8080:8080" # Traefik仪表板端口(默认关闭,按需开启)
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro # 挂载Docker套接字,让Traefik能发现其他容器
      - ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
      - ./traefik/config:/etc/traefik/config:ro
      - ./traefik/acme:/etc/traefik/acme # 挂载证书存储目录
    labels:
      # 为Traefik自身启用仪表板,并配置路由规则(谨慎暴露到公网)
      # - "traefik.enable=true"
      # - "traefik.http.routers.traefik.rule=Host(`traefik.your-domain.com`)" # 替换为你的域名
      # - "traefik.http.routers.traefik.service=api@internal"
      # - "traefik.http.routers.traefik.entrypoints=websecure"
      # - "traefik.http.routers.traefik.tls.certresolver=myresolver"
      # - "traefik.http.routers.traefik.middlewares=auth" # 可以添加基础认证中间件
    command:
      - "--log.level=DEBUG" # 日志级别,调试用INFO或DEBUG,生产用ERROR

  audio-pixel-studio:
    image: ccr.ccs.tencentyun.com/mirrors/audio-pixel-studio:latest # 使用合适的镜像
    container_name: audio-pixel-studio
    restart: unless-stopped
    networks:
      - internal # 只接入内部网络,不直接暴露端口
    # 端口映射已由Traefik处理,此处无需暴露
    # ports:
    #   - "8501:8501"
    environment:
      - STREAMLIT_SERVER_PORT=8501 # Streamlit默认端口
      - STREAMLIT_SERVER_ADDRESS=0.0.0.0
    volumes:
      - ./app_data/logs:/app/logs # 挂载日志目录,持久化数据
    labels:
      - "traefik.enable=true" # 启用Traefik代理
      - "traefik.http.routers.audio-pixel-studio.rule=Host(`audio.your-domain.com`)" # 核心:定义域名规则,请替换!
      - "traefik.http.routers.audio-pixel-studio.entrypoints=websecure" # 使用HTTPS入口点
      - "traefik.http.routers.audio-pixel-studio.tls.certresolver=myresolver" # 使用上面定义的证书解析器
      - "traefik.http.services.audio-pixel-studio.loadbalancer.server.port=8501" # 告诉Traefik后端服务端口
      # 将HTTP流量重定向到HTTPS(应用全局中间件)
      - "traefik.http.routers.audio-pixel-studio-http.rule=Host(`audio.your-domain.com`)"
      - "traefik.http.routers.audio-pixel-studio-http.entrypoints=web"
      - "traefik.http.routers.audio-pixel-studio-http.middlewares=https-redirect@file"

关键修改点(务必操作)

  1. 域名:将文件中所有的 audio.your-domain.com 替换为你实际想要绑定的域名(例如 audio.example.com)。你需要确保这个域名的DNS记录已经指向了你当前服务器的公网IP地址。
  2. 镜像ccr.ccs.tencentyun.com/mirrors/audio-pixel-studio:latest 是一个示例镜像地址。你需要替换为Audio Pixel Studio项目提供的正确Docker镜像地址。如果项目没有官方镜像,你可能需要自己构建,这超出了本基础教程的范围。
  3. Traefik仪表板:配置中注释掉了Traefik仪表板的外部访问。如果你需要,可以取消注释那几行labels,并将traefik.your-domain.com替换为一个域名(如traefik-admin.example.com),并强烈建议配置HTTP基础认证等安全措施后再暴露到公网。

3.3 创建Docker网络并启动服务

  1. 创建外部网络:我们在Compose文件中声明了要使用一个外部的web网络。

    docker network create web
    
  2. 启动所有服务:在docker-compose.yml所在目录执行。

    docker-compose up -d
    

    -d参数表示在后台运行。

  3. 查看服务状态

    docker-compose ps
    

    你应该看到traefikaudio-pixel-studio两个服务的状态都是Up

  4. 查看实时日志(如果需要调试):

    # 查看所有服务日志
    docker-compose logs -f
    # 查看特定服务日志
    docker-compose logs -f audio-pixel-studio
    

4. 验证部署与使用

如果一切顺利,现在你应该可以通过浏览器访问你的Audio Pixel Studio了。

  1. 访问应用:打开浏览器,输入 https://你设置的域名(例如 https://audio.example.com)。

    • 首次访问可能会稍慢,因为Traefik正在后台通过Let‘s Encrypt自动为你申请和配置SSL证书。如果看到证书错误,请等待一两分钟再刷新。
    • 成功后,浏览器地址栏会显示绿色的锁标志,表示连接是安全的HTTPS。
  2. 使用Audio Pixel Studio

    • 界面加载后,你应该能看到简洁的“像素风格”界面。
    • 尝试在“语音合成”标签页输入文字,选择音色,点击合成。如果网络通畅,很快就能听到生成的语音。
    • 在“人声分离”标签页上传一个MP3文件测试分离功能。
  3. 验证自动证书:证书是自动管理的。你可以通过查看Traefik的挂载卷来确认证书是否已生成。

    ls -la ~/audio-pixel-studio/traefik/acme/
    

    你应该能看到一个acme.json文件,里面就存储着你的HTTPS证书信息。证书到期前,Traefik会自动续期,你完全不用操心。

5. 总结与后续管理

至此,我们已经完成了Audio Pixel Studio基于Traefik的自动化部署。我们来回顾一下这个方案带来的好处:

  • 自动化HTTPS:Let‘s Encrypt提供免费证书,Traefik自动申请和续期,省去手动管理的麻烦。
  • 动态服务发现:未来如果你想在同一个服务器上部署其他Web应用(比如另一个博客或工具),只需要在新的Docker Compose服务中添加类似的traefik标签,指定一个新的域名规则,Traefik就会自动识别并为其配置路由和HTTPS,无需修改Traefik本身的配置。
  • 安全隔离:应用服务(如audio-pixel-studio)只接入内部网络,不直接暴露端口,由Traefik统一对外,提升了安全性。
  • 统一入口:所有服务都通过80/443端口对外,由域名区分,管理起来非常清晰。

常用管理命令

  • 停止服务docker-compose down
  • 重启服务docker-compose restart
  • 查看日志docker-compose logs -f [服务名]
  • 更新镜像并重启(假设镜像有更新):
    docker-compose pull
    docker-compose up -d
    

注意事项

  • 确保服务器防火墙开放了80和443端口。
  • 妥善保管traefik/acme/acme.json文件,它包含了你的证书私钥。
  • 如果应用无法访问,首先检查docker-compose logs查看错误信息,并确认域名DNS解析已生效。

这个部署框架具有很强的通用性。掌握了它,你就能轻松地将许多类似的Docker化Web应用部署上线,并享受自动化的HTTPS和路由管理带来的便利。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐