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: