فكرت ذات مرة في أتمتة نشر مشروعي. يقدم موقع gitlab.com جميع الأدوات اللازمة لذلك ، وبالطبع قررت استخدامه من خلال اكتشافه وكتابة نص نشر صغير. في هذه المقالة ، أشارك تجربتي مع المجتمع.
TL؛ DR
قم بإعداد VPS: تعطيل الجذر ، تسجيل الدخول بكلمة المرور ، تثبيت dockerd ، تكوين ufw
سجل في متغيرات gitlab في إعدادات CI / CD مع محتويات الشهادات. اكتب برنامج نصي .gitlab-ci.yml للنشر.
سأعرض جميع الأمثلة على توزيعة دبيان.
الإعداد الأولي VPS
هنا اشتريت على سبيل المثال على سبيل المثال DO، أول شيء تفعله هو حماية خادمك من العالم الخارجي العدواني. لن أقوم بإثبات أو تأكيد أي شيء ، سأقوم فقط بعرض سجل / var / log / messages لخادمي الظاهري:
لقطة
أولاً ، قم بتثبيت جدار الحماية ufw:
apt-get update && apt-get install ufw
قم بتمكين السياسة الافتراضية: حظر جميع الاتصالات الواردة ، والسماح لجميع الاتصالات الصادرة:
يجب أن يكون عنوان IP الخاص بالخادم ملكًا لك. حاول الآن تسجيل الدخول باسم المستخدم الذي تم إنشاؤه مسبقًا ، فلن تحتاج إلى إدخال كلمة مرور بعد الآن. بعد ذلك ، في إعدادات التكوين ، قم بتغيير ما يلي:
sudo nano /etc/ssh/sshd_config
تعطيل تسجيل الدخول بكلمة المرور:
PasswordAuthentication no
أعد تشغيل البرنامج الخفي لـ sshd:
sudo systemctl reload sshd
الآن إذا حاولت أنت أو أي شخص آخر تسجيل الدخول كجذر ، فسوف يفشل.
للتحكم في برنامج Docker daemon عن بُعد ، يلزم وجود اتصال TLS مشفر. للقيام بذلك ، يجب أن يكون لديك شهادة ومفتاح تحتاجهما لإنشاء ونقل إلى جهازك البعيد. اتبع الخطوات الواردة في التعليمات الموجودة على موقع Docker الرسمي: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl يجب وضع جميع ملفات * .pem التي تم إنشاؤها للخادم ، مثل ca.pem ، server.pem ، key.pem ، في دليل / etc / docker على الخادم.
إعداد عامل ميناء
في البرنامج النصي لبدء تشغيل docker daemon ، قم بإزالة الخيار -H df: // ، حيث يخبر هذا الخيار المضيف الذي يمكن التحكم فيه في برنامج Docker daemon.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
بعد ذلك ، قم بإنشاء ملف إعدادات إذا لم يكن موجودًا بالفعل وقم بتعيين الخيارات:
إذا كان كل شيء أخضر ، فإننا نعتبر أننا قد نجحنا في تكوين عامل الإرساء على الخادم.
إعداد التسليم المستمر على gitlab
لكي يتمكن عامل gitalab من تنفيذ الأوامر على مضيف عامل الإرساء البعيد ، عليك أن تقرر كيف وأين يتم تخزين الشهادات ومفتاح للاتصال المشفر بـ dockerd. لقد قمت بحل هذه المشكلة ببساطة عن طريق الكتابة إلى المتغيرات في إعدادات gitlbab:
عنوان المفسد
ما عليك سوى إخراج محتويات الشهادات والمفتاح عبر cat: cat ca.pem. انسخ والصق في قيم متغيرة.
لنكتب نصًا للنشر من خلال gitlab. سيتم استخدام صورة docker-in-docker (dind).
#!/usr/bin/env sh
# Падаем сразу, если возникли какие-то ошибки
set -e
# Выводим, то , что делаем
set -v
#
DOCKER_COMPOSE_FILE=docker-compose.yml
# Куда деплоим
DEPLOY_HOST=185.241.52.28
# Путь для сертификатов клиента, то есть в нашем случае - gitlab-воркера
DOCKER_CERT_PATH=/root/.docker
# проверим, что в контейнере все имеется
docker info
docker-compose version
# создаем путь (сейчас работаем в клиенте - воркере gitlab'а)
mkdir $DOCKER_CERT_PATH
# изымаем содержимое переменных, при этом удаляем лишние символы добавленные при сохранении переменных.
echo "$CA_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/ca.pem
echo "$CERT_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/cert.pem
echo "$KEY_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/key.pem
# на всякий случай даем только читать
chmod 400 $DOCKER_CERT_PATH/ca.pem
chmod 400 $DOCKER_CERT_PATH/cert.pem
chmod 400 $DOCKER_CERT_PATH/key.pem
# далее начинаем уже работать с удаленным docker-демоном. Собственно, сам деплой
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://$DEPLOY_HOST:2376
# проверим, что коннектится все успешно
docker-compose
-f $DOCKER_COMPOSE_FILE
ps
# логинимся в docker-регистри, тут можете указать свой "местный" регистри
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
docker-compose
-f $DOCKER_COMPOSE_FILE
pull app
# поднимаем приложение
docker-compose
-f $DOCKER_COMPOSE_FILE
up -d app
كانت المشكلة الرئيسية هي "سحب" محتويات الشهادات بالشكل العادي من متغيرات gitlab CI / CD. لم أتمكن من معرفة سبب عدم عمل الاتصال بالمضيف البعيد. نظرت إلى sudo journalctl -u docker log على المضيف ، هناك خطأ في المصافحة. قررت أن أنظر إلى ما يتم تخزينه بشكل عام في المتغيرات ، لذلك يمكنك رؤية cat -A $ DOCKER_CERT_PATH / key.pem. تغلب على الخطأ بإضافة حذف حرف الإقحام tr -d 'r'.
علاوة على ذلك ، يمكنك إضافة مهام ما بعد الإصدار إلى البرنامج النصي وفقًا لتقديرك. يمكنك التحقق من نسخة العمل في مستودعي https://gitlab.com/isqad/gitlab-ci-cd