Anleitung: Gitlab - Docker (No Port-Redirection)

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Hallo,

kurzes Update, iAcki war so nett und hat mit mir das ganze per Teamviewer nochmal durchgespielt.

Wir haben es jetzt hin bekommen, das wir per IP uns verbinden können, aber nur solange bis Gitlab komplett hochgefahren ist.
Wenn wir dann an den Punkt kommen "https://192.168.250.4/users/sign_in" sagt er keine "Verbindung zum Server ......"
1616923789842.png
Per url https://sub.ddns.net kommt folgendes

1616923466237.png

folgende einstellungen habe ich jetzt

Code:
version: '2.4'

services:
  redis:
    restart: always
    image: redis:latest

    mac_address: 'd0:ca:ab:ff:ef:01'

    networks:
      vlan:
         ipv4_address: '192.168.250.2'

    command:
     - --loglevel warning
    volumes:
     - /volume1/docker/personal/gitlab/redis:/var/lib/redis

  postgresql:
    restart: always
    image: sameersbn/postgresql:12-20200524
    container_name: gitlab-postgresql
    mac_address: 'd0:ca:ab:dd:ef:02'
    networks:
      vlan:
         ipv4_address: '192.168.250.3'


    volumes:
     - /volume1/docker/personal/gitlab/postgresql:/var/lib/postgresql

    environment:
     - DB_USER=gitlab
     - DB_PASS=password
     - DB_NAME=gitlabhq_production
     - DB_EXTENSION=pg_trgm,btree_gist

  gitlab:
    restart: always
    image:  gitlab/gitlab-ce:latest
    container_name: gitlab
    mac_address: 'd0:ca:ab:cd:ef:03'
    networks:
       vlan:
         ipv4_address: '192.168.250.4'


    depends_on:
     - redis
     - postgresql

    ports:
     - "80:80"
     - "22:22"
     - "443:443"

    volumes:
     - /volume1/docker/personal/gitlab/gitlab/config:/etc/gitlab
     - /volume1/docker/personal/gitlab/gitlab/logs:/var/log/gitlab
     - /volume1/docker/personal/gitlab/gitlab/data:/var/opt/gitlab

    healthcheck:
     test: ["CMD", "/usr/local/sbin/healthcheck"]
     interval: 5m
     timeout: 10s
     retries: 3
     start_period: 5m

    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://sub.ddns.net'
        gitlab_rails['time_zone'] = 'Europe/Berlin'

        gitlab_rails['db_key_base'] = '*****'
        gitlab_rails['otp_key_base'] = '*****'
        gitlab_rails['secret_key_base'] = '*****'

        nginx['listen_port'] = 80
        nginx['listen_https'] = false

        postgresql['enable'] = false
        gitlab_rails['db_adapter'] = 'postgresql'
        gitlab_rails['db_encoding'] = 'unicode'
        gitlab_rails['db_host'] = 'postgresql' # oder IP
        gitlab_rails['db_password'] = 'password'
        gitlab_rails['db_username'] = 'gitlab'
        gitlab_rails['db_database'] = 'gitlabhq_production'

        redis['enable'] = false
        gitlab_rails['redis_host'] = 'redis'
        gitlab_rails['redis_port'] = '6379'

        gitlab_rails['gitlab_email_enabled'] = true
        gitlab_rails['gitlab_email_from'] = '*****'
        gitlab_rails['gitlab_email_reply_to'] = '*****'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = 'smtp.gmail.com'
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = '*****'
        gitlab_rails['smtp_password'] = '*****'
        gitlab_rails['smtp_domain'] = 'smtp.gmail.com'
        gitlab_rails['smtp_authentication'] = 'login'
        gitlab_rails['smtp_enable_starttls_auto'] = true

        #### Change the initial default admin password and shared runner registration tokens.
        ####! **Only applicable on initial setup, changing these settings after database
        ####!   is created and seeded won't yield any change.**
        gitlab_rails['initial_root_password'] = '*****'
        # gitlab_rails['initial_shared_runners_registration_token'] = 'Kann-Aber-Muss-Nicht-Gesetzt-Werden'


  gitlab-runner:
    image: 'gitlab/gitlab-runner:latest'
    container_name: 'gitlab-runner'
    restart: always
    volumes:
       - /volume1/docker/personal/gitlab/gitlab-runner:/etc/gitlab-runner
       - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
       - gitlab
    networks:
       vlan:
         ipv4_address: 192.168.250.5

networks:
  vlan:
    driver: macvlan

    driver_opts:
      parent: eth0 # 'ovs' fuer Synology NAS

    ipam:
      config:
        - subnet: 192.168.128.0/17
          gateway: 192.168.178.1
          ip_range: 192.168.250.0/28

Wir denken das irgendwas mit dem Reverse-Proxy nicht stimmt.

@iAcki, wenn du noch was hast, ergänze es bitte :D
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Gude,

es ist jetzt ein bisschen Zeit ins Land gezogen und ich habe viel probiert.
Jedoch funktioniert es immer noch nicht so recht.


ich hab ein bisschen rum probiert, was mir auf gefallen ist. Wenn ich in einem anderen Netzwerk unterwegs bin zeigt er mir ports an

Code:
root@nas:/volume1/docker/personal/gitlab# docker-compose ps
       Name              Command          State                Ports         
-----------------------------------------------------------------------------
gitlab_letsencrypt   /assets/wrapper   Up (healthy)   22/tcp, 443/tcp, 80/tcp


im "Original" siehts es so aus

Code:
root@nas:/volume1/docker/personal/gitlab# docker-compose ps
      Name                     Command                   State        Ports
---------------------------------------------------------------------------
gitlab              /assets/wrapper                  Up (unhealthy)       
gitlab-postgresql   /sbin/entrypoint.sh              Up                   
gitlab-runner       /sbin/entrypoint.sh              Exit 2               
gitlab_redis_1      docker-entrypoint.sh --log ...   Up

aber ob es daran liegt weiß ich leider auch nicht.
 

iAcki

Benutzer
Mitglied seit
20. Mrz 2019
Beiträge
28
Punkte für Reaktionen
5
Punkte
3
Moinsen, ich hab Synology mal angeschrieben und bzgl. Macvlan nachgehakt.

Sehr geehrter Kunde,

vielen Dank dass sie den Technischen Support von Synology kontaktieren.



Das Macvlan Interface wird auf dem NAS nicht unterstützt, da dieses nicht stabil auf dem NAS betrieben werden kann.

Es ist möglich, dass die Schnittstelle an der der NAS angesprochen wird keine Verbindung hat. Bitte prüfen sie die Einstellungen am macvlan und testen sie den Container ohne Macvlan.



Wenn sie eine eigene IP Adresse für ihre Anwendung benötigen, ist es empfehlenswert anstelle von Macvlan und Docker eine VM zu verwenden.

Eine andere Alternative stellt Portainer dar.


Hmmm... klingt ja jetzt nicht so geil.
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Hmmm... das stimmt.
Dann muss ich mich wohl oder übel um eine andere alternative kümmern.
Trotzdem vielen dank für alles
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Moin moin,

ich darf frohe Nachrichten überbringen :D

Ich hab mir auch gleich mal ein kleines Tutorial für mich (vielleicht auch für andere) geschrieben.


zu meiner Hardware ich habe die Synology DS218+ mit 10 GB RAM, als Router habe ich eine Fritzbox.

Auf der Synology müsst ihr im Paket-Zentrum den "Docker" installieren und ihr müsst euch ein DDNS anlegen und ein Zertifikat mit Letsencrypt anlegen. Den DDNS brauchen wir dann später, mit dem connecten wir dann auf unser Gitlab. Wenn ihr nicht wisst wie das geht, einfach bei google mal "synology https letsencrypt ddns" eingeben.

Außerdem müsst ihr den SMB und/oder FTP aktivieren. (SMB oder FTP)

Danach müsst ihr per SSH auf eure Synology connecten wenn ihr nicht wisst wie das geht (SSH)

als erstes weil wir faul sind (stimmts iAcki :)) geben wir in die Console ein

Code:
sudo -i

Damit sind wir als Root angemeldet.

Als erstes erstellen wir die ganzen Verzeichnisse

Für Gitlab:
Code:
mkdir -p /srv/docker/gitlab/gitlab/data
mkdir -p /srv/docker/gitlab/gitlab/data/certs
mkdir -p /srv/docker/gitlab/gitlab/logs
mkdir -p /srv/docker/gitlab/gitlab/opt

Für Gitlab-runner:
Code:
mkdir -p /srv/docker/gitlab/gitlab-runner

Für Postgresql:
Code:
mkdir -p /srv/docker/gitlab/postgresql

Für Redis
Code:
mkdir -p /srv/docker/gitlab/redis

Ordner für die Zertifikate (kann später gelöscht werden) (Achtung wenn ihr mehrere Festplatten habt könnt ihr ein anderes volume haben)
Code:
mkdir -p /volume1/docker/certs-gitlab

jetzt suchen wir unser Zertifikat das wir uns mit Letsencrypt für unseren DDNS erstellt haben.

dazu wechseln wir in


Code:
cd /usr/syno/etc/certificate/_archive
ls

Durch den befehl ls sehen wir die ganzen Verzeichnisse jetzt wählen wir den Ordner aus der zu meinem DDNS gehört in meinem fall heißt der "lH9Trt"

wenn ihr nicht wisst welcher Ordner das ist... keine panik, geht in einen Ordner rein und führt folgenden befehl aus

Code:
openssl x509 -noout -subject -in cert.pem

in der Ausgabe steht dann eure CN name

z.b
Code:
subject= /CN=ex.synology.me

Wenn ihr den richtigen Ordner habt führt folgende befehle aus

cp privkey.pem /volume1/docker/certs-gitlab/gitlab.key
cp fullchain.pem /volume1/docker/certs-gitlab/gitlab.crt

jetzt haben wir die Zertifikate so hingelegt das wir per FTP oder SMB draufzugreifen können.

Ihr zieht euch die zwei Dateien

Code:
gitlab.crt
gitlab.key
auf den PC (am besten MAC oder etwas was Openssl kann) öffnet ihr ein CMD und wechselt in das Verzeichniss
nun führt ihr folgenden befehl aus

Code:
openssl dhparam -out dhparam.pem 2048

(kurze Erklärung warum wir das machen, wir können das alles auch auf der Synology machen, nur da dauert das ewig)

wenn ihr Fertig seid zieht ihr die Datei "dhparam.pem" wieder auf eure Synology (per FTP oder SMB)

jetzt gehts auf der Synology weiter
Code:
cp gitlab.key /srv/docker/gitlab/gitlab/data/certs/
cp gitlab.crt /srv/docker/gitlab/gitlab/data/certs/
cp dhparam.pem /srv/docker/gitlab/gitlab/data/certs/
chmod 400 /srv/docker/gitlab/gitlab/data/certs/gitlab.key

hiermit verschiebt ihr die Zertifikate zu eurem Gitlab

jetzt müsst ihr noch die docker-compose erstellen

Code:
nano /srv/docker/gitlab/docker-compose.yml


in der fügt ihr folgenden Text ein

YAML:
version: '3.7'

services:
  redis:
    restart: always
    container_name: redis
    image: redis:5.0.9
    command:
    - --loglevel warning
    volumes:
    - /srv/docker/gitlab/redis:/var/lib/redis

  postgresql:
    restart: always
    container_name: postgresql
    image: sameersbn/postgresql:12-20200524
    volumes:
    - /srv/docker/gitlab/postgresql:/var/lib/postgresql
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm,btree_gist

  gitlab:
    restart: always
    image: sameersbn/gitlab:13.10.3
    container_name: gitlab
    depends_on:
    - redis
    - postgresql
    ports:
    - "10080:80"
    - "10022:22"
    - "10443:443"
    volumes:
    - /srv/docker/gitlab/gitlab/config:/etc/gitlab
    - /srv/docker/gitlab/gitlab/logs:/var/log/gitlab
    - /srv/docker/gitlab/gitlab/data:/home/git/data
    - /srv/docker/gitlab/gitlab/opt:/var/opt/gitlab
    healthcheck:
      test: ["CMD", "/usr/local/sbin/healthcheck"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 5m
    environment:
    - DEBUG=true

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production

    - REDIS_HOST=redis
    - REDIS_PORT=6379

    - TZ=Europe/Berlin
    - GITLAB_TIMEZONE=Berlin

    - GITLAB_HTTPS=true
    - SSL_SELF_SIGNED=true

    - GITLAB_HOST=ex.synology.me
    - GITLAB_PORT=10443
    - GITLAB_SSH_PORT=10022
    - GITLAB_SECRETS_DB_KEY_BASE=<longpw 64 sign>
    - GITLAB_SECRETS_SECRET_KEY_BASE=<longpw 64 sign>
    - GITLAB_SECRETS_OTP_KEY_BASE=<longpw 64 sign>

    - GITLAB_ROOT_PASSWORD=<longpw>
    - GITLAB_ROOT_EMAIL=name@gmail.com

    - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
    - GITLAB_NOTIFY_PUSHER=false

    - GITLAB_EMAIL=notifications@example.com
    - GITLAB_EMAIL_REPLY_TO=noreply@example.com
    - GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com

    - GITLAB_BACKUP_SCHEDULE=daily
    - GITLAB_BACKUP_TIME=01:00

    - SMTP_ENABLED=true
    - SMTP_DOMAIN=gmail.com
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - SMTP_USER=name@gmail.com
    - SMTP_PASS=<byGoogleYouNeedAppPasswordNotYourNormalPw>
    - SMTP_STARTTLS=true
    - SMTP_AUTHENTICATION=login

jetzt müsst ihr noch folgende Variablen in der docker-compose an eure Bedürfnisse anpacken

-GITLAB_HOST <-- hier kommt der CN name rein z.b ex.synology.me
- GITLAB_SECRETS_DB_KEY_BASE= <-- langes pw aus 64 zeichen
- GITLAB_SECRETS_SECRET_KEY_BASE=<-- langes pw aus 64 zeichen
- GITLAB_SECRETS_OTP_KEY_BASE=<-- langes pw aus 64 zeichen
- GITLAB_ROOT_PASSWORD=<-- euer späteres Gitlab root password
- GITLAB_ROOT_EMAIL=name@gmail.com <-- Mail

Optional könnt ihr noch SMTP aktivieren, ich habe gmail (falls ihr das nicht wollt dann )
- SMTP_ENABLED=false
ansonsten die zwei editiern
- SMTP_USER=name@gmail.com
- SMTP_PASS=<byGoogleYouNeedAppPasswordNotYourNormalPw>


das wars schön im großen uns ganzen für Gitlab jetzt müsst ihr noch in das Verzeichnis wechseln
Code:
cd /srv/docker/gitlab/
und docker-compose starten

Code:
docker-compose up -d

das dauert jetzt ca. 10 min bis es richtig läuft.

wenn alles geklappt hat könnt ihr euch mit
user:root
pw: <was ihr oben eingeben habt>

anmelden


jetzt muss noch der runner installiert werden

dazu gebt ihr einfach in console

Code:
docker run -d \
--name gitlab-runner \
--restart always \
--network gitlab_default \
-v /run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

ein.

dann registrieren wir den runner dazu müssen wir auf unser Gitlab connecten und in Settings -> CI/CD -> Runners folgende infomation parat halten

URL und token, diese fügen wir dann ein. Nun führen wir den Befehl aus

Code:
docker exec -it gitlab-runner gitlab-runner register

und wir füllen die fragen aus,

Code:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://ex.synology.me:10443
Please enter the gitlab-ci token for this runner:
ab1234abcd1234abcd12
Please enter the gitlab-ci description for this runner:
[synology]: docker
Please enter the gitlab-ci tags for this runner (comma separated):

Registering runner... succeeded                     runner=sA4DKorC
Please enter the executor: docker-ssh, parallels, docker+machine, kubernetes, docker, shell, ssh, virtualbox, docker-ssh+machine, custom:
docker
Please enter the default Docker image (e.g. ruby:2.6):
docker:stable
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

jetzt connecten wir auf den runner

Code:
docker exec -it gitlab-runner /bin/bash

führe die zwei befehle aus

Code:
apt-get update
apt-get install nano

gehen in die config

Code:
nano /etc/gitlab-runner/config.toml

und fügen unter URL folgends ein

Code:
clone_url = "https://ex.synology.me:10443

und ändern
Code:
privileged = true
und under privileged fügen wir zum schluss noch

Code:
pull_policy = "if-not-present"


das wars! Ich hoffe ich konnte dem einen oder anderem Helfen.

Ich kann das ganze auch gerne in ein neuen Thread packen wenn das gewünscht wird.
Dann gibt es vielleicht mehr Übersicht.

ich bedanke mich, falls jemand fragen/Anregungen hat kann er die gerne posten.
Rechtschreifehler darf er gerne behalten :D

mfg Marco

-edit-

Ich möchte mich bei allen bedanken die mir geholfen haben, ich habe natürlich das ein oder andere auch abgespickt.
Ich hoffe die Leute verziehen mir.
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Moin,

einmal möchte ich mich entschuldigen, für die vielen Rechtschreibfehler und zum zweiten wollte ich euch noch den beweis per Image schicken das es bei mir funktioniert hat :D


gitlab.png

mfg Marco
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat