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 frontend.

เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฑเบš repositoriesโ€‹: เป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡, เบ”เป‰เบฒเบ™เปœเป‰เบฒ.

เปƒเบ™เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ„เบดเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Plesk เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™ (DB, RabbitMQ, Redis, Docker, เปเบฅเบฐเบญเบทเปˆเบ™เป†).

เปƒเบ™เบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก, เบชเบธเบ”เบ—เป‰เบฒเบเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ—เปเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก dev เปเบฅเบฐ prod. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเป€เบงเบฑเบšเป„เบŠเบ—เปŒเป€เบ—เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เปเบฅเบฐเปเบกเปˆเบ™เปเบฅเป‰เบง, เบ‚เป‰เบญเบเบฅเบทเบกเปเบ™เบฐเบ™เปเบฒเบ•เบปเบงเป€เบญเบ‡. เบ‚เป‰เบญเบเบŠเบทเปˆ Oleg Borzov, เบ‚เป‰เบญเบเป€เบ›เบฑเบ™เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ fullstack เปƒเบ™เบ—เบตเบก CRM เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบˆเปเบฒเบ™เบญเบ‡เบ—เบตเปˆ Domclick.

เบžเบฒเบšเบฅเบงเบกเป‚เบ„เบ‡เบเบฒเบ™

เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบญเบ‡ repositories เป‚เบ„เบ‡เบเบฒเบ™ - backend เปเบฅเบฐเบซเบ™เป‰เบฒ - เปเบฅเบฐเป„เบ›เปƒเบ™เป„เบฅเบเบฐเบฅเบฐเบซเบฑเบ”.

เบ”เป‰เบฒเบ™เบซเบผเบฑเบ‡: Flask+Celery

เบชเปเบฒเบฅเบฑเบšเบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบญเบปเบฒเบŠเปเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเปƒเบ™เบšเบฑเบ™เบ”เบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Python: เบเบญเบš Flask (เบชเปเบฒเบฅเบฑเบš API) เปเบฅเบฐ Celery (เบชเปเบฒเบฅเบฑเบšเปเบ–เบงเบงเบฝเบ). SQLAchemy เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™ ORM. Alembic เปเบกเปˆเบ™เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš JSON เปƒเบ™ handles - Marshmallow.

ะ’ เบ„เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™ เบกเบตเป„เบŸเบฅเปŒ Readme.md เบ—เบตเปˆเบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบฅเบฐเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™.

Web Part API เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบšเปเปˆเบชเบฑเบšเบชเบปเบ™, เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ 6 pens:

  • /ping - เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบเบฒเบ™โ€‹เบกเบตโ€‹;
  • เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹, เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹, deโ€‹เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹;
  • เป‚เบ•เบˆเบฑเบ”เบเบฒเบ™เบญเบตเป€เบกเบฅเปŒเบ—เบตเปˆเบงเบฒเบ‡เบงเบฝเบเบขเบนเปˆเปƒเบ™เปเบ–เบง Celery.

เบชเปˆเบงเบ™ Celery เบ‡เปˆเบฒเบโ€‹เบ‚เบถเป‰เบ™โ€‹, เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹ send_mail_task.

เบขเบนเปˆเปƒเบ™เป‚เบŸเบ™เป€เบ”เบต /conf เบกเบตเบชเบญเบ‡เป‚เบŸเป€เบ”เบตเบเปˆเบญเบ:

  • docker เบเบฑเบšเบชเบญเบ‡ Dockerfiles (base.dockerfile เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ„เปˆเบญเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบฅเบฐ Dockerfile เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเปเบซเปˆเบ‡เบ•เบปเป‰เบ™เบ•เป);
  • .env_files - เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบกเบตเบชเบตเปˆเป„เบŸเบฅเปŒ docker-compose เบขเบนเปˆเบฎเบฒเบเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™:

  • docker-compose.local.db.yml เบเบปเบเบชเบนเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เป€เบžเบทเปˆเบญเบžเบฑเบ”เบ—เบฐเบ™เบฒ;
  • docker-compose.local.workers.yml เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเป‰เบฝเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, Redis เปเบฅเบฐ RabbitMQ;
  • docker-compose.test.yml เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”;
  • docker-compose.yml เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹.

เปเบฅเบฐเป‚เบŸเบ™เป€เบ”เบตเบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เปƒเบˆ - .ci-cd. เบกเบฑเบ™เบกเบต Shell scripts เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡:

  • deploy.sh โ€” เบเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เบ•เบปเบงโ€‹เบเบฒเบ™โ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เบเป‰เบฒเบโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™เปƒเบ™ Github Actions;
  • rollback.sh - rollback เบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเบเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เบญเบ‡เบชเบฐเบžเบฒเปเบซเปˆเบ‡;
  • curl_tg.sh - เบชเบปเปˆเบ‡โ€‹เบเบฒเบ™โ€‹เปเบˆเป‰เบ‡โ€‹เบเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฑเบš Telegramโ€‹.

Frontend เบชเบธเบ” Angular

เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเบกเบตเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ เบ‡เปˆเบฒเบเบเบงเปˆเบฒ Beck's เบซเบผเบฒเบ. เบ—เบฒเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบชเบฒเบกโ€‹เบซเบ™เป‰เบฒโ€‹:

  • เบซเบ™เป‰เบฒเบซเบผเบฑเบเบ—เบตเปˆเบกเบตเปเบšเบšเบŸเบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบญเบตเป€เบกเบงเปเบฅเบฐเบ›เบธเปˆเบกเบญเบญเบ.
  • เปœเป‰เบฒเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš.
  • เบซเบ™เป‰เบฒเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™.

เปœเป‰เบฒเบซเบผเบฑเบเป€เบšเบดเปˆเบ‡เบงเปˆเบฒ:

CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular
เบกเบตเบชเบญเบ‡เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เบฎเบฒเบ Dockerfile ะธ docker-compose.yml, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบ .ci-cd เบกเบต scripts เบซเบ™เป‰เบญเบเบเปˆเบงเบฒเบขเบนเปˆเปƒเบ™ repository เป€เบฅเบฑเบเบ™เป‰เบญเบ (scripts เบ–เบญเบ™เบญเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™).

เป€เบฅเบตเปˆเบกเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Plesk

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Plesk เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ

เปƒเบ™ Plesk, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบตเปˆเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ:

  • Docker เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™ เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ”เป‰เบงเบเบชเบฒเบเบ•เบฒเปƒเบ™เบเบฐเบ”เบฒเบ™ admin Plesk;
  • Git เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เป€เบ—เบดเบ‡เป€เบŠเบตเบšเป€เบงเบต;
  • Let's Encrypt เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ (เปเบฅเบฐเบ•เปเปˆเบญเบฒเบเบธเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”) เปƒเบšเบฎเบฑเบšเบฎเบญเบ‡ TLS เบŸเบฃเบต;
  • Firewall เป€เบžเบทเปˆเบญเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒ.

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™ Plesk admin panel เปƒเบ™โ€‹เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹:

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 Stretch 9.12 เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบœเบ‡เบ„เบงเบšเบ„เบธเบก Plesk Obsidian 18.0.27.

เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐ configure เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

  • PostgreSQL (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบˆเบฐเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบกเบตเบชเบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก dev เปเบฅเบฐ prod).
  • RabbitMQ (เบ”เบฝเบงเบเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš vhosts เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก).
  • เบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ Redis (เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก dev เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™).
  • Docker Registry (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™).
  • UI เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ Docker.

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เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบชเบฐเป€เบซเบ™เบต. เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบ„เบดเบ”เป€เบฅเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเปเบกเปˆเบ™เบฅเบนเบเบ›เบทเบ™ magic, เปเบฅเบฐเบžเบทเป‰เบ™เบ–เบฒเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ›เบฑเบšเปƒเบซเป‰เบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒ, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบฒเบ”เปเบง, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เปเบฅเบฐเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบ™เบญเบโ€‹เป€เบซเบ™เบทเบญโ€‹เป„เบ›โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ—เบตเปˆโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ„เบดเบ”โ€‹เป„เบฅเปˆโ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบเบฑเบ‡โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เปƒเบ™โ€‹ postgresql.confเบžเบญเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ 5432 เป„เบ›เบซเบฒเบšเปˆเบญเบ™เบญเบทเปˆเบ™ (เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ - 53983).

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, restart postgresql-server เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

service postgresql restart

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ PostgreSQL. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบœเบนเป‰เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก dev เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™, เปเบฅเบฐเปƒเบซเป‰เบชเบดเบ”เบœเบนเป‰เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™:

$ 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, เบ™เบฒเบเบซเบ™เป‰เบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบชเปเบฒเบฅเบฑเบš 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. เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™ backend เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™ Celery.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบปเบ Docker เบชเบญเบ‡เบ–เบฑเบ‡เบ—เบตเปˆเบกเบต Redis เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก dev เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ 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 Registry

เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบงเบฒเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบฎเบนเบšเบžเบฒเบš Docker เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เป‚เบŠเบเบ”เบต, เบžเบทเป‰เบ™เบ—เบตเปˆเป€เบŠเบตเบŸเป€เบงเบตเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบฅเบฒเบ„เบฒเบ–เบทเบ (เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบตเบฅเบฒเบ„เบฒเบ–เบทเบเบเบงเปˆเบฒเบเบฒเบ™เบˆเบญเบ‡ DockerHub), เปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบชเปˆเบงเบ™เบ•เบปเบงเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบกเบตโ€‹:

  • Docker repository เบ›เป‰เบญเบ‡เบเบฑเบ™เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เปƒเบ™เป‚เบ”เป€เบกเบ™เบเปˆเบญเบ https://docker.helloworld.ru;
  • UI เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบฎเบนเบšเบžเบฒเบšเปƒเบ™ repository, เบกเบตเบขเบนเปˆเปƒเบ™ https://docker-ui.helloworld.ru.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰:

  1. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบชเบญเบ‡เป‚เบ”เป€เบกเบ™เบเปˆเบญเบเปƒเบ™ Plesk เปƒเบ™เบเบฒเบ™เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: docker.helloworld.ru เปเบฅเบฐ docker-ui.helloworld.ru, เปเบฅเบฐ configure 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 repository:
    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 เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ›โ€‹เบ—เบตเปˆโ€‹ เบเบปเบ”เบฅเบฐเบšเบฝเบš Docker Proxy:

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
    เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆ Browse repositories, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบˆเบฐเบชเบฐเปเบ”เบ‡เบซเบ™เป‰เบฒเบ•เปˆเบฒเบ‡เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบชเปˆเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบš repository. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ repositories (เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบกเบฑเบ™เบˆเบฐเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™):

    CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular

เบเบฒเบ™เป€เบ›เบตเบ”เบžเบญเบ”เปƒเบ™ Plesk Firewall

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบš, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบตเบ”เบžเบญเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบˆเบฒเบ Docker containers เปเบฅเบฐเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบžเบฒเบเบ™เบญเบ.

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰ Firewall extension เบชเปเบฒเบฅเบฑเบš Plesk เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰.

  1. เป„เบ›โ€‹เบซเบฒ เป€เบ„เบทเปˆเบญเบ‡เบกเบท เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ > เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ > Firewall:
    CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular
  2. เป„เบ›โ€‹เบซเบฒ เปเบเป‰เป„เบ‚เบเบปเบ”เบฅเบฐเบšเบฝเบš Plesk Firewall > เป€เบžเบตเปˆเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡ เปเบฅเบฐเป€เบ›เบตเบ”เบžเบญเบ” TCP เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบ Docker (172.0.0.0 / 8):
    RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
    Redis: 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

เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบฅเบปเบ‡เป„เบ›เบซเบฒเบชเปˆเบงเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบธเบ” - เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เปเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐเบชเบปเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบ—เปเปˆโ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบชเบญเบ‡โ€‹เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹:

  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™ (เบชเปเบฒเบฅเบฑเบš backend) - เปƒเบ™เบ”เป‰เบฒเบ™ Github;
  • เปเบฅเปˆเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ (เบชเปเบฒเบฅเบฑเบš backend) เปเบฅเบฐ deploy containers - เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบชเบปเปˆเบ‡เป„เบ› Plesk

เปƒเบซเป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบˆเบธเบ”เบ—เบตเบชเบญเบ‡เบเปˆเบญเบ™ (เป€เบžเบฒเบฐเบงเปˆเบฒเบ‚เปเป‰เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบกเบฑเบ™).

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰ Git extension เบชเปเบฒเบฅเบฑเบš Plesk.

เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Prod เบชเปเบฒเบฅเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ Backend.

  1. เบžเบงเบเป€เบฎเบปเบฒเป„เบ›เบ—เบตเปˆเบเบฒเบ™เบชเบฐเปเบฑเบเปƒเบŠเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒ Helloworld เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ เปเบฅเบฐเป„เบ›เบ—เบตเปˆเบžเบฒเบเบชเปˆเบงเบ™เบเปˆเบญเบ Git:

    CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular

  2. เปƒเบชเปˆเบฅเบดเป‰เบ‡เป„เบ›เบซเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ Github เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ "Remote Git repository" เปเบฅเบฐเบ›เปˆเบฝเบ™เป‚เบŸเป€เบ”เบตเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. httpdocs เบเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡. /httpdocs/hw_back):

    CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular

  3. เบ„เบฑเบ”เบฅเบญเบเบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ SSH เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปเบฅเบฐ เป€เบžเบตเปˆเบก เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Github.
  4. เบเบปเบ” OK เปƒเบ™เบซเบ™เป‰เบฒเบˆเปเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 2, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒ repository เปƒเบ™ Plesk. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰ configure repository เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™ commits เบเบฑเบšเบชเบฒเบ‚เบฒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เป„เบ›เบ—เบตเปˆ เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ เปเบฅเบฐเบ›เบฐเบซเบเบฑเบ”เบกเบนเบ™เบ„เปˆเบฒ 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 เบ‚เบญเบ‡ backend repository เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ;
    {ENV} - เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก (dev / prod), เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ prod;
    {DOCKER_REGISTRY_HOST} - เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ‚เบญเบ‡ docker repository เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ
    {TG_BOT_TOKEN} - Telegram bot token;
    {TG_CHAT_ID} โ€” ID เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒ / เบŠเปˆเบญเบ‡โ€‹เบ—เบฒเบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เปเบˆเป‰เบ‡โ€‹เบเบฒเบ™โ€‹.

    เบ•เบปเบงเบขเปˆเบฒเบ‡ script:

    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 เบชเปเบฒเบฅเบฑเบš backend repository เปเบฅเบฐ frontend เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™.

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบ—เปเปˆเปƒเบ™ Github Actions

เบ‚เปเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ—เปเปˆ CI/CD เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™ Github Actions.

backend

เบ—เปเปˆเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ เป„เบŸเบฅเปŒ deploy.yml.

เปเบ•เปˆเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบงเบดเป€เบ„เบฒเบฐเบกเบฑเบ™, เปƒเบซเป‰เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเปƒเบ™เบ•เบปเบงเปเบ›เบฅเบฑเบšเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™ Github. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เป„เบ›เบ—เบตเปˆ เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ -> เบ„เบงเบฒเบกเบฅเบฑเบš:

  • DOCKER_REGISTRY - เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ‚เบญเบ‡ Docker repository เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ (docker.helloworld.ru);
  • DOCKER_LOGIN - เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš Docker repository;
  • DOCKER_PASSWORD - เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบœเปˆเบฒเบ™โ€‹เบเบฑเบšโ€‹เบกเบฑเบ™โ€‹;
  • DEPLOY_HOST โ€” เป€เบˆเบปเป‰เบฒโ€‹เบžเบฒเบšโ€‹เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบเบฐโ€‹เบ”เบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบซเบฒเบ™ Plesk เบกเบตโ€‹เปƒเบซเป‰ (เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹: Helloworld.com: 8443 เบซเบผเบท 123.4.56.78:8443);
  • DEPLOY_BACK_PROD_TOKEN - token เบชเปเบฒเบฅเบฑเบš deployment เบเบฑเบš prod-repository เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ (เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ Deployment เปƒเบ™ Plesk p. 4);
  • DEPLOY_BACK_DEV_TOKEN - token เบชเปเบฒเบฅเบฑเบš deployment เบเบฑเบš dev repository เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เปเบฅเบฐโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบชเบฒเบกโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹:

  • เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเป€เบœเบตเบเปเบœเปˆเบฎเบนเบšเบžเบฒเบšเปƒเบ™ repository เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ;
  • เปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบ™เบ–เบฑเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบซเบกเปˆ;
  • เบ™เบณเปƒเบŠเป‰เบเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฒเบ‚เบฒ (dev/master).

frontend

เป„เบŸเบฅเปŒ deploy.yml เบชเปเบฒเบฅเบฑเบš repository เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ Beck เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบกเบฑเบ™เบ‚เบฒเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™เปเบฅเบฐเบ›เปˆเบฝเบ™เบŠเบทเปˆเบ‚เบญเบ‡ tokens เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰. เบ„เบงเบฒเบกเบฅเบฑเบšเบชเปเบฒเบฅเบฑเบš repository เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹

เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ•เบปเบงเปเบ—เบ™เบœเปˆเบฒเบ™ Nginx

เบ”เบต, เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบ—เบตเปˆเบชเบธเบ”. เบกเบฑเบ™เบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒเปเบฅเบฐเบ‚เบฒเบญเบญเบเป„เบ›เบซเบฒเบ–เบฑเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบœเปˆเบฒเบ™ Nginx. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบงเบกเป€เบญเบปเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เปเบฅเป‰เบงเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 5 เบ‚เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker Registry. เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบ„เบงเบ™เบ–เบทเบเป€เบฎเบฑเบ”เบŠเป‰เบณเบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ”เป‰เบฒเบ™เบซเบผเบฑเบ‡ เปเบฅเบฐเบ”เป‰เบฒเบ™เปœเป‰เบฒเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก dev เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™.

เบ‚เป‰เบญเบเบˆเบฐเปƒเบซเป‰เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเปเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

backend

CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular

frontend

CI/CD เปƒเบ™ Github Actions เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Flask+Angular
เบ„เบงเบฒเบกเบเบฐเบˆเปˆเบฒเบ‡เปเบˆเป‰เบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™. URL เบ—เบฑเบ‡เปเบปเบ”เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›เบซเบฒเบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบ”เป‰เบฒเบ™เปœเป‰เบฒ, เบเบปเบเป€เบงเบฑเป‰เบ™เบญเบฑเบ™เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ /api/ - เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™ proxied เบเบฑเบšโ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹เบซเบผเบฑเบ‡ (เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹ เปƒเบ™เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡, เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ /api/).

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบˆเบฐเบกเบตเบขเบนเปˆเปƒเบ™ helloworld.ru เปเบฅเบฐ dev.helloworld.ru (prod- เปเบฅเบฐ dev-environments, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš).

เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบเบฐเบเบฝเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปƒเบ™ Flask เปเบฅเบฐ Angular เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ—เปเปˆเปƒเบ™ Github Actions เป€เบžเบทเปˆเบญเบกเป‰เบงเบ™เบกเบฑเบ™เบญเบญเบเป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเปƒเบŠเป‰ Plesk.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบŠเป‰เปเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš repositories เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”: เป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡, เบ”เป‰เบฒเบ™เปœเป‰เบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™