[Docker] Snipe-IT: 자산 관리 소프트웨어 소개 및 구성 (Docker Compose)




오픈소스 자산 관리 소프트웨어인 Snipe-IT에 대한 내용 및 docker compose로 환경을 구성한 내용을 정리합니다.


Snipe-IT 소개

Snipe-IT은 IT 자산 관리(IT Asset Management, ITAM)를 효율적으로 수행할 수 있도록 도와주는 오픈소스 소프트웨어입니다.

이를 통해 기업은 하드웨어, 소프트웨어, 라이선스 등 IT 자산을 체계적으로 관리하고 추적할 수 있습니다.

웹 기반으로 설계되어 어디서나 접근 가능하며, 직관적인 인터페이스와 강력한 기능으로 전 세계 많은 기업과 조직에서 사용되고 있습니다.

주요 특징

  • 자산 관리: IT 장비, 소프트웨어 라이선스, 계약 등을 효율적으로 관리.
  • 사용자 관리: 자산을 특정 사용자에게 할당하거나 반환 상태를 기록.
  • 보고서 생성: 자산 상태, 만료일, 할당 현황 등의 보고서를 생성.
  • REST API 지원: 외부 시스템과의 통합을 위한 API 제공.
  • 다국어 지원: 다국어 UI로 글로벌 사용자들에게 적합.
  • 보안 기능: 사용자 권한 관리 및 데이터 암호화 기능 제공.

Snipe-IT 설치 가이드 (Docker Compose 사용)

Snipe-IT을 Docker Compose를 사용하여 쉽게 설치할 수 있습니다. 아래는 간단한 설치 가이드입니다.


1. 사전 준비

  • DockerDocker Compose 설치.
  • .env 파일 작성

.env 코드

# --------------------------------------------
# REQUIRED: DOCKER SPECIFIC SETTINGS
# --------------------------------------------
APP_VERSION=v6.4.1
APP_PORT=8000

# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
APP_ENV=production
APP_DEBUG=false
# Please regenerate the APP_KEY value by calling `docker compose run --rm snipeit php artisan key:generate --show`. Copy paste the value here
APP_KEY=base64:3ilviXqB9u6DX1NRcyWGJ+sjySF+H18CPDGb3+IVwMQ=
APP_URL=http://localhost:8000
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones - TZ identifier
APP_TIMEZONE='UTC'
APP_LOCALE=en-US
MAX_RESULTS=500

# --------------------------------------------
# REQUIRED: UPLOADED FILE STORAGE SETTINGS
# --------------------------------------------
PRIVATE_FILESYSTEM_DISK=local
PUBLIC_FILESYSTEM_DISK=local_public

# --------------------------------------------
# REQUIRED: DATABASE SETTINGS
# --------------------------------------------
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT='3306'
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=changeme1234
MYSQL_ROOT_PASSWORD=changeme1234
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci

# --------------------------------------------
# OPTIONAL: SSL DATABASE SETTINGS
# --------------------------------------------
DB_SSL=false
DB_SSL_IS_PAAS=false
DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
DB_SSL_VERIFY_SERVER=null

# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_TLS_VERIFY_PEER=true
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME='Snipe-IT'
MAIL_REPLYTO_ADDR=you@example.com
MAIL_REPLYTO_NAME='Snipe-IT'
MAIL_AUTO_EMBED_METHOD='attachment'

# --------------------------------------------
# REQUIRED: DATA PROTECTION
# --------------------------------------------
ALLOW_BACKUP_DELETE=false
ALLOW_DATA_PURGE=false

# --------------------------------------------
# REQUIRED: IMAGE LIBRARY
# This should be gd or imagick
# --------------------------------------------
IMAGE_LIB=gd

# --------------------------------------------
# OPTIONAL: BACKUP SETTINGS
# --------------------------------------------
MAIL_BACKUP_NOTIFICATION_DRIVER=null
MAIL_BACKUP_NOTIFICATION_ADDRESS=null
BACKUP_ENV=true

# --------------------------------------------
# OPTIONAL: SESSION SETTINGS
# --------------------------------------------
SESSION_LIFETIME=12000
EXPIRE_ON_CLOSE=false
ENCRYPT=false
COOKIE_NAME=snipeit_session
COOKIE_DOMAIN=null
SECURE_COOKIES=false
API_TOKEN_EXPIRATION_YEARS=40

# --------------------------------------------
# OPTIONAL: SECURITY HEADER SETTINGS
# --------------------------------------------
APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1,172.16.0.0/12
ALLOW_IFRAMING=false
REFERRER_POLICY=same-origin
ENABLE_CSP=false
CORS_ALLOWED_ORIGINS=null
ENABLE_HSTS=false

# --------------------------------------------
# OPTIONAL: CACHE SETTINGS
# --------------------------------------------
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
CACHE_PREFIX=snipeit

# --------------------------------------------
# OPTIONAL: REDIS SETTINGS
# --------------------------------------------
REDIS_HOST=null
REDIS_PASSWORD=null
REDIS_PORT=6379

# --------------------------------------------
# OPTIONAL: MEMCACHED SETTINGS
# --------------------------------------------
MEMCACHED_HOST=null
MEMCACHED_PORT=null

# --------------------------------------------
# OPTIONAL: PUBLIC S3 Settings
# --------------------------------------------
PUBLIC_AWS_SECRET_ACCESS_KEY=null
PUBLIC_AWS_ACCESS_KEY_ID=null
PUBLIC_AWS_DEFAULT_REGION=null
PUBLIC_AWS_BUCKET=null
PUBLIC_AWS_URL=null
PUBLIC_AWS_BUCKET_ROOT=null

# --------------------------------------------
# OPTIONAL: PRIVATE S3 Settings
# --------------------------------------------
PRIVATE_AWS_ACCESS_KEY_ID=null
PRIVATE_AWS_SECRET_ACCESS_KEY=null
PRIVATE_AWS_DEFAULT_REGION=null
PRIVATE_AWS_BUCKET=null
PRIVATE_AWS_URL=null
PRIVATE_AWS_BUCKET_ROOT=null

# --------------------------------------------
# OPTIONAL: AWS Settings
# --------------------------------------------
AWS_ACCESS_KEY_ID=null
AWS_SECRET_ACCESS_KEY=null
AWS_DEFAULT_REGION=null

# --------------------------------------------
# OPTIONAL: LOGIN THROTTLING
# --------------------------------------------
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_DURATION=60
RESET_PASSWORD_LINK_EXPIRES=900

# --------------------------------------------
# OPTIONAL: MISC
# --------------------------------------------
LOG_CHANNEL=stderr
LOG_MAX_DAYS=10
APP_LOCKED=false
APP_CIPHER=AES-256-CBC
APP_FORCE_TLS=false
GOOGLE_MAPS_API=
LDAP_MEM_LIM=500M
LDAP_TIME_LIM=600
  • 계정, 비밀번호, key 등 중요한 정보는 변경하여 사용해야 하겠습니다.

2. docker-compose.yml 파일 작성

아래 코드를 docker-compose.yml 파일로 저장합니다.

docker-compose.yml 코드

# Compose file for production.

volumes:
  db_data:
  storage:

services:
  app:
    image: snipe/snipe-it:${APP_VERSION:-v7.0.11}
    restart: unless-stopped
    volumes:
      - storage:/var/lib/snipeit
    ports:
      - "${APP_PORT:-8000}:80"
    depends_on:
      db:
        condition: service_healthy
        restart: true
    env_file:
      - .env

  db:
    image: mariadb:11.5.2
    restart: unless-stopped
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    healthcheck:
      # https://mariadb.com/kb/en/using-healthcheck-sh/#compose-file-example
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      timeout: 1s
      retries: 5

3. 서비스 실행

docker compose up -d

Snipe-IT 접속 및 기능

사이트 접속 및 초기 셋팅

  • http://localhost:8000으로 접속하여 Snipe-IT 초기 설정을 완료합니다.

Admin 설정

  • 상단 오른쪽 톱니바퀴(설정) 버튼 클릭

메뉴 및 기능

Snipe-IT의 최신 웹 인터페이스는 IT 자산 관리를 효율적으로 수행할 수 있도록 다양한 메뉴를 제공합니다.


대시보드 (Dashboard):

  • 시스템의 전반적인 상태와 주요 통계를 한눈에 확인할 수 있는 화면입니다.
  • 자산 현황, 최근 활동, 알림 등을 제공합니다.

자산 (Assets):

  • IT 자산을 등록, 조회, 수정, 삭제할 수 있는 메뉴입니다.
  • 자산의 상태, 위치, 사용자 할당 등을 관리할 수 있습니다.

라이선스 (Licenses):

  • 소프트웨어 라이선스를 관리하는 메뉴입니다.
  • 라이선스의 할당, 만료일, 사용 현황 등을 추적할 수 있습니다.

액세서리 (Accessories):

  • 키보드, 마우스 등 부속 장비를 관리하는 메뉴입니다.
  • 액세서리의 수량, 상태, 할당 정보를 추적할 수 있습니다.

소모품 (Consumables):

  • 잉크 카트리지, 배터리 등 소모품을 관리하는 메뉴입니다.
  • 소모품의 재고 수준과 사용 내역을 추적할 수 있습니다.

컴포넌트 (Components):

  • 자산을 구성하는 개별 부품이나 모듈을 관리하는 메뉴입니다.
  • 컴포넌트의 상태, 위치, 할당 정보를 추적할 수 있습니다.

사전 정의된 키트 (Predefined Kits):

  • 자주 함께 할당되는 자산의 그룹을 미리 정의하여, 사용자에게 일괄적으로 할당할 수 있는 기능입니다.
  • 예를 들어, 신규 직원에게 필요한 노트북, 마우스, 키보드 등을 하나의 키트로 구성하여 신속하게 할당할 수 있습니다.

사람들 (People):

  • 시스템 사용자와 직원 정보를 관리하는 메뉴입니다.
  • 새로운 사용자를 생성하고, 권한을 부여하며, 사용자별 자산 할당 현황을 확인할 수 있습니다.

가져오기 (Import):

  • CSV 파일을 통해 대량의 자산, 사용자, 라이선스 등의 데이터를 일괄적으로 시스템에 업로드할 수 있는 기능입니다.
  • 데이터를 사전에 정의된 형식에 맞게 준비한 후, 가져오기 기능을 통해 효율적으로 시스템에 반영할 수 있습니다.

설정 (Settings):

  • 시스템의 전반적인 설정을 관리하는 메뉴입니다.
  • 회사 정보, 로케이션, 카테고리, 제조사 등 다양한 항목을 설정하고 관리할 수 있습니다.
  • 또한, 사용자 권한, 이메일 알림, 브랜딩 등 시스템 운영에 필요한 세부 설정을 조정할 수 있습니다.

보고서 (Reports):

  • 시스템 내 자산, 사용자, 라이선스 등의 다양한 활동과 상태에 대한 보고서를 생성하고 조회할 수 있는 메뉴입니다.
  • 활동 보고서를 통해 자산의 체크인/체크아웃 기록, 수정 내역 등을 추적할 수 있습니다.
  • 생성된 보고서는 CSV 형식으로 내보낼 수 있어, 외부 분석이나 기록 보관에 활용할 수 있습니다.

요청 가능 항목 (Requestable):

  • 사용자가 시스템 내에서 특정 자산이나 액세서리를 요청할 수 있도록 설정하는 기능입니다.
  • 관리자는 자산이나 모델을 요청 가능 상태로 지정하여, 사용자들이 필요한 자산을 쉽게 요청하도록 지원할 수 있습니다.
  • 요청된 자산은 ‘Requested Assets’ 메뉴에서 관리자가 확인하고 승인 또는 거부할 수 있습니다.

참고자료

  • https://snipeitapp.com/
  • https://snipe-it.readme.io/docs/introduction
  • https://snipe-it.readme.io/docs/docker
  • https://github.com/snipe/snipe-it
  • https://github.com/snipe/snipe-it/blob/master/.env.docker
  • https://github.com/snipe/snipe-it/blob/master/docker-compose.yml

Snipe-IT은 간단한 설치와 강력한 기능으로 많은 기업에서 IT 자산 관리의 필수 도구로 사용되고 있습니다.




Leave a Comment