部署 img2color-go 所需的环境非常轻量,主要包含的核心组件
- go语言环境编译用(Go 1.21+ (建议最新稳定版)。)
- docker拉起redis容器缓存用(Docker 20.10+, Docker Compose V2。)
拉起Redis容器做缓存
在 /val/lib/docker/redis-img2color目录下创建 docker-compose.yml:
services:
redis-img2color:
image: redis:7-alpine
container_name: redis-img2color
restart: always
ports:
- "127.0.0.1:6380:6379"
volumes:
- /val/lib/docker/redis-img2color:/data
command: redis-server --appendonly yes
执行启动:
docker compose up -d
克隆代码
git clone https://github.com/anzhiyu-c/img2color-go.git
cd img2color-go
修改包名:api/img2color.go
为什么要改?
-
原代码 (
package handler):这是为 Vercel/Serverless 环境设计的"库"模式,它没有main函数入口,直接go build会报错或者生成无法直接运行的库文件。 -
修改后 (
package main):这告诉 Go 编译器这是一个独立的可执行程序。配合我们添加的main函数(或原有的入口逻辑),才能编译出一个可以在服务器上直接运行的二进制文件 (img2color-server)。将 api/img2color.go 第一行的 package handler 替换为 package main
sed -i '1s/package handler/package main/' api/img2color.go
验证一下是否修改成功
head -n 1 api/img2color.go
配置环境变量
创建/修改 .env 文件:
PORT=9000
REDIS_ADDRESS=127.0.0.1:6380
REDIS_PASSWORD=
USE_REDIS_CACHE=true
REDIS_DB=0
USE_MONGODB=false
MONGO_URI=
MONGO_DB=
ALLOWED_REFERERS=
编译 Go 程序
cd /opt/img2color-go
go mod tidy
go build -o img2color-server ./api/
chmod +x img2color-server
配置 Systemd 服务
创建 /etc/systemd/system/img2color.service:
[Unit]
Description=img2color-go Service
After=network.target docker.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/img2color-go
ExecStart=/opt/img2color-go/img2color-server
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动并验证
# 重载配置并启动
sudo systemctl daemon-reload
sudo systemctl enable --now img2color
# 查看日志确认连接成功
sudo journalctl -u img2color -f
最终测试
curl "http://127.0.0.1:9000/api?img=https://avatars.githubusercontent.com/u/9919?v=4"
反向代理
后续可以配置个反向代理将ip+port换成域名,这里不做过多赘述