Server GitLab con Docker

Di seguito vediamo come sfruttare docker per configurare una macchina virtuale che ospiti più istanze di GitLab tutte containerizzate.

Verranno sftuttate le immagini di GitLab e Nginx proxy presenti sul DockerHub

Avvio docker

Prima di tutto avviare il reverse proxy Nginx

docker run --detach \
--publish 80:80 \
--publish 443:443 \
--volume /var/run/docker.sock:/tmp/docker.sock:ro \
--volume /opt/dockerContainer/nginx-rproxy/etc/nginx/certs:/etc/nginx/certs \
--volume /opt/dockerContainer/nginx-rproxy/etc/nginx/proxy.conf:/etc/nginx/proxy.conf \
--restart always \
--name nginx-rproxy \
jwilder/nginx-proxy

e successivamente un’istanza GitLab

docker run --detach \
--env VIRTUAL_HOST=git-cliente1.dominio.it \
--hostname git-cliente1.dominio.it \
--name gitlab-cliente1\
--restart always \
--volume /opt/dockerContainer/gitlab-cliente1/etc:/etc/gitlab \
--volume /opt/dockerContainer/gitlab-cliente1/logs:/var/log/gitlab \
--volume /opt/dockerContainer/gitlab-cliente1/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

Configurazione ambiente

Sulla macchina host andranno effettuate poi alcune configurazioni per permettere il corretto funzionamento del tutto.

Configurazione certificati SSL

Nella cartella /opt/dockerContainer/nginx-rproxy/etc/nginx/certs andranno inseriti il file nomeDominio.crt e nomeDominio.key (senza password).

Il file .crt potrà essere un certificato unico concatenando i vari intermedi con cat intermedio.crt >> nomeDominio.crt facendo attenzione che ci sia
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
e non —–END CERTIFICATE———-BEGIN CERTIFICATE—–

Configurazione per invio mail

Imposto sul server host Postfix in questo modo (da Webmin)

  • SMTP relaying restrictions -> Allow connections from same network
  • Impostando correttamente Local networks nelle General options

Nel file /opt/dockerContainer/gitlab-cliente1/etc/gitlab.rb

gitlab_rails['gitlab_email_from'] = 'gitlab-cliente1@dominio.it'
gitlab_rails['gitlab_email_display_name'] = 'GitLab Cliente1'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "172.17.0.1" #IP assegnato al container dal bridge di docker0
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_domain'] = "git-cliente1.dominio.it"
gitlab_rails['smtp_authentication'] = false
gitlab_rails['smtp_enable_starttls_auto'] = false

Configurazione generale GitLab

Nel file /opt/dockerContainer/gitlab-cliente1/etcgitlab.rb

external_url 'https://externalURL.it'
nginx['listen_port'] = 80
nginx['listen_https'] = false

In questo modo l’indirizzo mostrato sarà quello https ma non verrà impostato il server web di gitlab per funzionare in modalità https ma http e sarà possibile collegarsi tramite il reverse proxy sulla porta 80

Configurazione IPTables

Va aggiunta la seguente regola

-A INPUT -i docker0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT

in modo da far funzionare l’SMTP.

Le regole aggiunte da docker pubblicheranno automaticamente la porta 80 e 443 del container.
Per mostrare in webmin le regole iptables aggiunte da docker (dopo lo start dei due container) bisogna eseguire il comando iptables-save > /etc/iptables.up.rules dopo lo start dei container.

Configurazione Nginx proxy

È opportuno configurare adeguatamente il proxy in modo da non avere problemi con le operazione del protocollo GIT via HTTPS, il file /opt/dockerContainer/nginx-rproxy/etc/nginx/proxy.conf avrà il seguente contenuto

proxy_buffering off;
proxy_redirect      off;
proxy_set_header    Host                $http_host;
proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    X-Forwarded-Ssl     on;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Proto   $scheme;
proxy_set_header    X-Frame-Options     SAMEORIGIN;
client_max_body_size 50m;
Aggiungi ai preferiti : permalink.

I commenti sono chiusi.