เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
เช† เชฒเซ‡เช–เชฎเชพเช‚, เชนเซเช‚ Plesk เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซ‡เชจเชฒ เช…เชจเซ‡ Github เช•เซเชฐเชฟเชฏเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ CI/CD เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ‹ เชฎเชพเชฐเซ‹ เช…เชจเซเชญเชต เชถเซ‡เชฐ เช•เชฐเซ€เชถ. เช†เชœเซ‡ เช†เชชเชฃเซ‡ เชถเซ€เช–เซ€เชถเซเช‚ เช•เซ‡ "เชนเซ‡เชฒเซ‹เชตเชฐเซเชฒเซเชก" เชจเชพเชฎ เชธเชพเชฅเซ‡ เชธเชฐเชณ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเชตเซ‹. เชคเซ‡ เชซเซเชฒเชพเชธเซเช• เชชเชพเชฏเชฅเซ‹เชจ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชฎเชพเช‚ เชธเซ‡เชฒเซ‡เชฐเซ€ เช•เชพเชฎเชฆเชพเชฐเซ‹ เช…เชจเซ‡ เช•เซ‹เชฃเซ€เชฏ 8 เชซเซเชฐเชจเซเชŸเชเชจเซเชก เชธเชพเชฅเซ‡ เชฒเช–เชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡.

เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชเชจเซ€ เชฒเชฟเช‚เช•เซเชธ: เชฌเซ‡เช•เชเชจเซเชก, เช…เช—เซเชฐเชญเชพเช—.

เชฒเซ‡เช–เชจเชพ เชชเชนเซ‡เชฒเชพ เชญเชพเช—เชฎเชพเช‚, เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชญเชพเช—เซ‹ เชœเซ‹เชˆเชถเซเช‚. เชฌเซ€เชœเชพเชฎเชพเช‚, เช…เชฎเซ‡ Plesk เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เชเช•เซเชธเซเชŸเซ‡เชจเซเชถเชจเซเชธ เช…เชจเซ‡ เช˜เชŸเช•เซ‹ (DB, RabbitMQ, Redis, Docker, เชตเช—เซ‡เชฐเซ‡) เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚ เชคเซ‡ เชถเซ‹เชงเซ€เชถเซเช‚.

เชคเซเชฐเซ€เชœเชพ เชญเชพเช—เชฎเชพเช‚, เช…เชฎเซ‡ เช†เช–เชฐเซ‡ เชธเชฎเชœเซ€เชถเซเช‚ เช•เซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ dev เช…เชจเซ‡ prod เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช‚ เชœเชฎเชพเชตเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเซ€. เช…เชจเซ‡ เชชเช›เซ€ เช…เชฎเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เชธเชพเช‡เชŸ เชถเชฐเซ‚ เช•เชฐเซ€เชถเซเช‚.

เช…เชจเซ‡ เชนเชพ, เชนเซเช‚ เชฎเชพเชฐเซ‹ เชชเชฐเชฟเชšเชฏ เช†เชชเชตเชพเชจเซเช‚ เชญเซ‚เชฒเซ€ เช—เชฏเซ‹. เชฎเชพเชฐเซเช‚ เชจเชพเชฎ เช“เชฒเซ‡เช— เชฌเซ‹เชฐเซเชเซ‹เชต เช›เซ‡, เชนเซเช‚ เชกเซ‹เชฎเช•เซเชฒเชฟเช• เช–เชพเชคเซ‡ เชฎเซ‹เชฐเซเชŸเช—เซ‡เชœ เชฎเซ‡เชจเซ‡เชœเชฐ เชฎเชพเชŸเซ‡เชจเซ€ CRM เชŸเซ€เชฎเชฎเชพเช‚ เชซเซเชฒเชธเซเชŸเซ‡เช• เชกเซ‡เชตเชฒเชชเชฐ เช›เซเช‚.

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชเชพเช‚เช–เซ€

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชฌเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เช เชœเซ‹เชˆเช - เชฌเซ‡เช•เชเชจเซเชก เช…เชจเซ‡ เชซเซเชฐเชจเซเชŸ - เช…เชจเซ‡ เช•เซ‹เชก เช‰เชชเชฐ เชœเชˆเช.

เชฌเซ‡เช•เชเชจเซเชก: เชซเซเชฒเชพเชธเซเช•+เชธเซ‡เชฒเซ‡เชฐเซ€

เชชเชพเช›เชณเชจเชพ เชญเชพเช— เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เชเช• เชธเชฎเซ‚เชน เชฒเซ€เชงเซ‹ เชœเซ‡ เชชเชพเชฏเชฅเซ‹เชจ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชฎเชพเช‚ เช–เซ‚เชฌ เชœ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เช›เซ‡: เชซเซเชฒเชพเชธเซเช• เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• (เชเชชเซ€เช†เชˆ เชฎเชพเชŸเซ‡) เช…เชจเซ‡ เชธเซ‡เชฒเชฐเซ€ (เชŸเชพเชธเซเช• เช•เชคเชพเชฐ เชฎเชพเชŸเซ‡). SQLAchemy เชจเซ‹ เช‰เชชเชฏเซ‹เช— ORM เชคเชฐเซ€เช•เซ‡ เชฅเชพเชฏ เช›เซ‡. เชเชฒเซ‡เชฎเซเชฌเชฟเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชธเซเชฅเชณเชพเช‚เชคเชฐ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เชนเซ‡เชจเซเชกเชฒเซเชธเชฎเชพเช‚ JSON เชฎเชพเชจเซเชฏเชคเชพ เชฎเชพเชŸเซ‡ - เชฎเชพเชฐเซเชถเชฎเซ‡เชฒเซ‹.

ะ’ เชญเช‚เชกเชพเชฐ เชเช• Readme.md เชซเชพเช‡เชฒ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชฎเชพเชณเช–เชพเชจเชพ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“ เช›เซ‡.

เชตเซ‡เชฌ เชชเชพเชฐเซเชŸ API เชเช•เชฆเชฎ เชธเชฐเชณ, 6 เชชเซ‡เชจ เชธเชฎเชพเชตเซ‡ เช›เซ‡:

  • /ping - เช‰เชชเชฒเชฌเซเชงเชคเชพ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡;
  • เชจเซ‹เช‚เชงเชฃเซ€, เช…เชงเชฟเช•เซƒเชคเชคเชพ, เชกเซ€-เช“เชฅเซ‹เชฐเชพเช‡เชเซ‡เชถเชจ เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชนเซ‡เชจเซเชกเชฒเซเชธ;
  • เชเช• เช‡เชฎเซ‡เช‡เชฒ เชนเซ‡เชจเซเชกเชฒ เช•เซ‡ เชœเซ‡ เช•เชพเชฐเซเชฏเชจเซ‡ เชธเซ‡เชฒเชฐเซ€ เช•เชคเชพเชฐเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡.

เชธเซ‡เชฒเชฐเซ€ เชญเชพเช— เชตเชงเซ เชธเชฐเชณ, เชคเซเชฏเชพเช‚ เชฎเชพเชคเซเชฐ เชเช• เชธเชฎเชธเซเชฏเชพ เช›เซ‡ send_mail_task.

เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ /conf เชคเซเชฏเชพเช‚ เชฌเซ‡ เชธเชฌเชซเซ‹เชฒเซเชกเชฐเซเชธ เช›เซ‡:

  • docker เชฌเซ‡ เชกเซ‹เช•เชฐเชซเชพเชˆเชฒเซเชธ เชธเชพเชฅเซ‡ (base.dockerfile เชญเชพเช—เซเชฏเซ‡ เชœ เชฌเชฆเชฒเชพเชคเซ€ เช†เชงเชพเชฐ เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ Dockerfile เชฎเซเช–เซเชฏ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เช“ เชฎเชพเชŸเซ‡);
  • .env_files - เชตเชฟเชตเชฟเชง เชชเชฐเซเชฏเชพเชตเชฐเชฃเซ‹ เชฎเชพเชŸเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ เชธเชพเชฅเซ‡เชจเซ€ เชซเชพเช‡เชฒเซ‹ เชธเชพเชฅเซ‡.

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชฎเซ‚เชณเชฎเชพเช‚ เชšเชพเชฐ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช เชซเชพเช‡เชฒเซ‹ เช›เซ‡:

  • docker-compose.local.db.yml เชตเชฟเช•เชพเชธ เชฎเชพเชŸเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชกเซ‡เชŸเชพเชฌเซ‡เช เชเช•เชคเซเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡;
  • docker-compose.local.workers.yml เช•เชพเชฐเซเชฏเช•เชฐ, เชกเซ‡เชŸเชพเชฌเซ‡เช, เชฐเซ‡เชกเชฟเชธ เช…เชจเซ‡ เชฐเซ‡เชฌเชฟเชŸเชเชฎเช•เซเชฏเซเชจเชพ เชธเซเชฅเชพเชจเชฟเช• เช‰เช›เซ‡เชฐ เชฎเชพเชŸเซ‡;
  • docker-compose.test.yml เชœเชฎเชพเชตเชŸ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡;
  • docker-compose.yml เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡.

เช…เชจเซ‡ เช›เซ‡เชฒเซเชฒเซเช‚ เชซเซ‹เชฒเซเชกเชฐ เชœเซ‡เชฎเชพเช‚ เช…เชฎเชจเซ‡ เชฐเชธ เช›เซ‡ - .ci-cd. เชคเซ‡ เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡ เชถเซ‡เชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡:

  • deploy.sh - เชธเซเชฅเชณเชพเช‚เชคเชฐ เช…เชจเซ‡ เชœเชฎเชพเชตเชŸเชจเซ€ เชถเชฐเซ‚เช†เชค. เช—เซ€เชฅเชฌ เช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฌเชพเช‚เชงเชตเชพ เช…เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชชเช›เซ€ เชธเชฐเซเชตเชฐ เชชเชฐ เชšเชพเชฒเซ‡ เช›เซ‡;
  • rollback.sh - เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเชพ เชชเชพเช›เชฒเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชชเชฐ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซเช‚ เชฐเซ‹เชฒเชฌเซ‡เช•;
  • curl_tg.sh - เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชชเชฐ เชœเชฎเชพเชตเชŸ เชธเซ‚เชšเชจเชพเช“ เชฎเซ‹เช•เชฒเชตเซ€.

เช•เซ‹เชฃเซ€เชฏ เชชเชฐ เช…เช—เซเชฐเชญเชพเช—

เชซเซเชฐเชจเซเชŸ เชธเชพเชฅเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชฌเซ‡เช• เช•เชฐเชคเชพเช‚ เช˜เชฃเซเช‚ เชธเชฐเชณ. เช†เช—เชณเชจเชพ เชญเชพเช—เชฎเชพเช‚ เชคเซเชฐเชฃ เชชเซƒเชทเซเช เซ‹ เช›เซ‡:

  • เชˆเชฎเซ‡เชฒ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชซเซ‹เชฐเซเชฎ เช…เชจเซ‡ เชเช•เซเชเชฟเชŸ เชฌเชŸเชจ เชธเชพเชฅเซ‡เชจเซเช‚ เชฎเซเช–เซเชฏ เชชเซƒเชทเซเช .
  • เชฒเซ‰เช—เชฟเชจ เชชเซƒเชทเซเช .
  • เชจเซ‹เช‚เชงเชฃเซ€ เชชเซƒเชทเซเช .

เชฎเซเช–เซเชฏ เชชเซƒเชทเซเช  เชคเชชเชธเซเชตเซ€ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
เชฐเซเชŸ เชชเชฐ เชฌเซ‡ เชซเชพเช‡เชฒเซ‹ เช›เซ‡ Dockerfile ะธ docker-compose.yml, เชคเซ‡เชฎเชœ เชชเชฐเชฟเชšเชฟเชค เชซเซ‹เชฒเซเชกเชฐ .ci-cd เชชเชพเช›เชณเชจเชพ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เช•เชฐเชคเชพ เชฅเซ‹เชกเซ€ เช“เช›เซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชธเชพเชฅเซ‡ (เชšเชพเชฒเชคเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฎเชพเชŸเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชฆเซ‚เชฐ เช•เชฐเซ€).

Plesk เชฎเชพเช‚ เชเช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชšเชพเชฒเซ‹ Plesk เชธเซ‡เชŸ เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เช…เชฎเชพเชฐเซ€ เชธเชพเช‡เชŸ เชฎเชพเชŸเซ‡ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เชฌเชจเชพเชตเซ€เชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช.

เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชชเซเชฒเซ‡เชธเซเช•เชฎเชพเช‚, เช…เชฎเชจเซ‡ เชšเชพเชฐ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

  • Docker Plesk เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒเชฎเชพเช‚ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซ‡ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเชตเชพ เช…เชจเซ‡ เชฆเซƒเชทเซเชŸเชฟเชจเซ€ เชฐเซ€เชคเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡;
  • Git เชธเชฐเซเชตเชฐ เชชเชฐ เชœเชฎเชพเชตเชŸ เชชเช—เชฒเชพเช‚เชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡;
  • Let's Encrypt เชฎเชซเชค TLS เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ (เช…เชจเซ‡ เชธเซเชตเชคเชƒ-เชจเชตเซ€เช•เชฐเชฃ);
  • Firewall เช‡เชจเช•เชฎเชฟเช‚เช— เชŸเซเชฐเชพเชซเชฟเช•เชจเชพ เชซเชฟเชฒเซเชŸเชฐเชฟเช‚เช—เชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡.

เชคเชฎเซ‡ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชตเชฟเชญเชพเช—เชฎเชพเช‚ Plesk เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒ เชฆเซเชตเชพเชฐเชพ เชคเซ‡เชฎเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
เช…เชฎเซ‡ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชฎเชพเชŸเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชถเซเช‚ เชจเชนเซ€เช‚, เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช…เชฎเชพเชฐเชพ เชกเซ‡เชฎเซ‹ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช•เชฐเชถเซ‡.

เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เช…เชจเซ‡ เชธเชพเช‡เชŸ เชฌเชจเชพเชตเซ‹

เช†เช—เชณ, เช…เชฎเชพเชฐเซ‡ เช…เชฎเชพเชฐเซ€ helloworld.ru เชตเซ‡เชฌเชธเชพเช‡เชŸ เชฎเชพเชŸเซ‡ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซเชฏเชพเช‚ dev.helloworld.ru เชธเชฌเชกเซ‹เชฎเซ‡เช‡เชจ เช‰เชฎเซ‡เชฐเชตเซเช‚ เชชเชกเชถเซ‡.

  1. helloworld.ru เชกเซ‹เชฎเซ‡เชจ เชฎเชพเชŸเซ‡ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ เชธเชฟเชธเซเชŸเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เช—เชฟเชจ-เชชเชพเชธเชตเชฐเซเชกเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‹:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
    เชชเซƒเชทเซเช เชจเชพ เชคเชณเชฟเชฏเซ‡ เชฌเซ‰เช•เซเชธเชจเซ‡ เชšเซ‡เช• เช•เชฐเซ‹ เชฒเซ‡เชŸเซเชธ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸ เชตเชกเซ‡ เชกเซ‹เชฎเซ‡เชจเชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เช•เชฐเซ‹เชœเซ‹ เช†เชชเชฃเซ‡ เชธเชพเช‡เชŸ เชฎเชพเชŸเซ‡ HTTPS เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เชคเซ‹:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  2. เช†เช—เชณ, เช† เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจเชฎเชพเช‚, เชเช• เชธเชฌเชกเซ‹เชฎเซ‡เชจ dev.helloworld.ru เชฌเชจเชพเชตเซ‹ (เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชคเชฎเซ‡ เชฎเชซเชค TLS เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชชเชฃ เช†เชชเซ€ เชถเช•เซ‹ เช›เซ‹):

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

เชธเชฐเซเชตเชฐ เช˜เชŸเช•เซ‹ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเชฐเซเชตเชฐ เช›เซ‡ OS เชกเซ‡เชฌเชฟเชฏเชจ เชธเซเชŸเซเชฐเซ‡เชš 9.12 เช…เชจเซ‡ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซ‡เชจเชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ เช›เซ‡ เชชเซเชฒเซ‡เชธเซเช• เช“เชฌเซเชธเชฟเชกเซ€เชฏเชจ 18.0.27.

เช…เชฎเชพเชฐเซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

  • PostgreSQL (เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, dev เช…เชจเซ‡ prod เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชŸเซ‡ เชฌเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เชธเชพเชฅเซ‡ เชเช• เชธเชฐเซเชตเชฐ เชนเชถเซ‡).
  • RabbitMQ (เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชŸเซ‡ เชตเชฟเชตเชฟเชง เชตเซ‹เชธเซเชŸ เชธเชพเชฅเซ‡ เชธเชฎเชพเชจ, เชธเชฎเชพเชจ เช‰เชฆเชพเชนเชฐเชฃ).
  • เชฌเซ‡ Redis เช‰เชฆเชพเชนเชฐเชฃเซ‹ (dev เช…เชจเซ‡ prod เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชŸเซ‡).
  • เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ (เชฌเชฟเชฒเซเชŸ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเซ‹เชจเชพ เชธเซเชฅเชพเชจเชฟเช• เชธเซเชŸเซ‹เชฐเซ‡เชœ เชฎเชพเชŸเซ‡).
  • เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชฎเชพเชŸเซ‡ UI.

เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡ เชเชธเช•เซเชฏเซเชเชฒ

Plesk เชชเชนเซ‡เชฒเซ‡เชฅเซ€ PostgreSQL DBMS เชธเชพเชฅเซ‡ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ เชจเชฅเซ€ (Plesk Obsidian เชฒเช–เชคเซ€ เชตเช–เชคเซ‡ เช†เชงเชพเชฐเชญเซ‚เชค เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ 8.4โ€“10.8). เช…เชฎเชจเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ เชœเซ‹เชˆเช เช›เซ‡ (เช† เชฒเซ‡เช–เชจ เชธเชฎเชฏเซ‡ 12.3), เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เชถเซเช‚.

เชจเซ‡เชŸ เชชเชฐ เชกเซ‡เชฌเชฟเชฏเชจ เชชเชฐ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเซ€ เชฌเชงเซ€ เชตเชฟเช—เชคเชตเชพเชฐ เชธเซ‚เชšเชจเชพเช“ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ), เชคเซ‡เชฅเซ€ เชนเซเช‚ เชคเซ‡เชฎเชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถ เชจเชนเซ€เช‚, เชนเซเช‚ เชซเช•เซเชค เช†เชฆเซ‡เชถเซ‹ เช†เชชเซ€เชถ:

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 เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€เช. เชคเซ‡เชจเซ‡ เชกเซ‡เชฌเชฟเชฏเชจ เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡:

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 Plesk เชฎเชพเชŸเซ‡.

  1. เช…เชฎเซ‡ Plesk เชชเชฐ เชœเชˆเช เช›เซ€เช, เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชตเชฟเชญเชพเช— เชชเชฐ เชœเชˆเช เช›เซ€เช, เชกเซ‹เช•เชฐ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชถเซ‹เชงเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช (เช…เชฎเชจเซ‡ เชเช• เชฎเชซเชค เชธเช‚เชธเซเช•เชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡):

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  2. เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชชเชฐ เชœเชพเช“, เชถเซ‹เชง เชฆเซเชตเชพเชฐเชพ เช›เชฌเซ€ เชถเซ‹เชงเซ‹ redis bitnami เช…เชจเซ‡ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  3. เช…เชฎเซ‡ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡เชฒ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชœเชˆเช เช›เซ€เช เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€เช เช›เซ€เช: เชชเซ‹เชฐเซเชŸ เชธเซเชชเชทเซเชŸ เช•เชฐเซ‹, เชฎเชนเชคเซเชคเชฎ เชซเชพเชณเชตเซ‡เชฒ RAM เช•เชฆ, เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชฎเชพเช‚ เชชเชพเชธเชตเชฐเซเชก, เช…เชจเซ‡ เชตเซ‹เชฒเซเชฏเซเชฎ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเซ‹:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  4. เช…เชฎเซ‡ เชชเซเชฐเซ‹เชก เช•เชจเซเชŸเซ‡เชจเชฐ เชฎเชพเชŸเซ‡ เชชเช—เชฒเชพเช‚ 2-3 เช•เชฐเซ€เช เช›เซ€เช, เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เช…เชฎเซ‡ เชซเช•เซเชค เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฌเชฆเชฒเซ€เช เช›เซ€เช: เชชเซ‹เชฐเซเชŸ, เชชเชพเชธเชตเชฐเซเชก, เชฐเซ‡เชฎ เช•เชฆ เช…เชจเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เชตเซ‹เชฒเซเชฏเซเชฎ เชซเซ‹เชฒเซเชกเชฐเชจเซ‹ เชชเชพเชฅ:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€

เชฎเซ‚เชณเชญเซ‚เชค เชธเซ‡เชตเชพเช“ เช‰เชชเชฐเชพเช‚เชค, เชธเชฐเซเชตเชฐ เชชเชฐ เชคเชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เชกเซ‹เช•เชฐ เช‡เชฎเซ‡เชœ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเซ‚เช•เชตเซ€ เชธเชฐเชธ เชฐเชนเซ‡เชถเซ‡. เชธเชฆเชจเชธเซ€เชฌเซ‡, เชธเชฐเซเชตเชฐ เชธเซเชชเซ‡เชธ เชนเชตเซ‡ เชเช•เชฆเชฎ เชธเชธเซเชคเซ€ เช›เซ‡ (เชกเซ‹เช•เชฐเชนเชฌ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เช•เชฐเชคเชพเช‚ เชšเซ‹เช•เซเช•เชธเชชเชฃเซ‡ เชธเชธเซเชคเซ€), เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡.

เช…เชฎเซ‡ เช‡เชšเซเช›เซ€เช เช›เซ€เช:

  • เชชเชพเชธเชตเชฐเซเชก-เชธเช‚เชฐเช•เซเชทเชฟเชค เชกเซ‹เช•เชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชธเชฌเชกเซ‹เชฎเซ‡เชจ เชชเชฐ เชธเซเชฒเชญ เช›เซ‡ https://docker.helloworld.ru;
  • เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เช›เชฌเซ€เช“ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ UI, เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ https://docker-ui.helloworld.ru.

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡:

  1. เชšเชพเชฒเซ‹ เช…เชฎเชพเชฐเชพ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจเชฎเชพเช‚ Plesk เชฎเชพเช‚ เชฌเซ‡ เชธเชฌเชกเซ‹เชฎเซ‡เชจเซเชธ เชฌเชจเชพเชตเซ€เช: docker.helloworld.ru เช…เชจเซ‡ docker-ui.helloworld.ru, เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เชšเชพเชฒเซ‹ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เช—เซ‹เช เชตเซ€เช.
  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 เชซเชพเช‡เชฒ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚:
    htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
  4. เช•เชจเซเชŸเซ‡เชจเชฐ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‹ เช…เชจเซ‡ เช‰เชชเชพเชกเซ‹:
    docker-compose up -d
  5. เช…เชจเซ‡ เช†เชชเชฃเซ‡ Nginx เชจเซ‡ เช…เชฎเชพเชฐเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เชชเชฐ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† Plesk เชฆเซเชตเชพเชฐเชพ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

docker.helloworld.ru เช…เชจเซ‡ docker-ui.helloworld.ru เชธเชฌเชกเซ‹เชฎเซ‡เชจเซเชธ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชชเช—เชฒเชพเช‚ เชญเชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

เช•เชฒเชฎ เชฆเซ‡เชต เชธเชพเชงเชจเซ‹ เช…เชฎเชพเชฐเซ€ เชธเชพเช‡เชŸ เชชเชฐ เชœเชพเช“ เชกเซ‹เช•เชฐ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชจเชฟเชฏเชฎเซ‹:

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
เช…เชจเซ‡ เช…เชฎเชพเชฐเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เชชเชฐ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช‡เชจเช•เชฎเชฟเช‚เช— เชŸเซเชฐเชพเชซเชฟเช• เชฎเชพเชŸเซ‡ เชเช• เชจเชฟเชฏเชฎ เช‰เชฎเซ‡เชฐเซ‹:

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  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
    เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฌเซเชฐเชพเช‰เช เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เช เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชฌเซเชฐเชพเช‰เชเชฐ เชเช• เช…เชงเชฟเช•เซƒเชคเชคเชพ เชตเชฟเชจเซเชกเซ‹ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชถเซ‡ เชœเซเชฏเชพเช‚ เชคเชฎเชพเชฐเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ เช…เชจเซ‡ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เชคเซ‡ เชชเช›เซ€, เช…เชฎเชจเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชเชจเซ€ เชธเซ‚เชšเชฟ เชธเชพเชฅเซ‡เชจเชพ เชชเซƒเชทเซเช  เชชเชฐ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ (เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡, เชคเซ‡ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช–เชพเชฒเซ€ เชนเชถเซ‡):

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

Plesk เชซเชพเชฏเชฐเชตเซ‹เชฒเชฎเชพเช‚ เชชเซ‹เชฐเซเชŸ เช–เซ‹เชฒเชตเชพ

เช˜เชŸเช•เซ‹เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช…เชจเซ‡ เช—เซ‹เช เชตเซเชฏเชพ เชชเช›เซ€, เช…เชฎเชพเชฐเซ‡ เชชเซ‹เชฐเซเชŸเซเชธ เช–เซ‹เชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช˜เชŸเช•เซ‹ เชกเซ‹เช•เชฐ เช•เชจเซเชŸเซ‡เชจเชฐ เช…เชจเซ‡ เชฌเชพเชนเซเชฏ เชจเซ‡เชŸเชตเชฐเซเช•เชฅเซ€ เชธเซเชฒเชญ เชฅเชˆ เชถเช•เซ‡.

เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช†เชชเชฃเซ‡ เช…เช—เชพเช‰ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ Plesk เชฎเชพเชŸเซ‡ เชซเชพเชฏเชฐเชตเซ‹เชฒ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซเช‚.

  1. เชชเชฐ เชœเชพเช“ เชธเชพเชงเชจเซ‹ เช…เชจเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ > เชธเซ‡เชŸเชฟเช‚เช—เซเชธ > เชซเชพเชฏเชฐเชตเซ‹เชฒ:
    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
  2. เชชเชฐ เชœเชพเช“ Plesk เชซเชพเชฏเชฐเชตเซ‹เชฒ เชจเชฟเชฏเชฎเซ‹เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ‹> เช•เชธเซเชŸเชฎ เชจเชฟเชฏเชฎ เช‰เชฎเซ‡เชฐเซ‹ เช…เชจเซ‡ เชกเซ‹เช•เชฐ เชธเชฌเชจเซ‡เชŸ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเชพ TCP เชชเซ‹เชฐเซเชŸ เช–เซ‹เชฒเซ‹ (172.0.0.0 / 8):
    เชฐเซ‡เชฌเชฟเชŸเชเชฎเช•เซเชฏเซ: 1883, 4369, 5671-5672, 25672, 61613-61614
    เชฐเซ‡เชกเชฟเชธ: 32785, 32786

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  3. เช…เชฎเซ‡ เชเช• เชจเชฟเชฏเชฎ เชชเชฃ เช‰เชฎเซ‡เชฐเซ€เชถเซเช‚ เชœเซ‡ PostgreSQL เชชเซ‹เชฐเซเชŸ เช…เชจเซ‡ RabbitMQ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชชเซ‡เชจเชฒเชจเซ‡ เชฌเชนเชพเชฐเชจเซ€ เชฆเซเชจเชฟเชฏเชพเชฎเชพเช‚ เช–เซ‹เชฒเชถเซ‡:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  4. เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฒเชพเช—เซ เช•เชฐเซ‹ เชฌเชŸเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเชฟเชฏเชฎเซ‹ เชฒเชพเช—เซ เช•เชฐเซ‹:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชšเชพเชฒเซ‹ เชธเซŒเชฅเซ€ เชฐเชธเชชเซเชฐเชฆ เชญเชพเช— เชชเชฐ เชœเชˆเช - เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชชเชพเชˆเชชเชฒเชพเชˆเชจ เชธเซ‡เชŸ เช•เชฐเชตเซ€ เช…เชจเซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เชชเชนเซ‹เช‚เชšเชพเชกเชตเซ‹.

เช† เชชเชพเชˆเชชเชฒเชพเชˆเชจเชฎเชพเช‚ เชฌเซ‡ เชญเชพเช—เซ‹ เชนเชถเซ‡:

  • เช›เชฌเซ€ เชฌเชจเชพเชตเชตเซ€ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชตเซ€ (เชฌเซ‡เช•เชเชจเซเชก เชฎเชพเชŸเซ‡) - เช—เซ€เชฅเชฌ เชฌเชพเชœเซ เชชเชฐ;
  • เชธเซเชฅเชณเชพเช‚เชคเชฐ เชšเชฒเชพเชตเชตเซเช‚ (เชฌเซ‡เช•เชเชจเซเชก เชฎเชพเชŸเซ‡) เช…เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชœเชฎเชพเชตเชตเซเช‚ - เชธเชฐเซเชตเชฐ เชชเชฐ.

Plesk เชฎเชพเชŸเซ‡ เชœเชฎเชพเชตเชŸ

เชšเชพเชฒเซ‹ เชชเชนเซ‡เชฒเชพ เชฌเซ€เชœเชพ เชฎเซเชฆเซเชฆเชพ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเซ€เช (เช•เชพเชฐเชฃ เช•เซ‡ เชชเซเชฐเชฅเชฎ เชคเซ‡เชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เช›เซ‡).

เช…เชฎเซ‡ Plesk เชฎเชพเชŸเซ‡ Git เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชœเชฎเชพเชตเชŸ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช—เซ‹เช เชตเซ€เชถเซเช‚.

เชฌเซ‡เช•เชเชจเซเชก เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เชก เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชธเชพเชฅเซ‡เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เชตเชฟเชšเชพเชฐ เช•เชฐเซ‹.

  1. เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชนเซ‡เชฒเซ‹เชตเชฐเซเชฒเซเชก เชตเซ‡เชฌเชธเชพเช‡เชŸเชจเชพ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เชชเชฐ เชœเชˆเช เช›เซ€เช เช…เชจเซ‡ เช—เชฟเชŸ เชธเชฌเชธเซ‡เช•เซเชถเชจ เชชเชฐ เชœเชˆเช เช›เซ€เช:

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  2. "เชฐเชฟเชฎเซ‹เชŸ เช—เชฟเชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€" เชซเซ€เชฒเซเชกเชฎเชพเช‚ เช…เชฎเชพเชฐเชพ เช—เซ€เชฅเชฌ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชฒเชฟเช‚เช• เชฆเชพเช–เชฒ เช•เชฐเซ‹ เช…เชจเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชซเซ‹เชฒเซเชกเชฐ เชฌเชฆเชฒเซ‹ httpdocs เชฌเซ€เชœเชพเชจเซ‡ (เชฆเชพ.เชค. /httpdocs/hw_back):

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  3. เชชเชพเช›เชฒเชพ เชชเช—เชฒเชพเชฎเชพเช‚เชฅเซ€ SSH เชœเชพเชนเซ‡เชฐ เช•เซ€เชจเซ€ เชจเช•เชฒ เช•เชฐเซ‹ เช…เชจเซ‡ เช‰เชฎเซ‡เชฐเซ‹ เชคเซ‡ เช—เซ€เชฅเชฌ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เช›เซ‡.
  4. เชชเช—เชฒเซเช‚ 2 เชฎเชพเช‚ เชธเซเช•เซเชฐเซ€เชจ เชชเชฐ เช“เช•เซ‡ เช•เซเชฒเชฟเช• เช•เชฐเซ‹, เชœเซ‡ เชชเช›เซ€ เช…เชฎเชจเซ‡ Plesk เชฎเชพเช‚ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชชเซƒเชทเซเช  เชชเชฐ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เชฎเชพเชธเซเชŸเชฐ เชฌเซเชฐเชพเชจเซเชšเชจเซ‡ เช•เชฎเชฟเชŸ เชชเชฐ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฐ เชœเชพเช“ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏ เชธเชพเชšเชตเซ‹ Webhook URL (เช—เซ€เชฅเชฌ เช•เซเชฐเชฟเชฏเชพเช“ เชธเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช…เชฎเชจเซ‡ เชชเช›เซ€เชฅเซ€ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡):

    เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

  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} - เชธเชฐเซเชตเชฐ เชชเชฐ เชฌเซ‡เช•เชเชจเซเชก เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเชพ เชชเซเชฐเซ‹เชก เชซเซ‹เชฒเซเชกเชฐเชจเซ‹ เชชเชพเชฅ;
    {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. เช…เชฎเชพเชฐเชพ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจเชฎเชพเช‚เชฅเซ€ เชกเซ‹เช•เชฐ เชœเซ‚เชฅเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช‰เชฎเซ‡เชฐเซ‹ (เชœเซ‡เชฅเซ€ เชคเซ‡เช“ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเซ€ เชถเช•เซ‡):
    sudo usermod -aG docker helloworld_admin

เชฌเซ‡เช•เชเชจเซเชก เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เช…เชจเซ‡ เชซเซเชฐเชจเซเชŸเชเชจเซเชก เชฎเชพเชŸเซ‡เชจเซเช‚ เชกเซ‡เชต เชเชจเซเชตเชพเชฐเซเชฏเชฎเซ‡เชจเซเชŸ เช เชœ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เช›เซ‡.

Github เช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เชœเชฎเชพเชตเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจ

เชšเชพเชฒเซ‹ Github เช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เช…เชฎเชพเชฐเซ€ CI/CD เชชเชพเช‡เชชเชฒเชพเช‡เชจเชจเซ‹ เชชเซเชฐเชฅเชฎ เชญเชพเช— เชธเซ‡เชŸ เช•เชฐเชตเชพ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€เช.

เชชเชพเชถเซเชตเชญเชพเช—

เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ deploy.yml เชซเชพเช‡เชฒ.

เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซเช‚ เชชเชฆเชšเซเช›เซ‡เชฆเชจ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชšเชพเชฒเซ‹ เช†เชชเชฃเซ‡ เช—เซ€เชฅเชฌเชฎเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เชธเชฟเช•เซเชฐเซ‡เชŸ เชšเชฒ เชญเชฐเซ€เช. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฐ เชœเชพเช“ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ -> เชฐเชนเชธเซเชฏเซ‹:

  • DOCKER_REGISTRY - เช…เชฎเชพเชฐเชพ เชกเซ‹เช•เชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซเช‚ เชฏเชœเชฎเชพเชจ (docker.helloworld.ru);
  • DOCKER_LOGIN - เชกเซ‹เช•เชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชฒเซ‹เช—เชฟเชจ เช•เชฐเซ‹;
  • DOCKER_PASSWORD - เชคเซ‡เชจเซ‹ เชชเชพเชธเชตเชฐเซเชก;
  • DEPLOY_HOST - เชนเซ‹เชธเซเชŸ เชœเซเชฏเชพเช‚ เชชเซเชฒเซ‡เชธเซเช• เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ: helloworld.com: 8443 เช…เชฅเชตเชพ 123.4.56.78:8443);
  • DEPLOY_BACK_PROD_TOKEN - เชธเชฐเซเชตเชฐ เชชเชฐ เชชเซเชฐเซ‹เชก-เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡ เชเช• เชŸเซ‹เช•เชจ (เช…เชฎเชจเซ‡ เชคเซ‡ Plesk p. 4 เชฎเชพเช‚ เชœเชฎเชพเชตเชŸเชฎเชพเช‚ เชฎเชณเซเชฏเซเช‚);
  • DEPLOY_BACK_DEV_TOKEN - เชธเชฐเซเชตเชฐ เชชเชฐ เชกเซ‡เชต เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡ เชŸเซ‹เช•เชจ.

เชœเชฎเชพเชตเชŸ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเชฐเชณ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชคเซเชฐเชฃ เชฎเซเช–เซเชฏ เชชเช—เชฒเชพเช‚ เชถเชพเชฎเซ‡เชฒ เช›เซ‡:

  • เช…เชฎเชพเชฐเชพ เชญเช‚เชกเชพเชฐเชฎเชพเช‚ เช›เชฌเซ€เชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชจ;
  • เชคเชพเชœเซ€ เชฌเชจเชพเชตเซ‡เชฒเซ€ เช›เชฌเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเซ‹;
  • เชถเชพเช–เชพ (เชฆเซ‡เชต/เชฎเชพเชธเซเชŸเชฐ) เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡ เช‡เชšเซเช›เชฟเชค เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชœเชฎเชพเชตเชŸ.

เช…เช—เซเชฐ

เชซเซเชฐเชจเซเชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเชพเชŸเซ‡ deploy.yml เชซเชพเช‡เชฒ เชฌเซ‡เช• เช•เชฐเชคเชพเช‚ เชฅเซ‹เชกเซเช‚ เช…เชฒเช—. เชคเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชธเชพเชฅเซ‡เชจเชพ เชชเช—เชฒเชพเชจเซ‹ เช…เชญเชพเชต เช›เซ‡ เช…เชจเซ‡ เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡ เชŸเซ‹เช•เชจเซเชธเชจเชพ เชจเชพเชฎ เชฌเชฆเชฒเซ‡ เช›เซ‡. เชซเซเชฐเชจเซเชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเชพเชŸเซ‡เชจเชพ เชฐเชนเชธเซเชฏเซ‹, เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เช…เชฒเช—เชฅเซ€ เชญเชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชธเชพเช‡เชŸ เชธเซ‡เชŸเช…เชช

Nginx เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชŸเซเชฐเชพเชซเชฟเช•

เชธเชพเชฐเซเช‚, เช…เชฎเซ‡ เช…เช‚เชคเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ€เช. เชคเซ‡ เชซเช•เซเชค Nginx เชฆเซเชตเชพเชฐเชพ เช…เชฎเชพเชฐเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เชชเชฐ เช‡เชจเช•เชฎเชฟเช‚เช— เช…เชจเซ‡ เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เชŸเซเชฐเชพเชซเชฟเช•เชจเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€เช‚เช—เชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชœ เชฐเชนเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชธเซ‡เชŸเช…เชชเชจเชพ เชชเช—เชฒเชพ 5 เชฎเชพเช‚ เช†เชตเชฐเซ€ เชฒเซ€เชงเซ€ เช›เซ‡. dev เช…เชจเซ‡ prod เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชชเชพเช›เชณ เช…เชจเซ‡ เช†เช—เชณเชจเชพ เชญเชพเช—เซ‹ เชฎเชพเชŸเซ‡ เชคเซ‡ เชœ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช.

เชนเซเช‚ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเชพ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เช†เชชเซ€เชถ.

เชชเชพเชถเซเชตเชญเชพเช—

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD

เช…เช—เซเชฐ

เชซเซเชฒเชพเชธเซเช•+เชเชจเซเช—เซเชฏเซเชฒเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชเช•เซเชถเชจเซเชธเชฎเชพเช‚ CI/CD
ะฃั‚ะพั‡ะฝะตะฝะธะต ัƒั‚ะพั‡ะฝะตะฝะธะต. เชฌเชงเชพ URL เชจเซ‡ เชซเซเชฐเชจเซเชŸเชเชจเซเชก เช•เชจเซเชŸเซ‡เชจเชฐ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชธเชฟเชตเชพเชฏ เช•เซ‡ เชคเซ‡ เชธเชพเชฅเซ‡ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ /api/ - เชคเซ‡เช“ เชชเชพเช›เชณเชจเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ (เชคเซ‡เชฅเซ€ เชชเชพเช›เชณเชจเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚, เชฌเชงเชพ เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เชธเชพเชฅเซ‡ เชถเชฐเซ‚ เชฅเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡ /api/).

เชชเชฐเชฟเชฃเชพเชฎเซ‹

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชธเชพเช‡เชŸ helloworld.ru เช…เชจเซ‡ dev.helloworld.ru (เช…เชจเซเช•เซเชฐเชฎเซ‡ prod- เช…เชจเซ‡ dev-environments) เชชเชฐ เช‰เชชเชฒเชฌเซเชง เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช.

เช•เซเชฒ เชฎเชณเซ€เชจเซ‡, เช…เชฎเซ‡ เชถเซ€เช–เซเชฏเชพ เช•เซ‡ เชซเซเชฒเชพเชธเซเช• เช…เชจเซ‡ เชเช‚เช—เซเชฏเซเชฒเชฐเชฎเชพเช‚ เชเช• เชธเชฐเชณ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ Plesk เชšเชฒเชพเชตเชคเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชฐเซ‹เชฒเช†เช‰เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ Github เช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเซ€.

เชนเซเช‚ เช•เซ‹เชก เชธเชพเชฅเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชเชจเซ€ เชฒเชฟเช‚เช•เซเชธเชจเซ‡ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸ เช•เชฐเซ€เชถ: เชฌเซ‡เช•เชเชจเซเชก, เช…เช—เซเชฐเชญเชพเช—.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹