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!