рдбреЙрдХрд░реНрд╕ рдЭреБрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрдкреНрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВ

рдСрдирд▓рд╛рдЗрди рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдордЧреНрд░реА рдЕрдиреБрд╢рдВрд╕рд╛ рдкреНрд░рдгрд╛рд▓реА рдЬрд┐рд╕ рдкрд░ рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдмрдВрдж рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╡рд┐рдХрд╛рд╕ рд╣реИ рдФрд░ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдФрд░ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБ-рдШрдЯрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╕реАрдорд┐рдд рд╕рдордп рдореЗрдВ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХ рдордВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЙрдХ рдЭреБрдВрдб рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрдерд╛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдкрд╣рд▓рд╛ рднрд╛рдЧ рдбреЙрдХ рдЭреБрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ CI / CD рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рд╡реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рднрд╛рдЧ I


рд╕реБрджреВрд░, рд╕реБрджреВрд░ рд╡рд░реНрд╖ рдореЗрдВ рд╕реАрдЖрдИ / рд╕реАрдбреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдШрдЯрдХреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдПрдХ рд╢рд░реНрдд рдереА:

  • рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕реНрдерд┐рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП (рдпрд╛рдиреА, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛)
  • рдЕрдЧреНрд░рдгреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ (рдЕрдЬреАрдм рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдерд╛)
  • рд╡реИрдЪрд╛рд░рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдиреБрд╕рдВрдзрд╛рди рдПрд╡рдВ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдмрдВрдзрди

рдПрдорд╡реАрдкреА рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛, рд╕реНрдЯреИрдХ рдФрд░ рдирдореВрдирд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереАрдВ:

  • 4 рдЗрдВрдЯреЗрд▓┬о X5650 рд╕рд░реНрд╡рд░ рдбреЗрдмрд┐рдпрди рдХреЗ рд╕рд╛рде (рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдорд╢реАрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП)
  • рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ C ++, Python3 рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдореБрдЦреНрдп 3rdparty рдкреНрд░рдпреБрдХреНрдд рдЙрдкрдХрд░рдг: рдХрд╛рдлреНрдХрд╛, Clickhouse, Airflow, Redis, Grafana, Postgresql, Mysql, ...
  • рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдбрд┐рдмрдЧ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╣рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд╛рддрд╛рд╡рд░рдг (рд╕реАрдЖрдИ / рд╕реАрдбреА) рдореЗрдВ рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХреЛрдВ рдиреЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред C ++ рдпрд╛ рдкрд╛рдпрдерди рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд╕реНрдЯрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХрддреНрд░рд┐рдд рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рднрдВрдбрд╛рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдирдХреЗ рдмрд╛рдж рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рднреЗрдЬрдирд╛ред рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛, рдЕрд░реНрдерд╛рддреН: CI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ 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 *\n\tStrictHostKeyChecking no\n\n" > ~/.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 


рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЕрдкрдиреА рдЫрд╡рд┐ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреМрдХрд░реА рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ , рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ рдпрд╣ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рддреИрдирд╛рддреА рдХреЗ рдЪрд░рдг рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрд▓ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИ:

  1. createconfig.py - рдмрд╛рдж рдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди (рдкреНрд░реАрдкреНрд░реЛрдбрдХреНрд╢рди, рдкреНрд░реЛрдбрдХреНрд╢рди, рдЯреЗрд╕реНрдЯрд┐рдВрдЧ, ...) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде settings.ini рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред
  2. install_venv.sh - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд╛рдИ-рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ
  3. preparation_init.d.py - рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдШрдЯрдХ рд╕реНрдЯрд╛рд░реНрдЯ-рд╕реНрдЯреЙрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  4. рддреИрдирд╛рддреА - рдбреЗрдХреЛрдкреНрд░реЗрд╕ рдФрд░ рдирдП рдШрдЯрдХ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ

рд╕рдордп рдмреАрддрддрд╛ рдЧрдпрд╛ред рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕реНрдЯреЗрдЬ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрдбрдХреНрд╢рди рдФрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдФрд░ рд╡рд┐рддрд░рдг рдХрд┐рдЯ (CentOS) рдкрд░ рдЙрддреНрдкрд╛рдж рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред 5 рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдХ рджрд░реНрдЬрди рдЖрднрд╛рд╕реА рдЬреЛрдбрд╝реЗ рдЧрдПред рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдХрд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд░рд╛рдЬреНрдп рдХреЗ рдХрд░реАрдм рдЪрд▓рд╛рдПрдВред рдЗрд╕ рд╕рдордп, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ ...

рднрд╛рдЧ II


рдЫрд╡рд┐

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдЕрднреА рднреА рджрд░реНрдЬрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рддрдорд╛рд╢рд╛ рд╣реИ рдЬреЛ рдбреЙрдХрдлрд╛рдЗрд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реИред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рд╕рд╛рде рдХрдИ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдореВрд╣ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЬрд┐рддрдиреЗ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реИрдВ рдпрд╛ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдХрд░реАрдм рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХреНрд╖рдорддрд╛рдПрдВ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдИ рдХреНрд▓рд╕реНрдЯрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЕрд▓рдЧ-рдерд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдЖрджрд┐ рдкрд░ рдХреЛрдИ рдЪреМрд░рд╛рд╣рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрд╕рд╛рдзрди рд╣рдорд╛рд░рд╛ рд╕рдордп рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдерд╛ред

рддреЗрдЬ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреА рд╕рд╛рджрдЧреА рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рдХрд╛рд░рдг рдбреЙрдХрд░ рдЭреБрдВрдб рдХреЛ рдЪреБрдирд╛ред рд╣рдордиреЗ рдЬреЛ рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╡рд╣ рд░рд┐рдореЛрдЯ рдореИрдиреЗрдЬрд░ рд╕рд░реНрд╡рд░ рдФрд░ рдХрдИ рдиреЛрдбреНрд╕ рдкрд░ рдмрдирд╛ рдерд╛:

 $ 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 

рдЕрдЧрд▓рд╛, рд╣рдордиреЗ Gitlab-CI рдФрд░ рдЭреБрдВрдб рдиреЛрдбреНрд╕ рдХреЛ CI рдиреЛрдбреНрд╕ рдХреЗ рджреВрд░рд╕реНрде рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛрдбрд╝рд╛: рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдЧреБрдкреНрдд рдЪрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рдмрдВрдзрди рд╕рд░реНрд╡рд░ рдкрд░ рдбреЙрдХрд░ рд╕реЗрд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред рдЗрд╕ рд▓реЗрдЦ рдиреЗ рд╣рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛рдпрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ .itlab-ci .yml рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреМрдХрд░рд┐рдпрд╛рдВ рдЬреЛрдбрд╝реАрдВред

.Itlab-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 


рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рджреЛ рдмрдЯрди (рддреИрдирд╛рддреА_рд╕реНрдЯреЗрдЬрд┐рдВрдЧ, рд╕реНрдЯреЙрдк_рд╕реНрдЯреЗрдЬрд┐рдВрдЧ) рдХреЛ рдЙрди рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЫрд╡рд┐
рд╕реНрдЯреИрдХ рдХрд╛ рдирд╛рдо рд╢рд╛рдЦрд╛ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╕реНрдЯреИрдХ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдкреА-рдкрддреЗ, рдФрд░ рдкреЛрд░реНрдЯ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдЖрджрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдкреГрдердХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рд╕реЗ рд╕реНрдЯреИрдХ рддрдХ рд╕рдорд╛рди (рдХреНрдпреЛрдВрдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рднреА рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ) - рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рд╣рдо docker-compose.yml рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдХ (рдХреНрд▓рд╕реНрдЯрд░) рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдбреЛрдХрд░-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) рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИрдВред

рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХ (рд░реЗрдбрд┐рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд, mysql) рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд▓ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдпреЛрдЬрдирд╛рдПрдВ рдФрд░ рдХрд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ)ред рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЪрд░рдг рд╣рдорд╛рд░реА рдПрдХ рдмрдбрд╝реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП CMD рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рднрд╛рдЧ I рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддреИрдирд╛рддреА рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрдВрддрд░реЛрдВ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ:

  • git рдХреНрд▓реЛрди ... - рд╣рдореЗрдВ рдПрдХ рддреИрдирд╛рддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ (createconfig.py, install_venv.sh, рдЖрджрд┐)
  • рдХрд░реНрд▓ ... && рдЕрдирдЬрд╝рд┐рдк ... - рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЕрдирдЬрд╝рд┐рдк рдЕрд╕реЗрдВрдмрд▓реА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ (рд╕рдВрдХрд▓рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ)

рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрднреА рддрдХ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЬрд┐рди рдШрдЯрдХреЛрдВ рдореЗрдВ рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рд╡реЗ рдбреЗрд╡рд▓рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░:

Initlabab-ci.yml, рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдЯреИрдХ рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреИрд▓реЗрдВрд╕рд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ (рдЬреЛ рдХрд┐ рдХрдорд┐рдЯ рдХрд░рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдИ nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ: /etc/nginx -conf.d/$ рдкреЗрдЧрдирд╛рд╕реА_COMMIT_REF_NAMEтЦ║.conf) - рджреЗрдЦреЗрдВ рдХреЛрдб рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ-рдирдЧрдиреЗрдХреНрд╕.рдЖрдИрдПрдордПрд▓)

  - docker stack deploy -c docker-compose-nginx.yml ${CI_ENVIRONMENT_NAME} --with-registry-auth 

рдбреЛрдХрд░-рд▓рд┐рдЦреЗрдВ-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 


рд╡рд┐рдХрд╛рд╕ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рдЕрджреНрдпрддрди / рдЖрджрд┐ / рдореЗрдЬрдмрд╛рди; рд░рдЬрд┐рд╕реНрдЯрд░ nginx рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

10.50.173.106 staging_BRANCH-1831_cluster.dev

рдЗрд╕рд▓рд┐рдП, рдкреГрдердХ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдХреА рддреИрдирд╛рддреА рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдм рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЧреЗ рдХреА рдпреЛрдЬрдирд╛:

  • рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ
  • рд╣рд░ Dockerfile рдХреЗ рд▓рд┐рдП рдмрдирд╛рдУ
  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрдо рд▓реЛрдб рдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
  • рдирд╛рдо рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдиреЛрдб рд╕реЗрдЯ рдХрд░реЗрдВ (рд▓реЗрдЦ рдореЗрдВ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп)
  • рдЬрд╛рдВрдЪ рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдирд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ
  • ...

рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi471528/


All Articles