ืืื ืืขื ืึทืจืืืงื, ืืื ืืืขื ืืืืื ืืืื ืืขืจืคืึทืจืื ื ืคืื ืืึทืฉืืขืืืงื CI / CD ื ืืฆื ืื ืคึผืืขืกืง ืงืึธื ืืจืึธื ืคึผืึทื ืขื ืืื ืืืืืื ืึทืงืฉืึทื ื. ืืืึทื ื ืืืจ ืืืขืื ืืขืจื ืขื ืืื ืฆื ืฆืขืืืืงืืขื ืึท ืคึผืฉืื ืคึผืจืืืขืงื ืืื ืื ืึทื ืงืึทืืคึผืืึทืงืืืืื ื ืึธืืขื "ืืขืืืึธืืืึธืจืื". ืขืก ืืื ืืขืฉืจืืื ืืื ืื ืคืืึทืกืง ืคึผืืืืึธื ืคืจืืืืืืขืจืง, ืืื ืกืขืืืขืจืื ืืืึธืจืงืขืจืก ืืื ืึทื ืึทื ืืืืืึทืจ 8 ืคืจืึธื ืืขื ื.
ืืื ืงืก ืฆื ืจืืคึผืึทืืึทืืึธืจืื:
ืืื ืืขืจ ืขืจืฉืืขืจ ืืืื ืคืื ืืขื ืึทืจืืืงื, ืืืจ ืืืขืื ืงืืงื ืืื ืืื ืืืขืจ ืคึผืจืืืขืงื ืืื ืืืึทื ืืืืื. ืืื ืื ืจืืข, ืืืจ ืืืขืื ืจืขืืขื ืขื ืืืืก ืืื ืฆื ืฉืืขืื ืคึผืืขืกืง ืืื ืื ืกืืึทืืืจื ืื ื ืืืืืง ืืงืกืืขื ืฉืึทื ื ืืื ืงืึทืืคึผืึธืื ืึทื ืฅ (DB, RabbitMQ, Redis, Docker, ืขืืง.).
ืืื ืื ืืจืื ืืืื, ืืืจ ืืืขืื ืืขืกืึธืฃ ืืขืคึฟืื ืขื ืืืืก ืืื ืฆื ืฉืืขืื ืึท ืจืขืจื - ืืื ืืข ืคึฟืึทืจ ืืืคึผืืืืื ื ืืื ืืืขืจ ืคึผืจืืืขืงื ืฆื ืึท ืกืขืจืืืขืจ ืืื ืึท ืืขืื ืืื ืคึผืจืึธื ืกืืืืืืข. ืืื ืืขืืึธืื ืืืจ ืืืขืื ืงืึทืืขืจ ืืขื ืคึผืืึทืฅ ืืืืฃ ืื ืกืขืจืืืขืจ.
ืืื ืืึธ, ืืื ืคึฟืึทืจืืขืกื ืืื ืฆื ืืึทืงืขื ืขื. ืืืึทื ื ืึธืืขื ืืื ืึธืืขื ืืึธืจืกืึธืื, ืืื ืืื ืึท ืคืืืกืืึทืง ืืขืืืขืืึธืคึผืขืจ ืืื ืื CRM ืืึทื ืฉืึทืคึฟื ืคึฟืึทืจ ืืืคึผืึธืืขืง ืืึทื ืึทืืืฉืขืจื ืืื Domclick.
ืคึผืจืึธืืขืงื ืืืืขืจืืืืง
ืขืจืฉืืขืจ, ืืึธืืืจ ืงืืงื ืืื ืฆืืืื ืคึผืจืืืขืงื ืจืืคึผืึทืืึทืืึธืจืื - ืืึทืงืขื ื ืืื ืคืจืึธื ื - ืืื ืืืื ืืืืขืจ ืื ืงืึธื.
ืืึทืงืขื ื: ืคืืึทืฉ + ืกืขืืืขืจืื
ืคึฟืึทืจ ืื ืฆืืจืืง ืืืื, ืืื ืืขื ืืืขื ืึท ืืื ืื ืืืึธืก ืืื ืืึทื ืฅ ืคืึธืืงืก ืฆืืืืฉื ืคึผืืืืึธื ืืขืืืขืืึธืคึผืขืจืก: ืื ืคืืึทืกืง ืคืจืืืืืืขืจืง (ืคึฟืึทืจ ืื ืึทืคึผื) ืืื ืกืขืืืขืจืื (ืคึฟืึทืจ ืื ืึทืจืืขื ืจืื). SQLAchemy ืืื ืืขื ืืฆื ืืื ORM. ืึทืืขืืืืง ืืื ืืขื ืืฆื ืคึฟืึทืจ ืืืืืจืืืฉืึทื ื. ืคึฟืึทืจ JSON ืืืึทืืึทืืืืฉืึทื ืืื ืืึทื ืืึทืื - ืืึทืจืฉืืขืืึธื.
ะ
/ping
- ืฆื ืงืึธื ืืจืึธืืืจื ืึทืืืืืืึทืืืืึทืื;- ืืึทื ืืึทืื ืคึฟืึทืจ ืจืขืืืกืืจืึทืฆืืข, ืืขืจืืืืืขื ืืฉ, ืืข-ืึธืืขืจืืืึทืืืึธื ืืื ืืืงืืืขื ืึท ืึธืืขืจืืืื ืืึทื ืืฆืขืจ;
- ืึทื E- ืืจืืื ืฉืขืคึผื ืืืึธืก ืฉืืขืื ืึท ืึทืจืืขื ืืื ืื ืกืขืืืขืจืื ืจืื.
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 ืึทืงืฉืึทื ื;rollback.sh
- ืจืึธืืืืึทืง ืคืื ืงืึทื ืืืื ืขืจื ืฆื ืื ืคืจืืขืจืืืงืข ืืืขืจืกืืข ืคืื โโืื ืคึฟืึทืจืืึทืืืื ื;curl_tg.sh
- ืฉืืงื ืืืคึผืืืืืึทื ื ื ืึธืืืึทืคืึทืงืืืฉืึทื ื ืฆื ืืขืืขืืจืึทื.
ืคืจืึธื ืืขื ื ืืืืฃ ืืืื ืงืืืืง
- ืืืืคึผื ืืืึทื ืืื ืึท ืคืึธืจืขื ืคึฟืึทืจ ืฉืืงื ืืืืฆืคึผืึธืกื ืืื ืึท ืึทืจืืืกืืึทื ื ืงื ืขืคึผื.
- ืืึธืืื ืืืึทื.
- ืจืขืืืกืืจืึทืฆืืข ืืืึทื.
ืืขืจ ืืืืคึผื ืืืึทื ืงืืงื ืึทืกืขืืืง:
ืขืก ืืขื ืขื ืฆืืืื ืืขืงืขืก ืืื ืื ืืืึธืจืฆื Dockerfile
ะธ docker-compose.yml
, ืืื ืืขืืื ื ืืื ืื ืืึทืงืึทื ื ืืขืงืข .ci-cd
ืืื ืึท ืืืกื ืืืืื ืืงืขืจืข ืกืงืจืืคึผืก ืืื ืืื ืื ืฆืืจืืง ืจืืคึผืึทืืึทืืึธืจื (ืึทืจืืืกืืขื ืืืขื ืกืงืจืืคึผืก ืคึฟืึทืจ ืคืืืกื ืืืง ืืขืกืฅ).
ืกืืึทืจืืื ื ืึท ืคึผืจืืืขืงื ืืื ืคึผืืขืกืง
ืืึธืืืจ ืึธื ืืืืื ืืื ืืึทืฉืืขืืืงื ืคึผืืขืกืง ืืื ืฉืึทืคึฟื ืึท ืึทืืึธื ืขืืขื ื ืคึฟืึทืจ ืืื ืืืขืจ ืคึผืืึทืฅ.
ืื ืกืืึธืืื ื ืืงืกืืขื ืฉืึทื ื
ืืื ืคึผืืขืกืง, ืืืจ ืืึทืจืคึฟื ืคืืจ ืืงืกืืขื ืฉืึทื ื:
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 (ืืื ืืื ืืืขืจ ืคืึทื, ืขืก ืืืขื ืืืื ืืืื ืกืขืจืืืขืจ ืืื ืฆืืืื ืืึทืืึทืืืืกืื ืคึฟืึทืจ ืืขืื ืืื ืคึผืจืึธื ืื ืืืืืจืึทื ืืึทื ืฅ).
- RabbitMQ (ืืขืืืืงืขืจ ืืืึทืฉืคึผืื ืืื ืคืึทืจืฉืืืขื ืข ืืืืึธืกืืก ืคึฟืึทืจ ืื ืืืืืจืึทื ืืึทื ืฅ).
- ืฆืืืื ืจืขืืืก ืื ืกืืึทื ืกืื (ืคึฟืึทืจ ืืขืื ืืื ืคึผืจืึธื ืื ืืืืืจืึทื ืืึทื ืฅ).
- ืืึธืงืขืจ ืจืขืืืกืืจื (ืคึฟืึทืจ ืืืืข ืกืืึธืจืืืืฉ ืคืื ืืขืืืื ืืึธืงืงืขืจ ืืืืืขืจ).
- UI ืคึฟืึทืจ ืืึธืงืงืขืจ ืจืขืืืกืืจื.
ืคึผืึธืกืืืจืขืกืงื
Plesk ืงืืื ืฉืืื ืืื PostgreSQL DBMS, ืึธืืขืจ ื ืืฉื ืื ืืขืฆืืข ืืืขืจืกืืข (ืืื ืืขืจ ืฆืืื ืคืื ืฉืจืืืื Plesk Obsidian
ืขืก ืืขื ืขื ืึท ืคึผืืึทืฅ ืคืื ืืืืืืื ืื ืกืืจืึทืงืฉืึทื ื ืคึฟืึทืจ ืื ืกืืึธืืื ื 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, ืึท ืึธื ืืึธื ืืขืงืืขืจ ืคึฟืึทืจ ืกืขืืืขืจืื. ืื ืกืืึธืืื ื ืขืก ืืืืฃ ืืขืืืึทื ืืื ืืึทื ืฅ ืคึผืฉืื:
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 ืคึฟืึทืจ ืืขืื ืืื ืคึผืจืึธื ืื ืืืืืจืึทื ืืึทื ืฅ ื ืืฆื ืื ืคืึทืจืืขื ืืขืจืื ื Docker
ืคึฟืึทืจ ืคึผืืขืกืง.
- ืืืจ ืืืื ืฆื ืคึผืืขืกืง, ืืืื ืฆื ืื ืขืงืกืืขื ืกืืึธื ืก ืึธืคึผืืืืืื ื, ืงืืง ืคึฟืึทืจ ืื ืืึธืงืงืขืจ ืืขืฉืคึผืจืืื ืืื ืื ืกืืึทืืืจื ืขืก (ืืืจ ืืึทืจืคึฟื ืึท ืคืจืื ืืืขืจืกืืข):
- ืืืื ืฆื ืื ืืื ืกืืึทืืืจื ืืขืฉืคึผืจืืื, ืืขืคึฟืื ืขื ืื ืืืื ืืืจื ืื ืืืื
redis bitnami
ืืื ืื ืกืืึทืืืจื ืื ืืขืฆืืข ืืืขืจืกืืข: - ืืืจ ืืืื ืืื ืื ืืึทืื ืืึธืืืื ืงืึทื ืืืื ืขืจ ืืื ืกืืจืืืขืจื ืื ืงืึทื ืคืืืืขืจืืืฉืึทื: ืกืคึผืขืฆืืคืืฆืืจื ืื ืคึผืึธืจื, ืื ืืึทืงืกืืืื ืึทืืึทืงืืืืื ืืึทืจืึทื ืืจืืืก, ืื ืคึผืึทืจืึธื ืืื ืื ืกืืืืืืข ืืืขืจืืึทืืึทืื ืืื ืึธื ืงืืึทืคึผื ืื ืืึทื ื:
- ืืืจ ืืืจืืคืืจื ืกืืขืคึผืก 2-3 ืคึฟืึทืจ ืื ืคึผืจืึธื ืงืึทื ืืืื ืขืจ, ืืื ืื ืกืขืืืื ืืก ืืืจ ื ืึธืจ ืืืืฉื ืื ืคึผืึทืจืึทืืขืืขืจืก: ืคึผืึธืจื, ืคึผืึทืจืึธื, ืืึทืจืึทื ืืจืืืก ืืื ืืจื ืฆื ืื ืืึทื ื ืืขืงืข ืืืืฃ ืื ืกืขืจืืืขืจ:
ืืึธืงืขืจ ืจืขืืืกืืจื
ืืื ืึทืืืฉืึทื ืฆื ืืงืขืจืืืง ืืึทืืื ืื ืืก, ืขืก ืืืึธืื ืืืื ืคืืึทื ืฆื ืฉืืขืื ืืืื ืืืืืขื ืข Docker ืืืื ืจืืคึผืึทืืึทืืึธืจื ืืืืฃ ืื ืกืขืจืืืขืจ. ืฆืื ืืืืง, ืกืขืจืืืขืจ ืคึผืืึทืฅ ืืื ืืืฆื ืืึทื ืฅ ืืืืืง (ืึทืืืึทืืข ืืฉืืคึผืขืจ ืืื ืึท DockerHub ืึทืืึธื ืขืืขื ื), ืืื ืืขืจ ืคึผืจืึธืฆืขืก ืคืื ืืึทืฉืืขืืืงื ืึท ืคึผืจืืืืึทื ืจืืคึผืึทืืึทืืึธืจื ืืื ืืืืขืจ ืคึผืฉืื.
ืืืจ ืืืืื ืฆื ืืึธืื:
- ืคึผืึทืจืึธื-ืคึผืจืึธืืขืงืืขื ืืึธืงืงืขืจ ืจืืคึผืึทืืึทืืึธืจื ืฆืืืจืืืืขื ืืืืฃ ืึท ืกืืืืึธืืึทืื
https://docker.helloworld.ru ; - UI ืคึฟืึทืจ ืืืืืื ื ืืืืืขืจ ืืื ืื ืจืืคึผืึทืืึทืืึธืจื, ืื ืืืฆื ืืื
https://docker-ui.helloworld.ru .
ืฆื ืืึธื ืืึธืก:
- ืืึธืืืจ ืฉืึทืคึฟื ืฆืืืื ืกืืืืึธืืึทืื ืก ืืื ืคึผืืขืกืง ืืื ืืื ืืืขืจ ืึทืืึธื ืขืืขื ื: docker.helloworld.ru ืืื docker-ui.helloworld.ru, ืืื ืงืึทื ืคืืืืขืจ ืืื ืก ืขื ืงืจืืคึผื ืกืขืจืืืคืืงืึทืฅ ืคึฟืึทืจ ืืื.
- ืืืื ืื ืืขืงืข ืฆื ืื 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 ืืขืงืข ืคึฟืึทืจ ืืึทืกืืง ืืขืจืืืืืขื ืืฉ ืืื ืื ืืึธืงืงืขืจ ืจืืคึผืึทืืึทืืึธืจื:
htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
- ืงืืืึทืื ืืื ืืืืื ืงืึทื ืืืื ืขืจื:
docker-compose up -d
- ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืจืืืขืจืขืงื Nginx ืฆื ืืื ืืืขืจ ืงืึทื ืืืื ืขืจื. ืืึธืก ืงืขื ืืืื ืืขืืื ืืืจื Plesk.
ืื ืคืืืืขื ืืข ืกืืขืคึผืก ืืึทืจืคึฟื ืฆื ืืืื ืืขืืื ืคึฟืึทืจ ืื docker.helloworld.ru ืืื docker-ui.helloworld.ru ืกืืืืึธืืึทืื ืก:
ืืื ืึธืคึผืืืืืื ื ืืขืื ืืืฉืืจืื ืืื ืืืขืจ ืคึผืืึทืฅ ืืืื ืฆื ืืึธืงืงืขืจ ืคึผืจืึธืงืกื ืึผืืืื:
ืืื ืืืืื ืึท ืืขืจืฉื ืฆื ืคึผืจืึทืงืกื ืื ืงืึทืืื ื ืคืึทืจืงืขืจ ืฆื ืืื ืืืขืจ ืงืึทื ืืืื ืขืจ:
- ืืืจ ืงืึธื ืืจืึธืืืจื ืึทื ืืืจ ืงืขื ืขื ืงืืึธืฅ ืืื ืฆื ืืื ืืืขืจ ืงืึทื ืืืื ืขืจ ืคึฟืื ืื ืืืืข ืืึทืฉืื:
$ 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
ื ืึธื ืื ืกืืึธืืื ื ืืื ืงืึทื ืคืืืืขืจ ืื ืงืึทืืคึผืึธืื ืึทื ืฅ, ืืืจ ืืึทืจืคึฟื ืฆื ืขืคึฟืขื ืขื ืคึผืึธืจืฅ ืึทืืื ืึทื ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืขื ืขื ืฆืืืจืืืืขื ืคึฟืื ืืึธืงืงืขืจ ืงืึทื ืืืื ืขืจื ืืื ืื ืคืื ืืจืืืกื ืืืง ื ืขืฅ.
ืืึธืืืจ ืืขื ืืื ืฆื ืืึธื ืืึธืก ืืื ืื ืคืืจืขืืืึทืื ืคืึทืจืืขื ืืขืจืื ื ืคึฟืึทืจ ืคึผืืขืกืง ืืืึธืก ืืืจ ืืึธืื ืืื ืกืืึทืืืจื ืคืจืืขืจ.
- ืืื ืฆื ืืืฉืืจืื & ืกืขืืืื ืืก> ืกืขืืืื ืืก> ืคืืจืขืืืึทืื:
- ืืื ืฆื ืืึธืืืคืืฆืืจื ืคึผืืขืกืง ืคืืจืขืืืึทืื ืึผืืืื> ืืืื ืื ืื ืจืื ืืื ืขืคึฟืขื ืขื ืื ืคืืืืขื ืืข TCP ืคึผืึธืจืฅ ืคึฟืึทืจ ืื ืืึธืงืงืขืจ ืกืืื ืขื (ืงืกื ืืืงืก / ืงืกื ืืืงืก):
ืจืึทืืืืืง: 1883, 4369, 5671-5672, 25672, 61613-61614
ืจืขืืืก: 32785, 32786 - ืืืจ ืืืขืื ืืืื ืืืืื ืึท ืืขืจืฉื ืืืึธืก ืืืขื ืขืคืขื ืขื PostgreSQL ืคึผืึธืจืฅ ืืื RabbitMQ ืคืึทืจืืืึทืืืื ื ืคึผืึทื ืึทืื ืฆื ืื ืึทืจืืืก ืืืขืื:
- ืฆืืืืืื ืื ืึผืืืื ื ืืฆื ืื ืฆืืืืืื ืขื ืืขืจืื ืืขื ืงื ืขืคึผื:
ืืึทืฉืืขืืืงื CI / CD ืืื Github Actions
ืืึธืืืจ ืืืื ืฆื ืื ืืขืจืกื ืืฉืืงืึทืืืข ืืืื - ืืึทืฉืืขืืืงื ืึท ืงืขืกืืืืขืจืืืง ืื ืืึทืืจืืืฉืึทื ืจืขืจื - ืืื ืืข ืืื ืฆืืฉืืขืื ืืื ืืืขืจ ืคึผืจืืืขืงื ืฆื ืื ืกืขืจืืืขืจ.
ืืขื ืจืขืจื - ืืื ืืข ืืืขื ืฆืื ืืืคืฉืืขืื ืืื ืคืื ืฆืืืื ืืืืื:
- ืืืืขื ืึท ืืืื ืืื ืืืืคื ืืขืกืฅ (ืคึฟืึทืจ ืื ืืึทืงืขื ื) - ืืืืฃ ืื ืืืืืื ืืืึทื;
- ืคืืืกื ืืืง ืืืืืจืืืฉืึทื ื (ืคึฟืึทืจ ืื ืืึทืงืขื ื) ืืื ืืืคึผืืืืื ื ืงืึทื ืืืื ืขืจื - ืืืืฃ ืื ืกืขืจืืืขืจ.
ืฆืขืืืืงืืขื ืฆื Plesk
ืืึธืืืจ ืืื ืขืจืฉื ืืึทืืึทื ืืืขื ืืืื ืฆืืืืืื ื ืงืืื (ืืืฒึทื ืืขืจ ืขืจืฉืืขืจ ืืื ืืขืจืคึฟืื ืึธืคืขื ืืืง).
ืืืจ ืืืขืื ืงืึทื ืคืืืืขืจ ืื ืืืคึผืืืืืึทื ื ืคึผืจืึธืฆืขืก ื ืืฆื ืื Git ืคืึทืจืืขื ืืขืจืื ื ืคึฟืึทืจ Plesk.
ืืึทืืจืึทืืื ืึท ืืืืฉืคึผืื ืืื ืึท ืคึผืจืึธื ืกืืืืืืข ืคึฟืึทืจ ืึท ืืึทืงืขื ื ืจืืคึผืึทืืึทืืึธืจื.
- ืืืจ ืืืื ืฆื ืื ืึทืืึธื ืขืืขื ื ืคืื ืืื ืืืขืจ Helloworld ืืืขืืืืืื ืืื ืืืื ืฆื ืื ืืื ืกืึทืืกืขืงืฉืึทื:
- ืึทืจืืึทื ืืืืื ืึท ืืื ืง ืฆื ืืื ืืืขืจ Github ืจืืคึผืึทืืึทืืึธืจื ืืื ืื "ืจืืืึธืื ืืื ืจืืคึผืึทืืึทืืึธืจื" ืคืขืื ืืื ืืืืฉื ืื ืคืขืืืงืืึทื ืืขืงืข
httpdocs
ืฆื ืื ืื ืืขืจ (ืืืฉื./httpdocs/hw_back
): - ื ืึธืืืึทืื ืื SSH ืคึผืืืืืง ืฉืืืกื ืคืื ืื ืคืจืืขืจืืืงืข ืฉืจืื ืืื
ืืืื ืฆื ืขืก ืืื ืืื Github ืกืขืืืื ืืก. - ืืจืืงื OK ืืืืฃ ืืขื ืขืงืจืึทื ืืื ืฉืจืื 2, ื ืึธื ืืืึธืก ืืืจ ืืืขืื ืืืื ืจืืืขืจืขืงืืื ืฆื ืื ืจืืคึผืึทืืึทืืึธืจื ืืืึทื ืืื ืคึผืืขืกืง. ืืืฆื ืืืจ ืืึทืจืคึฟื ืฆื ืงืึทื ืคืืืืขืจ ืื ืจืืคึผืึทืืึทืืึธืจื ืฆื ืืืื ืืขืจืืืึทื ืืืงื ืืืืฃ ืงืึทืืืฅ ืฆื ืื ืืขื ืฆืืืืึทื. ืฆื ืืึธื ืืึธืก, ืืืื ืฆื ืจืืคึผืึทืืึทืืึธืจื ืกืขืืืื ืืก ืืื ืจืึทืืขืืืขื ืื ืืืขืจื
Webhook URL
(ืืืจ ืืืขืื ืืึทืจืคึฟื ืขืก ืฉืคึผืขืืขืจ ืืืขื ืืืจ ืืึทืฉืืขืืืงื Github ืึทืงืืืึธื ืก): - ืืื ืื ืึทืงืืืึธื ืก ืคืขืื ืืืืฃ ืืขื ืขืงืจืึทื ืคืื ืื ืคืจืืขืจืืืงืข ืคึผืึทืจืึทืืจืึทืฃ, ืึทืจืืึทื ืื ืฉืจืืคื ืฆื ืงืึทืืขืจ ืื ืืืคึผืืืืืึทื ื:
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}
- ืกืืืืืืข (ืืขืื / ืคึผืจืึธื), ืืื ืืื ืืืขืจ ืคืึทื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
- ืืืื ืึท ืืึทื ืืฆืขืจ ืคึฟืื ืืื ืืืขืจ ืึทืืึธื ืขืืขื ื ืฆื ืื ืืึธืงืขืจ ืืจืืคึผืข (ืึทืืื ืืื ืงืขื ืขื ืคืืจื ืงืึทื ืืืื ืขืจื):
sudo usermod -aG docker helloworld_admin
ืื ืืขืื ืกืืืืืืข ืคึฟืึทืจ ืื ืืึทืงืขื ื ืจืืคึผืึทืืึทืืึธืจื ืืื ืื ืคืจืึธื ืืขื ื ืืขื ืขื ืืขืฉืืขืื ืืืืฃ ืื ืืขืืืข ืืืขื.
ืืืคึผืืืืืึทื ื ืจืขืจื - ืืื ืืข ืืื Github ืึทืงืฉืึทื ื
ืืึธืืืจ ืคืึธืจืืขืฆื ืฆื ืืึทืฉืืขืืืงื ืืขืจ ืขืจืฉืืขืจ ืืืื ืคืื ืืื ืืืขืจ ืกื / ืงืึธืืคึผืึทืงืืืืกืง ืจืขืจื - ืืื ืืข ืืื Github ืึทืงืืืึธื ืก.
ืืึทืงืขื ื
ืื ืจืขืจื - ืืื ืืข ืืื ืืืกืงืจืืืื ืืื
ืึธืืขืจ ืืืืืขืจ ืืืจ ืคึผืึทืจืกืื ื ืขืก, ืืึธืื ืืื ืื ืคึผืืึธืืืืจื ืื ืกืขืงืจืขื ืืืขืจืืึทืืึทืื ืืืึธืก ืืืจ ืืึทืจืคึฟื ืืื Github. ืฆื ืืึธื ืืึธืก, ืืืื ืฆื ืกืขืืืื ืืก -> ืกืขืงืจืขืฅ:
DOCKER_REGISTRY
- ืืขืจ ืืึทืืขืืึธืก ืคืื ืืื ืืืขืจ ืืึธืงืงืขืจ ืจืืคึผืึทืืึทืืึธืจื (docker.helloworld.ru);DOCKER_LOGIN
- ืืึธืืื ืฆื ืื ืืึธืงืงืขืจ ืจืืคึผืึทืืึทืืึธืจื;DOCKER_PASSWORD
- ืคึผืึทืจืึธื ืฆื ืขืก;DEPLOY_HOST
- ืืึทืืขืืึธืก ืืื ืื Plesk ืึทืืืื ืืึทืคืืืข ืืื ืื ืืืฆื (ืืืึทืฉืคึผืื:helloworld.ru : 8443 ืึธืืขืจ123.4.56.78 :8443);DEPLOY_BACK_PROD_TOKEN
- ืึท ืกืืืขื ืคึฟืึทืจ ืืืคึผืืืืืึทื ื ืฆื ืื ืคึผืจืึธื-ืจืืคึผืึทืืึทืืึธืจื ืืืืฃ ืื ืกืขืจืืืขืจ (ืืืจ ืืึทื ืขืก ืืื ืืืคึผืืืืืึทื ื ืืื ืคึผืืขืกืง ืคึผ. 4);DEPLOY_BACK_DEV_TOKEN
- ืกืืืขื ืคึฟืึทืจ ืืืคึผืืืืืึทื ื ืฆื ืื ืืขืื ืจืืคึผืึทืืึทืืึธืจื ืืืืฃ ืื ืกืขืจืืืขืจ.
ืื ืืืคึผืืืืืึทื ื ืคึผืจืึธืฆืขืก ืืื ืคึผืฉืื ืืื ืืืฉืืืื ืคืื ืืจืืึท ืืืืคึผื ืกืืขืคึผืก:
- ืืืืขื ืืื ืืจืืืกืืขืื ืื ืืืื ืืื ืืื ืืืขืจ ืจืืคึผืึทืืึทืืึธืจื;
- ืคืืืกื ืืืง ืืขืกืฅ ืืื ืึท ืงืึทื ืืืื ืขืจ ืืืืืจื ืืืืฃ ืึท ืคืจืืฉ ืืขืืืื ืืืื;
- ืืืคึผืืืืืึทื ื ืฆื ืืขืจ ืืขืืืืื ืกืืืืืืข ืืืคึผืขื ืืื ื ืืืืฃ ืื ืฆืืืืึทื (ืืขืื / ืืขื).
ืคืจืึธื ืืขื ื
ืคึผืืึทืฅ ืกืขืืึทืคึผ
ืคึผืจืึทืงืกืืื ื ืคืึทืจืงืขืจ ืืืจื Nginx
ื ื, ืืืจ ืืขื ืขื ืืขืงืืืขื ืฆืื ืกืืฃ. ืขืก ืืืืืื ืืืืื ืฆื ืงืึทื ืคืืืืขืจ ืื ืคึผืจืึทืงืกืืื ื ืคืื ืื ืงืึทืืื ื ืืื ืึทืืืืึธืืื ื ืคืึทืจืงืขืจ ืฆื ืืื ืืืขืจ ืงืึทื ืืืื ืขืจ ืืืจื Nginx. ืืืจ ืืึธืื ืฉืืื ืืืืขืงื ืืขื ืคึผืจืึธืฆืขืก ืืื ืฉืจืื 5 ืคืื ืื ืืึธืงืงืขืจ ืจืขืืืกืืจื ืกืขืืึทืคึผ. ืืขืจ ืืขืืืืงืขืจ ืืึธื ืืืื ืจืืคึผืืืื ืคึฟืึทืจ ืื ืฆืืจืืง ืืื ืคืจืึธื ื ืืืืื ืืื ืืขืื ืืื ืคึผืจืึธื ืื ืืืืืจืึทื ืืึทื ืฅ.
ืืื ืืืขื ืฆืืฉืืขืื ืกืงืจืขืขื ืฉืึธืฅ ืคืื ืื ืกืขืืืื ืืก.
ืืึทืงืขื ื
ืคืจืึธื ืืขื ื
ืืืืืืืง ืงืืขืจืึทืคืึทืงืืืฉืึทื. ืึทืืข URL ืก ืืืขื ืืืื ืคึผืจืึทืงืกืืื ืฆื ืื ืคืจืึธื ืืขื ื ืงืึทื ืืืื ืขืจ, ืึทืืืฅ ืื ืกืืึทืจืืื ื ืืื /api/
- ืืื ืืืขืื ืืืื ืคึผืจืึทืงืกืื ืฆื ืื ืฆืืจืืง ืงืึทื ืืืื ืขืจ (ืึทืืื ืืื ืื ืฆืืจืืง ืงืึทื ืืืื ืขืจ, ืึทืืข ืืึทื ืืืขืจืก ืืืื ืึธื ืืืืื ืืื /api/
).
ืจืขืืืืืึทืื ืคืื
ืืืฆื ืืื ืืืขืจ ืคึผืืึทืฅ ืืึธื ืืืื ืืืจืขืืืืื ืืื helloworld.ru ืืื dev.helloworld.ru (ืจืืกืคึผืขืงืืืืืื ืคึผืจืึธื- ืืื ืืขืื-ืขื ืืืืจืึธื ืืขื ืฅ).
ืืื ืืึทื ืฅ, ืืืจ ืืขืืขืจื ื ืืื ืฆื ืฆืืืจืืืื ืึท ืคึผืฉืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืคืืึทืกืง ืืื ืืืื ืงืืืืง ืืื ืฉืืขืื ืึท ืจืขืจื - ืืื ืืข ืืื Github ืึทืงืืืึธื ืก ืฆื ืจืึธืืื ืขืก ืืืืก ืฆื ืึท ืกืขืจืืืขืจ ืคืืืกื ืืืง ืคึผืืขืกืง.
ืืื ืืืขื ืืืคึผืืืงืึทื ืื ืืื ืงืก ืฆื ืื ืจืืคึผืึทืืึทืืึธืจืื ืืื ืืขื ืงืึธื:
ืืงืืจ: www.habr.com