VDS рдкрд░ Gitlab рдХреЗ рд▓рд┐рдП рдЧреЛ рдкрд░ рддреИрдирд╛рдд рд╡реЗрдм рдРрдк рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ


рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдпрд╣ рдЖрд▓реЗрдЦ рд╡реЗрдм рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╣реА рдЦрдВрдбрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреА рдЦреЛрдЬ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рд╣рд░реЛрдХреВ рдкрд░ рдирд╣реАрдВ, рдбреЛрдХрд░ рдкрд░ рдирд╣реАрдВ, рдбрд┐рдЬрд┐рдЯрд▓ рдУрд╢рди рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реЗрдВрдЯреЛ 7x64 рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдЬрдорд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реАрдбреАрдПрд╕ рдкрд░ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред

рдореИрдВ рддреБрд░рдВрдд рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреВрдВрдЧрд╛ рдХрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ CI / CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реБрдЖрдд рддрдХ рдХрд╛ рдПрдХ рд▓реЗрдЦ рд╣реИред

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

рд╕реНрд░реЛрдд рдбреЗрдЯрд╛


  • VDS рд╕рд░реНрд╡рд░
  • рдУрдПрд╕: рд╕реЗрдВрдЯреЛрд╕ 7x64
  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдПрдВ:

src/ public/ index.html main.go 

рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк: рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВред CentOS 7 рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ serviceName.service рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 [Unit] #   Description=Service Description After=network.target [Service] Type=simple #  ,       User=username #    ExecStart=/username/service/binaryFile Restart=on-abort [Install] WantedBy=multi-user.target 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдЖрджрд┐ / systemd / system / рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

SSH рд╕реЗрдЯрдЕрдк


рд╕рд░реНрд╡рд░ рдкрд░, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

 ssh-keygen -f /etc/ssh/hmp.key 

рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░
рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝ рджрд░реНрдЬ рдХрд░реЗрдВ (рдмрд┐рдирд╛ рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝ рдХреЗ рдЦрд╛рд▓реА)
рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рди рдХрд░реЗрдВ, рдмрд╕ Enter рджрдмрд╛рдПрдВред

рджреЛ рдлрд╛рдЗрд▓реЗрдВ / etc / ssh / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:

  1. hmp.key - рдирд┐рдЬреА рдХреБрдВрдЬреА
  2. hmp.key.pub - рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА

рд╣рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ:

 cat /etc/ssh/hmp.key 

рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 -----BEGIN RSA PRIVATE KEY----- {    } -----END RSA PRIVATE KEY----- 

рд╕рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЗ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рд╣реЛрддреЗ рд╣реИрдВ

рдЪреЗрддрд╛рд╡рдиреА! - рди рдХреЗрд╡рд▓ рдХреБрдВрдЬреА, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА
----- BEGIN RSA рдирд┐рдЬреА рдХреБрдВрдЬреА ----- рдФрд░ ----- RSA рдирд┐рдЬреА рдХреБрдВрдЬреА -----

рдЧрд┐рдЯрд▓рдм рд╕реЗрдЯрдЕрдк


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбрд┐рдкреЛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкрд╛рд╕рд╡рд░реНрдб, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рднрд░реЗрдВред
рдпрджрд┐ рдЖрдкрдХрд╛ рднрдВрдбрд╛рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рддреЛ рднреА рд╡реЗ рдмрдВрдж рд░рд╣реЗрдВрдЧреЗред

Gitlab рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ Settings -> CI / CD -> Variables рдкрд░ рдЬрд╛рдПрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рд╡рд╣рд╛рдВ рдмрдирд╛рддреЗ рд╣реИрдВ:

  • SSH_PRIVATE_KEY - рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдпрд╣рд╛рдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ
  • USER_PASS - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • USER - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдЬрд╣рд╛рдВ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • HOST - рдЖрдкрдХреЗ VDS рдХрд╛ рдкрддрд╛
  • TARGET_DIR_ON_HOST - рд╡рд╣ рд▓рдХреНрд╖реНрдп рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреА / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рд╕реЗрд╡рд╛ /
  • SERVICE_NAME - рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо
  • GROUP_NAME рдЖрдкрдХрд╛ Gitlab рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╣реИ
  • REPOSITORY_NAME - рдЖрдкрдХреЗ рднрдВрдбрд╛рд░ рдХрд╛ рдирд╛рдо

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ .gitlab-ci.yml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:

 image: golang:latest before_script: #     sshpass - apt-get update -qq && apt-get install -y -qq sshpass #  ,    .   govendor,      - go get github.com/gorilla/mux - go get github.com/gorilla/websocket #  SSH - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config #     - mkdir -p /go/src/gitlab.com/$GROUP_NAME #     - git clone git@gitlab.com:$GROUP_NAME/$REPOSITORY_NAME.git /go/src/gitlab.com/$GROUP_NAME/$REPOSITORY_NAME #      - mkdir -p $CI_PROJECT_DIR/build/ #        (, HTML- ..)  . #       src/public - cp -r $CI_PROJECT_DIR/src/public $CI_PROJECT_DIR/build stages: - build - deploy compile: stage: build script: #     Go  - cd /go/src/gitlab.com/$GROUP_NAME/$REPOSITORY_NAME/src #    . ,        build       main - go build -race -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/build/main artifacts: paths: - $CI_PROJECT_DIR/build/main deploy: stage: deploy script: #      ()      public - cd $CI_PROJECT_DIR/build #   sshpass      VDS - sshpass -V - export SSHPASS=$USER_PASS #   - sshpass -e ssh -o stricthostkeychecking=no $USER@$HOST systemctl stop $SERVICE_NAME #    - sshpass -e scp -o stricthostkeychecking=no -r . $USER@$HOST:$TARGET_DIR_ON_HOST #   - sshpass -e ssh -o stricthostkeychecking=no $USER@$HOST systemctl restart $SERVICE_NAME 

рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдзрдХреЗрд▓ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддреИрдпрд╛рд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рддреИрдирд╛рддреА рд╣реЛрддреА рд╣реИред рд╡рд╣ рд╕рдм рд╣реИ!

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

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


All Articles