0

What I have to do for to enable gitlab-pages with hugo static site generator in gitlab docker ?

The gitlab server is already running on my server. I only need the gitlab-pages and hugo part

My work :

J'utilise la distribution debian.

sshd

Le port 22 est utilisé pour le ssh du container gitlab-container.

Je paramètre le serveur ssh du serveur en éditant le fichier /etc/ssh/sshd_config :

Port 65522

Pour appliquer les paramètres sshd, je reboot.

Il faudra se reconnecter au serveur ssh sur le nouveau port 65522.

ssl

src : https://certbot-dns-ovh.readthedocs.io/en/stable/

J'installe les outils nécessaires à la création des certificats ssl :

sudo apt install certbot python3-certbot-dns-ovh

J'édite le fichier /root/.ovhapi

dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = xxxxxxxxxxxxxxxx
dns_ovh_application_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dns_ovh_consumer_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
sudo chmod 600 /root/.ovhapi
sudo certbot certonly --dns-ovh --dns-ovh-credentials /root/.ovhapi \
--non-interactive --agree-tos --email info@freec0ding.dev \
-d freec0ding.dev -d *.freec0ding.dev

docker

src : https://docs.docker.com/engine/install/debian/

sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update && \
sudo apt-get install docker-ce docker-ce-cli \
containerd.io docker-compose-plugin

gitlab container

src : https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/files/gitlab-config-template/gitlab.rb.template

J'utilise le port 13000 pour gitlab et le port 13001 pour gitlab-pages.

sudo mkdir -p /srv/gitlab/etc /srv/gitlab/var/log /srv/gitlab/var/opt
volumes:
  gitlab_etc:
    name: gitlab-etc
    driver_opts:
      type: none
      device: /srv/gitlab/etc/
      o: bind
  gitlab_log:
    name: gitlab-log
    driver_opts:
      type: none
      device: /srv/gitlab/var/log/
      o: bind
  gitlab_opt:
    name: gitlab-opt
    driver_opts:
      type: none
      device: /srv/gitlab/var/opt/
      o: bind


secrets:
  ssl_certificate:
    file: /etc/letsencrypt/live/freec0ding.dev/fullchain.pem
  ssl_certificate_key:
    file: /etc/letsencrypt/live/freec0ding.dev/privkey.pem
  ssl_trusted_certificate:
    file: /etc/letsencrypt/live/freec0ding.dev/chain.pem


networks:
  gitlab_network:
    name: gitlab-network


services:
  gitlab:
    container_name: gitlab-container
    image: gitlab/gitlab-ce
    hostname: 'gitlab.freec0ding.dev'
    ports:
      - 22:22 # ssh
    restart: always
    volumes:
      - gitlab_etc:/etc/gitlab
      - gitlab_log:/var/log/gitlab
      - gitlab_opt:/var/opt/gitlab
    expose:
      - '13000' # gitlab
      - '13001' # gitlab-pages
    secrets:
      - source: ssl_certificate
        target: freec0ding-fullchain.pem
      - source: ssl_certificate_key
        target: freec0ding-privkey.pem
      - source: ssl_trusted_certificate
        target: freec0ding-chain.pem
    networks:
      - gitlab_network
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.freec0ding.dev'
        pages_external_url 'https://pages.freec0ding.dev'
        letsencrypt['enable'] = false
        gitlab_rails['gitlab_ssh_host'] = 'freec0ding.dev'
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['gitlab_email_enabled'] = false
        gitlab_rails['gitlab_default_projects_features_issues'] = false
        gitlab_rails['gitlab_default_projects_features_merge_requests'] = false
        gitlab_rails['gitlab_default_projects_features_wiki'] = false
        gitlab_rails['gitlab_default_projects_features_snippets'] = false
        gitlab_rails['gitlab_default_projects_features_builds'] = false
        gitlab_rails['gitlab_default_projects_features_container_registry'] = false
        gitlab_rails['incoming_email_enabled'] = false
        gitlab_rails['gitlab_shell_ssh_port'] = 22
        nginx['enable'] = true
        nginx['listen_port'] = 13000
        nginx['listen_https'] = true
        nginx['ssl_certificate'] = '/var/run/secrets/freec0ding-fullchain.pem';
        nginx['ssl_certificate_key'] = '/var/run/secrets/freec0ding-privkey.pem';
        nginx['ssl_trusted_certificate'] = '/var/run/secrets/freec0ding-chain.pem';
        gitlab_pages['enable'] = true
        pages_nginx['enable'] = true
        pages_nginx['listen_port'] = 13001
        pages_nginx['listen_https'] = true
        pages_nginx['ssl_certificate'] = '/var/run/secrets/freec0ding-fullchain.pem';
        pages_nginx['ssl_certificate_key'] = '/var/run/secrets/freec0ding-privkey.pem';
        pages_nginx['ssl_trusted_certificate'] = '/var/run/secrets/freec0ding-chain.pem';
sudo docker compose -p gitlab -f ./gitlab-docker-compose.yml up -d

web container

sudo mkdir -p /srv/web/var/www /srv/web/etc/nginx /srv/web/var/log/nginx
volumes:
  nginx_www:
    name: nginx-www
    driver_opts:
      type: none
      device: /srv/web/var/www/
      o: bind
  nginx_etc:
    name: nginx-etc
    driver_opts:
      type: none
      device: /srv/web/etc/nginx/
      o: bind
  nginx_log:
    name: nginx-log
    driver_opts:
      type: none
      device: /srv/web/var/log/nginx/
      o: bind


secrets:
  ssl_certificate:
    file: /etc/letsencrypt/live/freec0ding.dev/fullchain.pem
  ssl_certificate_key:
    file: /etc/letsencrypt/live/freec0ding.dev/privkey.pem
  ssl_trusted_certificate:
    file: /etc/letsencrypt/live/freec0ding.dev/chain.pem


networks:
  nginx_network:
    name: nginx-network
  gitlab_network:
    name: gitlab-network
    external: true


services:
  nginx:
    container_name: nginx-container
    image: nginx
    hostname: 'nginx.freec0ding.dev'
    ports:
      - 80:80 # http
      - 443:443 # https
    restart: always
    volumes:
      - nginx_www:/var/www/
      - nginx_etc:/etc/nginx/
      - nginx_log:/var/log/nginx/
    secrets:
      - source: ssl_certificate
        target: freec0ding-fullchain.pem
      - source: ssl_certificate_key
        target: freec0ding-privkey.pem
      - source: ssl_trusted_certificate
        target: freec0ding-chain.pem
    networks:
      - nginx_network
      - gitlab_network
sudo docker compose -p web -f ./web-docker-compose.yml up -d
sudo openssl dhparam -out /srv/web/etc/nginx/dhparam.pem 2048

Je sauvegarde le fichier de config actuel /srv/web/etc/nginx/nginx.conf :

sudo cp /srv/web/etc/nginx/nginx.conf \
/srv/web/etc/nginx/nginx.conf.bak-`date "+%Y%m%d-%Hh%Mm%S"`

Le contenu du fichier /srv/web/etc/nginx/nginx.conf :

user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log notice;

pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    charset utf-8;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;

    # MIME
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Logging
    access_log /var/log/nginx/access.log combined;

    # SSL
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # Diffie-Hellman parameter for DHE ciphersuites
    ssl_dhparam /etc/nginx/dhparam.pem;

    # Mozilla Intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    include /etc/nginx/conf.d/*.conf;
}

Le contenu du fichier /srv/web/etc/nginx/conf.d/gitlab.conf :

server {
    listen 80;
    listen [::]:80;

    server_name gitlab.freec0ding.dev;

    # Logging
    access_log /var/log/nginx/gitlab.access.log combined;
    error_log /var/log/nginx/gitlab.error.log warn;

    location / {
        return 301 https://gitlab.freec0ding.dev$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name gitlab.freec0ding.dev;

    # Logging
    access_log /var/log/nginx/gitlab.access.log combined;
    error_log /var/log/nginx/gitlab.error.log warn;

    # SSL
    ssl_certificate /var/run/secrets/freec0ding-fullchain.pem;
    ssl_certificate_key /var/run/secrets/freec0ding-privkey.pem;
    ssl_trusted_certificate /var/run/secrets/freec0ding-chain.pem;

    location / {
        proxy_pass https://gitlab:13000;

        proxy_redirect off;
        
        # The proxy_set_header directive is used to pass vital information about the request to the upstream servers
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }   
}

Le contenu du fichier /srv/web/etc/nginx/conf.d/pages.conf :

server {
    listen 80;
    listen [::]:80;

    server_name pages.freec0ding.dev;
    
    # Logging
    access_log /var/log/nginx/pages.access.log combined;
    error_log /var/log/nginx/pages.error.log warn;

    location / {
        return 301 https://pages.freec0ding.dev$request_uri;
    }   
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name pages.freec0ding.dev;

    # Logging
    access_log /var/log/nginx/pages.access.log combined;
    error_log /var/log/nginx/pages.error.log warn;

    # SSL
    ssl_certificate /var/run/secrets/freec0ding-fullchain.pem;
    ssl_certificate_key /var/run/secrets/freec0ding-privkey.pem;
    ssl_trusted_certificate /var/run/secrets/freec0ding-chain.pem;

    location / {
        proxy_pass https://gitlab:13001;

        proxy_redirect off;

        # The proxy_set_header directive is used to pass vital information about the request to the upstream servers
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }   
}

Je restart nginx :

sudo docker restart nginx-container

I try to add gitlab-pages on my server and in my docker container, and with hugo static site generator.

sysc4ll
  • 7
  • 3

0 Answers0