پدې مقاله کې ، زه به د Plesk کنټرول پینل او ګیتوب عملونو په کارولو سره د CI / CD تنظیم کولو تجربه شریک کړم. نن ورځ موږ به زده کړو چې څنګه د "Helloworld" نوم سره یو ساده پروژه پلي کړو. دا د فلاسک پایتون چوکاټ کې لیکل شوی ، د سیلري کارګرانو او انګولر 8 فرنټ اینډ سره.
د ذخیره کولو لینکونه:
د مقالې په لومړۍ برخه کې، موږ به زموږ پروژه او د هغې برخې وګورو. په دویمه برخه کې، موږ به معلومه کړو چې څنګه Plesk تنظیم کړئ او اړین توسیعونه او برخې نصب کړئ (DB، RabbitMQ، Redis، Docker، او نور).
په دریمه برخه کې، موږ به په پای کې دا معلومه کړو چې څنګه زموږ د پروژې سرور ته د dev او prod چاپیریال کې ځای پرځای کولو لپاره پایپ لاین تنظیم کړو. او بیا به موږ سایټ په سرور کې پیل کړو.
او هو، ما خپل ځان معرفي کول هیر کړل. زما نوم اولیګ بورزوف دی، زه په ډومکلک کې د ګروي مدیرانو لپاره د CRM ټیم کې بشپړ سټیک جوړونکی یم.
د پروژې عمومي کتنه
لومړی، راځئ چې دوه پروژې ذخیره وګورو - شاته او مخ - او کوډ ته لاړ شئ.
شاته: فلاسک + سیلري
د شاتنۍ برخې لپاره ، ما یوه ډله واخیسته چې د پایتون پراختیا کونکو ترمنځ خورا مشهوره ده: د فلاسک چوکاټ (د API لپاره) او سیلري (د کاري کتار لپاره). SQLAchemy د ORM په توګه کارول کیږي. الیمبیک د مهاجرت لپاره کارول کیږي. په لاسونو کې د JSON تایید لپاره - مارشمیلو.
В
/ping
- د شتون چک کول؛- د راجستریشن، واک ورکولو، غیر واک ورکولو او د یو مجاز کارونکي ترلاسه کولو لپاره لاسوندونه؛
- د بریښنالیک لاسوند چې د سیلري په کتار کې دنده اچوي.
send_mail_task
.
په فولډر کې
docker
د دوه ډاکر فایلونو سره (base.dockerfile
د ندرت بدلیدونکي اساس عکس رامینځته کول اوDockerfile
د اصلي غونډو لپاره).env_files
- د مختلف چاپیریالونو لپاره د چاپیریال متغیرونو سره فایلونو سره.
د پروژې په ریښه کې څلور ډاکر - کمپوز فایلونه شتون لري:
docker-compose.local.db.yml
د پراختیا لپاره سیمه ایز ډیټابیس رامینځته کول؛docker-compose.local.workers.yml
د کارګر، ډیټابیس، Redis او RabbitMQ د ځایی لوړولو لپاره؛docker-compose.test.yml
د ګمارنې پرمهال ازموینې ترسره کول؛docker-compose.yml
د ګمارنې لپاره.
او وروستی فولډر چې موږ ورسره علاقه لرو -
deploy.sh
- د مهاجرت پیل او ځای پرځای کول. په ګیتوب عملونو کې د ازموینو جوړولو او چلولو وروسته په سرور کې چلیږي؛rollback.sh
- د مجلس پخوانۍ نسخې ته د کانټینرونو رول بیک؛curl_tg.sh
- ټیلیګرام ته د ګمارنې خبرتیاوې لیږل.
Frontend په زاویه کې
- اصلي پاڼه د بریښنالیک لیږلو فورمه او د وتلو تڼۍ سره.
- د ننوتلو پاڼه.
- د نوم لیکنې پاڼه.
اصلي پاڼه د سپیڅلي ښکاري:
په ریښه کې دوه فایلونه شتون لري Dockerfile
и docker-compose.yml
, همدارنګه پیژندل شوی فولډر .ci-cd
د شاته ذخیرې په پرتله د یو څه لږ سکریپټونو سره (د چلولو ازموینو لپاره لیرې شوي سکریپټونه).
په Plesk کې د پروژې پیل کول
راځئ چې د Plesk په ترتیب کولو او زموږ د سایټ لپاره د ګډون په جوړولو سره پیل وکړو.
د توسیعونو نصب کول
په Plesk کې، موږ څلور توسیعونو ته اړتیا لرو:
Docker
د پلیسک اډمین پینل کې د کانټینرونو حالت اداره او لید ښودل؛Git
په سرور کې د ځای پرځای کولو مرحله تنظیم کول؛Let's Encrypt
د وړیا TLS سندونو تولید (او په اتوماتيک ډول نوي کول)؛Firewall
د راتلونکو ټرافیک د فلټر کولو ترتیب کول.
تاسو کولی شئ دا د توسیع برخې کې د Plesk اډمین پینل له لارې نصب کړئ:
موږ به د توسیع لپاره تفصيلي ترتیبات په پام کې ونیسو، ډیفالټ ترتیبات به زموږ د ډیمو موخو لپاره ترسره کړي.
یو ګډون او سایټ جوړ کړئ
بیا، موږ اړتیا لرو چې زموږ د helloworld.ru ویب پاڼې لپاره ګډون جوړ کړو او هلته dev.helloworld.ru فرعي ډومین اضافه کړو.
- د helloworld.ru ډومین لپاره ګډون جوړ کړئ او د سیسټم کارونکي لپاره د ننوتلو پاسورډ مشخص کړئ:
د پاڼې په پای کې بکس چیک کړئ د لیټ انکریپټ سره ډومین خوندي کړئکه موږ غواړو د سایټ لپاره HTTPS تنظیم کړو: - بیا، په دې ګډون کې، یو فرعي ډومین جوړ کړئ dev.helloworld.ru (د کوم لپاره چې تاسو کولی شئ وړیا TLS سند هم صادر کړئ):
د سرور اجزاو نصب کول
موږ سره یو سرور لرو OS Debian Stretch 9.12 او نصب شوي کنټرول پینل پلسک اوبسیډیان 18.0.27.
موږ اړتیا لرو چې زموږ د پروژې لپاره نصب او تنظیم کړو:
- PostgreSQL (زموږ په قضیه کې به یو سرور وي چې د dev او prod چاپیریال لپاره دوه ډیټابیسونه ولري).
- RabbitMQ (د چاپیریال لپاره د مختلف ویسټونو سره ورته، ورته مثال).
- دوه ریډیس مثالونه (د dev او prod چاپیریال لپاره).
- د ډاکر راجسټری (د جوړ شوي ډاکر عکسونو ځایی ذخیره کولو لپاره).
- د ډاکر راجسټری لپاره UI.
پوسټری ایس ایس ایل
Plesk لا دمخه د PostgreSQL DBMS سره راځي، مګر وروستۍ نسخه نه ده (د Plesk Obsidian لیکلو په وخت کې
په شبکه کې دبیان په اړه د پوسټګریس نصبولو لپاره ډیری مفصل لارښوونې شتون لري (
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
د دې په پام کې نیولو سره چې PostgreSQL د منځنۍ کچې ډیفالټ ترتیبات لري، دا اړینه ده چې ترتیب سم کړئ. دا به زموږ سره مرسته وکړي /etc/postgresql/12/main/postgresql.conf
هغو کسانو ته چې وړاندیز کیږي. دلته باید یادونه وشي چې دا ډول محاسبین د جادو ګولۍ نه دي، او بیس باید ستاسو د هارډویر، غوښتنلیک، او د پوښتنو پیچلتیا پراساس ډیر دقیق وي. مګر دا د پیل کولو لپاره کافی دی.
د کیلکولیټر لخوا وړاندیز شوي تنظیماتو سربیره ، موږ هم په کې بدلون کوو postgresql.conf
ډیفالټ پورټ 5432 بل ته (زموږ په مثال کې - 53983).
د ترتیب کولو فایل بدلولو وروسته، د کمانډ سره د postgresql-server بیا پیل کړئ:
service postgresql restart
موږ PostgreSQL نصب او تنظیم کړی دی. اوس راځئ چې یو ډیټابیس جوړ کړو، د dev- او prod- چاپیریال لپاره کاروونکي، او کاروونکو ته د ډیټابیس اداره کولو حق ورکړئ:
$ su - postgres
postgres:~$ create database hw_dev_db_name;
CREATE DATABASE
postgres:~$ create user hw_dev_db_user with password 'hw_dev_db_password';
CREATE ROLE
postgres:~$ grant ALL privileges ON database hw_dev_db_name to hw_dev_db_user;
GRANT
postgres:~$ create database hw_prod_db_name;
CREATE DATABASE
postgres:~$ create user hw_prod_db_user with password 'hw_prod_db_password';
CREATE ROLE
postgres:~$ grant ALL privileges ON database hw_prod_db_name to hw_prod_db_user;
GRANT
RabbitMQ
راځئ چې د RabbitMQ نصبولو ته لاړ شو، د سیلري لپاره د پیغام بروکر. په دیبیان کې دا نصب کول خورا ساده دي:
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install erlang erlang-nox
sudo add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install rabbitmq-server
د نصبولو وروسته، موږ باید جوړ کړو vhosts، کاروونکي او اړین حقونه ورکوي:
sudo rabbitmqctl add_user hw_dev_amqp_user hw_dev_amqp_password
sudo rabbitmqctl set_user_tags hw_dev_amqp_user administrator
sudo rabbitmqctl add_vhost hw_dev_vhost
sudo rabbitmqctl set_permissions -p hw_dev_vhost hw_dev_amqp_user ".*" ".*" ".*"
sudo rabbitmqctl add_user hw_prod_amqp_user hw_prod_amqp_password
sudo rabbitmqctl set_user_tags hw_prod_amqp_user administrator
sudo rabbitmqctl add_vhost hw_prod_vhost
sudo rabbitmqctl set_permissions -p hw_prod_vhost hw_prod_amqp_user ".*" ".*" ".*"
Redis
اوس راځئ چې زموږ د غوښتنلیک - ریډیس لپاره وروستی برخه نصب او تنظیم کړو. دا به د سیلري دندو د پایلو ذخیره کولو لپاره د شالید په توګه وکارول شي.
موږ به د توسیع په کارولو سره د dev او prod چاپیریالونو لپاره د Redis سره دوه Docker کانټینرونه پورته کړو Docker
د Plesk لپاره.
- موږ پلسک ته ځو ، د توسیع برخې ته ځو ، د ډاکر توسیع وګورو او نصب یې کړو (موږ وړیا نسخې ته اړتیا لرو):
- نصب شوي توسیع ته لاړ شئ، د لټون له لارې انځور ومومئ
redis bitnami
او وروستی نسخه نصب کړئ: - موږ ډاونلوډ شوي کانټینر ته ځو او ترتیب تنظیم کړئ: بندر مشخص کړئ ، د اعظمي تخصیص شوي RAM اندازه ، د چاپیریال متغیرونو کې پاسورډ ، او حجم نصب کړئ:
- موږ د پروډ کانټینر لپاره 2-3 مرحلې ترسره کوو، په ترتیباتو کې موږ یوازې پیرامیټونه بدلوو: پورټ، پاسورډ، د رام اندازه او په سرور کې د حجم فولډر ته لاره:
د ډاکر راجستر
د لومړني خدماتو سربیره ، دا به ښه وي چې خپل د ډاکر عکس ذخیره په سرور کې واچوئ. خوشبختانه ، د سرور ځای اوس خورا ارزانه دی (یقینا د DockerHub ګډون څخه ارزانه) ، او د شخصي ذخیره کولو پروسه خورا ساده ده.
موږ غواړو:
- په فرعي ډومین کې د لاسرسي وړ د پټنوم خوندي ډاکر ذخیره
https://docker.helloworld.ru ; - په ذخیره کې د عکسونو لیدو لپاره UI، په کې شتون لري
https://docker-ui.helloworld.ru .
دا کولو لپاره:
- راځئ چې زموږ په ګډون کې په Plesk کې دوه فرعي ډومینونه جوړ کړو: docker.helloworld.ru او docker-ui.helloworld.ru، او د دوی لپاره د کوډ کولو سندونه تنظیم کړئ.
- فایل د docker.helloworld.ru فرعي ډومین فولډر ته اضافه کړئ
docker-compose.yml
د دې په څیر منځپانګې سره:version: "3" services: docker-registry: image: "registry:2" restart: always ports: - "53985:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: basic-realm REGISTRY_AUTH_HTPASSWD_PATH: /auth/.htpasswd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - ./.docker-registry.htpasswd:/auth/.htpasswd - ./data:/data docker-registry-ui: image: konradkleine/docker-registry-frontend:v2 restart: always ports: - "53986:80" environment: VIRTUAL_HOST: '*, https://*' ENV_DOCKER_REGISTRY_HOST: 'docker-registry' ENV_DOCKER_REGISTRY_PORT: 5000 links: - 'docker-registry'
- د SSH لاندې، موږ به د ډاکر ذخیره کې د بنسټیز واک لپاره د .htpasswd فایل تولید کړو:
htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
- کانتینرونه راټول او پورته کړئ:
docker-compose up -d
- او موږ اړتیا لرو چې نګینکس زموږ کانټینرونو ته واړوو. دا د Plesk له لارې ترسره کیدی شي.
لاندې مرحلې باید د docker.helloworld.ru او docker-ui.helloworld.ru فرعي ډومینونو لپاره ترسره شي:
کړی دیو اوزار زموږ سایټ ته لاړ شئ د ډاکر پراکسي قواعد:
او زموږ کانټینر ته د پراکسي راتلونکي ترافیک لپاره یو قاعده اضافه کړئ:
- موږ ګورو چې موږ کولی شو خپل کانټینر ته د ځایی ماشین څخه ننوتل:
$ docker login docker.helloworld.ru -u hw_docker_admin -p hw_docker_password WARNING! Using --password via the CLI is insecure. Use --password-stdin. Login Succeeded
- راځئ چې د docker-ui.helloworld.ru فرعي ډومین عملیات هم وګورو:
کله چې تاسو د براؤز ذخیره کولو باندې کلیک وکړئ ، براوزر به د اختیار کولو کړکۍ وښیې چیرې چې تاسو اړتیا لرئ د ذخیره کولو لپاره کارن نوم او پټنوم دننه کړئ. له هغې وروسته، موږ به د ذخیره کولو لیست سره یوې پاڼې ته لیږل کیږو (د اوس لپاره، دا به ستاسو لپاره خالي وي):
په Plesk Firewall کې د بندرونو پرانیستل
د اجزاو نصب او تنظیم کولو وروسته ، موږ اړتیا لرو بندرونه خلاص کړو ترڅو اجزا د ډاکر کانټینرونو او بهرني شبکې څخه د لاسرسي وړ وي.
راځئ وګورو چې دا څنګه د Plesk لپاره د فایروال توسیع په کارولو سره ترسره کړئ چې موږ دمخه نصب کړی.
- ورتګ وسیلې او ترتیبات> ترتیبات> فایر وال:
- ورتګ د Plesk فایروال قواعد تعدیل کړئ> دودیز قواعد اضافه کړئ او د ډاکر سبنټ لپاره لاندې TCP بندرونه خلاص کړئ (172.0.0.0 / 8):
RabbitMQ: 1883، 4369، 5671-5672، 25672، 61613-61614
ریډیس: 32785، 32786 - موږ به یو قاعده هم اضافه کړو چې بهرنۍ نړۍ ته به د PostgreSQL بندرونه او RabbitMQ مدیریت پینل خلاص کړي:
- د بدلونونو تڼۍ په کارولو سره مقررات پلي کړئ:
په ګیتوب عملونو کې د CI/CD تنظیم کول
راځئ چې ترټولو په زړه پورې برخې ته ورسیږو - د دوامداره ادغام پایپ لاین تنظیم کول او سرور ته زموږ پروژه وړاندې کول.
دا پایپ لاین به دوه برخې ولري:
- د عکس جوړول او د ازموینې چلول (د شاته پای لپاره) - د ګیتوب اړخ کې؛
- د مهاجرت چلول (د شالید لپاره) او د کانټینرونو ځای په ځای کول - په سرور کې.
Plesk ته واستول
راځئ چې لومړی د دویم ټکي سره معامله وکړو (ځکه چې لومړی په دې پورې اړه لري).
موږ به د پلیسک لپاره د Git توسیع په کارولو سره د ګمارنې پروسه تنظیم کړو.
د بیکینډ ذخیره کولو لپاره د پروډ چاپیریال سره یو مثال په پام کې ونیسئ.
- موږ زموږ د هیلوورلډ ویب پاڼې ګډون ته ځو او د Git فرعي برخې ته ځو:
- زموږ د ګیتوب ذخیره ته لینک د "ریموټ ګیټ ذخیره" ډګر کې دننه کړئ او ډیفالټ فولډر بدل کړئ
httpdocs
بل ته (د مثال په توګه./httpdocs/hw_back
): - د مخکینۍ مرحلې څخه د SSH عامه کیلي کاپي کړئ او
اضافه کول دا د Github ترتیباتو کې دی. - په 2 مرحله کې په سکرین کې OK کلیک وکړئ، له هغې وروسته به موږ په Plesk کې د ذخیره پاڼې ته لیږل کیږو. اوس موږ اړتیا لرو چې ذخیره تنظیم کړو ترڅو ماسټر څانګې ته په ژمنو کې تازه شي. د دې کولو لپاره، لاړ شئ د ذخیره کولو ترتیبات او ارزښت خوندي کړئ
Webhook URL
(موږ به وروسته ورته اړتیا ولرو کله چې د ګیتوب عمل تنظیم کړئ): - د مخکینۍ پراګراف څخه په سکرین کې د عملونو ساحه کې، د ځای پرځای کولو پیل کولو لپاره سکریپټ داخل کړئ:
cd {REPOSITORY_ABSOLUTE_PATH} .ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
چیرې چې:
{REPOSITORY_ABSOLUTE_PATH}
- په سرور کې د بیک انډ ذخیره پروډ فولډر ته لاره؛
{ENV}
- چاپیریال (dev / prod)، زموږ په قضیه کېprod
;
{DOCKER_REGISTRY_HOST}
- زموږ د ډاکر ذخیره کوربه
{TG_BOT_TOKEN}
- د ټیلیګرام بوټ نښه؛
{TG_CHAT_ID}
- د خبرتیاو لیږلو لپاره د چیٹ/چینل ID.د سکریپټ مثال:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/ .ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
- زموږ د ګډون څخه یو کارن د ډاکر ګروپ ته اضافه کړئ (نو دوی کولی شي کانټینرونه اداره کړي):
sudo usermod -aG docker helloworld_admin
د بیک اینډ ذخیره کولو لپاره د dev چاپیریال او مخکني برخه په ورته ډول تنظیم شوي.
په ګیتوب عملونو کې د پلي کولو پایپ لاین
راځئ چې په ګیتوب عملونو کې زموږ د CI/CD پایپ لاین لومړۍ برخې تنظیم کولو ته لاړ شو.
بډایډ
پایپ لاین په کې تشریح شوی
مګر د دې تحلیل کولو دمخه ، راځئ هغه پټ متغیرونه ډک کړو چې موږ په ګیتوب کې ورته اړتیا لرو. د دې کولو لپاره، لاړ شئ ترتیبات -> رازونه:
DOCKER_REGISTRY
- زموږ د ډاکر ذخیره کوربه (docker.helloworld.ru)؛DOCKER_LOGIN
- د ډاکر ذخیره ته ننوتل؛DOCKER_PASSWORD
- دې ته پټنوم؛DEPLOY_HOST
- کوربه چیرې چې د Plesk اډمین پینل شتون لري (مثال:helloworld.ru : 8443 یا123.4.56.78 ۸۴۴۳ );DEPLOY_BACK_PROD_TOKEN
- په سرور کې د پروډ ذخیره کولو لپاره د ځای پرځای کولو نښه (موږ دا په پلیسک کې د ځای په ځای کولو کې ترلاسه کړې. 4)؛DEPLOY_BACK_DEV_TOKEN
- په سرور کې د dev ذخیره کولو لپاره د ځای پرځای کولو نښه.
د ګمارنې پروسه ساده ده او له دریو اصلي مرحلو څخه جوړه ده:
- زموږ په ذخیره کې د عکس جوړول او خپرول؛
- د تازه جوړ شوي عکس پراساس په کانټینر کې ازموینې چلول؛
- مطلوب چاپیریال ته ځای په ځای کول د څانګې (dev/master) پورې اړه لري.
مخ اخری
د سایټ تنظیم کول
د Nginx له لارې د ترافیک پراکسي کول
ښه، موږ پای ته رسیدلي یو. دا یوازې د Nginx له لارې زموږ کانټینر ته د راتلوونکي او وتلو ترافیک پراکسي تنظیم کولو لپاره پاتې کیږي. موږ دمخه دا پروسه د ډاکر راجسټری تنظیم 5 مرحله کې پوښلې ده. ورته باید په dev او prod چاپیریال کې د شا او مخ برخو لپاره تکرار شي.
زه به د ترتیباتو سکرین شاټونه چمتو کړم.
بډایډ
مخ اخری
уточнение уточнение. ټول یو آر ایل به د فرنټ اینډ کانټینر ته پراکسي وي، پرته له هغه چې پیل کیږي /api/
- دوی به شاته کانټینر ته پراکسي شي (نو په شا کانټینر کې، ټول سمبالونکي باید پیل شي /api/
).
پایلې
اوس زموږ سایټ باید په helloworld.ru او dev.helloworld.ru کې شتون ولري (په ترتیب سره prod- او dev-environments).
په مجموع کې ، موږ زده کړل چې څنګه په فلاسک او انګولر کې یو ساده غوښتنلیک چمتو کړو او په ګیتوب عملونو کې پایپ لاین تنظیم کړو ترڅو دا د Plesk پرمخ وړونکي سرور ته راوباسي.
زه به د کوډ سره د ذخیره کولو لینکونه نقل کړم:
سرچینه: www.habr.com