ãã®èšäºã§ã¯ãPlesk ã³ã³ãããŒã« ããã«ãš Github Actions ã䜿çšã㊠CI/CD ãã»ããã¢ããããç§ã®çµéšãå
±æããŸãã ä»æ¥ã¯ããHelloworldããšããåçŽãªååãæã€åçŽãªãããžã§ã¯ãããããã€ããæ¹æ³ãåŠã³ãŸãã ããã¯ãCelery ã¯ãŒã«ãŒãš Angular 8 ããã³ããšã³ããåãã Flask Python ãã¬ãŒã ã¯ãŒã¯ã§æžãããŠããŸãã
ãªããžããªãžã®ãªã³ã¯:
èšäºã®æåã®éšåã§ã¯ããããžã§ã¯ããšãã®éšåã«ã€ããŠèª¬æããŸãã XNUMX çªç®ã§ã¯ãPlesk ãã»ããã¢ããããå¿ èŠãªæ¡åŒµæ©èœãšã³ã³ããŒãã³ã (DBãRabbitMQãRedisãDocker ãªã©) ãã€ã³ã¹ããŒã«ããæ¹æ³ãç解ããŸãã
XNUMX çªç®ã®ããŒãã§ã¯ãæçµçã«ããããžã§ã¯ããéçºç°å¢ããã³æ¬çªç°å¢ã®ãµãŒããŒã«ãããã€ããããã®ãã€ãã©ã€ã³ãã»ããã¢ããããæ¹æ³ãç解ããŸãã ãããŠãµãŒããŒäžã§ãµã€ããç«ã¡äžããŸãã
ãããããèªå·±çŽ¹ä»ãå¿ããŠããŸããã ç§ã®åå㯠Oleg Borzov ã§ããDomclick ã®äœå®
ããŒã³ç®¡çè
åã CRM ããŒã ã®ãã«ã¹ã¿ãã¯éçºè
ã§ãã
ãããžã§ã¯ãæŠèŠ
ãŸããXNUMX ã€ã®ãããžã§ã¯ã ãªããžã㪠(ããã¯ãšã³ããšããã³ã) ãèŠãŠãã³ãŒããèŠãŠã¿ãŸãããã
ããã¯ãšã³ã: ãã©ã¹ã³+ã»ããª
åŸåéšåã§ã¯ãPython éçºè ã®éã§éåžžã«äººæ°ã®ãããFlask ãã¬ãŒã ã¯ãŒã¯ (API çš) ãš Celery (ã¿ã¹ã¯ ãã¥ãŒçš) ãåãäžããŸããã ORMãšããŠSQLAchemyã䜿çšããŸãã 移è¡ã«ã¯ Alembic ã䜿çšãããŸãã ãã³ãã«ã® JSON æ€èšŒçš - Marshmallowã
Ð
/ping
- 空ãç¶æ³ã確èªããããã- ç»é²ãèªå¯ãèªå¯è§£é€ãèªå¯ããããŠãŒã¶ãŒã®ååŸãåŠçããŸãã
- ã¿ã¹ã¯ã Celery ãã¥ãŒã«å ¥ããé»åã¡ãŒã« ãã³ãã«ã
send_mail_task
.
ãã©ã«ããŒå
docker
XNUMX ã€ã® Dockerfile (base.dockerfile
ãã£ãã«å€æŽãããªãããŒã¹ã€ã¡ãŒãžãæ§ç¯ããDockerfile
ã¡ã€ã³ã¢ã»ã³ããªã®å Žå);.env_files
- ããŸããŸãªç°å¢ã®ç°å¢å€æ°ãå«ããã¡ã€ã«ã
ãããžã§ã¯ãã®ã«ãŒãã«ã¯ XNUMX ã€ã® docker-compose ãã¡ã€ã«ããããŸãã
docker-compose.local.db.yml
éçºçšã«ããŒã«ã« ããŒã¿ããŒã¹ãæ§ç¯ããŸããdocker-compose.local.workers.yml
ã¯ãŒã«ãŒãããŒã¿ããŒã¹ãRedisãRabbitMQ ã®ããŒã«ã«èµ·åçšãdocker-compose.test.yml
å°å ¥äžã«ãã¹ããå®è¡ãããããdocker-compose.yml
å±éçšã«ã
ãããŠãç§ãã¡ãèå³ãããæåŸã®ãã©ã«ããŒã¯ -
deploy.sh
â 移è¡ãšå±éã®éå§ã Github Actions ã§ãã¹ãããã«ãããŠå®è¡ããåŸããµãŒããŒäžã§å®è¡ãããŸããrollback.sh
- ã³ã³ãããŒã以åã®ããŒãžã§ã³ã®ã¢ã»ã³ããªã«ããŒã«ããã¯ããŸããcurl_tg.sh
- ãããã€ã¡ã³ãéç¥ã Telegram ã«éä¿¡ããŸãã
Angular ã®ããã³ããšã³ã
- é»åã¡ãŒã«ãéä¿¡ããããã®ãã©ãŒã ãšçµäºãã¿ã³ãåããã¡ã€ã³ ããŒãžã
- ãã°ã€ã³ããŒãžã
- ç»é²ããŒãžã
ã¡ã€ã³ããŒãžã¯çŠæ¬²çã«èŠããŸã:
ã«ãŒãã«XNUMXã€ã®ãã¡ã€ã«ããããŸã Dockerfile
О docker-compose.yml
ãããªãã¿ã®ãã©ã«ããŒãšåæ§ã« .ci-cd
ãã㯠ãªããžããªãããã¹ã¯ãªããããããã«å°ãªããªããŸã (ãã¹ããå®è¡ããããã®ã¹ã¯ãªãããåé€ãããŸãã)ã
Plesk ã§ãããžã§ã¯ããéå§ãã
ãŸã㯠Plesk ãã»ããã¢ãããããµã€ãã®ãµãã¹ã¯ãªãã·ã§ã³ãäœæããŸãããã
æ¡åŒµæ©èœã®ã€ã³ã¹ããŒã«
Plesk ã§ã¯ã次㮠XNUMX ã€ã®æ¡åŒµæ©èœãå¿ èŠã§ãã
Docker
Plesk 管çããã«ã§ã³ã³ããã®ã¹ããŒã¿ã¹ã管çããèŠèŠçã«è¡šç€ºããŸããGit
ãµãŒããŒäžã§å±éã¹ããããæ§æããŸããLet's Encrypt
ç¡æã® TLS 蚌ææžãçæ (ããã³èªåæŽæ°) ãããããFirewall
åä¿¡ãã©ãã£ãã¯ã®ãã£ã«ã¿ãªã³ã°ãèšå®ããŸãã
ãããã¯ãPlesk 管çããã«ã®ãæ¡åŒµæ©èœãã»ã¯ã·ã§ã³ããã€ã³ã¹ããŒã«ã§ããŸãã
æ¡åŒµæ©èœã®è©³çŽ°ãªèšå®ã¯èæ
®ããŸããããã¢ã®ç®çã§ã¯ããã©ã«ãèšå®ã§ååã§ãã
ãµãã¹ã¯ãªãã·ã§ã³ãšãµã€ããäœæãã
次ã«ãhelloworld.ru Web ãµã€ãã®ãµãã¹ã¯ãªãã·ã§ã³ãäœæããããã« dev.helloworld.ru ãµããã¡ã€ã³ãè¿œå ããå¿ èŠããããŸãã
- helloworld.ru ãã¡ã€ã³ã®ãµãã¹ã¯ãªãã·ã§ã³ãäœæããã·ã¹ãã ãŠãŒã¶ãŒã®ãã°ã€ã³ ãã¹ã¯ãŒããæå®ããŸãã
ããŒãžã®äžéšã«ãããã§ãã¯ããã¯ã¹ããªã³ã«ããŸã Let's Encrypt ã§ãã¡ã€ã³ãä¿è·ãããµã€ãã« HTTPS ãèšå®ããå Žå: - 次ã«ããã®ãµãã¹ã¯ãªãã·ã§ã³ã§ããµããã¡ã€ã³ dev.helloworld.ru ãäœæããŸã (ç¡æã® TLS 蚌ææžãçºè¡ããããšãã§ããŸã)ã
ãµãŒããŒã³ã³ããŒãã³ãã®ã€ã³ã¹ããŒã«
ç§ãã¡ã¯ãµãŒããŒãæã£ãŠããŸã OS Debian ã¹ãã¬ãã 9.12 ãããŠèšçœ®ãããã³ã³ãããŒã«ããã« Plesk é»æç³ 18.0.27.
ãããžã§ã¯ãçšã«ã€ã³ã¹ããŒã«ããŠæ§æããå¿ èŠããããŸãã
- PostgreSQL (ãã®å Žåãéçºç°å¢ãšæ¬çªç°å¢çšã« XNUMX ã€ã®ããŒã¿ããŒã¹ãæ〠XNUMX ã€ã®ãµãŒããŒããããŸã)ã
- RabbitMQ (ç°å¢ããšã«ç°ãªã vhost ãæã€åãåãã€ã³ã¹ã¿ã³ã¹)ã
- XNUMX ã€ã® Redis ã€ã³ã¹ã¿ã³ã¹ (éçºç°å¢ãšæ¬çªç°å¢çš)ã
- Docker ã¬ãžã¹ã㪠(ãã«ãããã Docker ã€ã¡ãŒãžã®ããŒã«ã« ã¹ãã¬ãŒãžçš)ã
- Docker ã¬ãžã¹ããªã® UIã
PostgreSQL
Plesk ã«ã¯æ¢ã« PostgreSQL DBMS ãä»å±ããŠããŸãããææ°ããŒãžã§ã³ã§ã¯ãããŸãã (Plesk Obsidian ã®äœææç¹ã§ã¯)
Debian ã« Postgres ãã€ã³ã¹ããŒã«ããããã®è©³çŽ°ãªæé ããããäžã«ãããããããŸã (
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 ãã€ã³ã¹ããŒã«ããŠæ§æããŸããã 次ã«ãããŒã¿ããŒã¹ãéçºç°å¢ããã³æ¬çªç°å¢çšã®ãŠãŒã¶ãŒãäœæããããŒã¿ããŒã¹ã管çããæš©éããŠãŒã¶ãŒã«äžããŸãããã
$ 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 ã®ã¡ãã»ãŒãž ãããŒã«ãŒã§ãã RabbitMQ ã®ã€ã³ã¹ããŒã«ã«é²ã¿ãŸãããã 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
ã€ã³ã¹ããŒã«åŸãäœæããå¿ èŠããããŸã ããŒãã£ã«ãã¹ãããŠãŒã¶ãŒã«å¿ èŠãªæš©éãä»äžããŸãã
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 ãã€ã³ã¹ããŒã«ããŠæ§æããŸãããã Celery ã¿ã¹ã¯ã®çµæãä¿åããããã®ããã¯ãšã³ããšããŠäœ¿çšãããŸãã
æ¡åŒµæ©èœã䜿çšããŠãéçºç°å¢ãšæ¬çªç°å¢çšã« Redis ã䜿çšã㊠XNUMX ã€ã® Docker ã³ã³ãããŒãçæããŸãã Docker
ãã¬ã¹ã¯çšã
- Plesk ã«ç§»åãã[æ¡åŒµæ©èœ] ã»ã¯ã·ã§ã³ã«ç§»åããDocker æ¡åŒµæ©èœãæ¢ããŠã€ã³ã¹ããŒã«ããŸã (ç¡æããŒãžã§ã³ãå¿ èŠã§ã)ã
- ã€ã³ã¹ããŒã«ãããŠããæ¡åŒµæ©èœã«ç§»åããæ€çŽ¢ã§ç»åãèŠã€ããŸã
redis bitnami
ææ°ããŒãžã§ã³ãã€ã³ã¹ããŒã«ããŸãã - ããŠã³ããŒãããã³ã³ãããŒã«ç§»åããŠæ§æã調æŽããŸããããŒããå²ãåœãŠãããæ倧 RAM ãµã€ãºãç°å¢å€æ°ã®ãã¹ã¯ãŒããæå®ããããªã¥ãŒã ãããŠã³ãããŸãã
- prod ã³ã³ããã«å¯ŸããŠæé 2 ïœ 3 ãå®è¡ããŸããèšå®ã§ã¯ãããŒãããã¹ã¯ãŒããRAM ãµã€ãºããµãŒããŒäžã®ããªã¥ãŒã ãã©ã«ããŒãžã®ãã¹ã®ãã©ã¡ãŒã¿ãŒã®ã¿ãå€æŽããŸãã
Dockerã¬ãžã¹ããª
åºæ¬çãªãµãŒãã¹ã«å ããŠãç¬èªã® Docker ã€ã¡ãŒãž ãªããžããªããµãŒããŒäžã«çœ®ããšããã§ãããã 幞ããªããšã«ããµãŒã㌠ã¹ããŒã¹ã¯çŸåšéåžžã«å®äŸ¡ã§ãã (DockerHub ãµãã¹ã¯ãªãã·ã§ã³ããã確å®ã«å®ã)ããã©ã€ããŒã ãªããžããªãã»ããã¢ããããããã»ã¹ã¯éåžžã«ç°¡åã§ãã
ç§ãã¡ãæãã§ããã®ã¯:
- ãµããã¡ã€ã³ã§ã¢ã¯ã»ã¹å¯èœãªãã¹ã¯ãŒãã§ä¿è·ããã Docker ãªããžããª
https://docker.helloworld.ru ; - ãªããžããªå
ã®ã€ã¡ãŒãžã衚瀺ããããã® UIã次ã®å Žæããå
¥æã§ããŸãã
https://docker-ui.helloworld.ru .
ãããè¡ãã«ã¯ïŒ
- ãµãã¹ã¯ãªãã·ã§ã³å ã® Plesk ã« XNUMX ã€ã®ãµããã¡ã€ã³ docker.helloworld.ru ãš docker-ui.helloworld.ru ãäœæãããããã® Let's Encrypt 蚌ææžãèšå®ããŸãããã
- ãã¡ã€ã«ã 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 ã§ã¯ãDocker ãªããžããªã« Basic èªèšŒçšã® .htpasswd ãã¡ã€ã«ãçæããŸãã
htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
- ã³ã³ãããåéããŠæã¡äžããŸãã
docker-compose up -d
- ãããŠãNginx ãã³ã³ããã«ãªãã€ã¬ã¯ãããå¿ èŠããããŸãã ãã㯠Plesk ãéããŠå®è¡ã§ããŸãã
docker.helloworld.ru ãµããã¡ã€ã³ãš docker-ui.helloworld.ru ãµããã¡ã€ã³ã«å¯ŸããŠæ¬¡ã®æé ãå®è¡ããå¿ èŠããããŸãã
ã»ã¯ã·ã§ã³å ã® éçºããŒã« ç§ãã¡ã®ãµã€ãã«è¡ã Docker ãããã· ã«ãŒã«:
ãããŠãåä¿¡ãã©ãã£ãã¯ãã³ã³ããã«ãããã·ããã«ãŒã«ãè¿œå ããŸãã
- ããŒã«ã« ãã·ã³ããã³ã³ããã«ãã°ã€ã³ã§ããããšã確èªããŸãã
$ 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 ãã¡ã€ã¢ãŠã©ãŒã«ã§ããŒããéã
ã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããŠæ§æããåŸãDocker ã³ã³ãããŒãå€éšãããã¯ãŒã¯ããã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ã§ããããã«ããŒããéãå¿ èŠããããŸãã
å ã»ã©ã€ã³ã¹ããŒã«ãã Plesk ã®ãã¡ã€ã¢ãŠã©ãŒã«æ¡åŒµæ©èœã䜿çšããŠãããè¡ãæ¹æ³ãèŠãŠã¿ãŸãããã
- ã«è¡ã [ããŒã«ãšèšå®] > [èšå®] > [ãã¡ã€ã¢ãŠã©ãŒã«]:
- ã«è¡ã Plesk ãã¡ã€ã¢ãŠã©ãŒã« ã«ãŒã«ã®å€æŽ > ã«ã¹ã¿ã ã«ãŒã«ã®è¿œå ãããŠãDocker ãµããããçšã«æ¬¡ã® TCP ããŒããéããŸã (172.0.0.0 / 8ïŒ:
RabbitMQ: 1883ã4369ã5671-5672ã25672ã61613-61614
ã¬ãã£ã¹: 32785ã32786 - ãŸããPostgreSQL ããŒããš RabbitMQ 管çããã«ãå€éšã«éãã«ãŒã«ãè¿œå ããŸãã
- ãå€æŽãé©çšããã¿ã³ã䜿çšããŠã«ãŒã«ãé©çšããŸãã
Github Actions ã§ã® CI/CD ã®ã»ããã¢ãã
æãèå³æ·±ãéšåãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ãã€ãã©ã€ã³ã®ã»ããã¢ãããšãããžã§ã¯ãã®ãµãŒããŒãžã®é ä¿¡ã«åãæãããŸãããã
ãã®ãã€ãã©ã€ã³ã¯ XNUMX ã€ã®éšåã§æ§æãããŸãã
- ã€ã¡ãŒãžã®æ§ç¯ãšãã¹ãã®å®è¡ (ããã¯ãšã³ãçš) - Github åŽã
- (ããã¯ãšã³ãã®) 移è¡ã®å®è¡ãšããµãŒããŒäžã§ã®ã³ã³ãããŒã®ãããã€ã
Plesk ãžã®ãããã€
ãŸã XNUMX çªç®ã®ç¹ã«å¯ŸåŠããŸããã (æåã®ç¹ã¯ããã«äŸåããŠãããã)ã
Plesk ã® Git æ¡åŒµæ©èœã䜿çšããŠå±éããã»ã¹ãèšå®ããŸãã
ããã¯ãšã³ã ãªããžããªã®æ¬çªç°å¢ã®äŸãèããŠã¿ãŸãããã
- Helloworld Web ãµã€ãã®ãµãã¹ã¯ãªãã·ã§ã³ã«ç§»åããGit ãµãã»ã¯ã·ã§ã³ã«ç§»åããŸãã
- Github ãªããžããªãžã®ãªã³ã¯ãããªã¢ãŒã Git ãªããžããªããã£ãŒã«ãã«æ¿å
¥ããããã©ã«ãã®ãã©ã«ããå€æŽããŸãã
httpdocs
å¥ã®ãã®ïŒäŸïŒ/httpdocs/hw_back
): - åã®æé ã§äœæãã SSH å
¬éããŒãã³ããŒãã
è¿œå ããã¯Githubã®èšå®ã«ãããŸãã - ã¹ããã 2 ã®ç»é¢ã§ [OK] ãã¯ãªãã¯ãããšãPlesk ã®ãªããžã㪠ããŒãžã«ãªãã€ã¬ã¯ããããŸãã ããã§ãmaster ãã©ã³ããžã®ã³ãããæã«ãªããžããªãæŽæ°ãããããã«èšå®ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã次ã®å Žæã«ç§»åããŸã ãªããžããªèšå® ãããŠå€ãä¿åããŸã
Webhook URL
(åŸã§ Github Actions ãèšå®ãããšãã«å¿ èŠã«ãªããŸã): - åã®æ®µèœã®ç»é¢ã®ãã¢ã¯ã·ã§ã³ããã£ãŒã«ãã«ããããã€ã¡ã³ããéå§ããã¹ã¯ãªãããå
¥åããŸãã
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}
- ç°å¢ (éçº/æ¬çª)ããã®å Žåprod
;
{DOCKER_REGISTRY_HOST}
- Docker ãªããžããªã®ãã¹ã
{TG_BOT_TOKEN}
â Telegram ããã ããŒã¯ã³ã
{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
- ãµãã¹ã¯ãªãã·ã§ã³ãã Docker ã°ã«ãŒãã«ãŠãŒã¶ãŒãè¿œå ããŸã (ã³ã³ãããŒã管çã§ããããã«ããŸã)ã
sudo usermod -aG docker helloworld_admin
ããã¯ãšã³ã ãªããžããªãšããã³ããšã³ãã®éçºç°å¢ã¯åãæ¹æ³ã§ã»ããã¢ãããããŸãã
Github Actions ã®ãããã€ã¡ã³ã ãã€ãã©ã€ã³
Github Actions ã§ã® CI/CD ãã€ãã©ã€ã³ã®æåã®éšåã®èšå®ã«é²ã¿ãŸãããã
ããã¯ãšã³ã
ãã€ãã©ã€ã³ã«ã€ããŠã¯ã以äžã§èª¬æãããŠããŸãã
ãã ãã解æããåã«ãGithub ã§å¿ èŠãª Secret å€æ°ãå ¥åããŸãããã ãããè¡ãã«ã¯ã次ã®å Žæã«ç§»åããŸã èšå® -> ã·ãŒã¯ã¬ãã:
DOCKER_REGISTRY
- Docker ãªããžã㪠(docker.helloworld.ru) ã®ãã¹ããDOCKER_LOGIN
- Docker ãªããžããªã«ãã°ã€ã³ããŸããDOCKER_PASSWORD
- ãã®ãã¹ã¯ãŒããDEPLOY_HOST
â Plesk 管çããã«ãå©çšå¯èœãªãã¹ã (äŸ:helloworld.com :8443 ãŸãã¯123.4.56.78 :8443);DEPLOY_BACK_PROD_TOKEN
- ãµãŒããŒäžã® prod ãªããžããªã«ãããã€ããããã®ããŒã¯ã³ (Plesk ã§ã®ãããã€ã¡ã³ã p. 4 ã§ååŸããŸãã)ãDEPLOY_BACK_DEV_TOKEN
- ãµãŒããŒäžã®éçºãªããžããªã«ãããã€ããããã®ããŒã¯ã³ã
å°å ¥ããã»ã¹ã¯ã·ã³ãã«ã§ã次㮠XNUMX ã€ã®äž»èŠãªæé ã§æ§æãããŸãã
- ã€ã¡ãŒãžãæ§ç¯ããŠãªããžããªã«å ¬éããŸãã
- æ°ããæ§ç¯ãããã€ã¡ãŒãžã«åºã¥ããŠã³ã³ããå ã§ãã¹ããå®è¡ããŸãã
- ãã©ã³ã (dev/master) ã«å¿ããŠãç®çã®ç°å¢ã«ãããã€ããŸãã
ããã³ããšã³ã
ãµã€ãã®ã»ããã¢ãã
Nginx ãä»ãããã©ãã£ãã¯ã®ãããã·
ããŠãçµããã«æ¥ãŸããã æ®ã£ãŠããã®ã¯ãNginx ãä»ããã³ã³ãããžã®éåä¿¡ãã©ãã£ãã¯ã®ãããã·ãæ§æããããšã ãã§ãã ãã®ããã»ã¹ã«ã€ããŠã¯ãDocker ã¬ãžã¹ããªã®ã»ããã¢ããã®ã¹ããã 5 ã§ãã§ã«èª¬æããŸããã éçºç°å¢ãšæ¬çªç°å¢ã®èé¢ãšåé¢ã®éšåã§ãåãããšãç¹°ãè¿ãå¿ èŠããããŸãã
èšå®ã®ã¹ã¯ãªãŒã³ã·ã§ãããæäŸããŸãã
ããã¯ãšã³ã
ããã³ããšã³ã
éèŠãªèª¬æã ã§å§ãŸã URL ãé€ãããã¹ãŠã® URL ãããã³ããšã³ã ã³ã³ããã«ãããã·ãããŸãã /api/
- ãããã¯èé¢ã®ã³ã³ãããŒã«ãããã·ãããŸã (ã€ãŸãã ããã¯ã³ã³ããã§ã¯ããã¹ãŠã®ãã³ãã©ãŒã¯æ¬¡ã§å§ãŸãå¿
èŠããããŸãã /api/
).
çµæ
ããã§ããµã€ãã helloworld.ru ãš dev.helloworld.ru (ãããã prod ç°å¢ãš dev ç°å¢) ã§å©çšã§ããããã«ãªããŸãã
å šäœãšããŠãFlask ãš Angular ã§åçŽãªã¢ããªã±ãŒã·ã§ã³ãæºåããGithub Actions ã§ãã€ãã©ã€ã³ãèšå®ããŠãPlesk ãå®è¡ããŠãããµãŒããŒã«ããŒã«ã¢ãŠãããæ¹æ³ãåŠã³ãŸããã
次ã®ã³ãŒãã䜿çšããŠãªããžããªãžã®ãªã³ã¯ãè€è£œããŸãã
åºæïŒ habr.com