📖 介绍

Snipe-IT是一款免费开源的固定资产管理系统,它可以帮助组织更好地跟踪其资产的位置、状态和其他有关信息。Snipe-IT支持在云端或本地进行安装,并且具有用户友好的Web界面和功能强大的API。Snipe-IT适用于各种类型和规模的组织,包括企业、学校、政府机构和非营利组织等。详情参考:官方文档

🧰 部署

编写env环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1、安装最新版snipe-it或者自定义版本
docker pull snipe/snipe-it
mkdir /data/snipe-it && cd /data/snipe-it
2、获取APP_KEY 待填写入配置文件 :`docker run --rm snipe/snipe-it` ,base64开头的那串字符。

3、编写snipe-it启动的env文件,名字可以自定义(注意:IP地址一定是实际本机的IP地址或者127.0.0.1)
[root@test-95 snipe-it]# cat snipe-it-env.env
# Mysql Parameters
MYSQL_PORT_3306_TCP_ADDR=192.168.99.25
MYSQL_PORT_3306_TCP_PORT=3306

MYSQL_ROOT_PASSWORD=snipe
MYSQL_DATABASE=snipe
MYSQL_USER=snipe
MYSQL_PASSWORD=snipe

# Email Parameters
# - the hostname/IP address of your mailserver
MAIL_PORT_587_TCP_ADDR=smtp.exmail.qq.com
#the port for the mailserver (probably 587, could be another)
MAIL_PORT_587_TCP_PORT=587
# the default from address, and from name for emails 注意:这里一定要和邮件服务器地址相同,不然发送邮件失败!
MAIL_ENV_FROM_ADDR=noreply@daxiangyun.com
MAIL_ENV_FROM_NAME=snipe-it.org
# - pick 'tls' for SMTP-over-SSL, 'tcp' for unencrypted 注意这里一定是tls
MAIL_ENV_ENCRYPTION=tls
# SMTP username and password
MAIL_ENV_USERNAME=noreply@daxiangyun.com
MAIL_ENV_PASSWORD=lucky!@#123


# Snipe-IT Settings
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:wE46598t1QZFT5lnHmpwIGMMmXMSqGgDD3lUxRH31WU=
APP_URL=http://asset.dxbim.com
APP_TIMEZONE=US/Pacific
APP_LOCALE=zh-CN

安装mysql

1
2
3
4
5
6
7
8
9
10
11
12
[root@asset snipe-it]# cat start_mysql.sh
docker run -d --name snipe-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=snipe \
-e MYSQL_DATABASE=snipe \
-e MYSQL_USER=snipe \
-e MYSQL_PASSWORD=snipe \
-v /data/snipe-it/mysql:/var/lib/mysql \
-v /data/snipe-it/mysql/logs/:/var/log/mysql \
-v /data/snipe-it/mysql/conf:/etc/mysql/conf.d \
--restart=on-failure:3 \
-d mysql:5.6

安装snipe-it

1
2
3
4
5
6
7
8
[root@asset snipe-it]# cat start_snipe-it.sh
#!/bin/bash
docker run -d -p 80:80 -p 587:587 -p 465:465 \
--user=root --name="snipe-it" \
--env-file=/data/snipe-it/snipe-it-env.env \
-v /data/snipe-it/snipe/snipe-data:/var/lib/snipeit \
-v /data/snipe-it/snipe/logs:/var/log/apache2 \
snipe/snipe-it:latest

以下是snipe-it的主要数据目录

刚以上内容只是做了资产数据的持久化,但是如果我们的web界面进行了二次研发,这个时候只要重启页面就会丢失数据

下面做一下snipe-it数据目录介绍

/var/lib/snipeit/data/uploads # 记录了所有snipe保存的照片

/var/log/apache2 # 访问日志

/var/www/html/ # snipe-it静态页面数据

/etc/apache2/ #apache配置目录,一般不需要修改

docker-compose部署(可选)

注意:这里只是官方的部署方式,具体数据持久化还需要根据实际情况修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
正式环境配置
# cat docker-compose.yml
version: "3.8"

services:
db:
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- snipe-mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: "snipe"
MYSQL_DATABASE: "snipe"
MYSQL_USER: "snipe"
MYSQL_PASSWORD: "snipe"
TZ: "Auastralia/Sydney"

web:
depends_on:
- db
build: .
ports:
- "8082:80"
restart: always
environment:
WAIT_HOSTS: db:3306
PUID: "1000"
PGID: "1000"
DB_CONNECTION: "mysql"
DB_HOST: "db"
DB_DATABASE: "snipe"
DB_USERNAME: "snipe"
DB_PASSWORD: "snipe"
APP_KEY: "${API_KEY}"
volumes:
- snipe-conf:/config

volumes:
snipe-mysql:
snipe-conf:

📘备份

说明:备份的话这里使用的思路是本地备份和异地备份两种方式,具体参考以下脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
cat /home/dx/shell/backup_snipe.sh
#!/bin/bash
Date=`date +%F`
SRC_PATH=/data/backup/snipe
LOG=/tmp/snipe_backup.log

backup_snipe () {
echo "" > ${LOG}
[ -d ${SRC_PATH} ] || mkdir -p ${SRC_PATH}
echo -e "====== Start backup snipe-it asset managent ======" >> ${LOG}
echo -e "开始备份时间`date +%F_%T`" >> ${LOG}
tar -zcPf ${SRC_PATH}/${Date}_snipe.tar.gz /data/snipe-it
chown dx:dx /data/backup/ -R && chown dx:dx ${LOG} -R
echo -e "snipe-it 备份大小" >> ${LOG}
du -sh /data/backup/snipe/2023-06-06_snipe.tar.gz >> ${LOG}
}

backup_snipe_remote () {
mount -l|grep "192.168.99.7" > /dev/null || { echo "Nas 99.7 not mount";exit ; }
su - dx > /dev/null 2>&1 << eeooff
rsync -aog ${SRC_PATH}/${Date}_snipe.tar.gz /home/dx/data/backup/nas/asset/
eeooff
echo -e "结束备份时间`date +%F_%T`" >> ${LOG}
echo -e "====== Stop backup snipe-it asset managent ======" >> ${LOG}
}

send_mail () {
mail -s "sh-asset-99.25-备份通知" hongtao.yang@daxiangyun.com,daqiang.liu@daxiangyun.com <${LOG}
}


main () {
backup_snipe
backup_snipe_remote
send_mail
}
main

❗️数据灾备还原

snipe-it数据还原主要还原mysql数据以及web-php数据,由于我这里是直接使用docker启动的,并且数据已经做了持久化所以不需要使用mysqldump进行还原

说明:mysql存的是数据字段以及用户信息,snipe-it存放的是静态文件,如果有更改apache配置,请在Apache配置也持久化到本地

假设现在snipe-it服务器故障,需要从异机备份进行还原到一台新服务器上,以下是还原步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 首先安装docker 这里不在介绍
1、解压数据目录,数据全部放在/data/snipe-it/当前目录里
mkdir /data/snipe-it/ -p
tar -zxf 2023-06-06_snipe.tar.gz -C /data/snipe-it/
cd /data/snipe-it/
mv data/snipe-it/* .

2、修改环境变量里面的IP地址为实际IP地址
vim snipe-it-env.env
MYSQL_PORT_3306_TCP_ADDR=192.168.99.27
APP_URL=http://192.168.99.27

3、执行启动脚本(Mysql和snipe)
bash start_mysql.sh
bash start_snipe-it.sh
3、查看容器启动是否成功(启动成功后即可效验数据)
docker ps
  • 数据效验(查看以前的资产是否成功、用户名和密码是否和以前的一致、新建资产是否正常、上传照片是否可以正常上传即可)

✈️接入LDAP

​ 由于目前公司使用snipe-it员工人数越来越多,每次都需要手动创建账号密码非常麻烦,snipe-it很不错的一点是支持LDAP认证,建议刚搭建好就接入LDAP因为同步ldap的时候会提示选择位置,如果位置过多每次只能把LDAP的用户位置同步到一个位置里面,不过这个影响不大。参考官方文档

1、登录snipe-it选择右上角设置,点击LDAP

2、具体配置参考下图,这里不在解释,如果不知道怎么配置最好是登录LDAP查看ou和dc,另外LDAP认证请求sAMAccountName刚开始一直设置错误,我的LDAP是windows-server2016搭建的AD服务,最后进入ldap服务器才看到是因为sAMAccountName=少了一个=导致无法同步 (注意:LDAP用户名和密码是你AD域里面任意一个可登录账号即可)

3、点击测试LDAP同步,如果成功会返回10个用户样本

4、点击Test LDAP Login 输入LDAP任意的一个用户和密码,显示用户已成功通过LDAP认证!就代表可以登录LDAP

  • 另外最下方密码重置网址:如果你公司有password服务和LDAP对接的话可以输入,这样的话每次用户密码忘记可以重置

5、点击组织成员(右上角有LDAP同步点击选择位置即可)

🖨️打印资产

先说说为什么要打印资产呢?我们不是已经有了snipe-it系统去维护么,答案如下:

将Snipe-IT生成的标签贴在资产上有以下好处:

  1. 资产识别和跟踪:标签上的唯一标识符可以帮助您快速识别和跟踪资产。您可以使用标签上的信息来查找资产的详细信息,例如资产名称、型号、序列号等。

  2. 防止丢失和混淆:标签可以帮助防止资产丢失或与其他资产混淆。通过在资产上贴上标签,员工可以更容易地识别和归还正确的资产,从而减少误用或丢失的风险。

  3. 管理维护和保修:标签上的信息可以帮助您跟踪资产的维护和保修记录。您可以记录维护日期、保修期限等信息,以便及时进行维护和保养,确保资产的正常运行。

  4. 资产审计和报告:贴有标签的资产可以更轻松地进行资产审计和报告。您可以使用标签上的信息来生成报告,包括资产数量、状态、位置等,以便进行管理和决策。

  5. 提升专业形象:贴有标签的资产可以提升组织的专业形象。这显示了您对资产管理的重视,并向员工和客户传达了组织对资产安全和追踪的承诺。

​ 在好的系统,我们的资产依旧会频繁变动,这个时候我们在snipe-it寻找也不方便,于是可以考虑snipe-it的标签功能去把他打印出来,但是snipe-it本身生成的资产图片我们只能截图打印出来,打印出来以后发现效果并不完善,这个问题如何解决?请继续往下看有解决办法

购买标签打印机

​ 标签打印机我也是网上选了好久最后终于在京东选择了一个经济实惠的标签打印机❤精臣打印机❤购买链接 ,我当时购买价格是58送一卷打印纸,单独购买打印纸是20一卷,质量非常不错,主要是撕掉的时候资产不会留胶

​ 然后打印机回来以后就默认纸张尺寸是1卷40*30-230张,然后公司觉得纸张比较大,最后又单独购买了1卷40*20-230张,说明(40是宽20是高)

标签打印机的使用

这是最终的效果图,以下是大致流程