如何在VDS的Go for Gitlab上设置Web应用程序部署


前言


本文是为期一周的搜索结果的结果,这些信息非常分散,有关如何在Go上配置Web服务部署。 不是在Heroku,不是在Docker,不是在Digital Ocean,而是在带有CentOS 7x64的老式VDS上。 由于某种原因,网络没有此信息,因此大多数教程都从如何设置构建开始,到测试启动结束。

我会立即警告您,这是我第一次设置CI / CD流程,因此本文是从初学者到初学者的。

当然,这里可以纠正很多问题,因此我会乐于接受评论中的任何评论,并尝试尽快更新更改。 这样的文章也可能已经存在,而我只是可怕地使用搜索引擎。 然后,请提供一个链接,在这种情况下,我将删除该文章,然后将灰烬洒在我的头上。

源数据


  • VDS服务器
  • 作业系统:CentOS 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 

脚本本身必须放在文件夹etc / 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----- 

全部全部复制到剪贴板

注意! -不仅密钥本身,而且
-----开始RSA私钥-----和-----结束RSA私钥-----

Gitlab设置


首先,填写对仓库重要的数据(用户名,密码等)。
即使您的存储库是公共的,它们也将保持关闭状态。

在存储库中的Gitlab中,转到设置-> CI / CD->变量。 我们在此处创建以下变量:

  • SSH_PRIVATE_KEY-将在上一段中复制的值粘贴到此处
  • USER_PASS-从中启动应用程序的用户密码
  • USER-从中启动应用程序的用户名
  • 主机-您的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/zh-CN421087/


All Articles