How to: Snipe-IT Asset Management mit Docker Compose und Traefik installieren
Snipe-IT ist eine leistungsstarke Lösung für das Asset Management, die dir hilft, IT-Hardware, Software, Lizenzen und Zubehör effizient zu verwalten. In diesem Tutorial zeige ich dir, wie du Snipe-IT mit Docker Compose und Traefik installierst, um deine IT-Infrastruktur besser zu organisieren.
Voraussetzungen
- Docker und Docker Compose v2 müssen installiert sein.
- Traefik sollte bereits installiert und konfiguriert sein.
- Optional: WatchTower für automatische Updates.
- Ein Server oder lokales System mit Debian/Ubuntu.
1. Verzeichnisstruktur erstellen
Erstelle ein neues Verzeichnis für Snipe-IT:
mkdir -p /opt/containers/snipeit/data/{snipeit,database}
touch /opt/containers/snipeit/{.env,snipeit.env}
chmod 600 /opt/containers/snipeit/.env
Dieses Verzeichnis wird alle Konfigurationsdateien und Daten von Snipe-IT enthalten.
2. Docker Compose Datei erstellen
Erstelle eine docker-compose.yml
-Datei im Verzeichnis:
nano /opt/containers/snipeit/docker-compose.yml
Füge den folgenden Inhalt ein:
textversion: '3.3'
services:
snipeit:
image: snipe/snipe-it:${SNIPEIT_IMAGE_VERSION:-latest}
restart: unless-stopped
volumes:
- ./data/snipeit:/var/lib/snipeit
depends_on:
db:
condition: service_healthy
restart: true
env_file:
- ./snipeit.env
labels:
com.centurylinklabs.watchtower.enable: true
traefik.enable: true
traefik.http.routers.snipeit.entrypoints: websecure
traefik.http.routers.snipeit.rule: Host(`${SNIPEIT_DOMAIN}`)
traefik.http.routers.snipeit.middlewares: default@file
traefik.http.routers.snipeit.tls: true
traefik.http.routers.snipeit.tls.certresolver: http_resolver
traefik.http.routers.snipeit.service: snipeit
traefik.http.services.snipeit.loadbalancer.server.port: 80
networks:
- proxy
- default
db:
image: mariadb:11
restart: unless-stopped
volumes:
- ./data/database:/var/lib/mysql
environment:
MYSQL_DATABASE: ${SNIPEIT_DB_DATABASE:-snipeit}
MYSQL_USER: ${SNIPEIT_DB_USERNAME:-snipeit}
MYSQL_PASSWORD: ${SNIPEIT_DB_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: 1
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 1s
retries: 5
labels:
com.centurylinklabs.watchtower.enable: true
networks:
- default
networks:
proxy:
external: true
Erklärung der Konfiguration:
- Snipe-IT-Service:
- Nutzt das neueste Snipe-IT-Docker-Image.
- Volumes stellen sicher, dass Daten persistent gespeichert werden.
- Traefik-Konfiguration für HTTPS und Reverse Proxy.
- MariaDB-Datenbank:
- Wird als Datenbank für Snipe-IT verwendet.
- Enthält Umgebungsvariablen für Benutzername, Passwort und Datenbankname.
3. Umgebungsvariablen konfigurieren
Schritt 1: .env
-Datei erstellen
Erstelle eine .env
-Datei, um wichtige Variablen zu speichern:
nano /opt/containers/snipeit/.env
Füge folgende Variablen hinzu:
SNIPEIT_DOMAIN=snipeit.example.com
SNIPEIT_APP_KEY=
SNIPEIT_DB_PASSWORD=
SNIPEIT_MAIL_HOST=mail.example.com
SNIPEIT_MAIL_USERNAME=
SNIPEIT_MAIL_PASSWORD=
SNIPEIT_MAIL_FROM_ADDR=
Schritt 2: snipeit.env
-Datei erstellen
Erstelle eine snipeit.env
-Datei für weitere Konfigurationen:
nano /opt/containers/snipeit/snipeit.env
Füge den folgenden Inhalt ein:
# REQUIRED: BASIC APP SETTINGS
APP_ENV=production
APP_DEBUG=false
APP_KEY=$SNIPEIT_APP_KEY
APP_URL=https://${SNIPEIT_DOMAIN}
APP_TIMEZONE=${SNIPEIT_APP_TIMEZONE:-Europe/Berlin}
APP_LOCALE=${SNIPEIT_APP_LOCALE:-de-DE}
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_DATABASE:-snipeit}
DB_USERNAME=${SNIPEIT_DB_USERNAME:-snipeit}
DB_PASSWORD=$SNIPEIT_DB_PASSWORD
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
MAIL_MAILER=smtp
MAIL_HOST=$SNIPEIT_MAIL_HOST
MAIL_PORT=${SNIPEIT_MAIL_PORT:-465}
MAIL_USERNAME=$SNIPEIT_MAIL_USERNAME
MAIL_PASSWORD=$SNIPEIT_MAIL_PASSWORD
MAIL_TLS_VERIFY_PEER=true
MAIL_FROM_ADDR=$SNIPEIT_MAIL_FROM_ADDR
MAIL_FROM_NAME=${SNIPEIT_MAIL_FROM_NAME:-Snipe-IT}
MAIL_REPLYTO_ADDR=${SNIPEIT_MAIL_REPLYTO_ADDR:-$MAIL_USERNAME}
MAIL_REPLYTO_NAME=${SNIPEIT_MAIL_REPLYTO_NAME:-$MAIL_FROM_NAME}
MAIL_AUTO_EMBED=true
MAIL_AUTO_EMBED_METHOD=attachment
# OPTIONAL: BACKUP SETTINGS
MAIL_BACKUP_NOTIFICATION_DRIVER=mail
MAIL_BACKUP_NOTIFICATION_ADDRESS=null
BACKUP_ENV=true
ALLOW_BACKUP_DELETE=false
ALLOW_DATA_PURGE=false
# OPTIONAL: SESSION SETTINGS
SESSION_DRIVER=file
SESSION_LIFETIME=12000
EXPIRE_ON_CLOSE=false
ENCRYPT=false
COOKIE_NAME=snipeit_session
COOKIE_DOMAIN=${SNIPEIT_COOKIE_DOMAIN:-$SNIPEIT_DOMAIN}
SECURE_COOKIES=true
API_TOKEN_EXPIRATION_YEARS=3
BS_TABLE_STORAGE=localStorage
BS_TABLE_DEEPLINK=true
# OPTIONAL: SECURITY HEADER SETTINGS
APP_TRUSTED_PROXIES=REMOTE_ADDR
ALLOW_IFRAMING=false
ENABLE_CSP=true
ENABLE_HSTS=true
# OPTIONAL: CACHE SETTINGS
CACHE_DRIVER=file
CACHE_PREFIX=
# OPTIONAL: LOGIN THROTTLING
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_DURATION=60
RESET_PASSWORD_LINK_EXPIRES=900
# OPTIONAL: LOGGING SETTINGS
LOG=daily
LOG_MAX_DAYS=15
LOG_LEVEL=${SNIPEIT_LOG_LEVEL:-warning}
4. App-Key generieren
Um Snipe-IT zu sichern, musst du einen App-Key generieren:
- Manueller Befehl:
APP_KEY=$(docker compose -f /opt/containers/snipeit/docker-compose.yml run --rm --no-deps snipeit php artisan key:generate --show) && \
{ grep -q "^SNIPEIT_APP_KEY=" /opt/containers/snipeit/.env && \
sed -i "s|^SNIPEIT_APP_KEY=.*|SNIPEIT_APP_KEY=\"$APP_KEY\"|" /opt/containers/snipeit/.env || \
echo "SNIPEIT_APP_KEY=\"$APP_KEY\"" >> /opt/containers/snipeit/.env; }
- Alternative Methode:
docker compose -f /opt/containers/snipeit/docker-compose.yml run --rm snipeit php artisan key:generate --show
Kopiere die Ausgabe in die.env
-Datei.
5. Datenbankpasswort generieren
Erstelle ein sicheres Passwort für die Datenbank:
- Automatischer Befehl:
DB_PASSWORD=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9!@#$%^&*()-_=+[]{}?') && \
{ grep -q "^SNIPEIT_DB_PASSWORD=" /opt/containers/snipeit/.env && \
sed -i "s|^SNIPEIT_DB_PASSWORD=.*|SNIPEIT_DB_PASSWORD=\"$DB_PASSWORD\"|" /opt/containers/snipeit/.env || \
echo "SNIPEIT_DB_PASSWORD=\"$DB_PASSWORD\"" >> /opt/containers/snipeit/.env; }
- Manuelle Methode:
openssl rand -base64 48 | tr -dc 'a-zA-Z0-9!@#$%^&*()-_=+[]{}?'
Füge das Passwort manuell in die.env
-Datei ein.
6. Stack starten
Starte den Snipe-IT-Stack:
docker compose -f /opt/containers/snipeit/docker-compose.yml up -d
Snipe-IT sollte jetzt unter der angegebenen Domain erreichbar sein.