打包分发与扩展方向


08 - 打包分发与扩展方向


本章目标

  • 将应用打包为可分发的安装包
  • 跨平台构建(Windows / macOS / Linux)
  • Docker Server 模式部署
  • 了解应用图标替换与版本管理
  • 探索项目的 6 个扩展方向

8.1 生产构建

桌面应用构建

# 当前平台构建
wails3 build

# 指定平台构建
wails3 build -platform windows/amd64
wails3 build -platform darwin/amd64
wails3 build -platform linux/amd64

构建产物:

build/
├── bin/
│   └── pet-content-creator.exe    (Windows)
│   └── pet-content-creator        (macOS / Linux)
└── ...

构建优化标志

# 减小二进制体积
wails3 build -ldflags "-s -w"

# -s  去除符号表
# -w  去除 DWARF 调试信息

加上这两个标志后,二进制文件体积通常可以减小 30-40%。

NSIS 安装包(Windows)

wails3 build -nsis

这会生成一个 .exe 安装程序,用户双击即可安装,并自动创建桌面快捷方式。


8.2 Docker Server 模式

Wails3 支持 Server 模式,将应用作为 HTTP 服务运行:

# 构建 server 模式
wails3 build -server

# 运行
./pet-content-creator -server
# 访问 http://localhost:34115

Dockerfile

FROM golang:1.25-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o /pet-content-creator .

FROM alpine:latest
RUN apk add --no-cache ca-certificates
COPY --from=builder /pet-content-creator /app/pet-content-creator
COPY frontend/dist /app/frontend/dist

EXPOSE 34115
CMD ["/app/pet-content-creator", "-server"]

Docker Compose

version: "3.8"
services:
  app:
    build: .
    ports:
      - "34115:34115"
    volumes:
      - ./config:/root/.pet-content-creator
    restart: unless-stopped
docker compose up -d

⚠️ Server 模式的局限: 不能调用系统 WebView(没有桌面环境),因此不能使用 Wails 的原生 API(如文件对话框、系统通知)。但我们的应用不依赖这些,所以 Server 模式完全可用。


8.3 应用图标替换

默认情况下 Wails3 使用一个通用图标。替换方法:

  1. 准备一个 1024×1024 的 PNG 图标文件
  2. 重命名为 appicon.png
  3. 放在项目根目录
  4. 重新构建
# Windows: 自动生成 .ico
# macOS: 自动生成 .icns
wails3 build

推荐工具:


8.4 版本管理

main.go 中注入版本信息:

var (
    Version   = "dev"
    BuildTime = "unknown"
)

func main() {
    app := application.New(application.Options{
        Name:    "pet-content-creator",
        Version: Version,
        // ...
    })
}

构建时注入:

wails3 build \
  -ldflags "-X main.Version=1.0.0 -X main.BuildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)"

8.5 扩展方向

完成课程后,你可以从以下 6 个方向进一步扩展项目:

🧭 方向 1:多模型支持

当前只支持 DeepSeek。可以抽象一个 LLMProvider 接口,支持多种模型切换:

type LLMProvider interface {
    Generate(ctx context.Context, messages []*schema.Message) (*schema.Message, error)
}

// 实现
type DeepSeekProvider struct { ... }
type OpenAIProvider struct { ... }
type OllamaProvider struct { ... }  // 本地模型

利用 Eino 的 ChatModel 抽象,这个扩展只需新增 provider,业务代码不变。


🧭 方向 2:RAG 知识库

让 AI 生成的文章更专业:

用户输入主题
     ↓
检索本地知识库(宠物医学文献、养护指南)
     ↓
将检索结果注入 System Prompt
     ↓
AI 结合专业知识生成文章

技术选型:

  • 向量数据库:Milvus / Chroma / Qdrant
  • 嵌入模型:text-embedding-3-small(OpenAI)或 bge-large-zh(开源)
  • 框架:Eino 内置 RAG 组件

🧭 方向 3:多平台发布

集成各内容平台的发布 API:

平台 接入方式
今日头条 头条号开放平台 API
微信公众号 公众号素材管理 API
知乎 知乎 API(需申请)
小红书 小红书开放平台

添加 PublisherService,一键发布到多个平台。


🧭 方向 4:流式生成

当前是等待 AI 完整返回后才展示结果。改为流式:

// 使用 Stream 替代 Generate
stream, err := chatModel.Stream(ctx, messages)
for {
    chunk, err := stream.Recv()
    if err == io.EOF { break }
    // 通过 Wails Event 逐 chunk 推送到前端
    app.EmitEvent("article-chunk", chunk.Content)
}

前端实时渲染 AI 写作过程,体验大幅提升。


🧭 方向 5:批量创作

一次输入多个主题,异步批量生成:

输入:
  主题1: 猫咪掉毛怎么办
  主题2: 狗狗疫苗时间表
  主题3: 仓鼠饲养入门指南
     ↓
  并发调用 AI + Pexels(goroutine pool)
     ↓
  批量导出 Word 文档
// 使用 worker pool 控制并发
sem := make(chan struct{}, 3) // 最多 3 个并发
var wg sync.WaitGroup
for _, topic := range topics {
    wg.Add(1)
    go func(t string) {
        defer wg.Done()
        sem <- struct{}{}
        defer func() { <-sem }()
        cs.Create(ctx, CreateRequest{Topic: t, ...})
    }(topic)
}
wg.Wait()

🧭 方向 6:图片本地缓存

避免重复下载相同图片:

type ImageCache struct {
    dir string
}

func (c *ImageCache) Get(url string) ([]byte, bool) {
    key := sha256Hex(url)
    data, err := os.ReadFile(filepath.Join(c.dir, key))
    return data, err == nil
}

func (c *ImageCache) Set(url string, data []byte) {
    key := sha256Hex(url)
    os.WriteFile(filepath.Join(c.dir, key), data, 0644)
}

8.6 学习路线图(全课程回顾)

00 课程导学         ← 了解课程全貌
 │
01 环境搭建         ← 安装 Go/Node/Wails3,跑通第一个窗口
 │
02 配置管理         ← ConfigService,Go struct + JSON,Wails 服务注册
 │
03 AI 文章生成      ← Eino + DeepSeek,System Prompt 工程,标签提取
 │
04 Pexels 图库      ← REST API,图片搜索下载,流式 JSON 解码
 │
05 Word 文档        ← OOXML 格式,ZIP 构建,XML 拼接,图片嵌入
 │
06 前后端桥接       ← Wails 绑定,React 组件,状态机 UI
 │
07 编排流水线       ← CreatorService,分级容错,依赖注入
 │
08 打包与扩展       ← 跨平台打包,Docker 部署,6 个扩展方向

8.7 你拥有了什么

完成全部 8 章后,你拥有:

层面 能力
桌面开发 Wails3 项目从创建到打包的完整流程
Go 后端 服务架构、依赖注入、编排模式、错误处理
AI 集成 Eino 框架、DeepSeek API、Prompt Engineering
API 集成 REST API 调用的完整模式(搜索、下载、限流)
文件生成 OOXML 格式理解与纯 Go 实现
前端 React + TypeScript + Vite,Wails 绑定机制
工程化 跨平台构建、Docker 部署、版本管理

更重要的,是这套可复制的架构模式

Config → Agent → External API → Document Generation → Orchestration

换一个业务场景(科技资讯、旅游攻略、美食评测),核心架构完全不变,只需要:

  • 修改 System Prompt
  • 换一个图片源(Unsplash / 自有图库)
  • 调整文档模板

附录 A:常用命令速查

# 开发
wails3 dev                         # 启动开发模式(热重载)

# 构建
wails3 build                       # 当前平台构建
wails3 build -platform linux/amd64 # 交叉编译
wails3 build -ldflags "-s -w"      # 减小体积
wails3 build -nsis                 # Windows 安装包

# 工具
wails3 doctor                      # 环境诊断
wails3 version                     # 版本信息

# 依赖管理
go mod tidy                        # 清理依赖
go mod download                    # 下载依赖

附录 B:API Key 获取指南

服务 注册地址 免费额度
DeepSeek platform.deepseek.com 注册赠送额度,按量计费
Pexels pexels.com/api 每月 200 次请求

🎉 恭喜完成全部课程! 现在去打开你的终端,输入 wails3 dev,开始构建属于你的 AI 桌面应用吧。

如有疑问关注公众号给我留言
wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo