Po. Pro 9th, 2024

Komukoliv doporučím provozovat vlastní domácí gitlab v dockeru.

Prvně si nastavme STATIC DNS záznam na našem mikrotiku (pokud nemáte mikrotik, můžete využít v /etc/hosts na linuxu statický záznam, nebo ve windows je též hosts texťák, kam si můžete vložit vaši neexistující doménu ručně).

Přihlašme se proto na náš Mikrotik (ukazuji to ve Winboxu) klikněme na IP / DNS / Static /

Dále klikněme na tlačítko modré + (přidat):

Vyplníme DNS záznam doménu do Name:, kterou pak v docker-compose uvedeme jako doménu, na kterou budeme přistupovat. A dole Address: uvedeme IPv4 adresu naší lokální virtuálky a dáme OK.

Tím máme na Mikrotiku vyřešeno, všechny počítače musí mít DNS server uvedenou IP adresu Mikrotiku a můžeme se pustit do rozběhu v Gitlabu.

Mějme virtuálku s ubuntu-server 22.04 LTS ve které můžeme pustit tento skript:

#skript nainstaluje balíčky vim, mc, nano, htop, iotop, jnettop, apt-transport-#https, ca-certificates, curl software-properties-common, stáhne gpg klíč pro docker # repozitáře a nainstaluje nejnovější verzi docker balíčku z repozitářů docker.com.
apt update -y
apt install vim mc nano htop iotop jnettop apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
apt-cache policy docker-ce
apt-cache madison docker-ce
apt install docker-ce

Vytvořme si soubor docker-compose.yaml

version: '3.7'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'localhost'
    container_name: gitlab-ce
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://192.168.123.123'
        letsencrypt['enable'] = false
        gitlab_sshd['enable'] = true
        gitlab_sshd['listen_address'] = '[::]:2222' # Adjust the port accordingly
        logging['logrotate_frequency'] = "weekly"
        logging['logrotate_rotate'] = 52
        logging['logrotate_compress'] = "compress"
        logging['logrotate_method'] = "copytruncate"
        logging['logrotate_delaycompress'] = "delaycompress"
        nginx['listen_port'] = 443
        nginx['redirect_http_to_https'] = true
        nginx['ssl_certificate'] = "/etc/ssl/certs/gitlab/gtlb.domena.cz.crt"
        nginx['ssl_certificate_key'] = "/etc/ssl/certs/gitlab/gtlb.gtlb.domena.cz.key"
        nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2"
        nginx['logrotate_frequency'] = "weekly"
        nginx['logrotate_rotate'] = 52
        nginx['logrotate_compress'] = "compress"
        nginx['logrotate_method'] = "copytruncate"
        nginx['logrotate_delaycompress'] = "delaycompress"
        # Add any other gitlab.rb configuration options if desired
    ports:
      - '8080:80'
      - '8443:443'
      - '2222:2222'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
      - '/etc/ssl/certs/gitlab:/etc/ssl/certs/gitlab/'
    networks:
      - gitlab
  gitlab-runner:
    image: gitlab/gitlab-runner:alpine
    container_name: gitlab-runner
    restart: always
    depends_on:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - '$GITLAB_HOME/gitlab-runner:/etc/gitlab-runner'
    networks:
      - gitlab

networks:
  gitlab:
    name: gitlab-network

Dále jsem si udělal skript: certifikat.sh

mkdir -p /etc/ssl/certs/gitlab/
cd
echo "Create the root CA certificate https://www.europheus.com/2023/06/20/configure-gitlab-with-a-self-signed-ssl-certificate-and-root-ca-certificate/"
openssl genrsa -aes256 -out your_rootCA.key 4096
openssl req -x509 -new -nodes -key your_rootCA.key -sha256 -days 3650 -out your_rootCA.crt -subj '/CN=COKOLIV/C=CZ/ST=Cokoliv/L=Cokoliv/O=cokoliv'
echo "Create a gitlab SSL certificate"
openssl req -new -nodes -out gtlb.domena.cz.csr -newkey rsa:4096 -keyout gtlb.domena.cz.key -subj '/CN=Gitlab Server/C=CZ/ST=cokoliv/L=cokoliv/O=cokoliv'
echo "Next you will need to create a v3 ext file for SAN properties. This will allow you to apply multiple names such as the server name and domain name along with the static IP address of the server."
cat > gitlab.v3.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = gtlb.local
DNS.2 = gtlb.domena.cz
IP.1 = 192.168.123.123
IP.2 = 10.123.123.123
EOF

"Next create the server certificate using the v3 ext file. In this example, we set the maximum of 825 days to expiration. If you set this to a higher number, you will run into issues on the Mac operating system due to security constraints."
openssl x509 -req -in gtlb.domena.cz.csr -CA your_rootCA.crt -CAkey your_rootCA.key -CAcreateserial -out gtlb.domena.cz.crt -days 825 -sha256 -extfile gitlab.v3.ext

cp -prf ./*.key /etc/ssl/certs/gitlab/
cp -prf ./*.crt /etc/ssl/certs/gitlab/
openssl x509 -in your_rootCA.crt -out your_rootCA.pem -outform PEM

Pro spuštění Docker Gitlabu v terminálu s viditelnými logy startujícího kontejneru stačí zadat:

docker-compose up

Pro zavření stačí zmáčknout CTRL + C nebo v jiném terminálovém okně zadat:

docker-compose down

Pokud chceme aby totéž běželo při restartu virtuálky:
docker-compose up -d

Jak zjistím admin heslo v Gitlabu?

Na VMku, kde se nacházíte, zavolejte tento oneliner: (pozor, musí to být celé na 1 řádek)

docker exec -it $(docker ps |grep gitlab-ce:latest| awk '{print $1}') grep 'Password:' /etc/gitlab/initial_root_password

Vypíše:

Password: nějakéVygenerovanéRandomHeslo

První přihlášení

zadejte https://gtlb.domena.cz:8443

uživatel root

a Password z vygenerovaného skriptu

Po přihlášení:

Když kliknete vpravo dole na Configure Gitlab, můžete pokračovat v nastavování vašeho Gitlabího kontejneru a celkově si dělat dál s vaším domácím gitlabem, co jen chcete.

Další varianty rozběhu Gitlabu

Gitlab můžete rozběhat se 3 možnostmi certifikátů.

  1. Vlastní OV/EV certifikát, který se většinou platí, ale vše funguje jak má, jen je docela otrava ty certifikáty řešit 1x do roka vygenerovat certificate request, nechat si to schválit certifikační autoritou a potom přepsat nově vygenerované certifikáty a řešit následné komplikace, když něco nefunguje, jak má. Toto řešení vám může běžet např. ve firemní síti, za firewally, veřejně nepřístupné, anebo veřejně přístupné, je to nejčistší řešení.
  2. Vlastní Self-signed certifikát = tento článek. Když si nahrajete do vašeho internetového prohlížeče certifikát certifikační autority, tak vám to nebude řvát červeně v poli adresního řádku s přeškrtnutým https:// Toto řešení vám může jet doma bez veřejné IP adresy na lokální síti.
  3. Let’s encrypt certifikát typu DV. Nicméně tam musíte mít veřejně přístupný port 80 a 443 z internetu, veřejnou IP adresu a musíte hodně řešit zabezpečení vašeho Gitlabu a hodně si hlídat nejnovější verze Gitlabu, ideálně používat i 2-faktorovou autentizaci a teoreticky můžete ve firewallu povolit konkrétní IP adresy oproti serverům let’s encrypt, aby vám fungovalo ověřování a prodlužování Let’s encrypt SSL certifikátů zdarma, ale aby se k vám nezkoušeli vloupávat útočníci z opačného konce světa. A taky musíte mít nějakou zaplacenou doménu, bez které by vám Let’s encrypt nefungoval. Návod zde nebo zde.


    zdroj1 zdroj2
Avatar

By mirra

Hardwaru a počítačům se věnuji již od roku 2003. Za tu dobu jsem poskládal stovky počítačů, opravil tisíce počítačů a vyřešil nespočetně problémů, vad a chyb, se kterými se setkávali uživatelé. Od roku 2005 se zabývám servery, zejména těmi herními, v roce 2007 jsem se začal věnovat Valve Source SDK level designu, který šel od roku 2009 k ledu kvůli studiu Informatiky na univerzitě. Podílel jsem se chvíli i na provozu síťové laboratoře MENDELU, dnes spravuji v jedné osobě cca 100 serverů/diskových polí na univerzitě, řeším IT v malých a středních firmách tak, aby firmy ušetřily nemalé částky při zlepšení kvality a soustředím se na snižování nákladů na IT od licencí až po hardware, software, provádím konsolidace a audity platnosti licencí, které firmám šetří rovněž nemalé peníze. Z velkých firem jsem měl příležitost s dalšími kolegy řešit správu 8000 serverů po celé západní Evropě s vysokou mírou automatizace a poznávání nejrůznějších evropských pracovních mentalit. Dále jsem řešil hybridní cloud ve velké firmě, orientované na trhy střední a východní Evropy. Posledních několik let se věnuji Devops pro velké zákazníky v Azure cloudu, spravuji kubernetes (AKS), Gitlab.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *