Ik heb er ooit aan gedacht om de implementatie van mijn project te automatiseren. gitlab.com is zo vriendelijk om alle tools hiervoor aan te bieden, en natuurlijk besloot ik hiervan te profiteren, het uit te zoeken en een klein implementatiescript te schrijven. In dit artikel deel ik mijn ervaringen met de community.
Registreer in gitlab-variabelen in de CI/CD-instellingen met de inhoud van de certificaten. Schrijf een script .gitlab-ci.yml voor implementatie.
Ik zal alle voorbeelden van de Debian-distributie laten zien.
Eerste VPS-installatie
U hebt dus bijvoorbeeld een exemplaar gekocht bij DO, het eerste wat u hoeft te doen is uw server beschermen tegen de agressieve buitenwereld. Ik zal niets bewijzen of beweren, ik laat alleen de log /var/log/messages van mijn virtuele server zien:
Screenshot
Installeer eerst de ufw-firewall:
apt-get update && apt-get install ufw
Laten we het standaardbeleid inschakelen: blokkeer alle inkomende verbindingen, sta alle uitgaande verbindingen toe:
Belangrijk: vergeet niet de verbinding via ssh toe te staan:
ufw allow OpenSSH
De algemene syntaxis is als volgt: Een verbinding per poort toestaan: ufw allow 12345, waarbij 12345 het poortnummer of de naam van de service is. Weigeren: ufw ontkennen 12345
Schakel de firewall in:
ufw enable
We verlaten de sessie en loggen opnieuw in via ssh.
Voeg een gebruiker toe, wijs hem een ββwachtwoord toe en voeg hem toe aan de sudo-groep.
Het server-IP moet van jou zijn. Probeer nu in te loggen met de gebruiker die u eerder heeft aangemaakt; u hoeft geen wachtwoord meer in te voeren. Wijzig vervolgens in de configuratie-instellingen het volgende:
sudo nano /etc/ssh/sshd_config
wachtwoordaanmelding uitschakelen:
PasswordAuthentication no
Start de sshd-daemon opnieuw:
sudo systemctl reload sshd
Als u of iemand anders nu probeert in te loggen als rootgebruiker, zal dit niet werken.
Installeer vervolgens dockerd, ik zal het proces hier niet beschrijven, aangezien alles al kan worden gewijzigd, volg de link naar de officiΓ«le website en doorloop de stappen van het installeren van docker op uw virtuele machine: https://docs.docker.com/install/linux/docker-ce/debian/
Certificaten genereren
Om de docker-daemon op afstand te besturen, is een gecodeerde TLS-verbinding vereist. Om dit te doen, heeft u een certificaat en een sleutel nodig, die moeten worden gegenereerd en naar uw externe machine moeten worden overgebracht. Volg de stappen in de instructies op de officiΓ«le docker-website: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Alle gegenereerde *.pem-bestanden voor de server, namelijk ca.pem, server.pem, key.pem, moeten in de directory /etc/docker op de server worden geplaatst.
Dockerd instellen
In het docker daemon-startscript verwijderen we de -H df:// optie, deze optie bepaalt op welke host de docker daemon kan worden bestuurd.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Vervolgens moet u een instellingenbestand maken, als dit nog niet bestaat, en de opties opgeven:
Als alles βgroenβ is, zijn we van mening dat we Docker met succes op de server hebben geconfigureerd.
Continue levering instellen op gitlab
Om ervoor te zorgen dat de Gitalaba-werker opdrachten kan uitvoeren op een externe Docker-host, is het noodzakelijk om te beslissen hoe en waar de certificaten en de sleutel voor een gecodeerde verbinding met Dockerd moeten worden opgeslagen. Ik heb dit probleem opgelost door simpelweg het volgende toe te voegen aan de variabelen in de gitlbab-instellingen:
Spoilertitel
Voer gewoon de inhoud van de certificaten en sleutel uit via cat: cat ca.pem. Kopieer en plak in de variabelewaarden.
Laten we een script schrijven voor implementatie via GitLab. De docker-in-docker (dind) afbeelding wordt gebruikt.
Het grootste probleem was om de inhoud van de certificaten in een normale vorm uit de gitlab CI/CD-variabelen te βhalenβ. Ik kon er niet achter komen waarom de verbinding met de externe host niet werkte. Op de host keek ik naar het log sudo journalctl -u docker, er was een fout tijdens de handshake. Ik besloot te kijken naar wat er doorgaans in variabelen wordt opgeslagen; om dit te doen, kun je er als volgt uitzien: cat -A $DOCKER_CERT_PATH/key.pem. Ik heb de fout overwonnen door de verwijdering van het wagenteken tr -d 'r' toe te voegen.
Vervolgens kunt u naar eigen goeddunken taken na de release aan het script toevoegen. Je kunt de werkende versie bekijken in mijn repository https://gitlab.com/isqad/gitlab-ci-cd