αα
αααα»αα’αααααααα αααα»αααΉαα
ααααααααααα·ααααααααααααα»ααααα»αααΆαααα‘αΎα CI/CD αααααααΎ Plesk Control Panel αα·α Github Actionsα αααααααααΎαααΉααααααΈααααααΆαααααααΆαααααααααΆαααααα½ααααααΆαααααααα·ααααα»αααααΆα "Helloworld" α ααΆααααΌαααΆαααααααα
αααα»ααααααααα Flask Python ααΆαα½αααΉααα»ααααα·α Celery αα·α Angular 8 frontend α
αααααααΆαααα
ααΆααααααΆααα
αα αααα»ααααααααααΌαααα’ααααα ααΎαααΉααα·αα·αααααΎαααααααααααααΎα αα·ααααααααααααΆα αα αααα»αααΈααΈα ααΎαααΉαααααααααααΈααααααα‘αΎα Plesk αα·αααα‘αΎαααααααααααα αα·ααααΆαααΆαα»α αΆαααΆα α (DB, RabbitMQ, Redis, Docker ααΆααΎα)α
αα αααα»ααααααααΈααΈ ααΈαααα»αααΎαααΉαααααααααααΈαααααααα αααααααααααΆααααΆαααααααΆαααααααααααααΎααα ααΆαααααΆαααΈααααα αααα»αααα·ααααΆα dev αα·αααα·αααα α αΎααααααΆααααααΎαααΉαααΎαααααΎαααΆαααα ααααααα ααΎαααΆαααΈαααα
ααΆα αααα»αααααα
ααααΆααααα½αα ααααααααααααα»αααΊ Oleg Borzov αααα»αααΆα’ααααααααΎα fullstack αα
αααα»ααααα»α CRM αααααΆααα’ααααααααααααααααΆαααααα
αΈαα
Domclick α
αα·αααααΆαααΌαα αααααααα
ααΆααααΌα ααΌααααα‘ααααΎαααααΆααααααααα ααα½αααΈα - αααααααΆαααααα αα·ααααααααΆααα»α - α αΎαααααααΆααααΌαα
αααααααΆααααααα Flask + Celery
αααααΆαααααααααΆαααααα αααα»αααΆαααααααα»ααααααααα·αααααα»αα ααααα’αααα’αα·αααααα Pythonα ααααααααα Flask (αααααΆαα API) αα·α Celery (αααααΆαααα½ααα·α αα ααΆα) α SQLAchemy ααααΌαααΆαααααΎααΆ ORM α Alembic ααααΌαααΆαααααΎαααααΆααααΆαααααΎα αααΆααααα»αα αααααΆαααα»ααααΆα JSON αα αααα»αα ααα»α ααΆα - Marshmallow α
Π
/ping
- ααΎααααΈαα·αα·αααααΎαααΆαα’αΆα ααααΆα;- αααααααΆααααααΆααααΆαα α»αααααα ααΆαα’αα»ααααΆα ααΆααααα·αααα· αα·αααΆαααα½αααΆαα’αααααααΎααααΆαααααααΆαααΆαα’αα»ααααΆαα
- α ααα»α ααΆαα’ααΈααααααααΆααααΆααα·α αα αα αααα»ααα½α Celery α
send_mail_task
.
αα
αααα»αααα―αααΆα
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
αααααΆααααΆαααΆαααααααΆαα
α αΎαααα
α»αααααααααααΎαα
αΆααα’αΆαααααα -
deploy.sh
- ααΆαα αΆααααααΎαααααΆαααααΎα αααΆααααα»α αα·αααΆαααΆαααααααΆαα ααααΎαααΆαααΎαααΆαααΈααααααααΆααααΈααΆαααΆαααααααΆαααα αα·αααααΎαααΆααα αααα»α Github Actions;rollback.sh
- αααα‘αααα»ααα αααααα»αααααΆααα½αααααα»αααααΆ;curl_tg.sh
- ααααΎααΆαααΌαααααΉαα’αααΈααΆαααΆαααααααΆααα ααΆαα Telegram α
αααααααΆααα»ααα ααΎ Angular
- ααααααααααααΆααααααααααααΆααααααΎα’ααΈααα αα·ααααΌαα»αα ααα
- αααααα αΌαα
- αααααα α»ααααααα
αααααβααααΆααβααΎαβαα βααΆαβααΆαβα’ααα αΆαααα
ααΆαα―αααΆαααΈααα
α«α Dockerfile
ΠΈ docker-compose.yml
ααααΌα
ααΆαααααααααΆααααααΆαα .ci-cd
ααΆαα½αααΉαααααααΈααα·α
ααΆαααααα·α
αα
αααα»αααααΆααααΆαααααα (ααααααΈααααααΆαααα
αααααααΆααααΆαααΆαααααααααααα»αααααΎαααΆα)α
α αΆααααααΎααααααααα Plesk
α αΌαα αΆααααααΎααααααΆαααα‘αΎα Plesk αα·ααααααΎαααΆαααΆααααααΆααααα αααααααααααΎαα
ααΆαααα‘αΎαααααααααααα
αα αααα»α Plesk ααΎαααααΌαααΆααααααααααααα ααα½ααα½αα
Docker
ααΎααααΈααααααααα αα·ααααα αΆαααααΆαααΆααααα»ααα αααα»αααααΆααααααααααα Plesk αααααΎαααΎααGit
ααΎααααΈααααααα ααΆααααααααααα αΆαααΆαααααααΆααα ααΎαααΆαααΈααα;Let's Encrypt
ααΎααααΈαααααΎα (αα·ααααααααααααααααααααα·) αα·ααααΆαααααα TLS α₯ααα·ααααααFirewall
ααΎααααΈααααααα ααΆααααααααααΆαααααααα ααΆα αα αΌαα
α’αααα’αΆα ααα‘αΎααα½αααΆααΆαααααααααααααααααα Plesk αα αααα»ααααααααααααα
ααΎαααΉααα·ααα·α
αΆαααΆααΆαααααααααα’α·ααααααΆααααααααααααααα ααΆααααααααααΆαααΎαααΉαααααΎαααααΆαααααααααααΆαααααααααααΎαα
αααααΎαααΆαααΆα αα·αααα ααααα
αααααΆααααααΎαααααΌααααααΎαααΆαααΆααααααΆααααα ααααα helloworld.ru ααααααΎα α αΎαααααααααααα dev.helloworld.ru αα ααΈαααα
- αααααΎαααΆαααΆααααααΆααααα helloworld.ru α αΎααααααΆααααΆααααααααΆααα
αΌααααααΆααα’αααααααΎααααΆααααααααααα
ααΈααααα’αααα ααΆααααααααααα ααΆαααΆααααααΆαα½α Let's Encryptααααα·αααΎααΎαα ααααα‘αΎα HTTPS αααααΆααααα αααααα - αααααΆαααα αα αααα»αααΆαααΆαααα αααααΎα subdomain dev.helloworld.ru (αααα’αααααα’αΆα α αααα·ααααΆαααααα TLS αααα₯ααα·αααααααααα)α
ααΆαααα‘αΎααααΆαααΆααααΆαααΈααα
ααΎαααΆααααΆαααΈαααααΆαα½α ααααααααααααα·ααααα·ααΆα Debian Stretch 9.12 αα·αααΆαααα‘αΎαααααΆαααααααΆ Plesk Obsidian 18.0.27.
ααΎαααααΌαααα‘αΎα αα·αααααααα ααΆαααααααααααααΆααααααααααααααΎαα
- PostgreSQL (αααα»αααααΈααααααΎα ααΉαααΆααααΆαααΈααααα½ααααααΆαααΌαααααΆααα·ααααααααΈααααααΆααααα·ααααΆαα’αα·αααααα αα·αααα·ααα)α
- RabbitMQ (ααΌα ααααΆ, ααΌα ααααΆααΆαα½α vhosts αααααααααΆαααααΆααααα·ααααΆα) α
- ααααΈ Redis ααΈα (αααααΆααααα·ααααΆα dev αα·αααα·ααα) α
- Docker Registry (αααααΆααααΆααααα»ααααα»αααΌαααααΆαααααΌαααΆα Docker αααααΆαααΆαααα)α
- UI αααααΆααααΆαα α»ααααααΈ Docker α
PostgreSQL
Plesk ααΆαααααΆααααααΆαα½α PostgreSQL DBMS αα½α
α αΎα ααα»αααααα·ααααααΆααααα
α»αααααααααα’αααα (αα
αααααααα Plesk Obsidian
ααΆαααΆαααααΆααααα’α·αααΆα
αααΎααααααΆααααΆαααα‘αΎα 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 α‘αΎααα·ααααααααΎααΆααααααααΆα
service postgresql restart
ααΎαααΆαααα‘αΎα αα·αααααααα ααΆαααααααα PostgreSQL α α₯α‘αΌαααα α αΌαααΎααααααΎαααΌαααααΆααα·αααααα α’αααααααΎααααΆαααααααΆαα dev- αα·α prod-environments α αΎααααααα±ααα’αααααααΎααααΆααααΌααα·αααα·αααα»αααΆααααααααααααΌαααααΆααα·ααααααα
$ 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 α ααΆααΉαααααΌαααΆαααααΎααΆαααααααΆαααααααααααΆαααααααΆαα»ααααααααααα·α αα ααΆα Celery α
ααΎαααΉαααΎααα»α Docker ααΈαααΆαα½α Redis αααααΆααααα·ααααΆα dev αα·α prod αααααααΎααααααααααα Docker
αααααΆαα Plesk α
- ααΎααα Plesk αα ααΆααααααααααααα ααααΎαααααααααααα Docker α αΎαααα‘αΎαααΆ (ααΎαααααΌαααΆαααααα₯ααα·ααααα):
- α
αΌααα
ααΆααααααααααααααααααΆαααα‘αΎα αααααααααΌαααΆαααΆααααααΆαααααααα
redis bitnami
α αΎαααα‘αΎαααααα α»αααααααααα»αα - ααΎαα αΌααα αααα»ααα»αααΊααααααααΆαααΆααα α αΎααααααααΌαααΆααααααα αααααΆααα ααα ααα α RAM α’αα·ααααΆαααααΆααααα αα ααΆααααααααΆαααα αααα»αα’αααααα·ααααΆα αα·αααααααααα·αααα‘ααα
- ααΎαα’αα»ααααααα αΆαααΈ 2-3 αααααΆαααα»αααΊααα prod αα αααα»αααΆαααααα ααΎαααααΆααααααααΆααααααΌααααΆαααΆααααααααα»αααααα α ααα ααΆααααααααΆαα ααα α RAM αα·αααααΌααα ααΆααααααααα·αααα‘αααα ααΎαααΆαααΈαααα
αααααΈααααα Docker
ααααααααΈααΎααααΆααααααΌαααααΆα ααΆααΆααΆαααα’αααα»αααΆαααΆααααααΆααααΌαααΆα Docker ααααα’ααααα ααΎαααΆαααΈαααα ααΆααααΆαααα’ ααααααααα ααααΆαααΈαααααΊαααααΆαα (αα·αααΆαααααΆαααΆαααΆα DockerHub) α αΎαααααΎαααΆαααααΆααααααΎαααααΆααα―αααααΊααΆααααααΆααα
ααΎαα ααααΆαα
- ααααΆαα Docker αααααΆαααΆααααααΆααααααααΆααα’αΆα
α
αΌαααααΎααΆααα
ααΎααααα
https://docker.helloworld.ru ; - UI αααααΆααααΎαααΌαααΆααα
αααα»αααααΆαα ααΆααα
https://docker-ui.helloworld.ru .
α αααααααα αΆααα:
- α αΌααααααΎααααααααΈααα αααα»α Plesk αααα»αααΆαααΆαααααααΎαα 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 ααΎαααΉααααααΎαα―αααΆα .htpasswd αααααΆααααΆαα’αα»ααααΆαααΆααΌαααααΆααα
αααα»αααααΆαα Dockerα
htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
- αααααΌααα·αααΎααα»αα
docker-compose up -d
- α αΎαααΎαααααΌαααααΌααα·α Nginx αα ααΆαααα»αααΊαααααααααΎαα αααα’αΆα ααααΌαααΆαααααΎααΆαααα Plesk α
ααα αΆαααΆααααααααααΌαααααΎαααααΆααααααα docker.helloworld.ru αα·α docker-ui.helloworld.ruα
ααααα α§ααααα Dev ααα αααααααααααΎααα α αααΆααααααΌααααΈ 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α
αα αααα’αααα α»α ααΎ Browse repositories ααα browser ααΉααααα αΆαααααΆααα’αα»ααααΆα αααα’αααααααΌααααα αΌα username αα·α password αααααΆαα repositoryα αααααΆααααΈααα ααΎαααΉαααααΌαααΆααααααΌααααααα ααααααααααΆααααααΈααααΆαα (αααααΆαααααααα ααΆααΉαααααααααΆααα’ααα)α
ααΆαααΎαα ααααα αααα»α Plesk Firewall
αααααΆααααΈααα‘αΎα αα·αααααααα ααΆαααααααααααΆαααΆα ααΎαααααΌαααΎαα αααααΎααααΈα±αααααΆαααΆαα»α’αΆα α αΌαααααΎααΆαααΈ Docker containers αα·ααααααΆαααΆααααα α
αααααΎαααΈααααααααΎααΆαααααααΎααααααααααα Firewall αααααΆαα Plesk αααααΎαααα‘αΎααα»αα
- αα
α§ααααα αα·αααΆαααααα> ααΆαααααα> αααααΆααααααΎα:
- αα
ααααααα
αααΆαααααααΆααααααΎα Plesk > ααααααα
αααΆααααααΆαααααα½α α αΎαααΎαα
ααα TCP ααΆαααααααααααΆαααααααΆααα Docker (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Redis: 32785, 32786 - ααΎαααααΉαααααααα αααΆαααααααΉαααΎαα ααα PostgreSQL αα·αααααΆααααααααααα RabbitMQ αα αα·ααααΆααααα α
- α’αα»ααααα αααΆαααααααααΎαααΌαα»αα’αα»ααααααΆαααααΆααααααΌαα
ααΆαααα‘αΎα CI/CD αα αααα»α Github Actions
α αΌαααΎαα α»ααα αααααααααα½αα±ααα αΆααα’αΆαααααααααα»α - αααααΎαααααααααα αΌααααα αΌαααααΆααΆαααααααααΆαα αα·ααααααΌαααααααααααααΎααα αααΆαααΈαααα
ααααααααααΉαααΆαααΈααααααα
- αααααΎαααΌαααΆα αα·αααααΎαααΆαααΆααααα (αααααΆαααααααααΆαααααα) - αα αααααααΆα Github;
- αααα»αααααΎαααΆαααΆαααααΎα αααΆααααα»α (αααααΆαααααααααΆαααααα) αα·αααΆαααΆαααααααΆααα»αααΊααα - αα ααΎαααΆαααΈαααα
ααΆαααααααΆααα Plesk
α αΌαβαααααααΆαβα ααα»α βααΈβααΈαβααΆβαα»αβαα·α (αααααβα ααα»α βααΈβαα½αβα’αΆαααααβααΎβααΆ)α
ααΎαααΉαααααααα ααΆααααααααααααΎαααΆαααΆαααααααΆααααααααΎααααααααααα Git αααααΆαα Plesk α
αα·α αΆαααΆα§ααΆα αααααΆαα½αααα·ααααΆα Prod αααααΆααααααΆαα Backend α
- ααΎαα αΌααα ααΆααααΆαααΆαααα ααααα Helloworld ααααααΎα α αΎαα αΌααα ααΆααααααααα Gitα
- αααα
αΌαααααα
ααααΆαα Github ααααααΎααα
αααα»αααΆα "ααααΆαα Git ααΈα
ααααΆα" α αΎαααααΆααααααΌαααααααΆαααΎα
httpdocs
αα αα½ααααααααα (α§α/httpdocs/hw_back
): - α
ααααααααΆααΆααα SSH ααΈααα αΆααα»α αα·α
αααααα ααΆααΆααα αααα»αααΆαααααα Github α - ααΎαα
α»α
ααααααααα
ααΎα’αααααααααα»αααα αΆαααΈ 2 αααααΆααααΈαααααΎαααααααα
αααααααααΆαααα
Plesk α α₯α‘αΌααααααΎαααααΌαααααααα
ααΆααααααααααααΆααααΎααααΈααααΎαα
αα
α»ααααααααΆαααΎααΆαααααααααΆα
α·ααααα
ααΆααααΆααΆααα ααΎααααΈααααΎααΌα
αααααΌαα
αΌααα
ααΆαα ααΆααααααααααΆαα αα·ααααααΆαα»αααααα
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 ααααααΆαα backend αα ααΎ server;
{ENV}
- ααα·ααααΆα (dev / prod) αααα»αααααΈααααααΎααprod
;
{DOCKER_REGISTRY_HOST}
- αααΆαααΈαααααααΆαα docker ααααααΎαα
{TG_BOT_TOKEN}
- αααααΆαααααΆαα Telegram bot;
{TG_CHAT_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
ααα·ααΆααΆα dev αααααΆααααααΆαα backend αα·α frontend ααααΌαααΆαααα‘αΎαααΆαααααααΌα ααααΆα
αααααααΆαααααααΆααα αααα»α Github Actions
α αΌααααααα ααΆαααα‘αΎααααααααααΌαααααααα CI/CD ααααααΎααα αααα»α Github Actions α
αααααα·ααΈααΆααααααα
ααααααααα αΌααααααααααΌαααΆααα·αααααΆαα
αααα»α
ααα»ααααβαα»αβαααβαααβααΆ ααΌαβαααααβα’αααβαααααΆααβαααβααΎαβααααΌαβααΆαβαααα»α Github α ααΎααααΈααααΎααΌα αααααΌαα αΌααα ααΆαα ααΆαααααα -> α’αΆααααααΆαα:
DOCKER_REGISTRY
- αααΆαααΈαααααααΆαα Docker ααααααΎα (docker.helloworld.ru);DOCKER_LOGIN
- α αΌααα ααΆααααααΆαα Docker;DOCKER_PASSWORD
- ααΆααααααααΆαααα ααΆ;DEPLOY_HOST
- αααΆαααΈαααααααααααααααααα Plesk ααΆα (α§ααΆα ααααHelloworld.ru : 8443 α¬123.4.56.78 α α¨α€α€α£);DEPLOY_BACK_PROD_TOKEN
- αααααΆαααααΆαααααααΆααααΆαααΆαααααααΆααα ααΆαα prod-repository αα ααΎ server (ααΎαααα½αααΆαααΆαα αααα»α Deployment in Plesk p. 4);DEPLOY_BACK_DEV_TOKEN
- αααααΆαααααΆαααααααΆααααΆαααααααΆααα ααΆααααααΆαα dev αα ααΎαααΆαααΈαααα
ααααΎαααΆαααΆαααααααΆαααΊααΆαααα αα·αααΆαααΈααα αΆαααααΆαααα
- ααΆααααΆααα·αααααα»αααααΌαααΆααα αααα»αααααΆααααααααΎα;
- αααα»αααααΎαααΆαααΆαααααΎααααααα αααα»ααα»αααΊααααααααα’ααααΎααΌαααΆααααααΆαααΆααααααααΈαα
- ααΆαααΆαααααααΆααα ααα·ααΆααΆααααα ααααΆαα’αΆαααααααΎααΆααΆ (dev/master) α
Frontend α
ααΆααααα αααα ααααα
α ααΆα αααααΌααααΈααΆαααα Nginx
ααΎαβααΆαβααβαααβααΈβαααα ααβα αΎαα ααΆαα αααααααΎααααΈααααααα ααΆααααααααααααΌααααΈααα ααΆα αα αΌααα·αα αααα ααΆαααα»αααΊαααααααααΎαααΆαααα Nginx α ααΎαααΆαααααααααααααααΎαααΆαααααα½α α αΎααα αααα»αααα αΆαααΈ 5 ααααΆαααα‘αΎα Docker Registry α ααΌα ααααΆαααααααα½αααααααΌαααΆαααααΎααααααααααααΆαααααααααΆαααααααα·ααααααααΆααα»ααα αααα»αααα·ααααΆα dev αα·αααα·αααα
αααα»αααΉααααααααΌαααα’ααααααααααΆααααααα
αααααα·ααΈααΆααααααα
Frontend α
ΠΠ°ΠΆΠ½ΠΎΠ΅ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅. URL ααΆααα’ααααΉαααααΌαααΆαααααΌααααΈαα
αα»αααΊααααααααααΆααα»α ααΎααααααα’ααααααα
αΆααααααΎαααΆαα½α /api/
- αα½αααααΉαααααΌαααΆααααααΌααα
ααΆαααα»αααΆαααααα (ααΌα
αααα αα
αααα»ααα»αααΆαααααα α’ααααααααααΆαααΆααα’ααααααΌαααα
αΆααααααΎαααΆαα½α /api/
).
αααααα
α₯α‘αΌααααααα αααααααααααΎααα½αααααΆααα helloworld.ru αα·α dev.helloworld.ru (prod- αα·α dev-environments αααααααΆ)α
ααα»ααα ααΎαααΆααααααΈαααααααα ααααααα·ααΈααΆαααααα½ααα αααα»α Flask αα·α Angular α αΎααααα αααααααααα αΌαααααααα αααα»α Github Actions ααΎααααΈαααααΌαααΆαα αααΆαααΈαααααααααα»αααααΎαααΆα Plesk α
αααα»αβααΉαβα
ααααβαααβαα
βααααΆααβαααβααααΎβααΌαα
ααααα: www.habr.com