Kausa naghunahuna ko bahin sa pag-automate sa pag-deploy sa akong proyekto. Ang gitlab.com maluloton nga naghatag sa tanan nga mga himan alang niini, ug siyempre nakahukom ko nga gamiton kini pinaagi sa paghunahuna niini ug pagsulat og gamay nga script sa pag-deploy. Niini nga artikulo, akong gipaambit ang akong kasinatian sa komunidad.
TL; DR
I-set up ang VPS: i-disable ang gamut, password login, i-install ang dockerd, i-configure ang ufw
Ibutang ang mga agianan sa mga sertipiko sa docker.json
Pagrehistro sa gitlab nga mga variable sa mga setting sa CI / CD nga adunay sulud sa mga sertipiko. Pagsulat og .gitlab-ci.yml nga script para sa deployment.
Ipakita nako ang tanan nga mga pananglitan sa pag-apod-apod sa Debian.
Inisyal nga pag-setup sa VPS
Dinhi nagpalit ka usa ka pananglitan pananglitan sa DO, ang unang butang nga buhaton mao ang pagpanalipod sa imong server gikan sa agresibo sa gawas sa kalibutan. Dili ko pamatud-an o ipahayag ang bisan unsang butang, ipakita ko lang ang /var/log/messages log sa akong virtual server:
Screenshot
Una, i-install ang ufw firewall:
apt-get update && apt-get install ufw
I-enable ang default policy: babagan ang tanang umaabot nga koneksyon, tugoti ang tanang outgoing connections:
Importante: ayaw kalimot sa pagtugot sa koneksyon pinaagi sa ssh:
ufw allow OpenSSH
Ang kinatibuk-ang syntax mao ang: Tugoti ang koneksyon sa pantalan: ufw gitugotan ang 12345, diin ang 12345 mao ang numero sa pantalan o ngalan sa serbisyo. Deny: ufw deny 12345
I-on ang firewall:
ufw enable
Mogawas kami sa sesyon ug mag-log in pag-usab pinaagi sa ssh.
Pagdugang og user, paghatag kaniya og password, ug idugang siya sa sudo nga grupo.
Ang ip sa server kinahanglang imoha. Karon sulayi ang pag-log in sa ilawom sa user nga gihimo sa sayo pa, dili na nimo kinahanglan nga magsulod ug password. Sunod, sa mga setting sa pag-configure, usba ang mosunod:
sudo nano /etc/ssh/sshd_config
disable password login:
PasswordAuthentication no
I-restart ang sshd daemon:
sudo systemctl reload sshd
Karon kung ikaw o ang uban mosulay sa pag-log in ingon nga gamut, kini mapakyas.
Sunod, gi-install namon ang dockerd, dili nako ihulagway ang proseso dinhi, tungod kay ang tanan mahimo nang mabag-o, sunda ang link sa opisyal nga website ug pag-agi sa mga lakang sa pag-install sa docker sa imong virtual machine: https://docs.docker.com/install/linux/docker-ce/debian/
Pagmugna og Sertipiko
Aron makontrol ang docker daemon sa layo, gikinahanglan ang usa ka naka-encrypt nga koneksyon sa TLS. Aron mahimo kini, kinahanglan nimo nga adunay usa ka sertipiko ug usa ka yawe nga kinahanglan nimo nga makamugna ug ibalhin sa imong hilit nga makina. Sunda ang mga lakang nga gihatag sa mga instruksyon sa opisyal nga docker website: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Ang tanang namugna nga *.pem files para sa server, nga mao ang ca.pem, server.pem, key.pem, kinahanglang ibutang sa /etc/docker directory sa server.
setup sa docker
Sa docker daemon startup script, kuhaa ang -H df:// nga kapilian, kini nga opsyon nagsulti kung asa nga host ang docker daemon mahimong kontrolado.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Sunod, paghimo og setting file kung wala pa kini ug itakda ang mga kapilian:
Kung berde ang tanan, nan giisip namon nga malampuson namon nga na-configure ang docker sa server.
Pag-set up sa padayon nga pagpadala sa gitlab
Aron ang gitalab nga trabahante makahimo sa pagpatuman sa mga sugo sa usa ka hilit nga docker host, kinahanglan nimo nga magdesisyon kung giunsa ug asa ibutang ang mga sertipiko ug usa ka yawe alang sa usa ka naka-encrypt nga koneksyon sa dockerd. Gisulbad nako kini nga problema pinaagi lamang sa pagsulat sa mga variable sa gitlbab settings:
titulo sa spoiler
Ipagawas lang ang sulod sa mga sertipiko ug yawe pinaagi sa iring: cat ca.pem. Kopyaha ug idikit sa mga variable value.
Magsulat kita og script para sa deployment pinaagi sa gitlab. Ang docker-in-docker (dind) nga imahe gamiton.
Ang nag-unang problema mao ang "pagbira" sa sulod sa mga sertipiko sa normal nga porma gikan sa gitlab CI / CD variables. Dili nako mahibal-an kung ngano nga ang koneksyon sa hilit nga host wala molihok. Gitan-aw nako ang sudo journalctl -u docker log sa host, adunay sayup sa paglamano. Nakahukom ko nga tan-awon kung unsa ang kasagarang gitipigan sa mga variable, tungod niini imong makita ang cat -A $DOCKER_CERT_PATH/key.pem. Nabuntog ang sayup pinaagi sa pagdugang sa pagtangtang sa karakter nga caret tr -d 'r'.
Dugang pa, mahimo nimong idugang ang mga buluhaton sa post-release sa script sa imong pagbuot. Mahimo nimong susihon ang nagtrabaho nga bersyon sa akong repository https://gitlab.com/isqad/gitlab-ci-cd