CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
ในบทความนี้ ผมจะแบ่งปันประสบการณ์การตั้งค่า CI/CD โดยใช้ Plesk Control Panel และ Github Actions วันนี้เราจะเรียนรู้วิธีปรับใช้โครงการง่ายๆ ด้วยชื่อที่ไม่ซับซ้อน "Helloworld" มันถูกเขียนขึ้นในกรอบ Flask Python โดยมีพนักงาน Celery และส่วนหน้าของ Angular 8

ลิงค์ไปยังที่เก็บ: แบ็กเอนด์, ส่วนหน้า.

ในส่วนแรกของบทความ เราจะพิจารณาโครงการและส่วนต่างๆ ของเรา ในตอนที่สอง เราจะหาวิธีตั้งค่า Plesk และติดตั้งส่วนขยายและส่วนประกอบที่จำเป็น (DB, RabbitMQ, Redis, Docker เป็นต้น)

ในส่วนที่สาม ในที่สุดเราจะเข้าใจวิธีตั้งค่าไปป์ไลน์สำหรับการปรับใช้โครงการของเรากับเซิร์ฟเวอร์ในสภาพแวดล้อม dev และผลิตภัณฑ์ จากนั้นเราจะเปิดไซต์บนเซิร์ฟเวอร์

ใช่ ฉันลืมแนะนำตัว ฉันชื่อ Oleg Borzov เป็นนักพัฒนาฟูลสแตกในทีม CRM สำหรับผู้จัดการสินเชื่อที่อยู่อาศัยที่ Domclick

ภาพรวมโครงการ

ก่อนอื่น มาดูที่เก็บข้อมูลโครงการสองแห่ง - ส่วนหลังและส่วนหน้า - และดูโค้ด

แบ็กเอนด์: ขวด + ขึ้นฉ่าย

สำหรับส่วนหลัง ฉันเลือกกลุ่มที่ค่อนข้างเป็นที่นิยมในหมู่นักพัฒนา Python: Flask framework (สำหรับ API) และ Celery (สำหรับคิวงาน) SQLAchemy ใช้เป็น ORM Alembic ใช้สำหรับการย้ายข้อมูล สำหรับการตรวจสอบ JSON ในที่จับ - Marshmallow

В ที่เก็บ มีไฟล์ Readme.md พร้อมคำอธิบายโดยละเอียดเกี่ยวกับโครงสร้างและคำแนะนำสำหรับการเรียกใช้โครงการ

API ของเว็บพาร์ท ค่อนข้างง่าย ประกอบด้วยปากกา 6 ด้าม:

  • /ping - เพื่อตรวจสอบความพร้อม;
  • จัดการการลงทะเบียน การอนุญาต การยกเลิกการอนุญาต และการได้รับผู้ใช้ที่ได้รับอนุญาต
  • หมายเลขอ้างอิงอีเมลที่ทำให้งานอยู่ในคิวขึ้นฉ่าย

ส่วนขึ้นฉ่าย ง่ายยิ่งขึ้น มีปัญหาเดียวเท่านั้น send_mail_task.

ในโฟลเดอร์ /ประชุม มีสองโฟลเดอร์ย่อย:

  • docker ด้วย Dockerfiles สองไฟล์ (base.dockerfile เพื่อสร้างภาพฐานที่ไม่ค่อยเปลี่ยนแปลงและ Dockerfile สำหรับส่วนประกอบหลัก);
  • .env_files - ด้วยไฟล์ที่มีตัวแปรสภาพแวดล้อมสำหรับสภาพแวดล้อมที่แตกต่างกัน

มีไฟล์นักเทียบท่าสี่ไฟล์ที่รูทของโปรเจ็กต์:

  • docker-compose.local.db.yml ยกระดับฐานข้อมูลท้องถิ่นเพื่อการพัฒนา
  • docker-compose.local.workers.yml สำหรับการเลี้ยงดูคนงาน, ฐานข้อมูล, Redis และ RabbitMQ;
  • docker-compose.test.yml เพื่อเรียกใช้การทดสอบระหว่างการปรับใช้
  • docker-compose.yml สำหรับการปรับใช้

และโฟลเดอร์สุดท้ายที่เราสนใจ - .ci-ซีดี. มันมีเชลล์สคริปต์สำหรับการปรับใช้:

  • deploy.sh — เปิดตัวการโยกย้ายและการปรับใช้ ทำงานบนเซิร์ฟเวอร์หลังจากสร้างและรันการทดสอบใน Github Actions
  • rollback.sh - การย้อนกลับของคอนเทนเนอร์ไปยังชุดประกอบรุ่นก่อนหน้า
  • curl_tg.sh - ส่งการแจ้งเตือนการปรับใช้ไปยังโทรเลข

ส่วนหน้าบนเชิงมุม

ที่เก็บของด้านหน้า ง่ายกว่าของเบ็คมาก ด้านหน้าประกอบด้วยสามหน้า:

  • หน้าหลักพร้อมแบบฟอร์มสำหรับส่งอีเมลและปุ่มออก
  • หน้าเข้าสู่ระบบ
  • หน้าลงทะเบียน.

หน้าหลัก ดูนักพรต:

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
มีสองไฟล์ที่รูท Dockerfile и docker-compose.ymlเช่นเดียวกับโฟลเดอร์ที่คุ้นเคย .ci-cd ด้วยสคริปต์น้อยกว่าในที่เก็บด้านหลังเล็กน้อย (ลบสคริปต์สำหรับการเรียกใช้การทดสอบ)

เริ่มโครงการใน Plesk

เริ่มต้นด้วยการตั้งค่า Plesk และสร้างการสมัครสมาชิกสำหรับเว็บไซต์ของเรา

กำลังติดตั้งส่วนขยาย

ใน Plesk เราต้องการส่วนขยายสี่รายการ:

  • Docker เพื่อจัดการและแสดงสถานะของคอนเทนเนอร์ในแผงผู้ดูแลระบบ Plesk
  • Git เพื่อกำหนดค่าขั้นตอนการปรับใช้บนเซิร์ฟเวอร์
  • Let's Encrypt เพื่อสร้าง (และต่ออายุอัตโนมัติ) ใบรับรอง TLS ฟรี
  • Firewall เพื่อกำหนดค่าการกรองทราฟฟิกขาเข้า

คุณสามารถติดตั้งผ่านแผงผู้ดูแลระบบ Plesk ในส่วนส่วนขยาย:

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
เราจะไม่พิจารณาการตั้งค่าโดยละเอียดสำหรับส่วนขยาย การตั้งค่าเริ่มต้นจะทำเพื่อวัตถุประสงค์ในการสาธิตของเรา

สร้างการสมัครสมาชิกและไซต์

ต่อไป เราต้องสร้างการสมัครสมาชิกสำหรับเว็บไซต์ helloworld.ru ของเรา และเพิ่มโดเมนย่อย dev.helloworld.ru ที่นั่น

  1. สร้างการสมัครสมาชิกสำหรับโดเมน helloworld.ru และระบุรหัสผ่านเข้าสู่ระบบสำหรับผู้ใช้ระบบ:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
    ทำเครื่องหมายที่ช่องด้านล่างของหน้า รักษาความปลอดภัยของโดเมนด้วย Let's Encryptหากเราต้องการตั้งค่า HTTPS สำหรับไซต์:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  2. ถัดไป ในการสมัครสมาชิกนี้ ให้สร้างโดเมนย่อย dev.helloworld.ru (ซึ่งคุณสามารถออกใบรับรอง TLS ได้ฟรี):

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

การติดตั้งส่วนประกอบเซิร์ฟเวอร์

เรามีเซิร์ฟเวอร์ด้วย OS Debian ยืด 9.12 และติดตั้งแผงควบคุม เพลสก์ ออบซิเดียน 18.0.27.

เราจำเป็นต้องติดตั้งและกำหนดค่าสำหรับโครงการของเรา:

  • PostgreSQL (ในกรณีของเรา จะมีเซิร์ฟเวอร์หนึ่งเครื่องที่มีสองฐานข้อมูลสำหรับสภาพแวดล้อม dev และ prod)
  • RabbitMQ (เหมือนกัน อินสแตนซ์เดียวกันกับ vhosts ที่แตกต่างกันสำหรับสภาพแวดล้อม)
  • อินสแตนซ์ Redis สองรายการ (สำหรับสภาพแวดล้อม dev และ prod)
  • Docker Registry (สำหรับพื้นที่จัดเก็บในเครื่องของอิมเมจ Docker ที่สร้างขึ้น)
  • UI สำหรับการลงทะเบียนนักเทียบท่า

PostgreSQL

Plesk มาพร้อมกับ PostgreSQL DBMS แล้ว แต่ไม่ใช่เวอร์ชันล่าสุด (ในขณะที่เขียน Plesk Obsidian ได้รับการสนับสนุน Postgres เวอร์ชัน 8.4–10.8) เราต้องการเวอร์ชันล่าสุดสำหรับแอปพลิเคชันของเรา (12.3 ณ เวลาที่เขียนนี้) ดังนั้นเราจะติดตั้งด้วยตนเอง

มีคำแนะนำโดยละเอียดมากมายสำหรับการติดตั้ง Postgres บน Debian บนเน็ต (ตัวอย่าง) ดังนั้นฉันจะไม่อธิบายรายละเอียด ฉันจะให้คำสั่ง:

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 ซึ่งเป็นนายหน้าข้อความสำหรับ Celery กันเถอะ การติดตั้งบน Debian นั้นค่อนข้างง่าย:

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

ตอนนี้มาติดตั้งและกำหนดค่าองค์ประกอบสุดท้ายสำหรับแอปพลิเคชันของเรา - Redis มันจะใช้เป็นแบ็กเอนด์สำหรับเก็บผลลัพธ์ของงานคื่นฉ่าย

เราจะเพิ่มคอนเทนเนอร์ Docker สองคอนเทนเนอร์ด้วย Redis สำหรับสภาพแวดล้อม dev และ prod โดยใช้ส่วนขยาย Docker สำหรับ Plesk

  1. เราไปที่ Plesk ไปที่ส่วนส่วนขยาย ค้นหาส่วนขยาย Docker และติดตั้ง (เราต้องการเวอร์ชันฟรี):

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  2. ไปที่ส่วนขยายที่ติดตั้ง ค้นหาภาพผ่านการค้นหา redis bitnami และติดตั้งเวอร์ชันล่าสุด:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  3. เราไปที่คอนเทนเนอร์ที่ดาวน์โหลดมาและปรับการกำหนดค่า: ระบุพอร์ต, ขนาด RAM ที่จัดสรรสูงสุด, รหัสผ่านในตัวแปรสภาพแวดล้อมและเมานต์โวลุ่ม:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  4. เราดำเนินการตามขั้นตอนที่ 2-3 สำหรับคอนเทนเนอร์ผลิตภัณฑ์ ในการตั้งค่า เราเปลี่ยนเฉพาะพารามิเตอร์: พอร์ต, รหัสผ่าน, ขนาด RAM และพาธไปยังโฟลเดอร์โวลุ่มบนเซิร์ฟเวอร์:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

รีจิสทรีนักเทียบท่า

นอกเหนือจากบริการพื้นฐานแล้ว การใส่ที่เก็บอิมเมจ Docker ของคุณเองไว้บนเซิร์ฟเวอร์ก็เป็นเรื่องดี โชคดีที่ตอนนี้พื้นที่เซิร์ฟเวอร์ค่อนข้างถูก (ถูกกว่าการสมัครสมาชิก DockerHub อย่างแน่นอน) และขั้นตอนการตั้งค่าพื้นที่เก็บข้อมูลส่วนตัวนั้นง่ายมาก

เราต้องการมี:

  • ที่เก็บ Docker ที่ป้องกันด้วยรหัสผ่านสามารถเข้าถึงได้บนโดเมนย่อย https://docker.helloworld.ru;
  • UI สำหรับดูรูปภาพในที่เก็บ ดูได้ที่ https://docker-ui.helloworld.ru.

สำหรับสิ่งนี้:

  1. มาสร้างโดเมนย่อยสองโดเมนใน Plesk ในการสมัครสมาชิกของเรา: docker.helloworld.ru และ docker-ui.helloworld.ru และกำหนดค่าใบรับรอง Let's Encrypt สำหรับโดเมนเหล่านั้น
  2. เพิ่มไฟล์ไปยังโฟลเดอร์ย่อย 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'
    

  3. ภายใต้ SSH เราจะสร้างไฟล์ .htpasswd สำหรับการอนุญาตขั้นพื้นฐานในที่เก็บ Docker:
    htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
  4. รวบรวมและยกคอนเทนเนอร์:
    docker-compose up -d
  5. และเราต้องเปลี่ยนเส้นทาง Nginx ไปยังคอนเทนเนอร์ของเรา สามารถทำได้ผ่าน Plesk

ต้องทำตามขั้นตอนต่อไปนี้สำหรับโดเมนย่อย docker.helloworld.ru และ docker-ui.helloworld.ru:

ในส่วน เครื่องมือ Dev เว็บไซต์ของเราไปที่ กฎพร็อกซีนักเทียบท่า:

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
และเพิ่มกฎให้กับพร็อกซีทราฟฟิกขาเข้าไปยังคอนเทนเนอร์ของเรา:

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  1. เราตรวจสอบว่าเราสามารถเข้าสู่ระบบคอนเทนเนอร์ของเราจากเครื่องท้องถิ่น:
    $ 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
  2. ตรวจสอบการทำงานของโดเมนย่อย docker-ui.helloworld.ru ด้วย:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
    เมื่อคุณคลิกที่เรียกดูที่เก็บ เบราว์เซอร์จะแสดงหน้าต่างการอนุญาตซึ่งคุณจะต้องป้อนชื่อผู้ใช้และรหัสผ่านสำหรับที่เก็บ หลังจากนั้น เราจะถูกโอนไปยังเพจที่มีรายการที่เก็บ (สำหรับตอนนี้ มันจะว่างเปล่าสำหรับคุณ):

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

การเปิดพอร์ตใน Plesk Firewall

หลังจากติดตั้งและกำหนดค่าคอมโพเนนต์แล้ว เราจำเป็นต้องเปิดพอร์ตเพื่อให้คอมโพเนนต์สามารถเข้าถึงได้จากคอนเทนเนอร์ Docker และเครือข่ายภายนอก

มาดูวิธีการใช้ส่วนขยายไฟร์วอลล์สำหรับ Plesk ที่เราติดตั้งไว้ก่อนหน้านี้

  1. ไปที่ เครื่องมือและการตั้งค่า > การตั้งค่า > ไฟร์วอลล์:
    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
  2. ไปที่ แก้ไขกฎไฟร์วอลล์ของ Plesk > เพิ่มกฎที่กำหนดเอง และเปิดพอร์ต TCP ต่อไปนี้สำหรับซับเน็ต Docker (172.0.0.0 / 8):
    แรบบิทMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
    สีแดง: 32785, 32786

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  3. เราจะเพิ่มกฎที่จะเปิดพอร์ต PostgreSQL และพาเนลการจัดการ RabbitMQ สู่โลกภายนอก:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  4. ใช้กฎโดยใช้ปุ่มใช้การเปลี่ยนแปลง:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

การตั้งค่า CI/CD ใน Github Actions

มาลงที่ส่วนที่น่าสนใจที่สุด - การตั้งค่าไปป์ไลน์การรวมอย่างต่อเนื่องและส่งมอบโครงการของเราไปยังเซิร์ฟเวอร์

ไปป์ไลน์นี้จะประกอบด้วยสองส่วน:

  • สร้างอิมเมจและรันการทดสอบ (สำหรับแบ็กเอนด์) - ที่ฝั่ง Github
  • เรียกใช้การย้ายข้อมูล (สำหรับแบ็กเอนด์) และปรับใช้คอนเทนเนอร์ - บนเซิร์ฟเวอร์

ปรับใช้กับ Plesk

มาจัดการกับประเด็นที่สองก่อน (เพราะประเด็นแรกขึ้นอยู่กับมัน)

เราจะกำหนดค่ากระบวนการปรับใช้โดยใช้ส่วนขยาย Git สำหรับ Plesk

พิจารณาตัวอย่างด้วยสภาพแวดล้อม Prod สำหรับที่เก็บแบ็กเอนด์

  1. เราไปที่การสมัครสมาชิกเว็บไซต์ Helloworld และไปที่ส่วนย่อยของ Git:

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  2. ใส่ลิงค์ไปยังที่เก็บ Github ของเราในช่อง "ที่เก็บ Git ระยะไกล" และเปลี่ยนโฟลเดอร์เริ่มต้น httpdocs ไปยังอีกที่หนึ่ง (เช่น /httpdocs/hw_back):

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  3. คัดลอกคีย์สาธารณะ SSH จากขั้นตอนก่อนหน้าและ เพิ่ม ในการตั้งค่า Github
  4. คลิกตกลงบนหน้าจอในขั้นตอนที่ 2 หลังจากนั้นเราจะถูกนำไปที่หน้าที่เก็บใน Plesk ตอนนี้เราต้องกำหนดค่าที่เก็บที่จะอัปเดตเมื่อคอมมิตไปยังสาขาหลัก ในการทำเช่นนี้ไปที่ การตั้งค่าพื้นที่เก็บข้อมูล และบันทึกมูลค่า Webhook URL (เราจะต้องใช้ในภายหลังเมื่อตั้งค่า Github Actions):

    CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

  5. ในฟิลด์การดำเนินการบนหน้าจอจากย่อหน้าก่อนหน้า ให้ป้อนสคริปต์เพื่อเริ่มการปรับใช้:
    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} - พาธไปยังโฟลเดอร์ prod ของที่เก็บแบ็กเอนด์บนเซิร์ฟเวอร์
    {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
  6. เพิ่มผู้ใช้จากการสมัครสมาชิกของเราไปยังกลุ่ม Docker (เพื่อให้สามารถจัดการคอนเทนเนอร์ได้):
    sudo usermod -aG docker helloworld_admin

สภาพแวดล้อม dev สำหรับที่เก็บแบ็กเอนด์และส่วนหน้าได้รับการตั้งค่าในลักษณะเดียวกัน

ไปป์ไลน์การปรับใช้ใน Github Actions

เรามาตั้งค่าส่วนแรกของไปป์ไลน์ CI/CD ใน Github Actions กัน

แบ็กเอนด์

ไปป์ไลน์อธิบายไว้ใน ไฟล์ Deploy.yml.

แต่ก่อนที่จะแยกวิเคราะห์ มากรอกตัวแปรลับที่เราต้องการใน Github ก่อน ในการทำเช่นนี้ไปที่ การตั้งค่า -> ความลับ:

  • DOCKER_REGISTRY - โฮสต์ของที่เก็บ Docker ของเรา (docker.helloworld.ru);
  • DOCKER_LOGIN - เข้าสู่ที่เก็บ Docker;
  • DOCKER_PASSWORD - รหัสผ่านสำหรับมัน;
  • DEPLOY_HOST — โฮสต์ที่มีแผงควบคุมผู้ดูแลระบบ Plesk (ตัวอย่าง: สวัสดีเวิล์ด.ru: 8443 หรือ 123.4.56.78:8443);
  • DEPLOY_BACK_PROD_TOKEN - โทเค็นสำหรับการปรับใช้กับที่เก็บผลิตภัณฑ์บนเซิร์ฟเวอร์ (เราได้รับในการปรับใช้ใน Plesk หน้า 4)
  • DEPLOY_BACK_DEV_TOKEN - โทเค็นสำหรับการปรับใช้กับที่เก็บ dev บนเซิร์ฟเวอร์

กระบวนการปรับใช้นั้นง่ายและประกอบด้วยสามขั้นตอนหลัก:

  • สร้างและเผยแพร่ภาพในพื้นที่เก็บข้อมูลของเรา
  • เรียกใช้การทดสอบในคอนเทนเนอร์ตามอิมเมจที่สร้างขึ้นใหม่
  • ปรับใช้กับสภาพแวดล้อมที่ต้องการขึ้นอยู่กับสาขา (dev/master)

ส่วนหน้า

ไฟล์ deploy.yml สำหรับที่เก็บส่วนหน้า แตกต่างจากของเบ็คเล็กน้อย มันขาดขั้นตอนในการเรียกใช้การทดสอบและเปลี่ยนชื่อของโทเค็นสำหรับการปรับใช้ ต้องกรอกความลับสำหรับที่เก็บด้านหน้าแยกต่างหาก

การตั้งค่าไซต์

พร็อกซีทราฟฟิกผ่าน Nginx

เรามาถึงจุดสิ้นสุดแล้ว ยังคงเป็นเพียงการกำหนดค่าพร็อกซีของทราฟฟิกขาเข้าและขาออกไปยังคอนเทนเนอร์ของเราผ่าน Nginx เราได้ครอบคลุมกระบวนการนี้แล้วในขั้นตอนที่ 5 ของการตั้งค่า Docker Registry ควรทำซ้ำเช่นเดียวกันกับส่วนหลังและส่วนหน้าในสภาพแวดล้อมของ dev และ prod

ฉันจะให้ภาพหน้าจอของการตั้งค่า

แบ็กเอนด์

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular

ส่วนหน้า

CI/CD ใน Github Actions สำหรับโครงการ Flask+Angular
Важноеуточнение. URL ทั้งหมดจะถูกพร็อกซีไปยังคอนเทนเนอร์ส่วนหน้า ยกเว้น URL ที่ขึ้นต้นด้วย /api/ - พวกเขาจะถูกพร็อกซีไปยังคอนเทนเนอร์ด้านหลัง (ดังนั้น ในคอนเทนเนอร์ด้านหลัง ตัวจัดการทั้งหมดต้องขึ้นต้นด้วย /api/).

ผลของการ

ตอนนี้ไซต์ของเราควรพร้อมใช้งานที่ helloworld.ru และ dev.helloworld.ru (prod- และ dev-environments ตามลำดับ)

โดยรวมแล้ว เราได้เรียนรู้วิธีเตรียมแอปพลิเคชันอย่างง่ายใน Flask และ Angular และตั้งค่าไปป์ไลน์ใน Github Actions เพื่อเผยแพร่ไปยังเซิร์ฟเวอร์ที่ใช้งาน Plesk

ฉันจะทำซ้ำลิงก์ไปยังที่เก็บด้วยรหัส: แบ็กเอนด์, ส่วนหน้า.

ที่มา: will.com

เพิ่มความคิดเห็น