Files
notes/tiddlywiki/gitlab with Docker.md
2026-03-12 22:01:38 +01:00

4.0 KiB
Executable File

Get Docker image

docker pull gitlab/gitlab-ee

Prepare persistent directories

mkdir /app/appsdocker/gitlab
cd /app/appsdocker/gitlab
mkdir config data logs

Run the container

Let's run Gitlab in gitlab.databasepro.eu in HTTP mode:

export GITLAB_HOME=/app/appsdocker/gitlab
docker run --detach \
  --hostname gitlab.databasepro.eu \
  --publish 7001:80 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ee:latest

Supposing that ossus is the Docker host name, and in the router NAT we have mapped external port 80 to internal ossus:7001, on reverse proxy we will have:

<VirtualHost *:80>
    ServerName gitlab.databasepro.eu

    ServerAdmin admin@gitlab.databasepro.eu
    DocumentRoot /usr/local/apache2/wwwroot/gitlab

    <Directory "/usr/local/apache2/wwwroot/gitlab">
        Order allow,deny
        AllowOverride All
        Allow from all
        Require all granted
    </Directory>

    ErrorLog logs/gitlab-error.log
    CustomLog logs/gitlab-access.log combined

    ProxyPass / http://ossus:7001/
    ProxyPassReverse / http://ossus:7001/
</VirtualHost>

Run Gitlab in HTTPS

Configure external_url "https://gitlab.databasepro.eu" in /app/appsdocker/gitlab/config/gitlab.rb:

external_url 'https://gitlab.databasepro.eu'

Using external created letsencrypt certificate caused loop reboot of the container after host restart. The sollution was to set also:

letsencrypt['enable'] = false

Stop, remove and restart the container:

export GITLAB_HOME=/app/appsdocker/gitlab
docker run --detach \
  --hostname gitlab.databasepro.eu \
  --publish 7004:443 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ee:latest

Map in NAT external port 443 to internal ossus HTTPD port and update gitlab.conf:

<VirtualHost *:80>
    ServerName gitlab.databasepro.eu

    ServerAdmin admin@gitlab.databasepro.eu
    DocumentRoot /usr/local/apache2/wwwroot/gitlab

    <Directory "/usr/local/apache2/wwwroot/gitlab">
        Order allow,deny
        AllowOverride All
        Allow from all
        Require all granted
    </Directory>

    ErrorLog logs/gitlab-error.log
    CustomLog logs/gitlab-access.log combined

    ProxyPass / http://ossus:7001/
    ProxyPassReverse / http://ossus:7001/
</VirtualHost>

<VirtualHost *:443>
        ServerName gitlab.databasepro.eu

        ServerAdmin admin@gitlab.databasepro.eu
        DocumentRoot /usr/local/apache2/wwwroot/gitlab

        <Directory "/usr/local/apache2/wwwroot/gitlab">
                Order allow,deny
                AllowOverride All
                Allow from all
                Require all granted
        </Directory>

    SSLEngine On
    SSLProxyEngine On

    # Disable SSLProxyCheck
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off
    SSLProxyVerify none

    ErrorLog logs/gitlab-error.log
    CustomLog logs/gitlab-access.log combined

    SSLCertificateFile "/etc/letsencrypt/live/gitlab.databasepro.eu/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/gitlab.databasepro.eu/privkey.pem"

    ProxyPass / https://ossus:7004/
    ProxyPassReverse / https://ossus:7004/
</VirtualHost>

Optionally using docker-compose

docker-compose.yaml file:

gitlab:
  image: 'gitlab/gitlab-ee:latest'
  restart: always
  hostname: 'code.databasepro.eu'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://code.databasepro.eu'
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - 7004:443
  volumes:
    - /app/appsdocker/gitlab/config:/etc/gitlab
    - /app/appsdocker/gitlab/logs:/var/log/gitlab
    - /app/appsdocker/gitlab/data:/var/opt/gitlab