مون هڪ دفعو منهنجي منصوبي جي ترتيب کي خودڪار ڪرڻ بابت سوچيو. gitlab.com مھرباني ڪري ھن لاءِ سڀ اوزار مهيا ڪري ٿو، ۽ يقينن مون ان کي استعمال ڪرڻ جو فيصلو ڪيو آھي ان کي استعمال ڪندي ۽ ھڪڙي ننڍڙي ترتيب واري اسڪرپٽ لکڻ سان. هن آرٽيڪل ۾، مان پنهنجو تجربو ڪميونٽي سان حصيداري ڪريان ٿو.
TL، ڊاڪٽر
VPS سيٽ اپ ڪريو: روٽ کي غير فعال ڪريو، پاسورڊ لاگ ان، ڊاڪڊر انسٽال ڪريو، ufw ترتيب ڏيو
سرٽيفڪيٽ جي مواد سان گڏ CI / CD سيٽنگون ۾ gitlab variables ۾ رجسٽر ڪريو. ترتيب ڏيڻ لاءِ .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
ھاڻي جيڪڏھن توھان يا ڪو ٻيو روٽ طور لاگ ان ٿيڻ جي ڪوشش ڪندو، اھو ناڪام ٿيندو.
اڳيون، اسان dockerd انسٽال ڪريون ٿا، مان هتي پروسيس کي بيان نه ڪندس، ڇو ته هر شي اڳ ۾ ئي تبديل ٿي سگهي ٿي، سرڪاري ويب سائيٽ جي لنڪ جي پيروي ڪريو ۽ توهان جي ورچوئل مشين تي ڊاکر نصب ڪرڻ جي مرحلن ذريعي وڃو: https://docs.docker.com/install/linux/docker-ce/debian/
سرٽيفڪيٽ جي پيدائش
ڊاکر ڊيمن کي ريموٽ ڪنٽرول ڪرڻ لاءِ، هڪ اينڪريٽ ٿيل TLS ڪنيڪشن گهربل آهي. هن کي ڪرڻ لاءِ، توهان وٽ هڪ سرٽيفڪيٽ ۽ هڪ چيڪ هجڻ جي ضرورت آهي جيڪا توهان کي ٺاهڻ ۽ پنهنجي ريموٽ مشين ڏانهن منتقل ڪرڻ جي ضرورت آهي. سرڪاري ڊاکر ويب سائيٽ تي ڏنل هدايتن ۾ ڏنل قدمن تي عمل ڪريو: 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 ڊاريڪٽري ۾ رکڻ گهرجي.
ڊاکر سيٽ اپ
ڊاڪر ڊيمن جي شروعاتي اسڪرپٽ ۾، -H df: // آپشن کي هٽايو، هي اختيار ٻڌائي ٿو ته ڊاکر ڊيمون کي ڪهڙي ميزبان تي ڪنٽرول ڪري سگهجي ٿو.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
اڳيون، سيٽنگون فائل ٺاھيو جيڪڏھن اھو اڳ ۾ ئي موجود نه آھي ۽ اختيارن کي سيٽ ڪريو:
#!/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
بنيادي مسئلو "ٻاهرڻ" هو سرٽيفڪيٽ جي مواد کي عام شڪل ۾ گٽلاب CI / CD متغيرن مان. مان سمجهي نه سگهيو آهيان ته ريموٽ ميزبان سان ڪنيڪشن ڇو ڪم نه ڪيو. مون ڏٺو هوسٽ تي sudo journalctl -u docker لاگ، اتي هڪ غلطي آهي هٿ ملائڻ سان. مون اهو ڏسڻ جو فيصلو ڪيو ته عام طور تي متغيرن ۾ ڇا ذخيرو ٿيل آهي، ان لاءِ توهان ڏسي سگهو ٿا cat -A $DOCKER_CERT_PATH/key.pem. ڪيريٽ ڪردار tr -d 'r' کي هٽائڻ شامل ڪندي غلطي کي ختم ڪيو.