# 安装指南 [English](INSTALL.md) | 简体中文 本文档介绍 PaoPao 在本地体验、开发调试和自部署场景下的推荐安装方式。项目整体说明请参考 [README_ZH.md](README_ZH.md)。 ## 选择安装方式 | 场景 | 推荐方式 | | --- | --- | | 快速本地体验 | [Docker Compose](#docker-compose) | | 基于容器部署 | [Docker 镜像](#docker-images) | | 后端或前端开发 | [源码运行](#run-from-source) | | 构建桌面端 | [桌面应用](#desktop-app) | ## 环境要求 ### 源码开发所需环境 - Go `1.24+` - Node.js `20.19+` 或 `22.12+` - Yarn `1.x` - 若使用 MySQL 方案,需要 MySQL `5.7+` - Redis - Meilisearch - 如果需要构建桌面端,还需要安装 Rust 以及 Tauri 对应平台依赖 ### 关键文件 - `config.yaml.sample` - 标准配置模板 - `scripts/paopao-mysql.sql` - MySQL 初始化脚本 - `scripts/paopao-postgres.sql` - PostgreSQL 初始化脚本 - `scripts/paopao-sqlite3.sql` - SQLite 初始化脚本 - `docker-compose.yaml` - 本地多服务启动配置 ## 方案 1:Docker Compose(推荐用于快速体验) 这是最快速的本地启动方式,适合先把主流程跑起来。 ```sh git clone https://github.com/rocboss/paopao-ce.git cd paopao-ce docker compose up -d ``` 默认会启动以下服务: - `http://localhost:8008` - PaoPao 应用 - `http://localhost:7700` - Meilisearch - `http://localhost:8001` - RedisInsight - `http://localhost:3306` - MySQL 说明: - 后端容器默认会将 `./config.yaml.sample` 挂载为运行配置。 - 持久化数据默认保存在 `./custom/` 目录下。 - `docker-compose.yaml` 中还预留了 MinIO、OpenObserve、Pyroscope、phpMyAdmin 等可选服务,但默认是注释状态。 如果需要使用自定义配置文件,可将 `docker-compose.yaml` 中的挂载改为: ```yaml backend: volumes: - ./config.yaml:/app/paopao-ce/config.yaml - ./custom:/app/paopao-ce/custom ``` ## 方案 2:Docker 镜像 ### 后端镜像 ```sh # 默认构建:内嵌 Web UI,并使用默认 API host 逻辑 docker build -t your/paopao-ce:tag . # 内嵌 Web UI,并指定 API host docker build -t your/paopao-ce:tag --build-arg API_HOST=http://api.paopao.info . # 内嵌 Web UI,并沿用本地 web/.env 中的 API host docker build -t your/paopao-ce:tag --build-arg USE_API_HOST=no . # 使用本地预编译的 web/dist 构建 docker build -t your/paopao-ce:tag --build-arg USE_DIST=yes . # 仅构建后端,不内嵌 Web UI docker build -t your/paopao-ce:tag --build-arg EMBED_UI=no . ``` 运行本地构建镜像: ```sh mkdir -p custom docker run -d -p 8008:8008 \ -v ${PWD}/custom:/app/paopao-ce/custom \ -v ${PWD}/config.yaml.sample:/app/paopao-ce/config.yaml \ your/paopao-ce:tag ``` 或者直接使用已发布镜像: ```sh mkdir -p custom docker run -d -p 8008:8008 \ -v ${PWD}/custom:/app/paopao-ce/custom \ -v ${PWD}/config.yaml.sample:/app/paopao-ce/config.yaml \ bitbus/paopao-ce:latest ``` ### Web 镜像 ```sh cd web # 默认构建 docker build -t your/paopao-ce:web . # 自定义 API host docker build -t your/paopao-ce:web --build-arg API_HOST=http://api.paopao.info . # 使用本地预编译 dist 构建 docker build -t your/paopao-ce:web --build-arg USE_DIST=yes . # 运行 docker run -d -p 8010:80 your/paopao-ce:web ``` ### All-in-one 镜像 ```sh # 构建 docker buildx build --build-arg USE_DIST=yes -t your/paopao-ce:all-in-one-latest -f Dockerfile.allinone . # 运行本地镜像 docker run --name paopao-ce-allinone -d -p 8000:8008 -p 7700:7700 \ -v ./data/custom:/app/custom \ -v ./data/meili_data:/app/meili_data \ your/paopao-ce:all-in-one-latest # 运行已发布镜像 docker run --name paopao-ce-allinone -d -p 8000:8008 -p 7700:7700 \ -v ./data/custom:/app/custom \ -v ./data/meili_data:/app/meili_data \ bitbus/paopao-ce:all-in-one-latest ``` 如果挂载了自定义 `config.yaml`,请确保其中的 `Meili.ApiKey` 与容器内的 `MEILI_MASTER_KEY` 保持一致。默认值为 `paopao-meilisearch`。 ## 方案 3:从源码运行 ### 后端 1. 按照所选数据库导入对应 SQL 初始化脚本。 2. 复制配置模板。 3. 只调整与你环境相关的启动关键配置。 4. 启动或构建后端。 ```sh cp config.yaml.sample config.yaml make run ``` 构建发布二进制: ```sh make build ``` 生成的二进制默认位于 `release/paopao`。 ### Web 前端 ```sh cd web cp .env .env.local yarn yarn dev ``` 构建 Web 静态资源: ```sh yarn build ``` ### 内嵌 Web UI 如果希望由 Go 服务直接提供 Web 前端,请先构建前端资源,再使用 `embed` 标签运行: ```sh make build-web make run TAGS='embed' ``` ### 桌面应用 桌面端位于 `web/` 目录,使用 Tauri 构建: ```sh cd web cp .env .env.local yarn yarn build yarn tauri build ``` 执行 Tauri 构建前,请先安装对应操作系统的官方前置依赖。 ## 常用构建标签 | 标签 | 作用 | | --- | --- | | `embed` | 将 Web 前端打包进 Go 二进制,由后端直接提供服务 | | `migration` | 在后端二进制中包含 migration 支持 | | `docs` | 启用开发文档 / OpenAPI 服务 | 示例: ```sh make build TAGS='migration' make run TAGS='docs' make run TAGS='embed' ``` ## 配置基础 启动时,PaoPao 会按以下顺序读取配置: 1. `./custom/config.yaml` 2. `./config.yaml` 先找到哪个文件,就使用哪个文件。 注意:外部配置文件现在不再要求承载全部运行参数。PaoPao 会先加载内置默认配置,再叠加你本地的配置文件。 建议的职责划分: - **Bootstrap YAML**:端口、Feature 组合、数据库、Redis、JWT、`AdminSettings.EncryptionKey` - **管理后台**(`/#/admin/settings`):大部分站点、搜索、存储、短信、支付以及应用行为类配置 如果某个配置项在后台中被标记为**重启后生效**,表示它会先持久化保存,但需要重启进程后才会真正切换到新值。 `Features` 用于控制不同能力组合: ```yaml Features: Default: ["Web", "Frontend:EmbedWeb", "Meili", "LocalOSS", "MySQL", "BigCacheIndex", "LoggerFile"] Develop: ["Base", "MySQL", "BigCacheIndex", "Meili", "Sms", "AliOSS", "LoggerMeili", "OSS:Retention"] Demo: ["Base", "MySQL", "Option", "Zinc", "Sms", "MinIO", "LoggerZinc", "Migration"] Slim: ["Base", "Sqlite3", "LocalOSS", "LoggerFile", "OSS:TempDir"] ``` 常见命令: ```sh # 使用默认套件 release/paopao serve # 仅使用 develop 套件 release/paopao serve --no-default-features --features develop # 在默认套件基础上增加一个功能 release/paopao serve --features sms # 手动显式指定功能项 release/paopao serve --no-default-features --features sqlite3,localoss,loggerfile,redis ``` 功能项成熟度与支持状态请参考 [features-status.md](features-status.md)。 ## 可选基础设施服务 当前更推荐的默认组合是 **Meilisearch**、**Redis**,以及 **LocalOSS / MinIO / 云对象存储** 三选一。其他集成按需启用即可。 ### Meilisearch(推荐搜索引擎) ```sh mkdir -p data/meili/data docker run -d --name meili \ -v ${PWD}/data/meili/data:/meili_data \ -p 7700:7700 \ -e MEILI_MASTER_KEY=paopao-meilisearch \ getmeili/meilisearch:v0.29.0 ``` 对应配置示例: ```yaml Meili: Host: 127.0.0.1:7700 Index: paopao-data ApiKey: paopao-meilisearch Secure: False ``` ### MinIO ```sh mkdir -p data/minio/data docker run -d --name minio \ -v ${PWD}/data/minio/data:/data \ -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=minio-root-user \ -e MINIO_ROOT_PASSWORD=minio-root-password \ -e MINIO_DEFAULT_BUCKETS=paopao:public \ bitnami/minio:latest ``` 对应配置示例: ```yaml MinIO: AccessKey: Q3AM3UQ867SPQQA43P2F SecretKey: zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG Secure: False Endpoint: 127.0.0.1:9000 Bucket: paopao Domain: 127.0.0.1:9000 ``` ### OpenObserve ```sh mkdir -p data/openobserve docker run -v ${PWD}/data/openobserve:/data \ -e ZO_DATA_DIR=/data \ -p 5080:5080 \ -e ZO_ROOT_USER_EMAIL=root@paopao.info \ -e ZO_ROOT_USER_PASSWORD=paopao-ce \ public.ecr.aws/zinclabs/openobserve:latest ``` ### Pyroscope ```sh docker run -it -p 4040:4040 pyroscope/pyroscope:latest server ``` ### Zinc(遗留 / 可选) 仓库中仍保留了 Zinc 相关代码与 Feature 定义,但当前默认推荐的搜索方案是 Meilisearch。只有在你明确需要兼容旧方案时,再考虑启用 Zinc。 ## 本地启用 API 文档 在配置中加入 Docs 套件,并使用 `docs` 标签运行: ```yaml Features: Default: ["Base", "MySQL", "Option", "LocalOSS", "LoggerFile", "Docs"] Docs: ["Docs:OpenAPI"] ``` ```sh make run TAGS='docs' ``` 然后访问: - `http://127.0.0.1:8011/docs/openapi` ## 更多部署文档 如果需要平台化或生产化部署参考,请继续阅读: - [docs/deploy/README.md](docs/deploy/README.md) - [docs/deploy/core/](docs/deploy/core/) - [docs/deploy/local/](docs/deploy/local/) - [docs/deploy/k8s/](docs/deploy/k8s/) - [docs/deploy/aliyun/](docs/deploy/aliyun/) - [docs/deploy/huawei/](docs/deploy/huawei/) - [docs/deploy/tencent/](docs/deploy/tencent/) ## 运维建议 - 对于长期运行环境,建议使用进程守护工具管理后端服务,并通过 Nginx 做反向代理。 - 示例配置中的短信通道使用 Juhe;如果不适合你的部署场景,可以替换为其他兼容服务商。 - 项目支持多种运行组合,请确保 `Features` 与你实际部署的基础设施保持一致。