打包分发与扩展方向
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 使用一个通用图标。替换方法:
- 准备一个 1024×1024 的 PNG 图标文件
- 重命名为
appicon.png - 放在项目根目录
- 重新构建
# Windows: 自动生成 .ico
# macOS: 自动生成 .icns
wails3 build
推荐工具:
- iconify.design — 开源图标库
- realfavicongenerator.net — 全平台图标生成器
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 桌面应用吧。