Men bir marta loyihamni joylashtirishni avtomatlashtirish haqida o'yladim. gitlab.com mehribonlik bilan buning uchun barcha vositalarni taqdim etadi va, albatta, men undan foydalanishga qaror qildim, buni bilib oldim va kichik joylashtirish skriptini yozdim. Ushbu maqolada men o'z tajribamni jamiyat bilan baham ko'raman.
TP; DR
VPS-ni o'rnating: root-ni o'chiring, parol bilan tizimga kiring, dockerd-ni o'rnating, ufw-ni sozlang
Sertifikatlarga yo'llarni docker.json da ro'yxatdan o'tkazing
CI/CD sozlamalarida sertifikatlar mazmuni bilan gitlab o'zgaruvchilarida ro'yxatdan o'ting. Joylashtirish uchun .gitlab-ci.yml skriptini yozing.
Men Debian taqsimotidagi barcha misollarni ko'rsataman.
Dastlabki VPS sozlamalari
Shunday qilib, siz misol sotib oldingiz DO, qilishingiz kerak bo'lgan birinchi narsa - serveringizni tajovuzkor tashqi dunyodan himoya qilishdir. Men hech narsani isbotlamayman yoki tasdiqlamayman, shunchaki virtual serverimning /var/log/messages jurnalini ko'rsataman:
Ekran rasmlari
Birinchidan, ufw xavfsizlik devorini o'rnating:
apt-get update && apt-get install ufw
Standart siyosatni yoqaylik: barcha kiruvchi ulanishlarni bloklang, barcha chiquvchi ulanishlarga ruxsat bering:
Muhim: ssh orqali ulanishga ruxsat berishni unutmang:
ufw allow OpenSSH
Umumiy sintaksis quyidagicha: Port orqali ulanishga ruxsat berish: ufw ruxsat 12345, bu erda 12345 port raqami yoki xizmat nomi. Rad etish: ufw rad etish 12345
Xavfsizlik devorini yoqing:
ufw enable
Biz sessiyadan chiqamiz va ssh orqali yana tizimga kiramiz.
Foydalanuvchi qo'shing, unga parol tayinlang va uni sudo guruhiga qo'shing.
Serverning IP manzili sizniki bo'lishi kerak. Endi avval yaratgan foydalanuvchi orqali tizimga kirishga harakat qiling; endi parol kiritishingiz shart emas. Keyin, konfiguratsiya sozlamalarida quyidagilarni o'zgartiring:
sudo nano /etc/ssh/sshd_config
parolga kirishni o'chirib qo'ying:
PasswordAuthentication no
Sshd demonini qayta ishga tushiring:
sudo systemctl reload sshd
Endi siz yoki boshqa birov root foydalanuvchi sifatida tizimga kirishga harakat qilsangiz, u ishlamaydi.
Keyin, dockerd-ni o'rnating, men bu erda jarayonni tasvirlamayman, chunki hamma narsani allaqachon o'zgartirish mumkin, rasmiy veb-saytga havolaga o'ting va virtual mashinangizga dockerni o'rnatish bosqichlarini bajaring: https://docs.docker.com/install/linux/docker-ce/debian/
Sertifikatlarni yaratish
Docker demonini masofadan boshqarish uchun shifrlangan TLS ulanishi talab qilinadi. Buni amalga oshirish uchun sizda sertifikat va kalit bo'lishi kerak, ular yaratilishi va masofaviy kompyuteringizga o'tkazilishi kerak. Rasmiy docker veb-saytidagi ko'rsatmalarda keltirilgan amallarni bajaring: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Server uchun yaratilgan barcha *.pem fayllari, ya'ni ca.pem, server.pem, key.pem serverdagi /etc/docker katalogiga joylashtirilishi kerak.
Dockerd o'rnatilmoqda
Docker demonini ishga tushirish skriptida biz -H df:// variantini olib tashlaymiz, bu parametr qaysi xostda docker demonini boshqarish mumkinligini aniqlaydi.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Keyinchalik, sozlamalar faylini yaratishingiz kerak, agar u allaqachon mavjud bo'lmasa va variantlarni belgilang:
Agar hamma narsa "yashil" bo'lsa, biz serverda dockerni muvaffaqiyatli sozladik deb hisoblaymiz.
Gitlabda uzluksiz yetkazib berishni sozlash
Gitalaba ishchisi masofaviy Docker xostida buyruqlarni bajara olishi uchun sertifikatlar va Dockerd bilan shifrlangan ulanish kalitini qanday va qayerda saqlash kerakligini hal qilish kerak. Men bu muammoni gitlbab sozlamalaridagi o'zgaruvchilarga oddiygina qo'shish orqali hal qildim:
Spoiler sarlavhasi
Faqat sertifikatlar mazmunini va kalitni mushuk orqali chiqaring: cat ca.pem. O'zgaruvchi qiymatlariga nusxa ko'chiring va joylashtiring.
Keling, GitLab orqali joylashtirish uchun skript yozaylik. Docker-in-docker (dind) tasviridan foydalaniladi.
Asosiy muammo sertifikatlar mazmunini gitlab CI/CD o'zgaruvchilaridan oddiy shaklda "tortib olish" edi. Masofaviy hostga ulanish nima uchun ishlamayotganini tushunolmadim. Xostda men sudo journalctl -u docker jurnaliga qaradim, qo'l siqish paytida xatolik yuz berdi. Men odatda o'zgaruvchilarda saqlanadigan narsalarni ko'rib chiqishga qaror qildim; Buning uchun siz shunday ko'rinishga ega bo'lishingiz mumkin: cat -A $DOCKER_CERT_PATH/key.pem. Men tr -d 'r' vagon belgisini olib tashlashni qo'shish orqali xatoni bartaraf etdim.
Keyinchalik, siz o'zingizning xohishingiz bilan skriptga nashrdan keyingi vazifalarni qo'shishingiz mumkin. Ishchi versiyani mening omborimda ko'rishingiz mumkin https://gitlab.com/isqad/gitlab-ci-cd