本文是一篇从零开始介绍如何在 Linux 服务器上部署 Snipe-IT资产管理系统,并完成 Active Directory(AD)域用户登录集成


一、项目背景(公司真实部署场景)

本次部署并非实验环境,而是 公司内部正式上线使用 的资产管理系统。

实际业务背景

  • 已有基础设施:

    • Windows Active Directory 域

    • 员工统一域账号登录

  • 管理痛点:

    • 资产分散登记在 Excel

    • 责任人频繁变动,追溯困难

    • 审计时需要人工核对

选型原因

最终选择 Snipe-IT,原因如下:

  • 开源、可控,不依赖云服务

  • 原生支持 LDAP / AD

  • 权限体系适合企业分级

  • 社区成熟,踩坑资料多


二、什么是 Snipe-IT

Snipe-IT 是一款开源的 IT 资产管理系统,适合用于:

  • 企业固定资产管理(电脑、服务器、显示器等)

  • 资产借用 / 归还 / 责任人追踪

  • 生命周期管理(采购 → 使用 → 报废)

  • 与 AD / LDAP 集成,实现统一账号登录


二、部署环境准备

1️⃣ 系统环境

  • 操作系统:Rocky Linux 8 / CentOS 7 / Ubuntu 20.04+

  • CPU:2 Core 以上

  • 内存:4 GB(推荐 8 GB)

  • 磁盘:20 GB 以上

2️⃣ 网络与依赖

  • 可访问外网(用于下载)

  • 已部署 AD 域控制器(用于后续集成)


三、部署方案说明(Docker 化)

在真实生产环境中,我们 没有采用传统 LNMP 裸机部署,而是选择了 Docker Compose,原因是:

  • 部署快,可复制

  • 版本可控

  • 回滚成本低

  • 更适合运维交接

架构说明

  • Docker

  • Docker Compose

  • 容器:

    • snipe/snipe-it

    • mariadb


四、Docker 环境准备

# Rocky / CentOS
dnf install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

dnf install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker

安装 docker-compose:

curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2️⃣ 初始化数据库

mysql_secure_installation

创建数据库:

CREATE DATABASE snipeit CHARACTER SET utf8mb4;
CREATE USER 'snipeit'@'localhost' IDENTIFIED BY 'StrongPassword';
GRANT ALL PRIVILEGES ON snipeit.* TO 'snipeit'@'localhost';
FLUSH PRIVILEGES;

五、Docker Compose 部署 Snipe-IT

1️⃣ 目录规划(企业标准)

/opt/snipe-it
├── docker-compose.yml
├── env
└── volumes

2️⃣ docker-compose.yml

version: '3'
services:
  mysql:
    image: mariadb:10.6
    container_name: snipeit-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: StrongPassword
    volumes:
      - ./volumes/mysql:/var/lib/mysql

  snipeit:
    image: snipe/snipe-it:latest
    container_name: snipeit-app
    depends_on:
      - mysql
    ports:
      - "8080:80"
    environment:
      APP_URL: http://assets.company.local:8080
      MYSQL_PORT_3306_TCP_ADDR: mysql
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: StrongPassword
      LDAP_ENABLED: "true"
    volumes:
      - ./volumes/data:/var/lib/snipeit
    restart: always

五、配置 Snipe-IT

1️⃣ 复制环境配置文件

cp .env.example .env

2️⃣ 修改关键配置(.env)

APP_URL=http://assets.example.com

DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=StrongPassword

MAIL_DRIVER=log

生成应用密钥:

php artisan key:generate

六、配置 Nginx 虚拟主机

server {
    listen 80;
    server_name assets.example.com;

    root /var/www/snipe-it/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

重载服务:

nginx -t && systemctl reload nginx

七、Web 初始化向导

访问浏览器:

http://assets.example.com

按向导完成:

  • 系统检查

  • 数据库连接

  • 创建 本地管理员账号(非常重要)


六、AD 域登录配置(真实参数示例)

本部分是企业部署的核心,下面参数来自 真实 AD 环境结构(已脱敏)。

AD 环境示例

  • 域名:corp.local

  • 域控 IP:10.10.0.10

  • Base DN:DC=corp,DC=local

  • 绑定账号:ldap-bind@corp.local


Snipe-IT LDAP 配置

后台路径:

Admin → Settings → LDAP

项目

LDAP Server

ldap://10.10.0.10

Base DN

DC=corp,DC=local

Bind DN

ldap-bind@corp.local

Username Field

sAMAccountName

First Name

givenName

Last Name

sn

Email

mail

勾选:

  • ✅ Allow LDAP login

  • ✅ Auto-create users


2️⃣ 在 Snipe-IT 后台配置

路径:

Admin → Settings → LDAP

关键参数填写:

配置项

示例

LDAP Server

ldap://192.168.1.10

LDAP Base DN

DC=corp,DC=example,DC=com

Bind DN

ldapbind@corp.example.com

Bind Password

******

LDAP Username Field

sAMAccountName

LDAP First Name

givenName

LDAP Last Name

sn

LDAP Email

mail

启用选项:

  • ✅ Allow LDAP login

  • ✅ Auto-create users


3️⃣ 测试 LDAP 连接

点击 Test LDAP

  • 成功:显示用户信息

  • 失败:检查防火墙、DN、账号权限


九、AD 用户权限建议

推荐策略:

  • 普通 AD 用户 → User

  • IT 管理员 AD 组 → Admin

可在 People → Users 中手动调整首次同步用户权限。


十、博客级免责声明(建议原样保留)

⚠️ 免责声明
本教程仅用于技术学习与企业内部系统搭建参考,作者不对因配置错误、权限滥用或生产环境误操作导致的数据丢失、安全风险承担任何责任。请务必在测试环境中验证后再用于生产环境。


十一、常见问题排查

❓ LDAP 登录失败

  • 确认服务器可访问域控 389 / 636

  • 确认 PHP 已安装 php-ldap

  • 确认 Bind 账号密码正确

❓ 页面 500 错误

tail -f /var/www/snipe-it/storage/logs/laravel.log

七、傻瓜式一键部署脚本(推荐)

#!/bin/bash
set -e

APP_DIR=/opt/snipe-it

mkdir -p $APP_DIR && cd $APP_DIR

cat > docker-compose.yml << 'EOF'
version: '3'
services:
  mysql:
    image: mariadb:10.6
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: StrongPassword
    volumes:
      - ./mysql:/var/lib/mysql

  snipeit:
    image: snipe/snipe-it:latest
    ports:
      - "8080:80"
    depends_on:
      - mysql
    environment:
      APP_URL: http://localhost:8080
      MYSQL_PORT_3306_TCP_ADDR: mysql
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: StrongPassword
      LDAP_ENABLED: "true"
    volumes:
      - ./data:/var/lib/snipeit
    restart: always
EOF

/usr/local/bin/docker-compose up -d

echo "Snipe-IT 已启动:http://<服务器IP>:8080"

八、结语

在企业环境中:

  • Docker + AD 是最稳妥组合

  • LDAP 统一身份极大减少运维成本

  • 资产责任人清晰后,审计效率明显提升

如果你所在公司已经有 AD,却还在用 Excel 管资产,那么 Snipe-IT 非常值得上线。