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;