แแ แกแขแแขแแแจแ แแ แแแแแแแแ แแแ แฉแแแก แแแแแชแแแแแแแก CI/CD-แแก แแแงแแแแแแก แจแแกแแฎแแ Plesk Control Panel-แแกแ แแ Github Actions-แแก แแแแแงแแแแแแ. แแฆแแก แฉแแแ แแแกแฌแแแแแ แแฃ แ แแแแ แฃแแแ แแแแแแแแกแแ แแแ แขแแแ แแ แแแฅแขแ แแแฃแ แแฃแแแแแแ แกแแฎแแแแ "Helloworld". แแก แแแฌแแ แแแแ Flask Python แฉแแ แฉแแจแ, Celery แแฃแจแแแแแแ แแ Angular 8-แแก แฌแแแ แแแฌแแแแ.
แกแแชแแแแแแก แแแฃแแแแ:
แกแขแแขแแแก แแแ แแแ แแแฌแแแจแ แแแแแแฎแแแแแ แฉแแแแก แแ แแแฅแขแก แแ แแแก แแแฌแแแแแก. แแแแ แแจแ, แฉแแแ แแแแแ แแแแแ, แแฃ แ แแแแ แฃแแแ แแแแงแแแแ Plesk แแ แแแแแแกแขแแแแ แแ แกแแญแแ แ แแแคแแ แแแแแแแ แแ แแแแแแแแแขแแแ (DB, RabbitMQ, Redis, Docker แแ แ.แจ.).
แแแกแแแ แแแฌแแแจแ, แฉแแแ แกแแแแแแแ แแแแแ แแแแแ, แแฃ แ แแแแ แฃแแแ แแแแแงแแแแ แแแแกแแแแแ แฉแแแแ แแ แแแฅแขแแก แกแแ แแแ แแ แแแแกแแแแแกแแแแแ dev แแ prod แแแ แแแแจแ. แจแแแแแ แฉแแแ แแแแฎแกแแแ แกแแแขแก แกแแ แแแ แแ.
แแแแฎ, แแแแแแแฌแงแแ แกแแแฃแแแ แ แแแแแก แแแชแแแแ. แแ แแฅแแแ แแแแ แแแ แแแแ, แแ แแแ แกแ แฃแแ แแแแแแแแแ แ CRM แแฃแแแจแ แแแแแแแแก แแแแแฏแแ แแแแกแแแแก Domclick-แจแ.
แแ แแแฅแขแแก แแแแแฎแแแแ
แแแ แแแ แ แแแจแ, แแแแแ แแแแแแฎแแแแ แแ แแแฅแขแแก แแ แกแแชแแแก - backend แแ front - แแ แแแแแแฎแแแแ แแแแก.
Backend: แแแแแ+แแแแฎแฃแ แ
แฃแแแแ แแแฌแแแแกแแแแก แแ แแแแฆแ แแแแแฃแแ, แ แแแแแแช แกแแแแแแ แแแแฃแแแ แฃแแแ Python-แแก แแแแแแแแแ แแแจแ: Flask Framework (API-แกแแแแก) แแ Celery (แแแแแแแแแแแก แ แแแแกแแแแก). SQLAchemy แแแแแแงแแแแแ แ แแแแ แช ORM. Alembic แแแแแแงแแแแแ แแแแ แแชแแแแแกแแแแก. แกแแฎแแแฃแ แแแจแ JSON แแแแแแแชแแแกแแแแก - Marshmallow.
ะ
/ping
- แฎแแแแแกแแฌแแแแแแแแก แจแแกแแแแฌแแแแแแ;- แแแฃแจแแแแแก แ แแแแกแขแ แแชแแแก, แแแขแแ แแแแชแแแก, แแแขแแ แแแแชแแแก แแ แแแขแแ แแแแแฃแแ แแแแฎแแแ แแแแแก แแแแแแแแแก;
- แแแคแแกแขแแก แกแแฎแแแฃแ แ, แ แแแแแแช แแงแแแแแก แแแแแแแแแก แแแแฎแฃแ แแก แ แแแจแ.
send_mail_task
.
แกแแฅแแฆแแแแแจแ
docker
แแ แ Dockerfiles-แแ (base.dockerfile
แแจแแแแแแ แชแแแแแแแแ แกแแแแแแกแ แแแแแกแแฎแฃแแแแแก แแแแแ แแDockerfile
แซแแ แแแแแ แจแแแ แแแแแแกแแแแก);.env_files
- แคแแแแแแแ แแแ แแแแก แชแแแแแแแแ แกแฎแแแแแกแฎแแ แแแ แแแแกแแแแก.
แแ แแแฅแขแแก แซแแ แจแ แแ แแก แแแฎแ แแแแแ -แแแแแแแแขแแ แ แคแแแแ:
docker-compose.local.db.yml
แแแแแแแแ แแแแกแแแแแก แแแแแแแแ แแแ แแแแแชแแแแ แแแแแก แแแแฆแแแแ;docker-compose.local.workers.yml
แแฃแจแแแแก แแแแแแแแ แแแ แแแแฆแแแแแกแแแแก, แแแแแชแแแแ แแแแ, Redis แแ RabbitMQ;docker-compose.test.yml
แแแแแแแแแแก แแ แแก แขแแกแขแแแแก แแแจแแแแ;docker-compose.yml
แแแแแแแแแแกแแแแก.
แแ แแแแ แกแแฅแแฆแแแแ, แ แแแแแแช แฉแแแ แแแแแแขแแ แแกแแแก -
deploy.sh
- แแแแ แแชแแแกแ แแ แแแแแแแแแแก แแแฌแงแแแ. แแฃแจแแแแก แกแแ แแแ แแ Github Actions-แจแ แขแแกแขแแแแก แแจแแแแแแกแ แแ แแแจแแแแแก แจแแแแแ;rollback.sh
- แแแแขแแแแแ แแแแก แแแแ แฃแแแแ แแกแแแแแแแก แฌแแแ แแแ แกแแแแ;curl_tg.sh
- แแแแแแแแแแก แจแแขแงแแแแแแแแแแก แแแแแแแแ Telegram-แแ.
แฌแแแ แแแฌแแแ Angular-แแ
- แแแแแแ แ แแแแ แแ แแ.แคแแกแขแแก แแแแแแแแแก แคแแ แแแ แแ แแแกแแกแแแแแแก แฆแแแแแแ.
- แจแแกแแแแก แแแแ แแ.
- แ แแแแกแขแ แแชแแแก แแแแ แแ.
แแแแแแ แ แแแแ แแ แแกแแแขแฃแ แแ แแแแแแงแฃแ แแแ:
แซแแ แจแ แแ แ แคแแแแแ Dockerfile
ะธ docker-compose.yml
, แแกแแแ แ แแแแ แช แแแชแแแแ แกแแฅแแฆแแแแ .ci-cd
แแแแแ แแแแแแแ แกแแ แแแขแแแแ, แแแแ แ แฃแแแแ แกแแชแแแจแ (แแแแฆแแแฃแแแ แกแแ แแแขแแแ แแแจแแแแฃแแ แขแแกแขแแแแกแแแแก).
แแ แแแฅแขแแก แแแฌแงแแแ แแแแกแแจแ
แแแแแฌแงแแ Plesk-แแก แแแงแแแแแแ แแ แฉแแแแ แกแแแขแแก แแแแแฌแแ แแก แจแแฅแแแแ.
แแแคแแ แแแแแแแแก แแแกแขแแแแชแแ
Plesk-แจแ แแแญแแ แแแแ แแแฎแ แแแคแแ แแแแแ:
Docker
แแแแขแแแแแ แแแแก แกแขแแขแฃแกแแก แแแ แแแ แแ แแแแฃแแแฃแ แแ แฉแแแแแแ Plesk แแแแแแแกแขแ แแชแแฃแ แแแแแแจแ;Git
แกแแ แแแ แแ แแแแแแแแแแก แแแแแฏแแก แแแแคแแแฃแ แแชแแ;Let's Encrypt
แฃแคแแกแ TLS แกแแ แแแคแแแแขแแแแก แแแแแ แแ แแแ (แแ แแแขแแแแขแฃแ แ แแแแแฎแแแแ);Firewall
แจแแแแแแแแแ แขแ แแคแแแแก แคแแแขแ แแชแแแก แแแแคแแแฃแ แแชแแแกแแแแก.
แแฅแแแ แจแแแแซแแแแ แแแแแแกแขแแแแ แแ แแกแแแ Plesk แแแแแแแกแขแ แแชแแฃแแ แแแแแแแก แแแจแแแแแแ แแแคแแ แแแแแแแแก แแแแงแแคแแแแแแจแ:
แฉแแแ แแ แแแแแแฎแแแแแ แแแคแแ แแแแแแแแก แแแขแแแฃแ แแแ แแแแขแ แแแก, แแแแฃแแแกแฎแแแแ แแแ แแแแขแ แแแ แแฅแแแแ แฉแแแแ แแแแ แแแแแแแแกแแแแก.
แจแแฅแแแแแ แแแแแฌแแ แ แแ แกแแแขแ
แจแแแแแแ, แฉแแแ แฃแแแ แจแแแฅแแแแ แแแแแฌแแ แ แฉแแแแ helloworld.ru แแแแกแแแขแแกแแแแก แแ แแแแแแแขแแ แแฅ dev.helloworld.ru แฅแแแแแแแแ.
- แจแแฅแแแแแ แแแแแฌแแ แ helloworld.ru แแแแแแแกแแแแก แแ แแแฃแแแแแ แจแแกแแแ-แแแ แแแ แกแแกแขแแแแก แแแแฎแแแ แแแแแกแแแแก:
แจแแแแแฌแแแ แงแฃแแ แแแแ แแแก แแแแแจแ แแแแชแแแแ แแแแแแ Let's Encrypt-แแแแฃ แแแกแฃแ แก แแแแแงแแแแ HTTPS แกแแแขแแกแแแแก: - แจแแแแแแ, แแ แแแแแฌแแ แแจแ แจแแฅแแแแแ แฅแแแแแแแแ dev.helloworld.ru (แ แแกแแแแกแแช แจแแแแซแแแแ แแกแแแ แแแกแชแแ แฃแคแแกแ TLS แกแแ แแแคแแแแขแ):
แกแแ แแแ แแก แแแแแแแแแขแแแแก แแแกแขแแแแชแแ
แฉแแแ แแแแฅแแก แกแแ แแแ แ OS Debian Stretch 9.12 แแ แแแแแแขแแแแแฃแแแ แแแ แแแแก แแแแแแ แแแแกแแ แแแกแแแแแแ 18.0.27.
แฉแแแ แฃแแแ แแแแแงแแแแ แแ แแแแแแแแคแแแฃแ แแ แแ แฉแแแแ แแ แแแฅแขแแกแแแแก:
- PostgreSQL (แฉแแแแก แจแแแแฎแแแแแจแ, แแฅแแแแ แแ แแ แกแแ แแแ แ แแ แ แแแแแชแแแแ แแแแแ dev แแ prod แแแ แแแแกแแแแก).
- RabbitMQ (แแแแแ, แแแแแ แแแแแแแแ แกแฎแแแแแกแฎแแ vhost-แแแแแ แแแ แแแแแแแกแแแแก).
- แแ แ Redis แแแกแขแแแชแแ (แแแแแแแแแ แฃแแ แแ แแ แแ แแแ แแแแแแแกแแแแก).
- Docker Registry (แฉแแจแแแแแฃแแ Docker แกแฃแ แแแแแแก แแแแแแฃแ แ แจแแแแฎแแแกแแแแก).
- UI แแแแแ แแก แ แแแกแขแ แแกแแแแก.
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 แแแ แแแแกแแแแก แแ แแแแชแแ แแแแฎแแแ แแแแแแก แแแแแชแแแแ แแแแแก แแแ แแแแก แฃแคแแแแ:
$ 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
แแฃแ แแฆแแแ MQ
แแแแแ แแแแแแแแแ 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
แแแกแขแแแแชแแแก แจแแแแแ, แฉแแแ แฃแแแ แจแแแฅแแแแ แแแแกแแแแซแแแแ, แแแแฎแแแ แแแแแแก แแ แแแแแแญแแ แกแแญแแ แ แฃแคแแแแแแ:
sudo rabbitmqctl add_user hw_dev_amqp_user hw_dev_amqp_password
sudo rabbitmqctl set_user_tags hw_dev_amqp_user administrator
sudo rabbitmqctl add_vhost hw_dev_vhost
sudo rabbitmqctl set_permissions -p hw_dev_vhost hw_dev_amqp_user ".*" ".*" ".*"
sudo rabbitmqctl add_user hw_prod_amqp_user hw_prod_amqp_password
sudo rabbitmqctl set_user_tags hw_prod_amqp_user administrator
sudo rabbitmqctl add_vhost hw_prod_vhost
sudo rabbitmqctl set_permissions -p hw_prod_vhost hw_prod_amqp_user ".*" ".*" ".*"
Redis
แแฎแแ แแแแแ แแแแแแแกแขแแแแ แแ แแ แแแแแแแแคแแแฃแ แแ แแ แแแแ แแแแแแแแแขแ แฉแแแแ แแแแแแแชแแแกแแแแก - Redis. แแก แแแแแงแแแแแฃแแ แแฅแแแแ, แ แแแแ แช แกแแ แแแแ แแ แกแแจแฃแแแแแ แแแแฎแฃแ แ แแแแชแแแแแแก แจแแแแแแแแก แจแแกแแแแฎแแ.
แฉแแแ แแแแแแฆแแแแ Docker-แแก แแ แแแแขแแแแแ แก Redis-แแ แแแแแแแแแ แแกแ แแ แแ แแ แแแ แแแแแแแกแแแแก แแแคแแ แแแแแแก แแแแแงแแแแแแ Docker
แแแแกแแแกแแแแก.
- แฉแแแ แแแแแแแแ แ Plesk-แจแ, แแแแแแแแแแ แ แแแคแแ แแแแแแแแก แแแแงแแคแแแแแแจแ, แแแซแแแ Docker แแแคแแ แแแแแแก แแ แแแแแกแขแแแแ แแแ (แแแญแแ แแแแ แฃแคแแกแ แแแ แกแแ):
- แแแแแแแ แแแแแกแขแแแแ แแแฃแ แแแคแแ แแแแแแแ, แแแแแแ แกแฃแ แแแ แซแแแแแก แกแแจแฃแแแแแแ
redis bitnami
แแ แแแแแแกแขแแแแ แแ แฃแแฎแแแกแ แแแ แกแแ: - แฉแแแ แจแแแแแแแ แ แแแแแแฌแแ แแ แแแแขแแแแแ แจแ แแ แแแ แแแฃแแแ แแแ แแแแคแแแฃแ แแชแแแก: แแแฃแแแแแ แแแ แขแ, แแแฅแกแแแแแฃแ แ แแแแแงแแคแแแ RAM แแแแ, แแแ แแแ แแแ แแแแก แชแแแแแแแจแ แแ แแแแแแกแขแแแแ แแ แแแชแฃแแแแ:
- แฉแแแ แแแกแ แฃแแแแ แแแแแฏแแแก 2-3 แแ แแ แแแแขแแแแแ แแกแแแแก, แแแ แแแแขแ แแแจแ แแชแแแแ แแฎแแแแ แแแ แแแแขแ แแแก: แแแ แขแก, แแแ แแแก, RAM-แแก แแแแแก แแ แแแแแแก แกแแ แแแ แแ แแแชแฃแแแแแก แกแแฅแแฆแแแแแจแ:
แแแแแ แแก แ แแแกแขแ แ
แซแแ แแแแแ แกแแ แแแกแแแแก แแแ แแ, แแแ แแ แแฅแแแแแแ แกแแ แแแ แแ แแแแงแแแแ แกแแแฃแแแ แ 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 Proxy-แแก แฌแแกแแแ:
แแ แแแแแแขแแ แฌแแกแ แแ แแฅแกแแก แจแแแแแแแแ แขแ แแคแแแก แฉแแแแก แแแแขแแแแแ แจแ:
- แฉแแแ แแแแแฌแแแแ, แ แแ แจแแแแแซแแแ แจแแแแแแ แฉแแแแก แแแแขแแแแแ แจแ แแแแแแแแ แแแ แแแแ แแขแแแแ:
$ 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 Firewall-แจแ
แแแแแแแแแขแแแแก แแแกแขแแแแชแแแกแ แแ แแแแคแแแฃแ แแชแแแก แจแแแแแ, แฉแแแ แฃแแแ แแแแฎแกแแแ แแแ แขแแแ แแกแ, แ แแ แแแแแแแแแขแแแ แฎแแแแแกแแฌแแแแแ แแงแแก Docker แแแแขแแแแแ แแแแแแ แแ แแแ แ แฅแกแแแแแแ.
แแแแฎแแ, แ แแแแ แแแแแแแแแ แแก Plesk-แแกแแแแก Firewall แแแคแแ แแแแแแก แแแแแงแแแแแแ, แ แแแแแแช แแแ แ แแแแแแแกแขแแแแ แแ.
- แฒฌแแแ แแแกแขแ แฃแแแแขแแแ แแ แแแ แแแแขแ แแแ > แแแ แแแแขแ แแแ > Firewall:
- แฒฌแแแ Plesk Firewall-แแก แฌแแกแแแแก แจแแชแแแ > แแแ แแแแฃแแ แฌแแกแแก แแแแแขแแแ แแ แแแฎแกแแแแ แจแแแแแแ TCP แแแ แขแแแ Docker แฅแแแฅแกแแแแกแแแแก (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Redis: 32785, 32786 - แฉแแแ แแกแแแ แแแแแแแขแแแ แฌแแกแก, แ แแแแแแช แแแฎแกแแแก PostgreSQL แแแ แขแแแก แแ RabbitMQ แแแ แแแแก แแแแแแแแก แแแ แ แกแแแงแแ แแจแ:
- แแแแแแงแแแแ แฌแแกแแแ แชแแแแแแแแแแก แแแแแงแแแแแ แฆแแแแแแก แแแแแงแแแแแแ:
CI/CD-แแก แแแงแแแแแ Github Actions-แจแ
แแแแแ แแแแแแแแแ แงแแแแแแ แกแแแแขแแ แแกแ แแแฌแแแแ - แฃแฌแงแแแขแ แแแขแแแ แแชแแแก แแแแกแแแแแแก แแแงแแแแแ แแ แฉแแแแ แแ แแแฅแขแแก แกแแ แแแ แแ แแแฌแแแแแ.
แแก แแแแกแแแแแ แจแแแแแแ แแ แ แแแฌแแแแกแแแแ:
- แกแฃแ แแแแก แแแแแ แแ แขแแกแขแแแแก แแแจแแแแ (backend-แแกแแแแก) - Github แแฎแแ แแก;
- แแแแ แแชแแแก แแแจแแแแ (backend-แแกแแแแก) แแ แแแแขแแแแแ แแแแก แแแแแแแแแ - แกแแ แแแ แแ.
แแแแแแแแแ แแแแกแแจแ
แฏแแ แแแแ แ แแฃแแฅแขแก แจแแแแฎแแ (แ แแแแแ แแแ แแแแ แแแกแแแ แแแแแแแแแแฃแแ).
แฉแแแ แแแแแแแแคแแแฃแ แแ แแแ แแแแแแแแแแก แแ แแชแแกแก Plesk-แแกแแแแก Git แแแคแแ แแแแแแก แแแแแงแแแแแแ.
แแแแแแฎแแแแ แแแแแแแแ Prod แแแ แแแแแ Backend-แแก แกแแชแแแแกแแแแก.
- แฉแแแ แแแแแแแแ แ แฉแแแแ Helloworld แแแแกแแแขแแก แแแแแฌแแ แแแ แแ แแแแแแแแแแ แ Git แฅแแแแแแงแแคแแแแแแจแ:
- แฉแแแแ แแแฃแแ แฉแแแแ Github แกแแชแแแแก แแแแจแ "Remote Git repository" แแ แจแแชแแแแแ แแแแฃแแแกแฎแแแแ แกแแฅแแฆแแแแ
httpdocs
แกแฎแแแก (แแแ./httpdocs/hw_back
): - แแแแแแแแ แแ SSH แกแแฏแแ แ แแแกแแฆแแแ แฌแแแ แแแแแฏแแแแ แแ
แแแแแขแแแ แแก Github แแแ แแแแขแ แแแจแแ. - แแแแฌแแแแฃแแแ OK แแแ แแแแ แแแแแฏแ 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}
- แแแ แกแแ แแแ แแ backend-แแก แกแแชแแแแก prod แกแแฅแแฆแแแแแแแ;
{ENV}
- แแแ แแแ (dev / prod), แฉแแแแก แจแแแแฎแแแแแจแprod
;
{DOCKER_REGISTRY_HOST}
- แฉแแแแ แแแแแ แแก แกแแชแแแแก แแแกแแแแซแแแ
{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-แจแ. แแแแกแแแแแก แแแแแแแ แแแ แแแแขแ แแแ -> แกแแแแฃแแแแแแแแ:
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-repository-แจแ แแแแแแแแแแก แแแจแแแ (แฉแแแ แแแแแฆแแ Deployment in Plesk แแ. 4);DEPLOY_BACK_DEV_TOKEN
- แแแขแแแ แกแแ แแแ แแ แแแแแแแแแ แแก แกแแชแแแจแ แแแแแแแแแแกแแแแก.
แแแแแแแแแแก แแ แแชแแกแ แแแ แขแแแแ แแ แจแแแแแแ แกแแแ แซแแ แแแแแ แแขแแแแกแแแ:
- แกแฃแ แแแแก แจแแฅแแแ แแ แแแแแฅแแแงแแแแ แฉแแแแก แกแแชแแแจแ;
- แขแแกแขแแแแก แแแจแแแแ แแแแขแแแแแ แจแ แแฎแแแ แแจแแแแแฃแ แกแฃแ แแแแ แแแคแฃแซแแแแฃแแ;
- แแแแแแแแแ แกแแกแฃแ แแแ แแแ แแแแจแ แคแแแแแแแก แแแฎแแแแแ (dev/master).
Frontend
แกแแแขแแก แแแงแแแแแ
แแ แแฅแกแ แขแ แแคแแแ Nginx-แแก แกแแจแฃแแแแแแ
แแแ, แฉแแแ แแแแแแแ แแแแแแแ. แ แฉแแแ แแฎแแแแ แจแแแแแแแแแ แแ แแแแแแแแ แขแ แแคแแแแก แแ แแฅแกแแแแแแก แแแแคแแแฃแ แแชแแ แฉแแแแก แแแแขแแแแแ แจแ Nginx-แแก แกแแจแฃแแแแแแ. แฉแแแ แฃแแแ แแแแแจแฃแฅแแ แแก แแ แแชแแกแ Docker Registry-แแก แแแงแแแแแแก แแ-5 แแขแแแแ. แแแแแ แฃแแแ แแแแแแแ แแแก แฃแแแแ แแ แฌแแแ แแแฌแแแแแแกแแแแก dev แแ prod แแแ แแแแจแ.
แแ แแแแแแแแแ แแแ แแแแขแ แแแแก แแแ แแแแก แกแฃแ แแแแแก.
แฎแแ แฎแแแแ
Frontend
แแฅแแแ แฎแแ แ แฃแขแแฉแแแแแ. แงแแแแ URL แแฅแแแแ แแ แแฅแกแแแ แแแฃแแ แฌแแแ แแแฌแแแแก แแแแขแแแแแ แแ, แแแ แแ แแ แแแฌแงแแแฃแแแกแ /api/
- แแกแแแ แแแแแแ แแแฃแแ แแฅแแแแแแ แฃแแแแ แแแแขแแแแแ แแ (แแจ แฃแแแแ แแแแขแแแแแ แจแ แงแแแแ แแแแแฃแจแแแแแแแ แฃแแแ แแแแฌแงแแก /api/
).
แจแแแแแแแ
แแฎแแ แฉแแแแ แกแแแขแ แฎแแแแแกแแฌแแแแแ แฃแแแ แแงแแก helloworld.ru-แแ แแ dev.helloworld.ru-แแ (แจแแกแแแแแแกแแ, prod- แแ dev-environments).
แกแแแ แแ แฏแแแจแ, แฉแแแ แแแกแฌแแแแแ แ แแแแ แแแแแแแแแแ แแแ แขแแแ แแแแแแแชแแ Flask-แจแ แแ Angular-แจแ แแ แแแแแงแแแแ แแแแกแแแแแ Github Actions-แจแ, แ แแแ แแก แแแแแแแขแแแแ แกแแ แแแ แแ, แ แแแแแแช แแฃแจแแแแก Plesk-แจแ.
แแ แแแแแแแแ แแ แกแแชแแแแแแก แแแฃแแแแก แแแแแ:
แฌแงแแ แ: www.habr.com