跳转到帖子

准备工作

  1. 下载 Golang 从官方网站下载并安装 Go 语言, 按默认设置安装即可。

  2. 安装npm和pnpm(版本要求npm>22)

  3. Clone Answer 项目 确保你已经克隆了 Apache Answer 到本地,如还未克隆,请阅读 Apache Answer 前端配置指南

一、后端编译和初始化

在 Answer 项目根目录打开命令行终端运行以下命令。

go mod download
go run cmd/answer/main.go init -C ./answer-data
go run cmd/answer/main.go run -C ./answer-data

如果报端口占用错误就修改/answer/internal/install/install_main.go文件端口

加入版本号编译

cd cmd/answer
go build -ldflags "-X github.com/apache/answer/internal/base/constant.Version=1.5.1 -X github.com/apache/answer/internal/base/constant.Revision=your_revision" -o ../../answer

启动命令 ./answer run -C ./answer-data(其他项目)

二、前端编译

cd ./ui
pnpm pre-install
pnpm install
pnpm run build

三、创建数据库并配置文件

四、项目启动

回到命令行终端,在answer项目根目录运行以下命令启动后端服务器 。

go run cmd/answer/main.go run -C ./answer-data

或者

./answer run -C ./answer-data

4篇意见

推荐意见

  • 网站管理

宝塔定时任务启动脚本

在项目根目录下创建一个“start.sh”写入如下配置

然后宝塔计划任务里添加bash /www/wwwroot/answer/start.sh

start.sh

#!/bin/bash

# 项目根目录
APP_DIR="/www/wwwroot/answer"
# 数据目录
DATA_DIR="$APP_DIR/answer-data"
# 启动日志文件
LOG_FILE="$APP_DIR/answer.log"
# answer 监听端口
PORT=9080

# 检查端口是否被占用
if lsof -i:$PORT | grep LISTEN > /dev/null; then
echo "Answer 已在端口 $PORT 上运行,跳过启动。"
exit 0
fi

# 检查是否已经有 answer 进程
if pgrep -f "answer run" > /dev/null; then
echo "Answer 进程已存在,跳过启动。"
exit 0
fi

# 启动 answer
echo "启动 Answer 项目中..."
cd $APP_DIR
nohup ./answer run -C $DATA_DIR > $LOG_FILE 2>&1 &

# 循环检测进程是否启动,最多检测5次,每次间隔1秒
for i in {1..5}
do
sleep 1
if pgrep -f "answer run" > /dev/null; then
echo " Answer 启动成功。"
exit 0
fi
done

echo " Answer 启动失败,请查看日志:$LOG_FILE"
exit 1

image.png

  • 网站管理

部署插件带版本号脚本

starp.sh

#!/bin/bash

# 项目根目录
APP_DIR="/www/wwwroot/answer"

# 插件目录
PLUGIN="github.com/apache/answer-plugins/cdn-aliyun"

# 设置版本信息
VERSION="1.5.1"
REVISION=$(git -C "$APP_DIR" rev-parse --short HEAD)
BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

cd "$APP_DIR" || exit 1

echo " 开始构建 Answer 插件:$PLUGIN"
./answer build --with "$PLUGIN"

# 找到最新构建目录
BUILD_DIR=$(ls -td answer_build*/ | head -1)
echo " 构建目录:$BUILD_DIR"

cd "$BUILD_DIR" || exit 1

echo " 编译带版本信息的 Answer 可执行文件..."
go build -ldflags "-X github.com/apache/answer/cmd.Version=$VERSION \
-X github.com/apache/answer/cmd.Revision=$REVISION \
-X github.com/apache/answer/cmd.Time=$BUILD_TIME" \
-o "$APP_DIR/answer" ./answer

echo " 编译完成,输出路径:$APP_DIR/answer"
游客
添加意见…