Cómo configurar la implementación de aplicaciones web en Go for Gitlab en VDS


Prólogo


Este artículo es el resultado de una búsqueda de una semana de información muy fragmentada sobre cómo configurar la implementación del servicio web en Go. No en Heroku, ni en Docker, ni en Digital Ocean, sino solo en VDS antiguo con CentOS 7x64. Por alguna razón, la red no tiene esta información, y la mayoría de los tutoriales comienzan con cómo configurar la compilación y terminan con el lanzamiento de las pruebas.

Te advertiré de inmediato que por primera vez configuré el proceso de CI / CD, así que este es un artículo para principiantes y principiantes.

Seguramente se pueden corregir muchas cosas aquí, por lo que con mucho gusto aceptaré cualquier comentario en los comentarios e intentaré actualizar los cambios lo antes posible. También es posible que dicho artículo ya exista, y solo uso terriblemente el motor de búsqueda. Luego, por favor, dale un enlace y, en este caso, eliminaré el artículo e iré a esparcir cenizas sobre mi cabeza.

Datos de origen


  • Servidor VDS
  • OS: CentOS 7x64
  • Ir al proyecto con la siguiente estructura:

src/ public/ index.html main.go 

Configuración del servidor: crear un servicio


Primero, cree un servicio para nuestra aplicación. En CentOS 7, esto es bastante simple. Necesita escribir una secuencia de comandos en un archivo llamado 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 

El script en sí debe colocarse en la carpeta etc / systemd / system /

Configuración SSH


En el servidor, ejecute el comando:

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

Previa solicitud
Ingrese la frase de contraseña (vacía para ninguna frase de contraseña)
no ingrese una contraseña, solo presione Enter.

Se generan dos archivos en la carpeta / etc / ssh /:

  1. hmp.key - clave privada
  2. hmp.key.pub: clave pública

Necesitamos una clave privada. Ver su contenido con el comando:

 cat /etc/ssh/hmp.key 

Se verá más o menos así:

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

Todo copia completamente a tu portapapeles

ATENCION! - no solo la llave en sí, sino también
----- COMIENCE LA LLAVE PRIVADA RSA ----- y ----- FINALICE LA CLAVE PRIVADA RSA -----

Configuración de Gitlab


Primero, complete los datos importantes para el almacén (nombre de usuario, contraseña, etc.).
Incluso si su repositorio es público, permanecerán cerrados.

En Gitlab en el repositorio, vaya a Configuración -> CI / CD -> Variables. Creamos las siguientes variables allí:

  • SSH_PRIVATE_KEY: pegue el valor copiado en el párrafo anterior aquí
  • USER_PASS: contraseña de usuario desde la cual se iniciará la aplicación
  • USUARIO: nombre de usuario desde el que se iniciará la aplicación
  • HOST - la dirección de su VDS
  • TARGET_DIR_ON_HOST: la carpeta de destino en la que se ubicará su servicio en mi ejemplo es / username / service /
  • SERVICE_NAME: nombre del servicio
  • GROUP_NAME es tu nombre de usuario de Gitlab
  • REPOSITORY_NAME: el nombre de su repositorio

Agregue el archivo .gitlab-ci.yml al repositorio con los siguientes contenidos:

 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 

Después de la optimización, introducimos este script en el repositorio y tenemos un ensamblado e implementación listos. Eso es todo!

Espero que el artículo haya sido útil. ¡Para cualquier pregunta y comentario, estaré encantado de responder en los comentarios!

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


All Articles