version: '2.1'

services:
    smtp:
{% if real_mailserver is defined %}
        image: tecnativa/postfix-relay
        volumes:
            - smtp:/var/spool/postfix
        networks:
            default:
            public:
        environment:
            MAILNAME: "{{ domain }}"
            MAIL_RELAY_HOST: "{{ mailserver }}"
            MAIL_RELAY_PORT: "{{ smtpport }}"
            MAIL_RELAY_USER: "{{ smtpuser }}"
            MAIL_RELAY_PASS: "{{ smtppass }}"
            MAIL_CANONICAL_DOMAINS: "{{ domain }}"
            MAIL_NON_CANONICAL_DEFAULT: "{{ domain }}"
{% else %}
        image: mailhog/mailhog
        networks:
            default:
            inverseproxy_smtp:
        labels:
            traefik.docker.network: "inverseproxy_smtp"
            traefik.enable: "true"
            traefik.http.routers.gitlabsmtp.middlewares: "auth@file, smtp-stripprefix@file"
            traefik.http.routers.gitlabsmtp.rule: "Host(`{{ git_url }}`) && PathPrefix(`/smtp/`)"
            traefik.http.routers.gitlabsmtp.service: "gitlabsmtp"
            traefik.http.services.gitlabsmtp.loadbalancer.server.port: "8025"
{% endif %}
        container_name: gitlab_smtp
        restart: unless-stopped

    gitlab:
        image: gitlab/gitlab-ce:latest
        container_name: gitlab
        restart: unless-stopped
        environment:
            GITLAB_OMNIBUS_CONFIG: |
                external_url 'https://{{ git_url }}'
                nginx['redirect_http_to_https'] = false
                nginx['listen_port'] = 80
                nginx['listen_https'] = false
                nginx['proxy_set_headers'] = {
                    'X-Forwarded-Proto' => 'https',
                    'X-Forwarded-Ssl' => 'on'
                }
                nginx['client_max_body_size'] = '2G'
                unicorn['worker_timeout'] = 60
                unicorn['worker_processes'] = 2
                sidekiq['concurrency'] = 15
                postgresql['shared_buffers'] = "512MB"
                gitlab_ci['backup_keep_time'] = 172600
                gitlab_rails['artifacts_enabled'] = true
                gitlab_rails['artifacts_path'] = "/var/opt/gitlab/gitlab-artifacts"
                gitlab_rails['lfs_enabled'] = true
                gitlab_rails['backup_keep_time'] = 86400
{% if enable_omniauth is defined %}
                gitlab_rails['omniauth_enabled'] = true
                gitlab_rails['omniauth_allow_single_sign_on'] = ['openid_connect']
                gitlab_rails['omniauth_block_auto_created_users'] = false
                gitlab_rails['omniauth_providers'] = [
                    {
                        "name" => 'openid_connect',
                        "args" => {
                              'name' => 'openid_connect',
                              'issuer' => 'https://{{ sso_url }}',
                              'scope' => ['openid', 'profile', 'email'],
                              'response_type' => 'code',
                              'client_auth_method' => 'client_secret_post',
                              'discovery' => true,
                              'uid_field' => 'sub',
                              'client_options' => {
                                'redirect_uri' => 'http://{{ git_url }}/users/auth/openid_connect/callback',
                                'identifier' => '{{ sso_oidc_gitlab_id }}',
                                'secret' => '{{ sso_oidc_gitlab_secret }}',
                              }
                        },
                        "label" => 'Le Filament SSO'
                    }
                ]
{% endif %}
                gitlab_rails['smtp_enable'] = true
                gitlab_rails['smtp_address'] = 'smtp'
{% if real_mailserver is defined %}
                gitlab_rails['smtp_port'] = 25
                gitlab_rails['smtp_domain'] = '{{ domain }}'
{% else %}
                gitlab_rails['smtp_port'] = 1025
{% endif %}
                gitlab_rails['smtp_tls'] = false
                gitlab_rails['smtp_openssl_verify_mode'] = 'none'
                gitlab_rails['smtp_enable_starttls_auto'] = false
                gitlab_rails['smtp_ssl'] = false
                gitlab_rails['smtp_force_ssl'] = false
        ports:
            - "22:22"
        volumes:
            - config:/etc/gitlab:z
            - data:/var/opt/gitlab:z
            - logs:/var/log/gitlab:z
        networks:
            default:
            inverseproxy_shared:
        labels:
            traefik.enable: "true"
            traefik.http.routers.gitlab.rule: "Host(`{{ git_url }}`)"
            traefik.http.routers.gitlab.service: "gitlab"
            traefik.http.services.gitlab.loadbalancer.server.port: "80"

networks:
    default:
        internal: true
        driver_opts:
            encrypted: 1
    inverseproxy_shared:
        external: true
{% if real_mailserver is defined %}
    public:
{% else %}
    inverseproxy_smtp:
        external: true
{% endif %}

volumes:
    config:
    data:
    logs:
{% if real_mailserver is defined %}
    smtp:
{% endif %}