极简短链系统

· 1,372 字 · 约 4 分钟
0

# shortlink-go

极简短链系统(Go + SQLite),由 Python 版本重写而来,内存占用极低、运行稳定可靠。

相比 Python 版本的优势

对比项 Python 版 Go 版
运行内存 约 50–80 MB 约 5–10 MB
Docker 镜像 约 150 MB 约 15 MB
启动时间 2–3 秒 <0.1 秒
依赖 Flask + Python 运行时 单个静态二进制文件
并发能力 受 GIL 限制 原生 goroutine 并发

新增功能

  • 备注功能:每条短链可添加备注,便于后续检查与识别用途
  • 分组功能(可选):为短链分配分组(如“工作”“个人”),支持下拉筛选与自动补全
  • 标签功能(可选):为短链添加多个标签(逗号分隔),点击标签即可快速筛选
  • 多选删除:支持勾选多条短链并一键批量删除,方便日常维护
  • 筛选过滤:顶部筛选栏支持按分组与标签组合过滤
  • 数据库兼容:自动检测旧数据库并新增所需列,实现平滑迁移

部署方式

Docker Compose(推荐)

YAML
services:
  shortlink:
    build: .
    # image: yourname/shortlink-go:latest
    container_name: shortlink-service
    ports:
      - "5000:5000"
    volumes:
      - ./data:/app/data
    environment:
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=admin123
      # - SECRET_KEY=your-random-secret-key
    restart: unless-stopped

环境变量说明

变量名 默认值 说明
ADMIN_USERNAME admin 管理员用户名
ADMIN_PASSWORD admin123 管理员密码
DATABASE_PATH /app/data/shortlinks.db 数据库文件路径
SECRET_KEY change-this-secret-key Cookie 签名密钥
HOST 0.0.0.0 监听地址
PORT 5000 监听端口

内存优化措施

  • SQLite 使用 WAL 模式,连接池上限为 2 个连接
  • 通过 embed.FS 嵌入模板,避免运行时读取文件
  • 采用 HMAC 签名 Cookie,替代服务端 Session 存储
  • 编译时使用 -ldflags="-s -w" 减小二进制体积
  • 异步更新访问计数,降低阻塞影响