适用人群:需要二次开发、定制功能,或官方提供的二进制包无法满足需求的开发者。
难度:⭐⭐⭐⭐(需要熟悉 GoLang 和命令行操作)
前置条件
| 软件 | 版本要求 | 说明 |
|---|---|---|
| GoLang | 1.13+(推荐 1.25+) | 编译 Go 源码 |
| Git | 任意版本 | 克隆代码仓库 |
| MySQL | 5.6.35+ | 运行数据库 |
如果尚未安装 GoLang,请访问 go.dev/dl/ 下载安装。
获取源码
bash
# 从 GitHub 克隆(推荐)
git clone https://github.com/fesiong/anqicms.git
# 或从 GitCode 镜像(国内用户)
git clone https://gitcode.com/anqicms/anqicms.git
# 进入项目目录
cd anqicms
编译准备
设置 Go 代理(国内用户)
bash
go env -w GOPROXY=https://goproxy.cn,direct
下载依赖
bash
go mod tidy
go mod vendor
编译可执行文件
方法一:测试运行(不生成二进制文件)
bash
# 直接运行源码,用于调试和测试
go run kandaoni.com/anqicms/main
运行后,浏览器访问 http://127.0.0.1:8001 即可看到效果。
方法二:生成二进制文件
Windows 系统:
bash
go build -ldflags '-w -s -H=windowsgui' -o ./anqicms.exe kandaoni.com/anqicms/main
-w -s:去除调试信息,减小文件体积-H=windowsgui:Windows GUI 模式,运行时不显示命令行窗口
MacOS 系统:
bash
go build -ldflags '-w -s' -o ./anqicms kandaoni.com/anqicms/main
Linux 系统:
推荐使用项目自带的 Makefile:
bash
make
编译完成后,在项目根目录下生成 release/ 目录,其中包含了完整的运行环境(可执行文件、模板文件、静态资源等):
csharp
release/
├── anqicms # 编译好的可执行文件
├── config.sample.json # 配置文件示例
├── template/ # 模板目录
├── public/ # Web 根目录
├── system/ # 后台管理界面
├── locales/ # 多语言包
├── data/ # 数据目录
├── start.sh # 启动脚本
├── stop.sh # 停止脚本
└── doc/ # 开发文档
也可以直接编译:
bash
go build -ldflags '-w -s' -o ./anqicms kandaoni.com/anqicms/main
交叉编译
在不同平台上为目标平台编译:
bash
# 在 MacOS 上编译 Linux 版本
GOOS=linux GOARCH=amd64 go build -ldflags '-w -s' -o ./anqicms-linux kandaoni.com/anqicms/main
# 在 MacOS 上编译 Windows 版本
GOOS=windows GOARCH=amd64 go build -ldflags '-w -s -H=windowsgui' -o ./anqicms.exe kandaoni.com/anqicms/main
# 在 Linux 上编译 Windows 版本
GOOS=windows GOARCH=amd64 go build -ldflags '-w -s -H=windowsgui' -o ./anqicms.exe kandaoni.com/anqicms/main
GOOS和GOARCH是 Go 交叉编译的环境变量,分别指定目标操作系统和 CPU 架构。
编译后端管理界面
注意:如果从 GitHub 克隆代码,后台管理界面(
system/目录)默认是空的,需要单独编译或下载。
方式一:下载预构建包
从 anqicms-admin Releases 下载最新版 system.zip,解压到 AnQiCMS 项目根目录下的 system 文件夹。
bash
# 下载 system.zip
wget https://github.com/fesiong/anqicms-admin/releases/latest/download/system.zip
# 解压到 system 目录
unzip system.zip -d system/
方式二:自行编译
如果需要对后台管理界面进行二次开发,可以克隆 anqicms-admin 仓库自行构建(Vue.js 项目):
bash
git clone https://github.com/fesiong/anqicms-admin.git
cd anqicms-admin
# 安装依赖
npm install
# 构建
npm run build
# 构建产物在 dist/ 目录,将其复制到 anqicms 根目录下的 system/ 目录
cp -r dist/* /path/to/anqicms/system/
运行编译后的版本
bash
# 1. 将编译好的文件复制到目标目录
# 2. 编辑 config.json 配置端口等信息
# 3. 启动
./start.sh
# 或直接运行
./anqicms
# 首次运行会提示初始化,访问 http://127.0.0.1:8001 进入安装界面
Makefile 常用命令
项目根目录下的 Makefile 提供了便捷的编译命令:
bash
# 查看所有可用命令
make help
# 编译(生成 release 目录)
make
# 清理编译产物
make clean
# 运行测试
make test
# 查看版本号
make version
❓ 执行 go run kandaoni.com/anqicms/main 时提示 go: not found 怎么办?
说明 Go 语言环境没有安装或没有正确配置环境变量。
bash
# 检查 Go 是否安装
go version
# 如果输出 "command not found",说明没有安装
# 安装 Go(Ubuntu/Debian 示例)
apt install golang-go
# 或从官网下载最新版
# 访问 https://go.dev/dl/ 下载对应系统的安装包
# 安装后验证
go version
# 应输出类似:go version go1.25.5 linux/amd64
国内用户安装 Go 后还需要设置代理:
bash
go env -w GOPROXY=https://goproxy.cn,direct
❓ 编译出来的二进制包体积很大(上百 MB),能缩小吗?
默认编译出来的二进制包包含调试信息和符号表,体积较大。通过以下方法可以显著缩小体积:
| 方法 | 命令 | 效果 |
|---|---|---|
| 去除调试信息 | go build -ldflags '-w -s' |
约减小 40% |
| UPX 压缩 | upx anqicms |
约减小 70% |
完整优化命令:
bash
# 编译时去除调试信息
go build -ldflags '-w -s' -o ./anqicms kandaoni.com/anqicms/main
# 安装 UPX(Ubuntu)
apt install upx
# 压缩二进包
upx anqicms
# 压缩后体积可降至 15-20 MB
v3.6.1 之后官方已经做了体积优化(从 103 MB 降到 51 MB),源码编译时同样有效。
❓ 我修改了源码,编译后如何确认修改已经生效?
几种验证方式:
bash
# 方式一:通过版本号验证(如果在代码中修改了版本号)
./anqicms --version
# 方式二:通过编译时间戳验证
ls -la ./anqicms
# 查看文件的修改时间,确认是刚刚编译的
# 方式三:直接验证功能
# 如果你的修改是增加了某个新标签或新接口
# 可以直接在浏览器中访问对应的 URL 确认
# 方式四:校验文件 MD5(前后对比)
md5sum ./anqicms
# 每次编译的 MD5 都不同
记住 :每次修改源码后,必须重新编译并重启 AnQiCMS 进程,修改才会生效。重启后还要在后台更新缓存。