Snipe-IT ist ein super nützliches Tool für alle, die ihre IT-Hardware und Software im Blick behalten wollen. Damit kannst du deine Geräte, Lizenzen und Zubehörteile verwalten und musst nicht mehr mühsam in irgendwelchen veralteten Listen nachschauen, falls diese überhaupt existieren ;). Außerdem hilft dir Snipe-IT dabei, Wartungen besser zu planen und unnötige Ausfälle wie abgelaufene Zertifikate und Lizenzen zu vermeiden.
Datum | Änderungen |
---|---|
23.02.2025 | Anleitung erstellt |
26.02.2025 | Manueller Command in „4.2 App-Key generieren“ korrigiert. (Danke RetoIneichen) |
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
- Optional WatchTower
2. Verzeichnis erstellen
Dafür führst du einfach folgenden Befehl aus:
mkdir -p /opt/containers/snipeit/data/{snipeit,database} touch /opt/containers/snipeit/{.env,snipeit.env} chmod 600 /opt/containers/snipeit/.env
3. Docker Compose erstellen
Jetzt konfigurierst du die Docker-Compose-Datei und öffnest sie mit dem Command.
nano /opt/containers/snipeit/docker-compose.yml
Dann kopierst du diesen Inhalt hinein:
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 traefik.docker.network: proxy 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
5. snipeit.env
erstellen
Damit Snipe-IT richtig läuft, wird eine Konfigurationsdatei benötigt. Diese wird mit folgendem Befehl geöffnet.
nano /opt/containers/snipeit/snipeit.env
Folgendes kopierst du dort hinein.
# -------------------------------------------- # 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 # -------------------------------------------- # REQUIRED: IMAGE LIBRARY # This should be gd or imagick # -------------------------------------------- IMAGE_LIB=gd # -------------------------------------------- # 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 #192.168.1.1,10.0.0.1,172.16.0.0/12 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}
Die möglichen Einträge habe ich etwas für diese Anleitung zusammengekürzt und die Werte teilweise auf die Anleitung angepasst. Die genaue Beschreibung gibt es hier in der Dokumentation. https://snipe-it.readme.io/docs/configuration
4. .env
erstellen
Alle Credentials und hostspezifische Sachen sind zentral in der .env
-Datei gespeichert.
nano /opt/containers/snipeit/.env
Und kopierst du den folgenden Inhalt hinein:
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=
4.1 App-URL anpassen
Bei der App-URL setzt ihr die Domain ein, unter der Snipe-IT erreichbar sein soll. Gebt hier kein Protokoll also https://
, oder ein /
nach der Domain an. Der Wert wird für Snipe-IT selbst und Traefik verwendet.
SNIPEIT_DOMAIN=snipeit.euredomain.de
4.2 App-Key generieren
Nun generieren wir uns einen App-Key.
Wer es in einem Schritt mag, kann Folgendes eingeben:
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; }
Wer es lieber mag, wie es hier auf der Webseite üblicher ist, kann den Weg mit dem Kopiervorgang gehen:
docker compose -f /opt/containers/snipeit/docker-compose.yml run --rm snipeit php artisan key:generate --show
Die Ausgabe kopiert ihr jetzt in die .env
-Datei.
vorher: SNIPEIT_APP_KEY= nachher: SNIPEIT_APP_KEY=base64:bpPJcNw3suv+nqPeCSOs0mRj8WOAR1KD4z2bVyNv7+4=
4.3 Datenbankpasswort generieren
Du benötigst ein Passwort für die Datenbank. Das kannst du wie im vorherigen Abschnitt als ein Command ausführen oder das Passwort manuell einfügen.
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; }
oder
openssl rand -base64 48 | tr -dc 'a-zA-Z0-9!@#%^&*()-_=+[]{}?' && echo
Und die Ausgabe in die .env
-Datei einfügen. Achte dabei, dass du Anführungszeichen verwendest.
vorher: SNIPEIT_DB_PASSWORD= nachher: SNIPEIT_DB_PASSWORD="IsdgiEoX/9XEm8lpeOo7z0892ui/nn/8SMOPprMKSB1cC+sOS4QmMaQgs1zihxST"
4.4 Mail-Server anpassen
In der .env
-Datei musst du noch folgende Einstellungen für deinen Mail-Server anpassen:
SNIPEIT_MAIL_HOST=mail.example.com SNIPEIT_MAIL_USERNAME= SNIPEIT_MAIL_PASSWORD= SNIPEIT_MAIL_FROM_ADDR=
In der snipeit.env
-Datei siehst du, dass man noch weiteres einstellen kann. Für die allermeisten sollten diese Werte aber ausreichend sein.
5. Stack starten
Jetzt kannst du den Stack starten.
docker compose -f /opt/containers/snipeit/docker-compose.yml up -d
Im Browser sollte dann folgende Seite erscheinen.
Hat das jemand zum Laufen bekommen? Ich werde nur auf /setup weitergeleitet ohne Erfolg.
Hi
Danke für die Idee und Anleitung. Habe bisher mit i-doit versucht, meine IT-Landschaft abzubilden, und dann schnell nicht mehr weitergepflegt, das es sehr unübersichtlich wurde und eine separate Installtion in einer KVM notwendig machte.
Werde es gerne mit Snipe-IT versuchen😉
Bei der Anleitung musst du in Schritt 4.2 die Befehlszeile für das “händische” Erstellen eines API-KEYS um den Dateinamen docker-compose.yml zum Pfad hinzufügen und “app” durch “–no-deps snipeit” ergänzen bzw. anpassen. Sollte dann so aussehen: