рдЖрдореНрд╣реА рдЬреНрдпрд╛ рдСрдирд▓рд╛рдЗрди рд╡реНрд╣рд┐рдбрд┐рдУ рд╕рд╛рдордЧреНрд░реА рд╢рд┐рдлрд╛рд░рд╕ рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЛрдд рддреА рдПрдХ рдмрдВрдж рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЖрд╣реЗ рдЖрдгрд┐ рддрд╛рдВрддреНрд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдорд╛рд▓рдХреА рдЖрдгрд┐ рдореБрдХреНрдд рд╕реНрд░реЛрдд рдШрдЯрдХрд╛рдВрдЪрд╛ рдПрдХ рдмрд╣реБ-рдШрдЯрдХ рдХреНрд▓рд╕реНрдЯрд░ рдЖрд╣реЗ. рд╣рд╛ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рдбреЙрдХрд░ рд╕реНрд╡реЙрд░реНрдо рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреЗ рд╣рд╛ рдЖрд╣реЗ, рдорд░реНрдпрд╛рджрд┐рдд рд╡реЗрд│реЗрдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЖрдордЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рд╛рдд рд╡реНрдпрддреНрдпрдп рди рдЖрдгрддрд╛. рдЖрдкрд▓реНрдпрд╛ рд▓рдХреНрд╖ рд╡реЗрдзрдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓реЗ рд╡рд░реНрдгрди рджреЛрди рднрд╛рдЧрд╛рдд рд╡рд┐рднрд╛рдЧрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. рдкрд╣рд┐рд▓рд╛ рднрд╛рдЧ рдбреЙрдХрд░ рд╕реНрд╡реЙрд░реНрдо рд╡рд╛рдкрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА CI/CD рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ рдЖрдгрд┐ рджреБрд╕рд░рд╛ рднрд╛рдЧ рддреЗ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ. рдЬреНрдпрд╛рдВрдирд╛ рдкрд╣рд┐рд▓рд╛ рднрд╛рдЧ рд╡рд╛рдЪрдгреНрдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдирд╛рд╣реА рддреЗ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рджреБрд╕рд▒реНрдпрд╛ рднрд╛рдЧрд╛рд╡рд░ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
рднрд╛рдЧ I
рдПрдХреЗрдХрд╛рд│реА, рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рд▓рд╡рдХрд░ CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рд╣реЛрддреА. рдбреЙрдХрд░ рди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдПрдХ рдЕрдЯ рд╣реЛрддреА рддреИрдирд╛рддреАрд╕рд╛рдареА рдЕрдиреЗрдХ рдХрд╛рд░рдгрд╛рдВрд╕рд╛рдареА рдШрдЯрдХ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд:
- рдЙрддреНрдкрд╛рджрдирд╛рддреАрд▓ рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдЖрдгрд┐ рд╕реНрдерд┐рд░ рдСрдкрд░реЗрд╢рдирд╕рд╛рдареА (рдореНрд╣рдгрдЬреЗрдЪ, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛)
- рдЖрдШрд╛рдбреАрдЪреНрдпрд╛ рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рдбреЙрдХрд░рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рд╛рдпрдЪреЗ рдирд╡реНрд╣рддреЗ (рд╡рд┐рдЪрд┐рддреНрд░, рдкрдг рддреЗ рдЕрд╕реЗрдЪ рд╣реЛрддреЗ)
- R&D рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рдЪреНрдпрд╛ рд╡реИрдЪрд╛рд░рд┐рдХ рдХрд╛рд░рдгрд╛рдВрд╕рд╛рдареА
MVP рд╕рд╛рдареА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛, рд╕реНрдЯреЕрдХ рдЖрдгрд┐ рдЕрдВрджрд╛рдЬреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рд╣реЛрддреНрдпрд╛:
- Debian рд╕рд╣ 4 Intel┬о X5650 рд╕рд░реНрд╡реНрд╣рд░ (рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рдкреВрд░реНрдгрдкрдгреЗ рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдорд╢реАрди)
- рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╕рд╛рдиреБрдХреВрд▓ рдШрдЯрдХрд╛рдВрдЪрд╛ рд╡рд┐рдХрд╛рд╕ C++, Python3 рдордзреНрдпреЗ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ
- рд╡рд╛рдкрд░рд▓реЗрд▓реА рдореБрдЦреНрдп 3rdparty рдЯреВрд▓реНрд╕: Kafka, Clickhouse, Airflow, Redis, Grafana, Postgresql, Mysql, тАж
- рдбреАрдмрдЧ рдЖрдгрд┐ рд░рд┐рд▓реАрдЭрд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдШрдЯрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рдЗрдкрд▓рд╛рдЗрди
рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд (CI/CD) рд╕рд╛рдиреБрдХреВрд▓ рдШрдЯрдХ рдХрд╕реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ рд╣реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рд╕реЛрдбрд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ.
рдЖрдореНрд╣реА рддреГрддреАрдп-рдкрдХреНрд╖ рдШрдЯрдХ рдкрджреНрдзрддрд╢реАрд░рдкрдгреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдкрджреНрдзрддрд╢реАрд░рдкрдгреЗ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. C++ рдХрд┐рдВрд╡рд╛ Python рдордзреНтАНрдпреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реЗ рд╕рд╛рдиреБрдХреВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреЗрдХ рдкреНрд░рдХрд╛рд░реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рддреНрдпрд╛рдкреИрдХреА, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде: рд╕рд┐рд╕реНрдЯрдо рдкреЕрдХреЗрдЬреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ, рддреНрдпрд╛рдВрдирд╛ рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддрд┐рдорд╛рдВрдЪреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд рдкрд╛рдард╡рдгреЗ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рддреНрдпрд╛рдВрдЪреА рддреНрдпрд╛рдирдВрддрд░рдЪреА рд╕реНрдерд╛рдкрдирд╛. рдЖрдзреАрдЪ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгрд╛рд╕реНрддрд╡, рджреБрд╕рд░реА рдкрджреНрдзрдд рдирд┐рд╡рдбрд▓реА рдЧреЗрд▓реА, рддреА рдореНрд╣рдгрдЬреЗ: CI рд╡рд╛рдкрд░реВрди, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рдПрдХ рдЖрднрд╛рд╕реА рдкреНрд░рдХрд▓реНрдк рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, requirements.txt рд╡рд░реВрди py рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдпрд╛ рд╕рд░реНрд╡ рдХрд▓рд╛рдХреГрддреА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдгрд┐ рд╕реЛрдмрдд рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реЛрдмрдд рдЕрд╕рд▓реЗрд▓реЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рддрд╛рд╡рд░рдг. рдкреБрдвреЗ, рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░рд╛рдВрд╢рд┐рд╡рд╛рдп рдЖрднрд╛рд╕реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреВрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.
Gitlab-CI CI/CD рдкреНрд░рдгрд╛рд▓реА рдореНрд╣рдгреВрди рдирд┐рд╡рдбрд▓реЗ рдЧреЗрд▓реЗ. рдкрд░рд┐рдгрд╛рдореА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рд▓реА:
рд╕рдВрд░рдЪрдирд╛рддреНрдордХрджреГрд╖реНрдЯреНрдпрд╛, gitlab-ci.yml рдЕрд╕реЗ рджрд┐рд╕рд▓реЗ:
---
variables:
# ╨╝╨╕╨╜╨╕╨╝╨░╨╗╤М╨╜╨░╤П ╨▓╨╡╤А╤Б╨╕╤П ╨ж╨Я╨г ╨╜╨░ ╤Б╨╡╤А╨▓╨╡╤А╨░╤Е, ╨│╨┤╨╡ ╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╡╤В╤Б╤П ╨║╨╗╨░╤Б╤В╨╡╤А
CMAKE_CPUTYPE: "westmere"
DEBIAN: "MYREGISTRY:5000/debian:latest"
before_script:
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh && echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config
stages:
- build
- testing
- deploy
debug.debian:
stage: build
image: $DEBIAN
script:
- cd builds/release && ./build.sh
paths:
- bin/
- builds/release/bin/
when: always
release.debian:
stage: build
image: $DEBIAN
script:
- cd builds/release && ./build.sh
paths:
- bin/
- builds/release/bin/
when: always
## testing stage
tests.codestyle:
stage: testing
image: $DEBIAN
dependencies:
- release.debian
script:
- /bin/bash run_tests.sh -t codestyle -b "${CI_COMMIT_REF_NAME}_codestyle"
tests.debug.debian:
stage: testing
image: $DEBIAN
dependencies:
- debug.debian
script:
- /bin/bash run_tests.sh -e codestyle/test_pylint.py -b "${CI_COMMIT_REF_NAME}_debian_debug"
artifacts:
paths:
- run_tests/username/
when: always
expire_in: 1 week
tests.release.debian:
stage: testing
image: $DEBIAN
dependencies:
- release.debian
script:
- /bin/bash run_tests.sh -e codestyle/test_pylint.py -b "${CI_COMMIT_REF_NAME}_debian_release"
artifacts:
paths:
- run_tests/username/
when: always
expire_in: 1 week
## staging stage
deploy_staging:
stage: deploy
environment: staging
image: $DEBIAN
dependencies:
- release.debian
script:
- cd scripts/deploy/ &&
python3 createconfig.py -s $CI_ENVIRONMENT_NAME &&
/bin/bash install_venv.sh -d -r ../../requirements.txt &&
python3 prepare_init.d.py &&
python3 deploy.py -s $CI_ENVIRONMENT_NAME
when: manual
рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдЕрд╕реЗрдВрдмреНрд▓реА рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкреНрд░рддрд┐рдореЗрд╡рд░ рдЪрд╛рд▓рддреЗ, рдЬрд┐рдереЗ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рд╕реНрдЯрдо рдкреЕрдХреЗрдЬреЗрд╕ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рд╕реНрдерд╛рдкрд┐рдд рдЖрд╣реЗрдд рдЖрдгрд┐ рдЗрддрд░ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд.
рдЬреЙрдмрдордзреАрд▓ рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рдиреЗ рдордиреЛрд░рдВрдЬрдХ рдЕрд╕рд▓реНрдпрд╛ рддрд░реА, рдореА рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдирдХреНрдХреАрдЪ рдмреЛрд▓рдгрд╛рд░ рдирд╛рд╣реА; рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕ рдмрд░рд╛рдЪ рд╡реЗрд│ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рд╣рд╛ рд▓реЗрдЦрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рдирд╛рд╣реА. рдореА рдлрдХреНрдд рддреБрдордЪреЗ рд▓рдХреНрд╖ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдХрдбреЗ рд╡реЗрдзреВрди рдШреЗрддреЛ рдХреА рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реНрдЯреЗрдЬрдордзреНрдпреЗ рдХреЙрд▓рд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рдХреНрд░рдо рдЕрд╕рддреЛ:
- createconfig.py тАФ рдирдВрддрд░рдЪреНрдпрд╛ рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА (рдкреВрд░реНрд╡рдирд┐рд░реНрдорд┐рддреА, рдЙрддреНрдкрд╛рджрди, рдЪрд╛рдЪрдгреА, ...) рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддреАрд▓ рдШрдЯрдХрд╛рдВрд╕рд╛рдареА рд╕реЗрдЯрд┐рдВрдЧреНрдЬрд╕рд╣ settings.ini рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддреЗ.
- install_venv.sh тАФ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреАрд▓ py рдШрдЯрдХрд╛рдВрд╕рд╛рдареА рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рддреЗ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдХреЙрдкреА рдХрд░рддреЗ
- ready_init.d.py тАФ рдЯреЗрдореНрдкрд▓реЗрдЯрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реНрдЯрд╛рд░реНрдЯ-рд╕реНрдЯреЙрдк рдШрдЯрдХрд╛рдВрд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХрд░рддреЗ
- deploy.py тАФ рдирд╡реАрди рдШрдЯрдХ рддреИрдирд╛рдд рдЖрдгрд┐ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рддреЗ
рд╡реЗрд│ рдирд┐рдШреВрди рдЧреЗрд▓реА. рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕реНрдЯреЗрдЬрдЪреА рдЬрд╛рдЧрд╛ рдкреВрд░реНрд╡рдЙрддреНрдкрд╛рджрди рдЖрдгрд┐ рдЙрддреНрдкрд╛рджрдирд╛рдиреЗ рдШреЗрддрд▓реА. рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЖрдгрдЦреА рдПрдХрд╛ рд╡рд┐рддрд░рдгрд╛рд╡рд░ (CentOS) рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. рдЖрдгрдЦреА 5 рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднреМрддрд┐рдХ рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдбрдЭрдирднрд░ рдЖрднрд╛рд╕реА рд╕рд░реНрд╡реНрд╣рд░ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ. рдЖрдгрд┐ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдЖрдгрд┐ рдкрд░реАрдХреНрд╖рдХрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдВрдЪреА рдХрдореА-рдЕрдзрд┐рдХ рдкреНрд░рдорд╛рдгрд╛рдд рдХрд╛рд░реНрдпрд░рдд рд╕реНрдерд┐рддреАрдЪреНрдпрд╛ рдЬрд╡рд│ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЪрд╛рдЪрдгреА рдШреЗрдгреЗ рдХрдареАрдг рд╣реЛрдд рдЧреЗрд▓реЗ. рдпрд╛рд╡реЗрд│реА рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЭрд╛рд▓реЗ рдХреА рддреНрдпрд╛рдЪреНрдпрд╛рд╢рд┐рд╡рд╛рдп рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рдЖрд╣реЗ ...
рднрд╛рдЧ рджреБрд╕рд░рд╛
рддрд░, рдЖрдордЪрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдбреЙрдХрд░рдлрд╛рдИрд▓реНрд╕рдиреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА рдЕрд╢рд╛ рджреЛрди рдбрдЭрди рд╡реИрдпрдХреНрддрд┐рдХ рдШрдЯрдХрд╛рдВрдЪреА рдПрдХ рдиреЗрддреНрд░рджреАрдкрдХ рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ. рддреБрдореНрд╣реА рддреЗ рдлрдХреНрдд рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛. рдкреНрд░реА-рд░рд┐рд▓реАрдЭ рдЪрд╛рдЪрдгреАрдкреВрд░реНрд╡реА рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рддреИрдирд╛рдд рдХрд░рдгреЗ рд╣реЗ рдЖрдордЪреЗ рдХрд╛рд░реНрдп рдЖрд╣реЗ.
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХрджреГрд╖реНрдЯреНрдпрд╛, рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдХрд╛рд░реНрдпрд░рдд рдЕрд╕реВ рд╢рдХрддрд╛рдд: рдкреВрд░реНрдг рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрдд рдХрд┐рдВрд╡рд╛ рдкреВрд░реНрдгрддреНрд╡рд╛рдЪреНрдпрд╛ рдЬрд╡рд│ рдЕрд╕рд▓реЗрд▓реА рдХрд╛рд░реНрдпреЗ. рдЖрдордЪреНрдпрд╛ рд╡рд┐рд▓реНрд╣реЗрд╡рд╛рдЯреАрд╡рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреА рд╢рдХреНрддреА рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЕрдиреЗрдХ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХреНрд▓рд╕реНрдЯрд░ рд╡реЗрдЧрд│реЗ рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдкреЛрд░реНрдЯреНрд╕, рдбрд┐рд░реЗрдХреНрдЯрд░реА рдЗ. рдордзреНрдпреЗ рдУрд╡реНрд╣рд░рд▓реЕрдк рдирд╕рд╛рд╡реЗ).
рдЖрдордЪрд╛ рд╕рд░реНрд╡рд╛рдд рдореМрд▓реНрдпрд╡рд╛рди рд╕реНрддреНрд░реЛрдд рд╣рд╛ рдЖрдордЪрд╛ рд╡реЗрд│ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рддреЗ рдЬрд╛рд╕реНрдд рдирд╡реНрд╣рддреЗ.
рдЬрд▓рдж рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдбреЙрдХрд░ рд╕реНрд╡реЙрд░реНрдо рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд╛рдзреЗрдкрдгрд╛рдореБрд│реЗ рдЖрдгрд┐ рд▓рд╡рдЪрд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдореБрд│реЗ рдирд┐рд╡рдбрд▓реЗ. рдЖрдореНрд╣реА рдХреЗрд▓реЗрд▓реА рдкрд╣рд┐рд▓реА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЖрдгрд┐ рдЕрдиреЗрдХ рдиреЛрдбреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ:
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kilqc94pi2upzvabttikrfr5d nop-test-1 Ready Active 19.03.2
jilwe56pl2zvabupryuosdj78 nop-test-2 Ready Active 19.03.2
j5a4yz1kr2xke6b1ohoqlnbq5 * nop-test-3 Ready Active Leader 19.03.2
рдкреБрдвреЗ, рдЖрдореНрд╣реА рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХреЗрд▓реЗ:
$ docker network create --driver overlay --subnet 10.10.10.0/24 nw_swarm
рдкреБрдвреЗ, рдЖрдореНрд╣реА CI рдХрдбреАрд▓ рдиреЛрдбреНрд╕рдЪреНрдпрд╛ рд░рд┐рдореЛрдЯ рдореЕрдиреЗрдЬрдореЗрдВрдЯрдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ Gitlab-CI рдЖрдгрд┐ Swarm рдиреЛрдбреНрд╕ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗ: рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ, рдЧреБрдкреНрдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдбреЙрдХрд░ рд╕реЗрд╡рд╛ рджреЗрдЦреАрд▓ рд╕реЗрдЯ рдХрд░рдгреЗ. рд╣рд╛ рдПрдХ
рдкреБрдвреЗ, рдЖрдореНрд╣реА .gitlab-ci .yml рдордзреНрдпреЗ рд╕реНрдЯреЕрдХ рддрдпрд╛рд░ рдЖрдгрд┐ рдирд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдиреЛрдХрд▒реНрдпрд╛ рдЬреЛрдбрд▓реНрдпрд╛.
.gitlab-ci .yml рдордзреНрдпреЗ рдЖрдгрдЦреА рдЕрдиреЗрдХ рдиреЛрдХрд▒реНрдпрд╛ рдЬреЛрдбрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд
## staging stage
deploy_staging:
stage: testing
before_script:
- echo "override global 'before_script'"
image: "REGISTRY:5000/docker:latest"
environment: staging
dependencies: []
variables:
DOCKER_CERT_PATH: "/certs"
DOCKER_HOST: tcp://10.50.173.107:2376
DOCKER_TLS_VERIFY: 1
CI_BIN_DEPENDENCIES_JOB: "release.centos.7"
script:
- mkdir -p $DOCKER_CERT_PATH
- echo "$TLSCACERT" > $DOCKER_CERT_PATH/ca.pem
- echo "$TLSCERT" > $DOCKER_CERT_PATH/cert.pem
- echo "$TLSKEY" > $DOCKER_CERT_PATH/key.pem
- docker stack deploy -c docker-compose.yml ${CI_ENVIRONMENT_NAME}_${CI_COMMIT_REF_NAME} --with-registry-auth
- rm -rf $DOCKER_CERT_PATH
when: manual
## stop staging stage
stop_staging:
stage: testing
before_script:
- echo "override global 'before_script'"
image: "REGISTRY:5000/docker:latest"
environment: staging
dependencies: []
variables:
DOCKER_CERT_PATH: "/certs"
DOCKER_HOST: tcp://10.50.173.107:2376
DOCKER_TLS_VERIFY: 1
script:
- mkdir -p $DOCKER_CERT_PATH
- echo "$TLSCACERT" > $DOCKER_CERT_PATH/ca.pem
- echo "$TLSCERT" > $DOCKER_CERT_PATH/cert.pem
- echo "$TLSKEY" > $DOCKER_CERT_PATH/key.pem
- docker stack rm ${CI_ENVIRONMENT_NAME}_${CI_COMMIT_REF_NAME}
# TODO: need check that stopped
when: manual
рд╡рд░реАрд▓ рдХреЛрдбрдЪреНрдпрд╛ рддреБрдХрдбреНрдпрд╛рдВрд╡рд░реВрди рд╣реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ рдХреА рджреЛрди рдмрдЯрдгреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ рдЬреЛрдбрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗрдд (deploy_staging, stop_staging) рдЬреНрдпрд╛рдВрдирд╛ рдореЕрдиреНрдпреБрдЕрд▓ рдХреНрд░рд┐рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╕реНрдЯреЕрдХрдЪреЗ рдирд╛рд╡ рд╢рд╛рдЦреЗрдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╢реА рдЬреБрд│рддреЗ рдЖрдгрд┐ рд╣реЗ рд╡реЗрдЧрд│реЗрдкрдг рдкреБрд░реЗрд╕реЗ рдЕрд╕рд╛рд╡реЗ. рд╕реНрдЯреЕрдХрдордзреАрд▓ рд╕реЗрд╡рд╛рдВрдирд╛ рдЕрджреНрд╡рд┐рддреАрдп IP рдкрддреНрддреЗ рдЖрдгрд┐ рдкреЛрд░реНрдЯ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЗ. рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛рдд. рд╡реЗрдЧрд│реЗ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓, рдкрд░рдВрддреБ рд╕реНрдЯреЕрдХрдкрд╛рд╕реВрди рд╕реНрдЯреЕрдХрдкрд░реНрдпрдВрдд рд╕рд╛рд░рдЦреЗрдЪ (рд╕рд░реНрд╡ рд╕реНрдЯреЕрдХрд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рд╕рдорд╛рди рдЕрд╕рд▓реНрдпрд╛рдиреЗ) - рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗрдЪ рд╣рд╡реЗ рд╣реЛрддреЗ. рдЖрдореНрд╣реА рд╡рд╛рдкрд░реВрди рд╕реНрдЯреЕрдХ (рдХреНрд▓рд╕реНрдЯрд░) рддреИрдирд╛рдд рдХрд░рддреЛ docker-compose.yml, рдЬреЗ рдЖрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ.
docker-compose.yml
---
version: '3'
services:
userprop:
image: redis:alpine
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
celery_bcd:
image: redis:alpine
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
schedulerdb:
image: mariadb:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: schedulerdb
MYSQL_USER: ****
MYSQL_PASSWORD: ****
command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--explicit_defaults_for_timestamp=1']
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
celerydb:
image: mariadb:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: celerydb
MYSQL_USER: ****
MYSQL_PASSWORD: ****
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
cluster:
image: $CENTOS7
environment:
- CENTOS
- CI_ENVIRONMENT_NAME
- CI_API_V4_URL
- CI_REPOSITORY_URL
- CI_PROJECT_ID
- CI_PROJECT_URL
- CI_PROJECT_PATH
- CI_PROJECT_NAME
- CI_COMMIT_REF_NAME
- CI_BIN_DEPENDENCIES_JOB
command: >
sudo -u myusername -H /bin/bash -c ". /etc/profile &&
mkdir -p /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME &&
cd /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME &&
git clone -b $CI_COMMIT_REF_NAME $CI_REPOSITORY_URL . &&
curl $CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=$CI_BIN_DEPENDENCIES_JOB -o artifacts.zip &&
unzip artifacts.zip ;
cd /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME/scripts/deploy/ &&
python3 createconfig.py -s $CI_ENVIRONMENT_NAME &&
/bin/bash install_venv.sh -d -r ../../requirements.txt &&
python3 prepare_init.d.py &&
python3 deploy.py -s $CI_ENVIRONMENT_NAME"
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
tty: true
stdin_open: true
networks:
nw_swarm:
networks:
nw_swarm:
external: true
рдпреЗрдереЗ рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдШрдЯрдХ рдПрдХрд╛ рдиреЗрдЯрд╡рд░реНрдХрдиреЗ (nw_swarm) рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдПрдХрдореЗрдХрд╛рдВрдирд╛ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрд╣реЗрдд.
рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХ (redis, mysql рд╡рд░ рдЖрдзрд╛рд░рд┐рдд) рд╕рд╛рдиреБрдХреВрд▓ рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд▓рдкрд╛рд╕реВрди рд╡реЗрдЧрд│реЗ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд (рдпреЛрдЬрдирд╛рдВрдордзреНрдпреЗ, рд╕рд╛рдиреБрдХреВрд▓ рдШрдЯрдХ рджреЗрдЦреАрд▓ рд╕реЗрд╡рд╛ рдореНрд╣рдгреВрди рд╡рд┐рднрд╛рдЧрд▓реЗ рдЬрд╛рддрд╛рдд). рдЖрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рдЪреА рддреИрдирд╛рддреА рдЕрд╡рд╕реНрдерд╛ рдЖрдордЪреНрдпрд╛ рдПрдХрд╛ рдореЛрдареНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ CMD рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реНрдпрд╛рд╕рд╛рд░рдЦреА рджрд┐рд╕рддреЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рднрд╛рдЧ I рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рддреИрдирд╛рддреАрдкреЗрдХреНрд╖рд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рднрд┐рдиреНрди рдирд╛рд╣реА. рдореА рдлрд░рдХрд╛рдВрд╡рд░ рдЬреЛрд░ рджреЗрдИрди:
- git рдХреНрд▓реЛрди... тАФ рдЙрдкрдпреЛрдЬрди (createconfig.py, install_venv.sh, рдЗ.) рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реНрд╕ рдорд┐рд│рддрд╛рдд.
- рдХрд░реНрд▓... && рдЕрдирдЭрд┐рдк... - рдмрд┐рд▓реНрдб рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рдЕрдирдЭрд┐рдк рдХрд░рд╛ (рд╕рдВрдХрд▓рд┐рдд рдЙрдкрдпреБрдХреНрддрддрд╛)
рдЕрджреНрдпрд╛рдк рдЕрд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдлрдХреНрдд рдПрдХ рдЖрд╣реЗ: рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрд╕рд▓реЗрд▓реЗ рдШрдЯрдХ рд╡рд┐рдХрд╕рдХрд╛рдВрдЪреНрдпрд╛ рдмреНрд░рд╛рдЙрдЭрд░рдордзреВрди рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдирд╛рд╣реАрдд. рдЖрдореНрд╣реА рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╡рд╛рдкрд░реВрди рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рддреЛ, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ:
.gitlab-ci.yml рдордзреНрдпреЗ, рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдЯреЕрдХ рддреИрдирд╛рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдмреЕрд▓рдиреНрд╕рд░ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдУрд│ рдЬреЛрдбрд╛ (рдЬреЗ, рд╡рдЪрдирдмрджреНрдз рдЕрд╕рддрд╛рдирд╛, рдлрдХреНрдд рддреНрдпрд╛рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддреЗ (рдЯреЗрдореНрдкреНрд▓реЗрдЯрдиреБрд╕рд╛рд░ рдирд╡реАрди nginx рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рддреЗ: /etc/nginx/conf.d) /${CI_COMMIT_REF_NAME}.conf) - рдХреЛрдб рдбреЙрдХрд░-рдХрдВрдкреЛрдЬ-nginx.yml рдкрд╣рд╛)
- docker stack deploy -c docker-compose-nginx.yml ${CI_ENVIRONMENT_NAME} --with-registry-auth
docker-compose-nginx.yml
---
version: '3'
services:
nginx:
image: nginx:latest
environment:
CI_COMMIT_REF_NAME: ${CI_COMMIT_REF_NAME}
NGINX_CONFIG: |-
server {
listen 8080;
server_name staging_${CI_COMMIT_REF_NAME}_cluster.dev;
location / {
proxy_pass http://staging_${CI_COMMIT_REF_NAME}_cluster:8080;
}
}
server {
listen 5555;
server_name staging_${CI_COMMIT_REF_NAME}_cluster.dev;
location / {
proxy_pass http://staging_${CI_COMMIT_REF_NAME}_cluster:5555;
}
}
volumes:
- /tmp/staging/nginx:/etc/nginx/conf.d
command:
/bin/bash -c "echo -e "$$NGINX_CONFIG" > /etc/nginx/conf.d/${CI_COMMIT_REF_NAME}.conf;
nginx -g "daemon off;";
/etc/init.d/nginx reload"
ports:
- 8080:8080
- 5555:5555
- 3000:3000
- 443:443
- 80:80
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
networks:
nw_swarm:
external: true
рд╡рд┐рдХрд╕рдХ рд╕рдВрдЧрдгрдХрд╛рдВрд╡рд░, рдЕрдкрдбреЗрдЯ /etc/hosts; nginx рд╡рд░ url рд╕реЗрдЯ рдХрд░рд╛:
10.50.173.106 staging_BRANCH-1831_cluster.dev
рддреНрдпрд╛рдореБрд│реЗ, рд╡реЗрдЧрд│реНрдпрд╛ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХреНрд▓рд╕реНрдЯрд░рдЪреА рддреИрдирд╛рддреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рдХ рдЖрддрд╛ рддреНрдпрд╛рдВрдЪреА рдХрд╛рд░реНрдпреЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╢рд╛ рдкреНрд░рдорд╛рдгрд╛рдд рддреНрдпрд╛рдВрдирд╛ рд▓реЙрдиреНрдЪ рдХрд░реВ рд╢рдХрддрд╛рдд.
рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рдпреЛрдЬрдирд╛:
- рд╕реЗрд╡рд╛ рдореНрд╣рдгреВрди рдЖрдордЪреЗ рдШрдЯрдХ рд╡реЗрдЧрд│реЗ рдХрд░рд╛
- рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдПрдХ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рд╛
- рд╕реНрдЯреЕрдХрдордзреНрдпреЗ рдХрдореА рд▓реЛрдб рдХреЗрд▓реЗрд▓реЗ рдиреЛрдбреНрд╕ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╢реЛрдзрд╛
- рдирд╛рд╡ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд╛рдкрд░реВрди рдиреЛрдбреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛ (рд▓реЗрдЦрд╛рддреАрд▓ рдЖрдпрдбреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдРрд╡рдЬреА)
- рд╕реНрдЯреЕрдХ рдирд╖реНрдЯ рдЭрд╛рд▓реНрдпрд╛рдЪреЗ рдЪреЗрдХ рдЬреЛрдбрд╛
- ...
рд╕рд╛рдареА рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж
рд╕реНрддреНрд░реЛрдд: www.habr.com