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ů.
- 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í.
- 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.
- 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