PaoPao 是一個清新文藝的微社區,類似於微博、Twitter,但更注重藝術和創意的表達。它基於 Go、Gin、Zinc、Vue 和 TypeScript 等技術構建,具有良好的性能和可擴展性。本文將介紹 PaoPao 的功能、技術棧、快速開始指南和部署方式,幫助您快速搭建自己的微社區。
核心功能#
- 發布動態:用戶可以發布文字、圖片、視頻等形式的動態,分享自己的想法和創意。
- 評論互動:用戶可以對其他用戶的動態進行評論,進行互動交流。
- 搜索功能:用戶可以通過關鍵詞搜索相關的動態和用戶。
- 個人主頁:用戶可以設置個人資料、頭像、背景等,展示自己的個性。
- 主題切換:用戶可以選擇不同的主題風格,例如明亮、暗黑等。
- 桌面端應用:PaoPao 還提供了桌面端應用,方便用戶在電腦上使用。
技術亮點#
PaoPao-CE 的技術棧展現了其現代化和高性能的特點。以下是構建這個項目的主要技術和工具:
後端技術#
- Go:一種靜態強類型、編譯型、並發型,並具有垃圾回收功能的編程語言。
- Gin:一個用 Go 語言編寫的 Web 框架,以高性能著稱。
- Zinc:一個基於 Elasticsearch 的開源搜索引擎,為 PaoPao-CE 提供搜索能力。
- Buf:用於管理 Protocol Buffers 文件的工具。
- gRPC:一種高性能、開源和通用的 RPC 框架。
- Meilisearch:一個快速、易於使用的開源搜索引擎。
前端技術#
- Naive UI:一個 Vue 3 的組件庫,提供了一系列美觀的組件。
- Vue.js:一個漸進式 JavaScript 框架,用於構建用戶界面。
- Vite.js:一個現代化的前端構建工具。
- Tauri:一個框架,用於構建輕量級、安全的跨平台桌面應用程序。
安裝教程#
環境要求#
- Go (1.20+)
- Node.js (14+)
- MySQL (5.7+)
- Redis
- Meilisearch
以上環境版本為 PaoPao 官方的開發版本,僅供參考,其他版本的環境未進行充分測試。
安裝說明#
在開始安裝之前我們需要一台伺服器,伺服器這裡我推薦伍六七雲:https://www.vps567.com 香港 2H2G5M 伺服器 20 / 月,還有高防 CDN 加速只需 18 / 月起。
方式一。手動安裝(推薦)#
克隆代碼庫
git clone https://github.com/rocboss/paopao-ce.git
後端#
-
導入項目根目錄下的
scripts/paopao.sql
文件至 MySQL 數據庫。 -
拷貝項目根目錄下
config.yaml.sample
文件至config.yaml
,按照註釋完成配置編輯。 -
編譯後端
編譯 api 服務:make build
編譯 api 服務、內嵌 web 前端 ui:
make build
也可以使用精簡模式編譯,不內嵌 web 前端 ui:
make build TAGS='slim embed'
編譯後在
release
目錄可以找到對應可執行文件。release/paopao
-
直接運行後端
運行 api 服務:make run
運行 api 服務、web 前端 ui 服務:
make run TAGS='embed'
提示:如果需要內嵌 web 前端 ui,請先構建 web 前端 (建議設置 web/.env 為 VITE_HOST="")。
-
使用內置的 Migrate 機制自動升級維護 SQL DDL:
# 添加 Migration 功能到 Features 中 開啟migrate功能 vim config.yaml # file: config.yaml # Features: # Default: ["Base", "MySQL", "Zinc", "MinIO", "LoggerZinc", "Migration"] # 編譯時加入migration tag編譯出支持migrate功能的可執行文件 make build TAGS='migration' release/paopao # 或者 帶上migration tag直接運行 make run TAGS='migration'
注意:默認編譯出來的可執行文件是不內置 migrate 功能,需要編譯時帶上 migration tag 才能內置支持 migrage 功能。
前端#
-
進入前端目錄
web
,拷貝.env
到.env.local
,編輯.env.local
文件中後端服務地址及其他配置項,下載依賴包cd ./web && cp .env .env.local vim .env.local yarn
-
編譯前端
yarn build
build 完成後,可以在 dist 目錄獲取編譯產出,配置 nginx 指向至該目錄即可。
桌面端#
-
進入前端目錄
web
,拷貝.env
到.env.local
,編輯.env.local
文件中後端服務地址及其他配置項,下載依賴包cd ./web && cp .env .env.local vim .env.local yarn
-
編譯前端
yarn build
-
構建桌面端
yarn tauri build
桌面端是使用Rust + tauri編寫的,需要安裝 tauri 的依賴,具體參考https://tauri.studio/v1/guides/getting-started/prerequisites。
方式二。使用 Docker 構建、運行#
- 後端:
# 默認參數構建, 默認內嵌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 ui並且使用本地編譯的web/dist構建
docker build -t your/paopao-ce:tag --build-arg USE_DIST=yes .
# 只編譯api server
docker build -t your/paopao-ce:tag --build-arg EMBED_UI=no .
# 運行
mkdir 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
# 或者直接運行構建好的docker image
mkdir 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
- 前端:
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:
# 構建Image
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
# 或者使用官方Image運行
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
# 或者使用官方Image運行 + 自定義config.yaml
docker run --name paopao-ce-allinone -d -p 8000:8008 -p 7700:7700 -v ./config.yaml:/app/config.yaml -v ./data/custom:/app/custom -v ./data/meili_data:/app/meili_data bitbus/paopao-ce:all-in-one-latest
注意在
config.yaml
中Meili.ApiKey
的值必須與容器中 meili 啟動時設定的MEILI_MASTER_KEY
環境變量值相同,默認為paopao-meilisearch
。可以在 docker 啟動容器時通過-e MEILI_MASTER_KEY=<custom-key>
設置該值。
方式三。使用 docker-compose 運行#
git clone https://github.com/rocboss/paopao-ce.git
cd paopao-ce && docker compose up -d
# visit http://localhost:8008 👀 paopao-ce
# visit http://localhost:8001 👀 RedisInsight
# visit http://localhost:8080 👀 phpMyAdmin
默認是使用 config.yaml.sample 的配置,如果需要自定義配置,請拷貝默認配置文件 (比如 config.yaml),修改後再同步配置到 docker-compose.yaml 如下:
# file: docker-compose.yaml
...
backend:
image: bitbus/paopao-ce:latest
restart: always
depends_on:
- db
- redis
- zinc
# modify below to reflect your custom configure
volumes:
- ./config.yaml:/app/paopao-ce/config.yaml
ports:
- 8008:8008
networks:
- paopao-network
....
注意:默認提供的 docker-compose.yaml 初衷是搭建本機開發調試環境,如果需要產品部署供外網訪問,請自行調優配置參數或使用其他方式部署。