Snipe-IT 是什么?为什么你需要它

Snipe-IT 是一个 开源免费的 IT 资产管理系统(IT Asset Management, ITAM),基于 Laravel 12 (PHP) 构建,采用 AGPL-3.0 许可证。它在 GitHub 上拥有 超过 1 万颗 Star,是全球最受欢迎的开源资产管理工具。

💡 核心场景:你的团队里有 10 台笔记本、5 个显示器、20 个软件许可证——谁在用哪台设备?哪个许可证快过期了?什么时候该折旧报废?用 Excel 管迟早乱成一团。Snipe-IT 就是为了解决这些问题而生的。

核心功能一览

功能 说明
📦 硬件资产管理 笔记本电脑、服务器、手机、显示器等设备的完整生命周期追踪
🔑 许可证管理 软件许可证的购买日期、过期提醒、座位数追踪
🖱️ 配件管理 鼠标、键盘、网线等消耗品库存追踪
📋 借用/归还 资产 checkout 给员工,checkin 时记录状态和备注
📊 折旧计算 自动按年/月计算资产折旧价值
🔌 REST API 完整的 JSON API,可集成 Jenkins、Ansible、Jamf 等工具
🌐 多语言 支持 40+ 种语言(包括中文)
📱 移动端适配 响应式 Web 界面,手机也能管理资产

Snipe-IT vs 商业方案

对比维度 Snipe-IT(自部署) Snipe-IT Cloud JAMF Pro Freshservice
费用 完全免费 $399/年起 ~$100/设备/年 ~$49/人/月
数据主权 你的服务器,你掌控 云端托管 云端托管 云端托管
自定义程度 完全可定制 有限
部署难度 Docker 一键部署 免部署 需配置 MDM SaaS 即用
适合规模 10-1000+ 台设备 10-500 台 50+ Apple 设备 50+ 人团队

Docker 一键部署

Snipe-IT 官方提供了 Docker 镜像,使用 Docker Compose 可以在 5 分钟内完成部署。

环境要求

  • Docker 20+ 和 Docker Compose 2+
  • 至少 2GB RAM(推荐 4GB)
  • 10GB 可用磁盘空间

步骤 1:创建项目目录

mkdir -p ~/snipe-it && cd ~/snipe-it

步骤 2:编写 Docker Compose 文件

创建 docker-compose.yml

version: '3.8'

services:
  snipeit-db:
    image: mysql:8.0
    container_name: snipeit-db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword123
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: snipeit_password_456
    volumes:
      - db-data:/var/lib/mysql
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  snipeit:
    image: snipe/snipe-it:latest
    container_name: snipe-it
    ports:
      - "8080:80"
    environment:
      # 数据库配置
      DB_HOST: snipeit-db
      DB_DATABASE: snipeit
      DB_USERNAME: snipeit
      DB_PASSWORD: snipeit_password_456
      # 应用配置
      APP_KEY: base64:CHANGE_ME_GENERATE_KEY
      APP_ENV: production
      APP_DEBUG: false
      APP_URL: http://localhost:8080
      APP_TIMEZONE: Asia/Shanghai
      APP_LOCALE: zh-CN
      # 邮件配置(可选)
      MAIL_PORT_587_TCP_ADDR: smtp.example.com
      MAIL_PORT_587_TCP_PORT: 587
      MAIL_ENV_FROM_ADDR: admin@yourcompany.com
      MAIL_ENV_FROM_NAME: Snipe-IT Admin
      MAIL_ENV_ENCRYPTION: tls
      MAIL_ENV_USERNAME: admin@yourcompany.com
      MAIL_ENV_PASSWORD: your-email-password
    depends_on:
      snipeit-db:
        condition: service_healthy
    volumes:
      - snipeit-images:/var/lib/snipeit
    restart: always

volumes:
  db-data:
  snipeit-images:

⚠️ 重要APP_KEY 不能随意填写!需要先生成。

步骤 3:生成 APP_KEY

# 启动一个临时容器来生成密钥
docker run --rm snipe/snipe-it:latest php artisan key:generate --show

# 输出类似:base64:abcdef1234567890...
# 将输出值替换到 docker-compose.yml 中的 APP_KEY

步骤 4:启动服务

docker compose up -d

# 查看日志确认启动状态
docker compose logs -f snipeit

步骤 5:访问 Web 界面

浏览器打开 http://localhost:8080,会进入安装向导:

  1. 检查环境要求(全部绿色 ✓)
  2. 创建管理员账户(用户名、邮箱、密码)
  3. 完成!进入仪表板

🔒 生产环境建议:使用 Nginx 反代 + Let's Encrypt HTTPS 证书,将 http://localhost:8080 改为 https://snipeit.yourcompany.com


快速上手:5 步开始管理资产

安装完成后,按以下步骤快速录入第一批资产。

步骤 1:设置公司信息和品牌

进入 Admin → Settings → Branding,上传公司 Logo、设置站点名称和默认时区。

步骤 2:创建资产分类

Snipe-IT 按分类组织资产。进入 Admin → Categories 创建:

分类名 类型 用途
笔记本电脑 Asset MacBook、ThinkPad 等
显示器 Asset 外接显示器
软件许可证 License Office、Adobe 等
配件 Accessory 鼠标、键盘、网线
消耗品 Consumable 打印纸、墨盒

步骤 3:添加硬件资产

进入 Assets → New Asset,填写:

资产名称: MacBook Pro 14" M3
资产标签: MBP-2026-001     ← 这是唯一标识符,建议按规则编号
分类: 笔记本电脑
状态: Ready to Deploy(待部署)
位置: 总部办公室
购买日期: 2026-03-15
购买价格: ¥14,999
供应商: Apple Store
保修截止: 2029-03-15
型号: MacBook Pro 14-inch M3 Pro
序列号: C02XXXXX

步骤 4:分配给员工(Checkout)

在资产详情页点击 Check Out

分配给: 用户(需先在 People 中创建)
预计归还日期: 2027-03-15(可选)
备注: 研发部新项目使用
发送通知邮件: ✓

员工收到邮件后确认接收,资产状态变为 Deployed

步骤 5:批量导入

有 Excel 表格?Snipe-IT 支持 CSV 批量导入:

  1. Admin → Import → Download CSV Template
  2. 用模板填写资产数据
  3. 上传 CSV 文件
  4. 预览并确认映射字段
  5. 点击 Import

进阶功能实战

1. 资产折旧自动计算

Snipe-IT 支持多种折旧模型,帮你实时了解资产当前价值。

进入 Admin → Depreciations 创建折旧规则:

名称: 电脑 3 年直线折旧
月份: 36(3 年)
折旧类型: 直线折旧

然后在资产上关联此规则,系统会自动计算:

时间 原始价值 折旧后价值 备注
2026-03 ¥14,999 ¥14,999 刚购买
2027-03 ¥14,999 ¥9,999 使用 1 年
2028-03 ¥14,999 ¥4,999 使用 2 年
2029-03 ¥14,999 ¥0 折旧完毕

2. 许可证管理 & 过期提醒

软件许可证到期了没人知道?Snipe-IT 帮你盯着。

添加许可证:

名称: Microsoft 365 Business
许可证密钥: XXXX-XXXX-XXXX-XXXX
座位总数: 25
已分配: 18
购买日期: 2026-01-01
过期日期: 2027-01-01
供应商: Microsoft
购买价格: ¥1,288/用户/年

当许可证即将过期时,系统会: - 📧 发送邮件提醒管理员 - 🔴 仪表板显示红色警告 - 📊 报表中突出显示

3. 自定义字段 — 记录任何你需要的信息

Snipe-IT 允许为每个分类添加自定义字段:

# 通过 Admin → Custom Fields 添加
字段名          类型        格式
CPU 型号         文本
内存大小         文本
操作系统         下拉列表    macOS, Windows, Linux
资产归属部门      下拉列表    研发部, 产品部, 设计部
内网 IP 地址      文本       ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$

4. 报表与审计

Snipe-IT 内置多种报表:

  • 资产清单报表 — 所有资产的完整列表,支持按状态/位置/分类筛选
  • 折旧报表 — 按时间段统计资产折旧情况
  • 未分配资产报表 — 闲置资产一览,避免"买了没人用"
  • 许可证过期报表 — 即将到期的软件许可证
  • 审计报表 — 资产检查历史,谁在什么时间确认了什么状态

5. API 集成实战

Snipe-IT 提供完整的 REST API,可以用 curl 或任何 HTTP 客户端调用。

获取 API Token: 进入 Profile → Generate API Token

查询所有资产:

curl -X GET "https://snipeit.yourcompany.com/api/v1/hardware" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

创建新资产:

curl -X POST "https://snipeit.yourcompany.com/api/v1/hardware" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Dell XPS 15",
    "asset_tag": "DELL-2026-001",
    "model_id": 3,
    "status_id": 1,
    "rtd_location_id": 1,
    "purchase_date": "2026-07-30",
    "purchase_cost": "9999.00",
    "serial": "SN123456789"
  }'

集成到 CI/CD 流程 — 比如新员工入职时自动创建资产记录:

#!/usr/bin/env python3
"""新员工入职自动创建 IT 资产记录"""

import requests

SNIPE_URL = "https://snipeit.yourcompany.com/api/v1"
API_TOKEN = "YOUR_API_TOKEN"

def onboard_employee(name, email, asset_tag, model_id=1):
    """为新员工分配笔记本电脑"""
    headers = {
        "Accept": "application/json",
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json",
    }

    # 1. 创建用户
    user = requests.post(f"{SNIPE_URL}/users", headers=headers, json={
        "first_name": name.split()[0],
        "last_name": name.split()[-1],
        "username": email.split("@")[0],
        "email": email,
    })

    if user.status_code != 200:
        print(f"创建用户失败: {user.text}")
        return

    user_id = user.json()["payload"]["id"]

    # 2. 分配资产
    checkout = requests.post(
        f"{SNIPE_URL}/hardware/{asset_tag}/checkout",
        headers=headers,
        json={"assigned_user": user_id}
    )

    if checkout.status_code == 200:
        print(f"✅ {name} 已成功分配资产 {asset_tag}")
    else:
        print(f"❌ 资产分配失败: {checkout.text}")

# 使用示例
onboard_employee("张三", "zhangsan@company.com", "MBP-2026-015")

日常运维

备份数据库

# 导出数据库
docker exec snipeit-db mysqldump -u snipeit -psnipeit_password_456 snipeit > \
  ~/backup/snipeit-$(date +%Y%m%d).sql

# 导出持久化数据卷
tar czf ~/backup/snipeit-images-$(date +%Y%m%d).tar.gz \
  /var/lib/docker/volumes/snipe-it_snipeit-images/

升级 Snipe-IT

cd ~/snipe-it

# 拉取最新镜像
docker compose pull snipeit

# 重新创建容器
docker compose up -d snipeit

# 检查版本
docker exec snipe-it php artisan snipeit:version

常见问题排查

问题 解决方案
页面 500 错误 检查 docker compose logs snipeit,查看 Laravel 错误日志
数据库连接失败 确认 DB_HOSTsnipeit-db(容器名),且数据库已就绪
邮件不发送 检查 SMTP 配置,确认防火墙未阻止 587 端口
APP_KEY 错误 重新生成 key,确认格式为 base64:xxxx
上传文件失败 检查 snipeit-images 数据卷挂载权限

为什么 Snipe-IT 值得长期投入

Snipe-IT 自 2013 年开源以来,已经持续开发了 13 年,GitHub 上贡献者超过 500 人。相比 Excel 表格或商业 SaaS 方案,它的优势在于:

  1. 零许可费用 — 自建服务器即可使用,无用户数限制
  2. 完全数据自主 — 所有资产数据保存在你自己的服务器上
  3. 活跃的社区 — Discord 社区和论坛有大量用户分享经验
  4. 丰富的集成生态 — JAMF、Kandji、Jira、Google Workspace 等官方/第三方集成脚本
  5. 可扩展性强 — 从 10 台到 10,000 台设备都能胜任

如果你正在用 Excel 管公司资产,或者觉得商业 ITAM 太贵,Snipe-IT 是最务实的选择。