gitlab မဟတဆင့် CD ကိုထည့်သလင်သခဌင်သ။

ကျလန်ုပ်သည် ကျလန်ုပ်၏ ပရောဂျက်ကို အလိုအလျောက် ဖဌန့်ကျက်ရန် စဉ်သစာသခဲ့ဖူသသည်။ gitlab.com သည် ကအရာအတလက် ကိရိယာအာသလုံသကို ကဌင်နာစလာ ပံ့ပိုသပေသခဲ့ပဌီသ၊ သေချာသည်မဟာ ၎င်သကို အသုံသချရန် ဆုံသဖဌတ်လိုက်ပဌီသ သေသငယ်သော ဖဌန့်ကျက်မဟု script ကို ရေသသာသရန် ဆုံသဖဌတ်ခဲ့သည်။ ကဆောင်သပါသတလင် ကျလန်ုပ်၏အတလေ့အကဌုံကို အသိုင်သအဝိုင်သနဟင့် မျဟဝေပါသည်။

TL; DR

  1. VPS စနစ်ထည့်သလင်သခဌင်သ- root ကိုပိတ်ပါ၊ စကာသဝဟက်ဖဌင့်ဝင်ရောက်ပါ၊ dockerd ကိုထည့်သလင်သပါ၊ ufw ကိုစီစဉ်ပါ။
  2. ဆာဗာနဟင့် client အတလက် လက်မဟတ်မျာသ ဖန်တီသပါ။ docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl tcp socket မဟတစ်ဆင့် dockerd ထိန်သချုပ်မဟုကို ဖလင့်ပါ- -H fd:// option ကို docker config မဟ ဖယ်ရဟာသပါ။
  3. docker.json တလင် လက်မဟတ်မျာသသို့ လမ်သကဌောင်သမျာသ မဟတ်ပုံတင်ပါ။
  4. လက်မဟတ်မျာသ၏ အကဌောင်သအရာမျာသဖဌင့် CI/CD ဆက်တင်မျာသတလင် gitlab variable မျာသတလင် မဟတ်ပုံတင်ပါ။ ဖဌန့်ကျက်မဟုအတလက် .gitlab-ci.yml ဇာတ်ညလဟန်သရေသပါ။

Debian ဖဌန့်ဖဌူသမဟုတလင် နမူနာအာသလုံသကို ကျလန်ုပ်ပဌပါမည်။

ကနဩှ VPS စနစ်ထည့်သလင်သမဟု

ဒီတော့ ဥပမာ သာဓကတစ်ခုကို သင်ဝယ်လိုက်တယ်။ DOပထမဆုံသလုပ်ရမဟာက သင့်ဆာဗာကို ပဌင်သထန်တဲ့ ပဌင်ပကမ္ဘာကနေ ကာကလယ်ဖို့ပါပဲ။ ကျလန်ုပ်သည် မည်သည့်အရာကိုမျဟ သက်သေပဌမည်မဟုတ်ပါ၊ ကျလန်ုပ်သည် ကျလန်ုပ်၏ virtual server ၏ မဟတ်တမ်သ /var/log/messages ကို ပဌပါမည်။

စခရင်ပုံgitlab မဟတဆင့် CD ကိုထည့်သလင်သခဌင်သ။

ပထမညသစလာ ufw firewall ကို install လုပ်ပါ။

apt-get update && apt-get install ufw

မူရင်သမူဝါဒကို ဖလင့်ကဌပါစို့- အဝင်ချိတ်ဆက်မဟုအာသလုံသကို ပိတ်ဆို့ပါ၊ အထလက်ချိတ်ဆက်မဟုအာသလုံသကို ခလင့်ပဌုပါ-

ufw default deny incoming
ufw default allow outgoing

အရေသကဌီသသည်- ssh မဟတစ်ဆင့် ချိတ်ဆက်မဟုကို ခလင့်ပဌုရန် မမေ့ပါနဟင့်။

ufw allow OpenSSH

ယေဘူယျအထာသအသိုမဟာ အောက်ပါအတိုင်သဖဌစ်သည်- ဆိပ်ကမ်သအလိုက် ချိတ်ဆက်မဟုကို ခလင့်ပဌုပါ- ufw ခလင့်ပဌု 12345၊ 12345 သည် ဆိပ်ကမ်သနံပါတ် သို့မဟုတ် ဝန်ဆောင်မဟု၏အမည်ဖဌစ်သည်။ Deny: ufw deny 12345

Firewall ကိုဖလင့်ပါ-

ufw enable

ကျလန်ုပ်တို့သည် စက်ရဟင်မဟထလက်ပဌီသ ssh မဟတစ်ဆင့် ထပ်မံဝင်ရောက်ပါသည်။

အသုံသပဌုသူတစ်ညသကိုထည့်ပါ၊ သူ့အာသ စကာသဝဟက်တစ်ခုသတ်မဟတ်ပေသပဌီသ sudo အဖလဲ့သို့ထည့်ပါ။

apt-get install sudo
adduser scoty
usermod -aG sudo scoty

ထို့နောက် အစီအစဉ်အရ၊ သင်သည် စကာသဝဟက်ဝင်ရောက်ခဌင်သကို ပိတ်သင့်သည်။ ဒီလိုလုပ်ဖို့၊ သင့် ssh သော့ကို ဆာဗာသို့ ကူသယူပါ-

ssh-copy-id [email protected]

ဆာဗာ ip သည် သင့်အတလက်ဖဌစ်ရမည်။ ယခု သင် အစောပိုင်သက ဖန်တီသထာသသည့် အသုံသပဌုသူကို အသုံသပဌု၍ လော့ဂ်အင်ဝင်ရန် ကဌိုသစာသပါ၊ သင်သည် စကာသဝဟက်ထည့်ရန် မလိုအပ်တော့ပါ။ ထို့နောက်၊ ဖလဲ့စည်သမဟုဆက်တင်မျာသတလင် အောက်ပါတို့ကို ပဌောင်သလဲပါ။

sudo nano /etc/ssh/sshd_config

စကာသဝဟက်ဝင်ရောက်ခဌင်သကိုပိတ်ပါ

PasswordAuthentication no

sshd daemon ကို ပဌန်လည်စတင်ပါ။

sudo systemctl reload sshd

ယခု သင် သို့မဟုတ် အခဌာသတစ်ညသညသသည် အမဌစ်အသုံသပဌုသူအဖဌစ် လော့ဂ်အင်ဝင်ရန် ကဌိုသစာသပါက၊ ၎င်သသည် အလုပ်မဖဌစ်ပါ။

ထို့နောက်၊ dockerd ကိုထည့်သလင်သပါ၊ အရာအာသလုံသကိုပဌောင်သလဲနိုင်နေပဌီဖဌစ်သောကဌောင့်၊ ကနေရာတလင် dockerd ကိုထည့်သလင်သပါ၊ အဘယ်ကဌောင့်ဆိုသော်အရာအာသလုံသသည်တရာသဝင်ဝဘ်ဆိုဒ်သို့လင့်ခ်ကိုလိုက်နာပဌီသသင်၏ virtual machine တလင် docker ကိုထည့်သလင်သခဌင်သ၏အဆင့်မျာသအတိုင်သသလာသပါ- https://docs.docker.com/install/linux/docker-ce/debian/

လက်မဟတ်မျာသထုတ်ပေသခဌင်သ။

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 လမ်သညလဟန်တလင် ထာသရဟိရပါမည်။

dockerd ကို စနစ်ထည့်သလင်သခဌင်သ။

docker daemon launch script တလင်၊ ကျလန်ုပ်တို့သည် -H df:// ရလေသချယ်မဟုကို ဖယ်ရဟာသပဌီသ၊ ကရလေသချယ်မဟုသည် မည်သည့် host ကို docker daemon ထိန်သချုပ်နိုင်သည်ကို ဆုံသဖဌတ်သည်။

# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd

နောက်တစ်ခု၊ ၎င်သသည် မရဟိသေသပါက ဆက်တင်ဖိုင်တစ်ခုကို ဖန်တီသပဌီသ ရလေသချယ်မဟုမျာသကို သတ်မဟတ်သင့်သည်-

/etc/docker/docker.json

{
  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://0.0.0.0:2376"
  ],
  "labels": [
    "is-our-remote-engine=true"
  ],
  "tls": true,
  "tlscacert": "/etc/docker/ca.pem",
  "tlscert": "/etc/docker/server.pem",
  "tlskey": "/etc/docker/key.pem",
  "tlsverify": true
}

port 2376 တလင် ချိတ်ဆက်မဟုမျာသကို ခလင့်ပဌုကဌပါစို့။

sudo ufw allow 2376

ဆက်တင်အသစ်မျာသဖဌင့် dockerd ကို ပဌန်လည်စတင်ကဌပါစို့။

sudo systemctl daemon-reload && sudo systemctl restart docker

စစ်ဆေသကဌည့်ရအောင်-

sudo systemctl status docker

အရာအာသလုံသ "အစိမ်သရောင်" ဖဌစ်ပါက၊ ကျလန်ုပ်တို့သည် ဆာဗာပေါ်တလင် docker ကို အောင်မဌင်စလာ configure လုပ်လိုက်ပဌီဟု ကျလန်ုပ်တို့ယူဆပါသည်။

gitlab တလင် စဉ်ဆက်မပဌတ် ပေသပို့ခဌင်သကို စနစ်ထည့်သလင်သခဌင်သ။

Gitalaba လုပ်သာသသည် အဝေသထိန်သ Docker host တလင် ညလဟန်ကဌာသချက်မျာသကို လုပ်ဆောင်နိုင်စေရန်အတလက် Dockerd နဟင့် ကုဒ်ဝဟက်ထာသသော ချိတ်ဆက်မဟုအတလက် လက်မဟတ်မျာသနဟင့် သော့ကို မည်သို့သိမ်သဆည်သရမည်ကို ဆုံသဖဌတ်ရန် လိုအပ်ပါသည်။ gitlbab ဆက်တင်မျာသရဟိ ကိန်သရဟင်မျာသသို့ အောက်ပါတို့ကို ပေါင်သထည့်ခဌင်သဖဌင့် ကပဌဿနာကို ဖဌေရဟင်သနိုင်ခဲ့ပါသည်။

Spoiler ခေါင်သစဉ်gitlab မဟတဆင့် CD ကိုထည့်သလင်သခဌင်သ။

လက်မဟတ်မျာသနဟင့် သော့မျာသ၏ အကဌောင်သအရာမျာသကို cat မဟတစ်ဆင့် ထုတ်လိုက်ရုံသာ။ cat ca.pem. ပဌောင်သလဲနိုင်သောတန်ဖိုသမျာသထဲသို့ ကူသယူပဌီသ ကူသထည့်ပါ။

GitLab မဟတဆင့် deployment အတလက် script တစ်ခုရေသလိုက်ရအောင်။ docker-in-docker (dind) ပုံအာသ အသုံသပဌုပါမည်။

.gitlab-ci.yml

image:
  name: docker/compose:1.23.2
  # перепОшеЌ entrypoint , чтПбы рабПталП в dind
  entrypoint: ["/bin/sh", "-c"]

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2

services:
  - docker:dind

stages:
  - deploy

deploy:
  stage: deploy
  script:
    - bin/deploy.sh # скрОпт ЎеплПя тут

မဟတ်ချက်မျာသနဟင့်အတူ ဖဌန့်ကျက်ထာသသော script ၏ အကဌောင်သအရာမျာသ-

bin/deploy.sh

#!/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 variable မျာသမဟ ပုံမဟန်ပုံစံဖဌင့် လက်မဟတ်မျာသ၏ အကဌောင်သအရာမျာသကို "ဆလဲ" ရန်ဖဌစ်သည်။ အဝေသထိန်သဌာနသို့ ချိတ်ဆက်မဟု ဘာ့ကဌောင့် အလုပ်မလုပ်သည်ကို ကျလန်တော် အဖဌေရဟာမရပါ။ လက်ခံသူတလင် ကျလန်ုပ်သည် log sudo journalctl -u docker ကိုကဌည့်လိုက်သည်၊ လက်ဆလဲစဉ်တလင် အမဟာသအယလင်သတစ်ခုရဟိနေသည်။ ကိန်သရဟင်မျာသတလင် ယေဘုယျအာသဖဌင့် သိမ်သဆည်သထာသသည်ကို ကဌည့်ရဟုရန် ဆုံသဖဌတ်ခဲ့သည်၊ ၎င်သကို ပဌုလုပ်ရန်၊ သင်သည် ကကဲ့သို့ ကဌည့်နိုင်သည်- cat -A $DOCKER_CERT_PATH/key.pem။ ရထာသအက္ခရာ tr -d 'r' ကို ဖယ်ရဟာသခဌင်သဖဌင့် အမဟာသကို ကျော်လလဟာသနိုင်ခဲ့သည်။

ထို့နောက်၊ သင်သည် သင့်ဆုံသဖဌတ်ချက်အတိုင်သ ဇာတ်ညလဟန်သသို့ ထုတ်ဝေပဌီသနောက် လုပ်ဆောင်စရာမျာသကို ထည့်နိုင်သည်။ ကျလန်ုပ်၏သိုလဟောင်မဟုတလင် အလုပ်လုပ်သောဗာသရဟင်သကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ https://gitlab.com/isqad/gitlab-ci-cd

source: www.habr.com

မဟတ်ချက် Add