Como configurar a implantação de aplicativos Web no Go for Gitlab no VDS


Prefácio


Este artigo é o resultado de uma pesquisa de uma semana por informações muito fragmentadas sobre como configurar a implantação do serviço web no Go. Não no Heroku, nem no Docker, nem no Digital Ocean, mas apenas no VDS antiquado com o CentOS 7x64. Por algum motivo, a rede não possui essas informações e a maioria dos tutoriais começa com como configurar a compilação e termina com o início dos testes.

Devo avisar que estava configurando o processo de CI / CD pela primeira vez, portanto, este é um artigo de iniciante a iniciante.

Certamente, muita coisa pode ser corrigida aqui, então aceitarei qualquer comentário com prazer e tentarei atualizar as alterações o mais rápido possível. Também é possível que esse artigo já exista, e eu apenas uso terrivelmente o mecanismo de pesquisa. Em seguida, forneça um link para ele e, neste caso, excluirei o artigo e vou espalhar cinzas na minha cabeça.

Dados de origem


  • Servidor VDS
  • SO: CentOS 7x64
  • Vá para o projeto com a seguinte estrutura:

src/ public/ index.html main.go 

Configuração do servidor: criar um serviço


Primeiro, crie um serviço para nosso aplicativo. No CentOS 7, isso é bem simples. Você precisa escrever esse script em um arquivo chamado 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 

O script em si deve ser colocado na pasta etc / systemd / system /

Configuração SSH


No servidor, execute o comando:

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

A pedido
Digite a senha (vazia para nenhuma senha)
não digite uma senha, basta pressionar Enter.

Dois arquivos são gerados na pasta / etc / ssh /:

  1. hmp.key - chave privada
  2. hmp.key.pub - chave pública

Precisamos de uma chave privada. Visualize seu conteúdo usando o comando:

 cat /etc/ssh/hmp.key 

Será algo parecido com isto:

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

Todos copiam completamente para a área de transferência

ATENÇÃO! - não apenas a chave em si, mas também
----- COMEÇA A CHAVE PRIVADA RSA ----- e ----- TERMINA A CHAVE PRIVADA RSA -----

Configuração do Gitlab


Primeiro, preencha os dados importantes para o depósito (nome de usuário, senha etc.).
Mesmo se seu repositório for público, eles permanecerão fechados.

No Gitlab, no repositório, vá para Configurações -> CI / CD -> Variáveis. Criamos as seguintes variáveis ​​lá:

  • SSH_PRIVATE_KEY - cole aqui o valor copiado no parágrafo anterior
  • USER_PASS - senha de usuário a partir da qual o aplicativo será iniciado
  • USER - nome de usuário a partir do qual o aplicativo será iniciado
  • HOST - o endereço do seu VDS
  • TARGET_DIR_ON_HOST - a pasta de destino na qual seu serviço estará localizado no meu exemplo é / nome de usuário / serviço /
  • SERVICE_NAME - nome do serviço
  • GROUP_NAME é seu nome de usuário do Gitlab
  • REPOSITORY_NAME - o nome do seu repositório

Inclua o arquivo .gitlab-ci.yml no repositório com o seguinte conteúdo:

 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 

Após o ajuste, inserimos esse script no repositório e temos uma montagem e implantação prontas. Isso é tudo!

Espero que o artigo tenha sido útil. Para quaisquer perguntas e comentários, terei o maior prazer em responder nos comentários!

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


All Articles