Jenkins mit Docker und Traefik
Als Voraussetzung sollte Docker und Docker-Compose bereits auf dem Linux-System installiert sein!
Eine „Docker“ Gruppe hinzufügen falls noch nicht vorhanden und einen Jenkins User der dieser Gruppe zugehörig ist.
groupadd docker && usermod -aG docker 'jenkins'
Berechtigungen für das Dockerfile / Deamon
chmod 777 /var/run/docker.sock
! ACHTUNG auf einem Produktiv-Server sollten die Berechtigungen nicht so uneingeschränkt vergeben werden!
Docker-Compose File:
version: '3.5'
services:
jenkins:
image: "jenkins-with-docker-socket:lts-alpine"
container_name: "jenkins-master"
user: jenkins
labels:
- "traefik.enable=true"
- "traefik.http.routers.jenkins-master.tls=true"
- "traefik.http.routers.jenkins-master.rule=Host(`jenkins.localhost`)"
- "traefik.http.routers.jenkins-master.entrypoints=websecure"
- "traefik.network=traefik_internal"
networks:
- traefik_internal
volumes:
- ./jenkins_data:/var/jenkins_home
ports:
- "8080:8080"
environment:
- JENKINS_HOST_HOME= "/data/jenkins"
networks:
traefik_internal:
external:
name: traefik_internal
ggf. in der /etc/hosts einen Eintrag für 127.0.0.1 jenkins.localhost nachtragen!
Der Jenkins-User benötigt Rechte auf das Verzeichnis -> /jenkins_data !
Vor dem starten bitte ggf. erst unten noch traefik einrichten!
Starten des Containers mit „docker-compose up -d“
Im Log kan mit „dockerc-ompose logs -f“ das initiale Passwort entnommen werden.
Im Anschluss kann im Frontent ein Admin-User mit seinem neuen Passwort bestätigt werden!
Traefik einrichten:
Hier das Docker-compose file:
version: '3.5'
services:
traefik:
restart: always
image: "traefik:v2.1"
container_name: "traefik"
command:
# - "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
ports:
- "80:80"
- "443:443"
networks:
- default
- traefik_internal
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./certs:/data/tls-conf
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_internal"
- "traefik.http.routers.traefik.entrypoints=web"
- "traefik.http.routers.traefik.rule= Host(`traefik.localhost`)"
- "traefik.http.routers.api.entrypoints=websecure"
- "traefik.http.routers.api.tls=true"
- "traefik.http.routers.api.rule=Host(`traefik.localhost`)"
- "traefik.http.routers.api.service=api@internal"
- "traefik.http.routers.api.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:(Passwort als hash erstellt)"
# - "traefik.http.middlewares.auth.basicauth.usersfile=/docker/containers/traefik/data/.htpasswd"
# global redirect to https
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https"
# whoami Testanwendung falls erwünscht
# whoami:
# image: "containous/whoami"
# container_name: "simple-service"
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
# - "traefik.http.routers.whoami.entrypoints=websecure"
# - "traefik.docker.network= traefik_internal"
# - "traefik.http.routers.whoami.tls=true"
networks:
traefik_internal:
external:
name: traefik_internal
Für das erstellen eines Passworts als Hash im Code direkt oder in einer ausgelagerten Datei gibt es hier einen Link mit der Beschreibung von Traefik: https://doc.traefik.io/traefik/middlewares/basicauth/
Die Kurzform, erlaubt sind: (MD5, SHA1, or BCrypt)
Mit „htpasswd“ lässt sich ein passwort recht schnell erstellen zB.:
„htpasswd -c /home/pwww/.htpasswd jerry“ erzeugt eine Datei mit dem User und passwort.
Auch die oben aufgeführte Docker-compose Datei für Traefik wird im eigenen erstellten Verzeichnis gestartet mit: „docker-compose up -d“
Im selben Verzeichnis gibt es ein Unterverzeichnis „certs“ für evtl. benötigte Zertifikate:
„- ./certs:/data/tls-conf“
Ggf. müssen die Pfade der Verzeichnise aus der Docker-Compose Dateo oben individuell erstellt und angepasst werden!