Go + Redis:本地部署高性能图片主色调提取服务

部署 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换成域名,这里不做过多赘述

相关推荐
wuyk5556 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml6 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
萧瑟余晖8 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
ttod_qzstudio8 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖9 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
MC皮蛋侠客12 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
二十雨辰12 小时前
[Java]-Spring面试题
java·开发语言
_oP_i13 小时前
python 后缀 mjs文件
开发语言·python
萧瑟余晖13 小时前
Java深入解析篇二十二之虚拟线程
java·开发语言
油丶酸萝卜别吃13 小时前
Java 集合类全景介绍
java·开发语言