侧边栏壁纸
博主头像
是羊刀仙啊博主等级

闲不下来!

  • 累计撰写 122 篇文章
  • 累计创建 38 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

开源免费的资产管理项目Snipe-IT ,保姆级部署流程

羊刀仙
2025-03-07 / 0 评论 / 0 点赞 / 21 阅读 / 11330 字
温馨提示:
本文最后更新于 2025-03-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Snipe-IT 是一款开源的 IT 资产管理系统(ITAM),用于跟踪企业 IT 设备、许可证、维护记录等。它基于 Laravel 框架开发,并支持 Docker 部署,适用于中小型企业和 IT 部门。如果你愿意自己动手解决环境问题,并能管理 Laravel / MariaDB / Docker,Snipe-IT 是一个性价比极高的 IT 资产管理工具。

截屏2025-03-07 10.49.55.png

Snipe-IT 较为适合需要开源、可定制 IT 资产管理系统的团队,预算有限,无法购买商业 ITAM 解决方案的公司,以及习惯使用 Docker 或 Laravel 生态的开发者。

不过对于大规模企业来说(需要深度 ERP/资产财务集成),数据库兼容性、性能优化、邮件通知等方面可能会有挑战。建议购买定制系统,方便后续的维护管理。

功能支持

资产管理:支持录入 IT 设备(如电脑、服务器、打印机等),跟踪设备的分配和使用情况。

库存管理:可以管理库存设备,并支持资产的采购、报废、借出等生命周期。

条形码 & RFID 支持:支持条形码扫描,使设备盘点更加方便。

维护 & 维修记录:可记录设备的故障、维修历史,方便 IT 维护。

软件许可证管理:跟踪软件许可证和过期时间,避免法律风险。

多用户 & 权限管理:支持管理员、普通用户等不同角色,控制访问权限。

邮件通知:可配置 SMTP 邮件服务器,发送提醒(如资产到期提醒、借用通知等)。

提前说明

关于数据库,我建议按照项目方给出的模版直接内置部署。独立数据库兼容性问题非常多(几乎每个版本都有变动),而且几乎每个应用都有自己独立的数据库版本,一般部署完轻易别动(不然应用崩了挽救的机会可能都没),因此建议打消所有服务共用数据库的想法。不过想要做 数据/服务 分离这本身并没什么问题,但仍然不是太建议共用,除非你对所部署的项目非常了解。

37310419-181e589c-2601-11e8-926c-61ba6fc55161.png

目前 Snipe-IT 更新频繁,想要长时间使用,请做好备份以应对大版本更新。

本文会以介威联通NAS为例,用 Docker Compose 演示 Snipe-IT 部署流程。有些部分可能比较啰嗦,但希望能对大家有所助力。

部署过程出现问题,可以参考文章最后一部分的问题说明(建议先看看)。

准备工作

先拉取镜像

SSH 链接 NAS:

docker pull mariadb:latest # 镜像加速自行加上前缀
docker pull snipe/snipe-it:latest

生成APP_KEY

# 生成APP_KEY,记下来备用!

docker run --rm snipe/snipe-it

截屏2025-03-05 16.56.39.png

修改环境配置文件

把下图的文件下载下来。

截屏2025-03-05 17.00.28.png

如下图,放进为 Snipe-IT 准备的Docker目录中,使用 Text Editor 修改后保存。也可先用PC的记事本方式打开修改后再放进去。修改完毕后重命名为.env,NAS中默认是隐藏文件。

截屏2025-03-05 17.20.23.png

建议修改的部分如下:

# 基础配置修改
APP_ENV=production # 定义生产环境
APP_DEBUG=false # 关闭debug
APP_KEY=base64:pc9ehtgSHlAlHuPaBUOovGil7vPabCeV42ilbikTcPg= # 上面生成的KEY
APP_URL=XXX.XXX.XXX.XXX # 访问地址,本地就是服务器IP,或填域名(提前反代好)
APP_TIMEZONE=Asia/Shanghai
APP_LOCALE=zh-CN

# 数据库相关

DB_CONNECTION=mysql 
DB_HOST=mariadb # 如果Snipe-IT 和数据库在同一 Docker 网络。否则填写IP
DB_PORT=3306
DB_DATABASE=snipeit_db
DB_USERNAME=ydxian
DB_PASSWORD=ydxian123456
DB_PREFIX=null

# 邮件服务器配置(163 邮箱为例),按需要自行修改
MAIL_MAILER=smtp
MAIL_HOST=smtp.163.com  # 163 邮箱的 SMTP 服务器
MAIL_PORT=465  # 163 邮箱推荐使用 465 端口(SSL),如果使用 STARTTLS 则是 587
MAIL_USERNAME=your_email@163.com  # 你的163邮箱账号
MAIL_PASSWORD=your_email_password  # 你的163邮箱SMTP授权码(不是邮箱登录密码)
MAIL_ENCRYPTION=ssl  # 163邮箱推荐使用 SSL 加密(465 端口)
MAIL_FROM_ADDR=your_email@163.com  # 发件人邮箱
MAIL_FROM_NAME='Snipe-IT'  # 发送邮件时显示的名称
MAIL_REPLYTO_ADDR=your_email@163.com  # 回复邮件的地址
MAIL_REPLYTO_NAME='Snipe-IT'  # 回复邮件时显示的名称
MAIL_AUTO_EMBED_METHOD='attachment'
MAIL_TLS_VERIFY_PEER=true  # 默认开启 TLS 证书验证

# 一些其他可选配置,大家自行查看吧,还有强制SSL、重定向啥的

# 指定会话应保持有效的时间(以分钟为单位)。
SESSION_LIFETIME=12000
# 指定当用户关闭浏览器窗口时登录的会话是否应过期。
EXPIRE_ON_CLOSE=false
# 是否希望在 Snipe-IT 会话中使用加密 cookie。
ENCRYPT=false

# 若使用独立数据库(运行在宿主机或独立的数据库服务器上)
# Mysql Parameters
MYSQL_PORT_3306_TCP_ADDR=XXX.XXX.XXX.XXX
MYSQL_PORT_3306_TCP_PORT=3306

MYSQL_DATABASE=snipe_it
MYSQL_USER=snipe_it_db_user
MYSQL_PASSWORD=snipe_it_db_user_password

后续有新增配置,修改此文件重启应用即可。

更多配置比如登录限制、缓存设置、会话设置、备份设置、图库设置等,点我查看,Docker部分的额外内容点我查看(官方这个wiki,真乱!)

简化部署(建议)

上面的准备工作完成后,可以进行部署。

打开Docker管理工具。威联通为Container Station。

部署代码如下:

networks:
  shared_network:
    driver: bridge

services:
  mariadb:
    image: mariadb:latest
    container_name: mariadb
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root123456  # Root 账户密码,可自定义,下同
      MYSQL_DATABASE: snipeit_db        # Snipe-IT 数据库名称
      MYSQL_USER: ydxian                # 数据库用户
      MYSQL_PASSWORD: ydxian123456       # 数据库密码
      PUID: 0   # 指定用户 ID
      PGID: 0   # 组ID,这俩都是admin,根据所用账户自行调整
    volumes:
      - /share/Container/mariadb/data:/var/lib/mysql:rw  # 数据库持久化存储,冒号左侧可改
    networks:
      - shared_network
    ports:
      - "3306:3306"

  snipeit:
    image: snipe/snipe-it:latest
    container_name: snipeit
    restart: unless-stopped
    depends_on:
      - mariadb
    env_file:
      - /share/Container/snipeit/.env  # 指定外部的 .env 文件,匹配上文的路径
    volumes:
      - /share/Container/snipeit/storage:/var/www/html/storage:rw  # 确保 Laravel 能写入 storage,冒号左侧可改
    networks:
      - shared_network
    ports:
      - "9090:80"  # 你访问 Snipe-IT 的端口,可自定义

web输入域名 或 NAS_IP:9090。邮箱配置可以点击进行测试,没问题就点右下角进行下一步。

截屏2025-03-06 14.32.28.png

第二步创建用户

截屏2025-03-07 10.17.00.png

这部分就纯自定义,很多朋友可能已经比较熟悉了。站点名称建议改成你的组织名。邮件域玩过企业微信的朋友大概熟悉,这个教程也很多,不过多啰嗦。

截屏2025-03-07 10.22.25.png

截屏2025-03-07 14.16.58.png

截屏2025-03-07 14.16.01.png

搞定后就完成,进入后台进行使用了。

修改语言。

截屏2025-03-07 10.24.12.png

顺便改改头像。

截屏2025-03-07 10.27.31.png

各种功能都有。

截屏2025-03-07 10.49.55.png

截屏2025-03-07 14.04.02.png

独立部署(谨慎)

这前置的准备工作不可跳过。我没有设置网络,是默认部署自动建网状态。APP_URL也替换成了域名,测试外网使用。

部署 MariaDB

部署代码如下:

services:
  mariadb:
    image: mariadb:latest
    container_name: mariadb
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root123456  # Root 账户密码
      MYSQL_USER: ydxian               # 应用程序用的数据库用户
      MYSQL_PASSWORD: ydxian123456      # 应用程序用户的密码
    volumes:
      - /share/Container/mariadb/data:/var/lib/mysql  # 持久化数据
    ports:
      - "3306:3306" 

MYSQL_USERMYSQL_PASSWORD这两项可以删除,在后面我们可以手动创建,会分情况给大家说明。

# 通过SSH链接NAS,进入容器
docker exec -it mariadb mariadb -u root -p

输入你的 root 密码(默认是 MYSQL_ROOT_PASSWORD,在docker-compose.yml里定义的)。

MariaDB 现在 正常运行,并且mariadb命令可用!🎉

或者也可以在NAS的WEB端直接进入输入命令,这点威联通的Container Station是相当方便的。

截屏2025-03-05 17.27.45.png

成功登录后,你应该会看到 MariaDB 命令行:

MariaDB [(none)]>

截屏2025-03-05 14.47.07.png

这表示 MariaDB 正常运行,你现在可以执行 SQL 语句。

# 查看已有数据库

SHOW DATABASES;

# 创建新数据库(如果需要)

CREATE DATABASE my_app_db;

# 查看数据库用户

SELECT user, host FROM mysql.user;

假设你要创建一个名为 my_app_db 的数据库(仅举例,不用创建):

CREATE DATABASE my_app_db;

SHOW DATABASES;

# 如果你看到 my_app_db,说明创建成功!

创建数据库

接着上面部分。

情况一:预设用户密码

我们上面常规用户使用的是ydxian,密码为ydxian123456。现在打算使用 ydxian 账户管理snipeit_db

CREATE DATABASE snipeit_db;

GRANT ALL PRIVILEGES ON snipeit_db.* TO 'ydxian'@'%' IDENTIFIED BY 'ydxian123456';

FLUSH PRIVILEGES;

情况二:手动创建用户和数据库

在仅有root账户情况下,单独创建用户并授权,依次输入以下命令,大家自行替换掉即可。

# 创建数据库
CREATE DATABASE snipeit_db;

# 创建用户
CREATE USER 'ydxian'@'%' IDENTIFIED BY 'ydxian123456';

# 赋予权限
GRANT ALL PRIVILEGES ON snipeit_db.* TO 'ydxian'@'%';
FLUSH PRIVILEGES;

截屏2025-03-05 14.52.09.png

部署Snipe-IT

代码如下:

services:
  snipeit:
    image: snipe/snipe-it:latest
    container_name: snipeit
    restart: unless-stopped
    env_file:
      - /share/Container/snipeit/.env # 上文环境文件位置
    volumes:
      - /share/Container/snipeit/storage:/var/lib/snipeit:rw # 冒号左侧自定义
    ports:
      - "9090:80" # 冒号左侧自定义

部署完毕之后,通过域名访问Snipe-IT,初次会进行预检,我这里提示APP_URL有误(可以无视),以及不能联通数据库。

WechatIMG11021 拷贝.png

可以通过下面板块解决。

注意问题&解决方案

测试过三台威联通NAS,问题相同。

容器互通

项目能跑起来的前提是数据库和服务必须互通。

直接 Docker Compose 一并部署默认会创建一个独立的 bridge 网络,同一个 docker-compose.yml 里的容器可以直接用 服务名(service_name)互相访问。

如果你部署前什么都没有做,部署完后可SSH使用 docker network 创建自定义网络

# 找到服务对应网络名
docker network ls

# 创建一个专用网络,名称自定
docker network create shared_network

# 连接专用网络和断开原有网络
docker network connect shared_network mariadb
docker network disconnect mariadb_default mariadb

docker network connect shared_network snipeit
docker network disconnect snipeit_default snipeit

或者直接yaml文件使用network_mode: host网络,所有容器共享宿主机的网络,但个人并不是太建议。

Snipe-IT无法初始化

一次部署数据库能过够完成初始化,但Snipe-IT可能不会,因此无法创建表。重启一下就好了。

初始化第二步一直 500 Server Error

查看日志,基本是目录权限不足问题,在这部分会卡住循环报错。

截屏2025-03-07 09.45.30.png

进入 Snipe-IT 容器

docker exec -it snipeit bash

或者也可以在NAS的WEB端直接进入。

截屏2025-03-05 17.27.45.png

确保 storage 和 bootstrap/cache 目录存在

mkdir -p /var/www/html/storage/framework/{cache,data,sessions,views}
mkdir -p /var/www/html/bootstrap/cache

修改目录权限

chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache

如果 775 仍然不行,可尝试

chmod -R 777 storage
chmod -R 777 public/uploads
chmod -R 777 bootstrap/cache
chmod -R 777 /var/www/html/storage

清理 Laravel 缓存

php artisan config:clear
php artisan cache:clear
php artisan config:cache
php artisan view:clear
php artisan route:clear

退出容器

exit

重新启动 Snipe-IT

docker restart snipeit

等待过后,再进入WEB就没问题了。

关于简化部署部分,想要后续新项目继续加入该网络

只需要docker-compose.yml代码中模版换为:

networks:
  shared_network:
    external: true # 告诉 Docker,这个网络是已经存在的

最后

感谢观看,本文完~!

0

评论区