CI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ AWS рдкрд░ рд╕рд┐рдореНрдлрдиреА + рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░реЗрдВ

рд╢реБрдн рджреЛрдкрд╣рд░, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рд╕рд┐рдореНрдлрдиреА 4 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИред 2019 рдХреЗ рдпрд╛рд░реНрдб рдореЗрдВ, рдбреЙрдХ рдореЛрдб рдореЗрдВ, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рд╕реАрдЖрдИ / рд╕реАрдбреА рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдЕрдВрддрддрдГ рди рдХреЗрд╡рд▓ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рдЙрдкрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдирд╢реНрд╡рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рднреАред рд▓реЗрдЦ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдмрдбрд╝рд╛ рджреНрд░рд╡реНрдпрдорд╛рди рд▓реЛрдЧреЛрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП React.JS рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдореЛрд░реНрдЪрд╛ рдЬреЛрдбрд╝рд╛, рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рджреЛрд╣рд░рд╛рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдореИрдВ рдЗрдВрдЧрд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдмрджрд▓реЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред JS рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдХрд┐рд╕реЗ рд░реБрдЪрд┐ рд╣реЛрдЧреА? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкреАрдПрдЪрдкреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ рдЬреЛ рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╕рд╛рдорд╛рдиреНрдп рдХреИрдирди рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреИрдХ рдХрд░рдиреЗ рдФрд░ рдЫрд╡рд┐ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЖрдк рдереЛрдбрд╝рд╛ рдФрд░ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЧреЗ рдХрд╛ рдХрдерди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ CI / CD рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Git рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реЛрдЧрд╛ (CircleCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк Gitlab config рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдЗрд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ React / PHP рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдпрд╛ рдХрд╣реЗрдВ, .NET рдХреЛрд░, рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рддреИрдирд╛рддреА рд╕реНрд╡рдЪрд╛рд▓рди рдХреМрд╢рд▓ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рд╕реНрд░реЛрдд рдХреЛрдб рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХред рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд┐рдореНрдлрдиреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!" рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛: рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

`symfony/webpack-encore-bundle symfony/form symfony/orm-pack symfony/profiler-pack symfony/security-bundle symfony/twig-bundle symfony/validator symfony/phpunit-bridge` рдПрдХ рдиреНрдпреВрдирддрдо рд╕рдЬреНрдЬрди рд╕реЗрдЯ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХреА рдкрд░реАрдХреНрд╖рдг рдЕрд╡рдзрд┐ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдореЗрдВ 2 рдбреАрдмреА рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореИрдВ рдирдП "рд╕реБрд╡рд┐рдзрд╛рдУрдВ" рдФрд░ рдкреАрдЖрд░рдбреА (рдЙрддреНрдкрд╛рджрди) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрдзреЗ "рдореБрдХрд╛рдмрд▓рд╛" рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд╕рд░реНрд╡рд░ред рдкреНрд░рдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрд░рдбреАрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдирд╣реАрдВ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП DBMS рдХреЗ рд░реВрдк рдореЗрдВ PostgreSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЖрдк рдХрд┐рд╕реА рднреА рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЖрд░рдбреАрдПрд╕ рд╕реЗрд╡рд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖рдорддрд╛ рдФрд░ рдорд╛рддреНрд░рд╛ рдХреЗ 2 рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред рдЪреВрдВрдХрд┐ .env рдлрд╛рдЗрд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП "рдЖрдЙрдЯ рдСрдл рдж рдмреЙрдХреНрд╕" рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PROD рдХреЗ рд▓рд┐рдП, рдФрд░ STG рдХреЗ рд▓рд┐рдП рд╣рдо .env.stg рдХреА рдПрдХ рдкреНрд░рддрд┐ .env.stg рдФрд░ APP_ENV=dev APP_ENV=stg рдореЗрдВ .env.stg рдФрд░ APP_ENV=dev APP_ENV=prod рдкрд░ APP_ENV=dev APP_ENV=prod , рдФрд░ рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП .env рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рднреА рджрд░реНрдЬ рдХрд░реЗрдВред

рдорд╣рд╛рди, рдПрдХ рд╢реБрд░реБрдЖрдд рдХреА рдЧрдИ рд╣реИ! рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдореНрдлрдиреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкреЛрдЬрд░.рд╢ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ:

composer.sh
 #!/bin/sh EXPECTED_SIGNATURE="$(wget -q -O - https://composer.imtqy.com/installer.sig)" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ACTUAL_SIGNATURE="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ] then >&2 echo 'ERROR: Invalid installer signature' rm composer-setup.php exit 1 fi php composer-setup.php --quiet RESULT=$? rm composer-setup.php exit $RESULT 


рдпрд╣ рд╕рдВрдЧреАрддрдХрд╛рд░ рд╕реЗ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЧрд╛рдЗрдб рд╣реИ ред

рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбреЙрдХрд░рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:

Dockerfile.stg (рдордВрдЪрди)
 FROM php:7.2.19-apache EXPOSE 80 RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" && a2enmod rewrite RUN sed -ri -e 's!memory_limit = 128M!memory_limit = 256M!g' "$PHP_INI_DIR/php.ini" RUN apt-get update && apt-get install -y \ wget \ curl \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libzip-dev \ zip \ libpq-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-configure zip --with-libzip \ && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install zip \ && docker-php-ext-install pdo pdo_pgsql pgsql WORKDIR /var/www ENV APACHE_DOCUMENT_ROOT /var/www/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf COPY ./composer.sh ./ RUN chmod +x ./composer.sh && ./composer.sh && mv composer.phar /usr/local/bin/composer RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ && apt-get install -y nodejs RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y yarn COPY ./ ./ COPY ./.env.stg ./.env RUN composer install && yarn && yarn run build 


рдФрд░

Dockerfile (рдЙрддреНрдкрд╛рджрди)
 FROM php:7.2.19-apache EXPOSE 80 RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" && a2enmod rewrite RUN sed -ri -e 's!memory_limit = 128M!memory_limit = 256M!g' "$PHP_INI_DIR/php.ini" RUN apt-get update && apt-get install -y \ wget \ curl \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libzip-dev \ zip \ libpq-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-configure zip --with-libzip \ && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install zip \ && docker-php-ext-install pdo pdo_pgsql pgsql WORKDIR /var/www ENV APACHE_DOCUMENT_ROOT /var/www/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf COPY ./composer.sh ./ RUN chmod +x ./composer.sh && ./composer.sh && mv composer.phar /usr/local/bin/composer RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ && apt-get install -y nodejs RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y yarn COPY ./ ./ RUN composer install && yarn && yarn run build 


рдлрд╝рд╛рдЗрд▓реЗрдВ "рдЬреИрд╕рд╛ рд╣реИ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдИ рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓реЛ "рдореИрдЬрд┐рдХ" рдЯрдЪ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред "рдиреАрдВрд╡" рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХреАрдХреГрдд Apache рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ PHP 7.2.19 рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, Nginx рдХреЗ рд╕рд╛рде рдПрдХ рдмрдВрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдВ рдЕрдкрдиреА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ)ред рдПрдХреНрд╕рдкреЛрдЬрд╝ рд▓рд╛рдЗрди рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ ElasticBeanstalk рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд PHP- рдЕрдиреБрдХреВрд▓рд┐рдд рдЙрддреНрдкрд╛рджрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, Apache рдХреЗ рд▓рд┐рдП mod_rewrite рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдореЗрдореЛрд░реА рдХреЛ 128 рд╕реЗ 256 mb рддрдХ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, PHP рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рддреБрд░рдВрдд рдЙрдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ / var / www рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╡рд╣рд╛рдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдкрд╛рдЪреЗ рдХреЗ рдмрд╛рдж рд╕реЗ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрдкрдиреЗ рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ / var / www рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рдореНрдлрдиреА рдЗрдВрдбреЗрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ / var / www / рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рд╣рдо рдЕрдкрд╛рдЪреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд░реВрдЯ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рд╕рдВрдЧреАрддрдХрд╛рд░, рдиреЛрдбрдЬ рдФрд░ рдпрд╛рд░реНрди рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдирдХреЛрд░ / рд░рд┐рдПрдХреНрдЯ.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрдлрдиреА рдФрд░ рдпрд╛рд░реНрди рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред STG рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХрд╛ рдЕрд░реНрде рдбреЙрдХрдЯрд░ рдХреЗ рд▓рд┐рдП рджрдВрдбрд╛рддреНрдордХ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ - .env.stg .env рдХреЙрдкреА рдХрд░рдирд╛, рдЗрд╕рд▓рд┐рдП STG рдЫрд╡рд┐ рдореЗрдВ .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдВрдЧреЗред рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ (рдмреЗрд╢рдХ рдбреВрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде) рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 docker build -t tmp:stg -f Dockerfile.stg . docker run -p 80:80 tmp:stg 

STG рдФрд░ рдХреЗ рд▓рд┐рдП

 docker build -t tmp:prod . docker run -p 80:80 tmp:prod 

PROD рдХреЗ рд▓рд┐рдПред
рд╣рдо EC2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, ELB / ASG, рдЖрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ ElasticBeanstalk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╣рд╛рд░ рд╣реИред ElasticBeanstalk рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рдирд╛рдо рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред рдлрд┐рд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрддрд╛рдП рдЧрдП 2 рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдБ: STG рдФрд░ PROD, рджреЛрдиреЛрдВ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдПрдБ, "Docker" рдХреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдирдореВрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред ElasticBeanstalk рдХреА рддреИрдирд╛рддреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╛рдЗрд▓реЛрдВ рдпрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛: рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣ рдпрд╛ рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрд▓рд┐рд╕реНрдЯреИрдмрд┐рдирд╕реНрдЯреЙрдХ рдХреЛ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╕реЗ рдЫрд╡рд┐ рд▓реЗрдиреЗ рдФрд░ рдЗрд╕реЗ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИред

рдЖрдЗрдП рдбреЙрдХрдЯрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдВрдбрд╛рд░ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

1 - рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рдЬреА рд╣реИ, рдЙрд╕рдХрд╛ рдХреЛрдб рдмрдВрдж рд╣реИ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреНрд░рдорд╢рдГ рдмрдВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдпрд╛ рддреЛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдирд┐рдЬреА рдХреНрд▓рд╛рдЙрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП AWS рдХреЗ рдкрд╛рд╕ ECR рд╣реИ, рдЖрдк рд╡рд╣рд╛рдВ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

2 - рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЖрдк рдбреЙрдХрд╣рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЛрдб рдЦреБрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдмрдВрдж рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдмрд╛рдж, рдбреЙрдХрд╣реЙрдм рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЦреБрдж рдмрдирд╛рдирд╛, рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдпреВрдЖрд░рдЖрдИ рдорд┐рд▓реЗрдЧрд╛ред рдЖрдЧреЗ рдХрд╛ рдХрдерди рдерд░реНрдб-рдкрд╛рд░реНрдЯреА (AWS ECR рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдЙрдирдХреЗ рдПрдХреАрдХрд░рдг рдирд╣реАрдВ) рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдЧрд╛, ECR рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрд╕рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреВрдВрдЧрд╛ред

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

 docker login -u LOGIN -p PASSWORD REGISTRY 

рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг ~ / .docker / config.json рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 "REGISTRY" : { "auth" : "BASE64_ENCODED_TOKEN" } 

рдпрджрд┐ рдпрд╣ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдбреЙрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВред

рдЕрдм рд╕рдм рдХреБрдЫ ElasticBeanstalk - Dockerrun.aws.json рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

Dockerrun.aws.json
 { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "BUCKET_ID", "Key": "KEY_PATH" }, "Image": { "Name": "IMAGE_URL", "Update": "true" }, "Ports": [ { "ContainerPort": "80" } ] } 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд┐рд░реНрджреЗрд╢ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: S3 рд╕реНрдЯреЛрд░реЗрдЬ BUCKET_ID рдореЗрдВ KEY_PATH рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЫрд╡рд┐ рдХреЛ IMAGE_URL рджреНрд╡рд╛рд░рд╛ рд╕рд╣реЗрдЬреЗ рдЧрдП рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдХреЗ рд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕реЗ рдкреЛрд░реНрдЯ рдкрд░ рдкреЛрд░реНрдЯ 80 рдХреЗ рд╕рдорд╛рди рдкреЛрд░реНрдЯ рдкрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЕрдм рдкреНрд░рдпреБрдХреНрдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

BUCKET_ID рдЖрдкрдХреЗ рд▓рд┐рдП S3 рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "рдмреИрдХрдкреИрдХ" рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрдмреИрдВрдХреЙрдХ-рд░реЗрдЬрд┐рдпрди-рдПрдЪрдПрдПрд╕рдПрдЪ рдХрд╛ рд░реВрдк рд╣реИ, рдЬрд╣рд╛рдБ рд╕рд┐рд╕реНрдЯрдо рдЖрдкрдХреЗ ElasticBeanstalk рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдвреВрдБрдврддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "рдЕрдкрд▓реЛрдб рдФрд░ рддреИрдирд╛рддреА" рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

KEY_PATH - рдЫрд╡рд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде, рдореИрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдирд╛рдо рдХреЗ рддрд╣рдд BUCKET_ID рдХреЗ рдЕрдВрджрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ APP_NAME / cr.json рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдпрджрд┐ рдореИрдВ рдЕрднреА рддрдХ рдмрдирд╛ рд╣реВрдВ, рддреЛ рдореИрдВ cr.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХреЛрдб рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХреЛрдб рд░рдЦрддрд╛ рд╣реВрдВред рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдЫрд╡рд┐рдпрд╛рдВ:

BUCKET_ID / APP_NAME / cr.json
 { "REGISTRY" : { "auth" : "BASE64_ENCODED_TOKEN" } } 

IMAGE_URL рдЖрдкрдХреА рдЫрд╡рд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рдпреВрдЖрд░рдЖрдИ рд╣реИ + рдЫрд╡рд┐ рдХрд╛ рдЯреИрдЧ рд╣реА, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдпрд╣ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдЧрд▓реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛: рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ, рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдПрд╕рдЯреАрдЬреА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рддреИрдирд╛рдд рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рдЕрдЧрд░ рд╣рдо рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ, рдпрд╛ рдмреЗрд╣рддрд░, рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рднрд░реЗрдВ рддрдм рдХреЛрдб рдХреЛ PROD рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо PROD рдореЗрдВ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрд╕рдЯреАрдЬреА рдореЗрдВ рдирдП рдХреЛрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛рдПрдВред рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЧреИрд░-рдирд╡реАрдирддрдо рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдЪрд╛рд╣рд┐рдП, Dockerrun.aws.json рдХреЛ Dockerrun.aws.stg.json рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ, рдФрд░ Dockerrun.aws.prod.json (рд╕рд┐рд░реНрдл рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП Dockerrun.aws.json рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред

Dockerrun.aws.stg.json рдХреЛ Dockerrun.aws.prod.json рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬрд╝ IMAGE_URL рд╣реИ:

Dockerrun.aws.stg.json
 { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "BUCKET_ID", "Key": "KEY_PATH" }, "Image": { "Name": "IMAGE_URL:dev", "Update": "true" }, "Ports": [ { "ContainerPort": "80" } ] } 


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣рд╛ рдерд╛, рдореИрдВ рд╕рд░реНрдХрд▓рд╕реАрдЖрдИ рдХреЛ рдПрдХ рд╕реАрдЖрдИ / рд╕реАрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдЧрд░ рдореИрдВ рдореБрдлреНрдд рд╕рд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЧрд┐рдЯрдмреНрд▓рд┐рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИред рдлреНрд░реА рдЯреНрд░реИрд╡рд┐рд╕ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдирд┐рдЬреА рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╡рд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░рд╛рд╢рд╛ рди рд╣реЛред рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд┐рд▓ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдореИрдВ рдЦреБрдж рдХреЛ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢ рджреВрдВрдЧрд╛ - рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╣рдо .circleci рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде config.ymlред

.circleci / config.yml
 version: 2 jobs: build: machine: true steps: - checkout - run: echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - run: docker build -t $CI_REGISTRY/$CI_REGISTRY_ID:dev -f Dockerfile.stg . - run: docker push $CI_REGISTRY/$CI_REGISTRY_ID:dev build-master: machine: true steps: - checkout - run: echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - run: docker build -t $CI_REGISTRY/$CI_REGISTRY_ID:latest . - run: docker push $CI_REGISTRY/$CI_REGISTRY_ID:latest deploy-stg: docker: - image: circleci/python:latest steps: - checkout - run: sudo pip install awsebcli --upgrade - run: | mkdir ~/.aws touch ~/.aws/config chmod 600 ~/.aws/config echo "[profile eb-cli]" > ~/.aws/config echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config - run: eb init --region EB_REGION --platform Docker EB_APP - run: cp Dockerrun.aws.stg.json Dockerrun.aws.json - run: eb use EB_ENV_STG --region EB_REGION - run: eb deploy -v --staged --profile eb-cli deploy-prod: docker: - image: circleci/python:latest steps: - checkout - run: sudo pip install awsebcli --upgrade - run: | mkdir ~/.aws touch ~/.aws/config chmod 600 ~/.aws/config echo "[profile eb-cli]" > ~/.aws/config echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config - run: eb init --region EB_REGION --platform Docker EB_APP - run: cp Dockerrun.aws.prod.json Dockerrun.aws.json - run: eb use EB_ENV_STG --region EB_REGION - run: eb deploy -v --staged --profile eb-cli workflows: version: 2 build: jobs: - build: filters: branches: ignore: - master - deploy-stg: requires: - build filters: branches: ignore: - master build-deploy: jobs: - build-master: filters: branches: only: - master - deploy-prod: requires: - build-master filters: branches: only: - master 

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

CI_REGISTRY, CI_REGISTRY_USER, CI_REGISTRY_PASSWORD рдХреЛ рдбреЙрдХ рдЗрдореЗрдЬ рд╕реНрдЯреЛрд░реЗрдЬ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╡рд╣реА рдЪреАрдЬ рдЬреЛ рд╣рдо cr.json рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ base64 рдХреЗ рдмрд┐рдирд╛

CI_REGISTRY / CI_REGISTRY_ID рдПрдХ рдЯреИрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЫрд╡рд┐ URL рдмрдирд╛рддреЗ рд╣реИрдВ

AWS_ACCESS_KEY_ID рдФрд░ AWS_SECRET_ACCESS_KEY - рдирд╛рдо рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВ, рдпреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП AWS рдХреНрд░реЗрдбрд┐рдЯ рд╣реИрдВ, рдЬрд┐рдирдХреА рдУрд░ рд╕реЗ CircleCI рддреИрдирд╛рдд рдХрд░реЗрдЧрд╛ред AWS IAM рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ, рдЙрд╕реЗ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ AWS_SECRET_ACCESS_KEY рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рджреЗрдЦрдиреЗ / рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рд╢реЛ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред

CircleCI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдЬрд╛рджреВ рдХреНрдпрд╛ рд╣реИ? рдЪреЗрдХрдЖрдЙрдЯ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЧрд┐рдЯ рд╢рд╛рдЦрд╛ рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рд░ рдХрд╛рдо рдореЗрдВ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИред рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, XXX: рджреЗрд╡ рдХреЗ рдЯреИрдЧ рдХреЗ рддрд╣рдд Dockerfile.stg рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред рдмрд┐рд▓реНрдб-рдорд╛рд╕реНрдЯрд░ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЬреЛ XXX: рдирд╡реАрдирддрдо рдЯреИрдЧ рдХреЗ рддрд╣рдд "рд╕рд╛рдорд╛рдиреНрдп" рдбреЙрдХрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рддреИрдирд╛рддреА-рдПрд╕рдЯреАрдЬреА рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрдмреА рд╕реАрдПрд▓рдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ ~ / .aws / config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдлрд┐рд░ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рдЖрдк рдЪреБрдирддреЗ рд╣реИрдВ, рдордВрдЪ - рд╣рдореЗрд╢рд╛ рдбреЙрдХрдЯрд░ рдФрд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдоред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо Dockerrun.aws.stg.json рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирдИ Dockerrun.aws.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдмрдирд╛рдП рдЧрдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рджреЗрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореЙрдирд┐рдЯрд░ рдХреА рдЧрдИ рд╢рд╛рдЦрд╛ рдХрд╛ рд╕рднреА рдХреЛрдб рдПрдХ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ ElasticBeanstalk рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╡рд╣рд╛рдВ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдСрдкрд░реЗрд╢рди рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕реАрд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рдирдИ Dockerrun.aws.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рджреВрд░рд╕реНрде рдЫрд╡рд┐, рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ .ebignore рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

.ebignore
 * !Dockerrun.aws.json 

рдпрд╣ рдлрд╝рд╛рдЗрд▓ .itignore рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣ .itignore рд╣реИ, рд▓реЗрдХрд┐рди Git CLI рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ AWS EB CLI рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ, рдореИрдВ рд╕реАрдПрд▓рдЖрдИ рд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЙрдХреЗрд░реБрди.рд╡реЗрд╕рдЬрд╕рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред рдпрд╣реА рд╣реИ, рдЕрдм рдЬрдм рдЖрдк ElasticBeanstalk рдореЗрдВ рддреИрдирд╛рддреА-рдПрд╕рдЯреАрдЬреА рдиреМрдХрд░реА рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬреА рдЬрд╛рдПрдЧреАред рддреИрдирд╛рддреА-рдареЗрд╕ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ Dockerrun.aws.prod.json рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ Dockerrun.aws.json рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рд╕рд░реНрдХрд┐рд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ (рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдирд┐рд░реНрдорд╛рдг рдФрд░ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдареЗрд╕ -рдорд╛рд╕реНрдЯрд░), рдФрд░ рдХрд┐рди рд╢рд╛рдЦрд╛рдУрдВ рдкрд░ рдбреЗрдЯрд╛ рдХреА рддрд▓рд╛рд╢ рд╣реИ (рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ: - рдорд╛рд╕реНрдЯрд░ рдФрд░ рдХреЗрд╡рд▓: - рдорд╛рд╕реНрдЯрд░)ред

рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрд╕реАрдЖрд░ рдХреЗ рд╕рд╛рде рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛, рд╣рдо рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЛ ECR рдореЗрдВ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдФрд░ cr.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ElasticBeanstalk "рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдПрдХ рднрд╛рдИ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ"ред рддрджрдиреБрд╕рд╛рд░, Dockerrun.aws.json рдЕрд▓рдЧ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ - рдмрд╕ рдХреЛрдИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛:

Dockerrun.aws.json (AWS ECR)
 { "AWSEBDockerrunVersion": "1", "Image": { "Name": "IMAGE_URL", "Update": "true" }, "Ports": [ { "ContainerPort": "80" } ] } 


рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреИрд╕реЗ рд╣реЛрдЧрд╛? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдИрд╕реАрдЖрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдПрдХ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рд░реНрд╡рд░ (рд╕реАрдЖрдИ) рд╕реЗ AWS CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреИрдирд╛рддреА рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ "aws-flexbeanstalk-ec2-role" рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ AWS IAM рдореЗрдВ рднреВрдорд┐рдХрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдвреВрдВрдвреЗрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреАрддрд┐ "AmazonEC2ContainerRegistryReadOnly" рдХреЛ рдЗрд╕рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред рдЕрдм рдПрдХ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЕрдкрдиреЗ "рдкрдбрд╝реЛрд╕реА" рддрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдлрд▓ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА VPC рд╕реЗ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ docker рд▓реЙрдЧрд┐рди рдХрдорд╛рдВрдб "рдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдмрд┐рдирд╛" рднреА рдирд╣реАрдВ рд╣реИ: рдЖрдкрдХреЛ AWS CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЙрдХрд░реНрд╕ рдХреЛ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рд╣реИ

aws ecr get-login --region REGION --no-include-email

рдпрд╣ рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдбреЙрдХ рд▓реЙрдЧрд┐рди рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ ..., рдмрд╕, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

eval $(aws ecr get-login --region EB_REGION --no-include-email)

рдХрдорд╛рдВрдб рдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА, рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрдЧреАред AWS ECR рдХреЗ рд▓рд┐рдП рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, CircleCI рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

.circleci / config.yml (рдПрдбрдмреНрд▓реНрдпреВрд╕реА рдИрд╕реАрдЖрд░ рдХреЗ рд▓рд┐рдП)
 version: 2 jobs: build: docker: - image: circleci/python:latest steps: - checkout - run: sudo pip install awscli --upgrade - run: | mkdir ~/.aws touch ~/.aws/config chmod 600 ~/.aws/config echo "[profile eb-cli]" > ~/.aws/config echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config - setup_remote_docker - run: eval $(aws ecr get-login --region EB_REGION --no-include-email) - run: docker build -t $CI_REGISTRY/$CI_REGISTRY_ID:dev -f Dockerfile.stg . - run: docker push $CI_REGISTRY/$CI_REGISTRY_ID:dev build-master: docker: - image: circleci/python:latest steps: - checkout - run: sudo pip install awscli --upgrade - run: | mkdir ~/.aws touch ~/.aws/config chmod 600 ~/.aws/config echo "[profile eb-cli]" > ~/.aws/config echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config - setup_remote_docker - run: eval $(aws ecr get-login --region EB_REGION --no-include-email) - run: docker build -t $CI_REGISTRY/$CI_REGISTRY_ID:latest . - run: docker push $CI_REGISTRY/$CI_REGISTRY_ID:latest deploy-stg: docker: - image: circleci/python:latest steps: - checkout - run: sudo pip install awsebcli --upgrade - run: | mkdir ~/.aws touch ~/.aws/config chmod 600 ~/.aws/config echo "[profile eb-cli]" > ~/.aws/config echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config - run: eb init --region EB_REGION --platform Docker EB_APP - run: cp Dockerrun.aws.stg.json Dockerrun.aws.json - run: eb use EB_ENV_STG --region EB_REGION - run: eb deploy -v --staged --profile eb-cli deploy-prod: docker: - image: circleci/python:latest steps: - checkout - run: sudo pip install awsebcli --upgrade - run: | mkdir ~/.aws touch ~/.aws/config chmod 600 ~/.aws/config echo "[profile eb-cli]" > ~/.aws/config echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config - run: eb init --region EB_REGION --platform Docker EB_APP - run: cp Dockerrun.aws.prod.json Dockerrun.aws.json - run: eb use EB_ENV_STG --region EB_REGION - run: eb deploy -v --staged --profile eb-cli workflows: version: 2 build: jobs: - build: filters: branches: ignore: - master - deploy-stg: requires: - build filters: branches: ignore: - master build-deploy: jobs: - build-master: filters: branches: only: - master - deploy-prod: requires: - build-master filters: branches: only: - master 

docker-in-docker setup_remote_docker , . , :

рдЫрд╡рд┐

, , () . ┬л┬╗ . ( - ) , , , .

GitHub: tutorial-aws-symfony-ci

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


All Articles