前言
本人文笔不太行,希望各位能看懂。不会的可以在下面评论留言。
环境
服务器环境
- Nginx v1.24.0
- Mysql v5.7.44
- Redis v7.4.1
- Meilisearch v1.12.1
本地环境
- Node v22.12.0
- Git v2.43.0
- Go v1.23.4
安装环境
安装Node
点击 这里 安装最新版Node即可 目前最新v22.12.0
安装Go
点击 这里 安装最新版Go即可 目前最新v1.23.4
安装Git
点击 这里 安装最新版Git即可 目前最新 v2.47.1
获取源代码
首先你可以在桌面或者任意位置新建一个文件夹或者直接在桌面打开cmd执行
git clone https://github.com/rocboss/paopao-ce.git
执行完之后你会发现桌面多了一个paopao-ce文件夹 我们cd进去
cd paopao-ce
然后进入这个页面你可以看到以下目录
核心源码目录
internal/ - 项目内部代码,包含核心业务逻辑实现
pkg/ - 可复用的工具包代码
cmd/ - 命令行入口代码
auto/ - 自动生成的代码
mirc/ - RESTful API 接口定义
proto/ - gRPC 接口定义
Web前端相关
web/ - Web前端代码
部署和构建相关
docker/ - Docker相关配置和脚本
scripts/ - 各类脚本文件
build-image.sh - 构建Docker镜像脚本
build-allinone.sh - 构建all-in-one Docker镜像脚本
build-release.sh - 构建发布版本脚本
docker-compose.yaml - Docker Compose配置文件
Dockerfile - Docker构建文件
Dockerfile.allinone - All-in-one Docker构建文件
配置文件
.dockerignore - Docker构建忽略文件
.gitattributes - Git属性配置
.gitignore - Git忽略文件配置
.golangci.yml - golangci-lint配置
buf.gen.yaml - buf生成代码配置
buf.work.yaml - buf工作空间配置
config.yaml.sample - 示例配置文件
IDE配置
.vscode/ - VS Code配置文件
.github/ - GitHub Actions等配置
文档
docs/ - 项目文档
CHANGELOG.md - 版本变更记录
deployed-sites.md - 已部署站点列表
features-status.md - 功能特性状态
LICENSE - 开源协议
README.md - 项目说明
ROADMAP.md - 开发路线图
其他
main.go - 程序入口文件
Makefile - Make构建配置
go.mod/go.sum - Go模块依赖配置
run.sh - 运行脚本
首先配置一下Go的源 默认是官方源 我们换一下国内源
打开cmd输入以下命令
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
然后配置一下Go的编译设置 因为我们要在服务器上部署 我这边用的是Ubuntu系统 部署在宝塔面板上 所以我们得编译Linux可执行的二进制文件
set GOARCH=amd64
set GOOS=linux
这样就设置成了编译Linux可执行的二进制文件了
然后我们来配置一下config.yaml.sample文件
首先复制一份config.yaml.sample文件更名为config.yaml
然后在config.yaml中配置我们需要的
这里我简单的配置一下我的
App: # APP基础设置项
RunMode: debug
AttachmentIncomeRate: 0.8 #这个是里面付费作者的提成比例 这个0.8 就是80% 设置1.0 就是100%收益 如果你不启用钱包或者付费 请忽视这条
MaxCommentCount: 10
DefaultContextTimeout: 60
DefaultPageSize: 10
MaxPageSize: 100
Server: # 服务设置
RunMode: debug
HttpIp: 0.0.0.0
HttpPort: 8010
ReadTimeout: 60
WriteTimeout: 60
Features:
Default: ["Web", "Frontend:EmbedWeb", "Meili", "LocalOSS", "MySQL", "BigCacheIndex", "LoggerFile", "Redis", "LoggerMeili", "Alipay"] # 这里是启用的模块 我自己加上Redis和LoggerMeili还有Alipay这三个 看你自己的需求
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"]
Base: ["Redis", "PhoneBind"]
Docs: ["Docs:OpenAPI"]
Deprecated: ["Deprecated:OldWeb"]
Service: ["Web", "Admin", "SpaceX", "Bot", "LocalOSS", "Mobile", "Frontend:Web", "Frontend:EmbedWeb", "Docs"]
Option: ["SimpleCacheIndex"]
Sms: "SmsJuhe"
WebServer: # Web服务
HttpIp: 0.0.0.0
HttpPort: 8008
ReadTimeout: 60
WriteTimeout: 60
AdminServer: # Admin后台运维服务
HttpIp: 0.0.0.0
HttpPort: 8014
ReadTimeout: 60
WriteTimeout: 60
SpaceXServer: # SpaceX服务
HttpIp: 0.0.0.0
HttpPort: 8012
ReadTimeout: 60
WriteTimeout: 60
BotServer: # Bot服务
HttpIp: 0.0.0.0
HttpPort: 8016
ReadTimeout: 60
WriteTimeout: 60
LocalossServer: # Localoss服务
HttpIp: 0.0.0.0
HttpPort: 8018
ReadTimeout: 60
WriteTimeout: 60
FrontendWebServer: # Web前端服务
HttpIp: 0.0.0.0
HttpPort: 8006
ReadTimeout: 60
WriteTimeout: 60
DocsServer: # 开发文档服务
HttpIp: 0.0.0.0
HttpPort: 8011
ReadTimeout: 60
WriteTimeout: 60
MobileServer: # 移动端grpc api服务
Host: 0.0.0.0
Port: 8020
SmsJuhe:
Gateway: https://v.juhe.cn/sms/send
Key:
TplID:
TplVal: "#code#=%s&#m#=%d"
Alipay:
AppID: # 这里填你的支付宝Appid号 然后下面要加一条PrivateKey来存你的私钥
InProduction: True
PrivateKey: "这里面存你的私钥"
RootCertFile: "custom/alipay/RootCert.crt" #然后这些你自己去相应的位置创建文件夹和放入你的证书 记得名字要改成这样的三个
PublicCertFile: "custom/alipay/CertPublicKey_RSA2.crt"
AppPublicCertFile: "custom/alipay/AppCertPublicKey.crt"
CacheIndex:
MaxUpdateQPS: 100 # 最大添加/删除/更新Post的QPS, 设置范围[10, 10000], 默认100
SimpleCacheIndex: # 缓存泡泡广场消息流
MaxIndexSize: 200 # 最大缓存条数
CheckTickDuration: 60 # 循环自检查每多少秒一次
ExpireTickDuration: 300 # 每多少秒后强制过期缓存, 设置为0禁止强制使缓存过期
BigCacheIndex: # 使用BigCache缓存泡泡广场消息流
MaxIndexPage: 1024 # 最大缓存页数,必须是2^n, 代表最大同时缓存多少页数据
Verbose: False # 是否打印cache操作的log
ExpireInSecond: 300 # 多少秒(>0)后强制过期缓存
Logger: # 日志通用配置
Level: debug # 日志级别 panic|fatal|error|warn|info|debug|trace
LoggerFile: # 使用File写日志
SavePath: custom/data/paopao-ce/logs
FileName: app
FileExt: .log
LoggerZinc: # 使用Zinc写日志
Host: zinc:4080
Index: paopao-log
User: admin
Password: admin
Secure: False
LoggerMeili: # 使用Meili写日志
Host: meili:7700 # 这里meili:7700改成127.0.0.1:7700
Index: paopao-log
ApiKey: paopao-meilisearch
Secure: False
MinWorker: 5 # 最小后台工作者, 设置范围[5, 100], 默认5
MaxLogBuffer: 100 # 最大log缓存条数, 设置范围[10, 10000], 默认100
JWT: # 鉴权加密
Secret: 18a6413dc4fe394c66345ebe501b2f26
Issuer: paopao-api
Expire: 86400
TweetSearch: # 推文关键字搜索相关配置
MaxUpdateQPS: 100 # 最大添加/删除/更新Post的QPS,设置范围[10, 10000], 默认100
MinWorker: 10 # 最小后台更新工作者, 设置范围[5, 1000], 默认10
Zinc: # Zinc搜索配置
Host: zinc:4080
Index: paopao-data
User: admin
Password: admin
Secure: False
Meili: # Meili搜索配置
Host: meili:7700 # 这里meili:7700改成127.0.0.1:7700
Index: paopao-data
ApiKey: paopao-meilisearch
Secure: False
ObjectStorage: # 对象存储通用配置
RetainInDays: 2 # 临时对象过期时间多少天
TempDir: tmp # 临时对象存放目录名
AliOSS: # 阿里云OSS存储配置
Endpoint:
AccessKeyID:
AccessKeySecret:
Bucket:
Domain:
COS: # 腾讯云COS存储配置
SecretID:
SecretKey:
Region: ap-shanghai
Bucket: demo-1888888888
Domain:
HuaweiOBS: # 华为云OBS存储配置
AccessKey:
SecretKey:
Endpoint:
Bucket: paopao
Domain:
MinIO: # MinIO 存储配置
AccessKey: Q3AM3UQ867SPQQA43P2F
SecretKey: zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
Secure: False
Endpoint: minio:9000
Bucket: paopao
Domain: 127.0.0.1:9000
S3: # Amazon S3 存储配置
AccessKey: "YOUR-ACCESSKEYID"
SecretKey: "YOUR-SECRETACCESSKEY"
Secure: True
Endpoint: s3.amazonaws.com
Bucket: paopao
Domain:
LocalOSS: # 本地文件OSS存储配置
SavePath: custom/data/paopao-ce/oss
Secure: False
Bucket: paopao
Domain: 127.0.0.1:8008 # 这里改成你的域名
Database: # Database通用配置
LogLevel: error # 日志级别 silent|error|warn|info
TablePrefix: p_ # 表名前缀
MySQL: # MySQL数据库
Username: paopao # 你的数据库用户名
Password: paopao # 你的数据库密码
Host: db:3306 #你的数据库端口 记得把db 改成127.0.0.1
DBName: paopao
Charset: utf8mb4
ParseTime: True
MaxIdleConns: 10
MaxOpenConns: 30
Postgres: # PostgreSQL数据库
User: paopao
Password: paopao
DBName: paopao
Host: localhost
Port: 5432
SSLMode: disable
TimeZone: Asia/Shanghai
Sqlite3: # Sqlite3数据库
Path: custom/data/sqlite3/paopao-ce.db
Redis:
InitAddress:
- redis:6379 #这个你也把redis改成127.0.0.1
WebProfile:
UseFriendship: true # 前端是否使用好友体系
EnableTrendsBar: true # 广场页面是否开启动态条栏功能
EnableWallet: false # 是否开启钱包功能
AllowTweetAttachment: true # 是否允许推文附件
AllowTweetAttachmentPrice: true # 是否允许推文付费附件
AllowTweetVideo: true # 是否允许视频推文
AllowUserRegister: true # 是否允许用户注册
AllowPhoneBind: true # 是否允许手机绑定
DefaultTweetMaxLength: 2000 # 推文允许输入的最大长度, 默认2000字,值的范围需要查询后端支持的最大字数
TweetWebEllipsisSize: 400 # Web端推文作为feed显示的最长字数,默认400字
TweetMobileEllipsisSize: 300 # 移动端推文作为feed显示的最长字数,默认300字
DefaultTweetVisibility: friend # 推文可见性,默认好友可见 值: public/following/friend/private
DefaultMsgLoopInterval: 5000 # 拉取未读消息的间隔,单位:毫秒, 默认5000ms
CopyrightTop: "2023 paopao.info"
CopyrightLeft: "Roc's Me"
CopyrightLeftLink: ""
CopyrightRight: "泡泡(PaoPao)开源社区"
CopyrightRightLink: "https://www.paopao.info"
然后就是配置一下前端了 这里我们cd到web目录
cd web
然后前端也需要搞一个那个配置文件 我们复制一份.env 更名为.env.local
然后进入.env.local文件里
VITE_HOST="然后这里填你的域名http://xxx"
# 功能特性开启
VITE_USE_FRIENDSHIP=true
VITE_USE_WEB_PROFILE=true # 是否使用后端web服务提供的WebProfile来自定义前端的功能特性
# 模块开启
VITE_ENABLE_ANOUNCEMENT=false
VITE_ENABLE_WALLET=false
VITE_ENABLE_TRENDS_BAR=false
# 功能开启
VITE_ALLOW_TWEET_ATTACHMENT=true
VITE_ALLOW_TWEET_ATTACHMENT_PRICE=false
VITE_ALLOW_TWEET_VIDEO=true
VITE_ALLOW_TWEET_VISIBILITY=true
VITE_ALLOW_USER_REGISTER=true
VITE_ALLOW_ACTIVATION=false
VITE_ALLOW_PHONE_BIND=true
# 局部参数
VITE_DEFAULT_MSG_LOOP_INTERVAL=5000 # 拉取未读消息的间隔,单位:毫秒, 默认5000ms
VITE_DEFAULT_TWEET_VISIBILITY=friend # 推文默认可见性,默认好友可见 值: public/following/friend/private
VITE_DEFAULT_TWEET_MAX_LENGTH=2000 # 推文允许输入的最大长度, 默认2000字,值的范围需要查询后端支持的最大字数
VITE_TWEET_WEB_ELLIPSIS_SIZE=400 # Web端推文作为feed显示的最长字数,默认400字
VITE_TWEET_MOBILE_ELLIPSIS_SIZE=300 # 移动端推文作为feed显示的最长字数,默认300字
VITE_DEFAULT_COMMENT_MAX_LENGTH=300 # 评论最大长度, 默认300字
VITE_DEFAULT_REPLY_MAX_LENGTH=300 # 评论最大长度, 默认300字
VITE_RIGHT_FOLLOW_TOPIC_MAX_SIZE=6 # 右侧关注话题最大条目数, 默认6条
VITE_RIGHT_HOT_TOPIC_MAX_SIZE=12 # 右侧热门话题最大条目数, 默认12条
VITE_COPYRIGHT_TOP="2023 paopao.info"
VITE_COPYRIGHT_LEFT="Roc's Me"
VITE_COPYRIGHT_LEFT_LINK=""
VITE_COPYRIGHT_RIGHT="泡泡(PaoPao)开源社区"
VITE_COPYRIGHT_RIGHT_LINK="https://www.paopao.info"
# 图片推文参数
VITE_DEFAULT_TWEET_IMAGE_404="https://paopao-assets.oss-cn-shanghai.aliyuncs.com/public/404.png"
# AliOSS 图片thumbnail参数
VITE_TWEET_IMAGE_THUMBNAIL="?x-oss-process=image/resize,m_fill,w_300,h_300,limit_0/auto-orient,1/format,webp"
# MinIOn 图片thumbnail参数
# VITE_TWEET_IMAGE_THUMBNAIL="?x-oss-process=image/resize,m_fill,w_300,h_300,limit_0/auto-orient,1/format,png"
然后修改好之后 我们来给npm换个国内源
这里我们用淘宝源
npm config set registry https://registry.npmmirror.com
执行完之后我们就安装依赖
npm install
安装完依赖之后我们就打包
npm build
打包完成之后我们回到paopao-ce目录打包二进制文件
go build
不出意外本地会出现一个paopao-ce的文件
我们把这个文件上传到宝塔面板里面文件目录
这里我创建了一个bbs目录 你们想搞啥搞啥
然后我们在bbs目录里上传我们的二进制文件和配置文件config.yaml和一个文件夹
emmm...什么 你要问我什么文件夹 那当然是你存证书的还有本地日志的还有本地文件的啦文件目录
喏 就是这些 custom 里面有两个文件夹 分别是alipay和data alipay这个文件夹里面放你的证书 然后data里面也有一个文件夹paopao-ce 然后paopao-ce里面有两个文件夹分别是logs和oss 这两个我不作解释 看名字也知道是本地日志和本地存储的文件夹 哦~ 不小心说出来了
然后完成上面这部之后我们在网站里新建一个go项目 什么?你不知道在哪 好吧 我截个屏新建go项目
然后按照我这样的配置项目配置
记得哦 运行一定要在后面加上serve 不然... 你懂的
然后我们配置Mysql 新建一个paopao的数据库 导入本地scripts文件夹里面的paopao-mysql.sql文件 注意这里paopao数据库和用户名密码一定要跟config.yaml里面一致 什么? 你不会导入 emmm 真是让人头疼导入sql文件
看到上面导入没 点那个然后选择文件 导入执行就行
okk 现在已经完成一大半了好吧 越来越让人兴奋了
接下来我们去下载那个什么美丽搜索引擎 美丽搜索引擎 下载版本
根据你自己的系统架构来下 一般都是meilisearch-linux-amd64那个
下载完这个之后 我们上传到宝塔面板上面 随便哪个文件夹都可以 我这里放root文件夹里面
然后呢我们在root文件夹里面创建一个文件夹来存放这个美丽搜索引擎的日志和一些文件啥的
mkdir -p data/meili/data
可以使用这个命令创建也可以自己手动在root文件夹内创建 注意要先cd到root文件夹才可执行这个命令 不然就在别处创建了
然后我们在宝塔面板的软件商店下一个进程守护管理器进程守护管理器
就是这货 用来运行那个美丽搜索引擎
我们来添加一个守护守护配置
我这里是放在root的目录下 你们根据自己的去修改 然后运行指令就是sudo ./meilisearch
然后就没了...
访问你的域名就部署成功了
演示站:泡泡社区
有啥不会的底下留言评论哈 或者看关于页 联系我 无偿帮你
最后付上作者的GitHub项目页 paopao-ce (ฅ´ω`ฅ)
然后配置管理员目前是在数据库里面配置在p_user那个表里面找到管理员那个找到你自己的账号把0改1就行!