前几天我把我的开源项目部署到了云服务器。

我部署的大概流程:

  1. 登录到云服务器控制台,新建一个服务器实例(我用的 Ubuntu Linux)。
  2. 在自己的电脑上生成 SSH 秘钥,将生成的公钥和实例进行绑定。
  3. 使用 SSH 登录到云服务器,安装项目所需要的运行环境。
  4. 拉取代码,初始化依赖、编译、运行。
  5. 配置域名的 DNS 解析,修改 Nginx 配置。

然后就可以通过域名访问了。

这只是一个大概的流程,在实际操作的过程中可能会遇到很多问题。

这次主要分享的是如何利用 Github Actions 实现自动部署项目到云服务器。

最终的实现效果:

当我们的项目有新版本要发布时,我们直接把代码 push 到 Github 代码仓库,Github Actions 会自动帮我们把项目部署到云服务,也就是不需要我们手动登录到服务器进行拉取代码、初始化依赖、编译、运行等操作,我们只需要 push 一下代码,他就会自动把项目部署到云服务器。

很显然,Github Actions 可以为我们节省大量的部署项目的时间。

接下来,以我的开源项目为例,教你如何使用 Github Actions 部署项目到自己的云服务器。

开源项目地址:

https://github.com/zchengo/crm

首先,我们需要在云服务器上安装项目需要的运行环境,安装 Nginx 用于部署前端项目,安装 MySQL、Redis 用于为Go服务端提供数据库服务。同时,需要启动 Nginx、MySQL、Redis 服务,然后还需要编写一个Shell脚本用于重启Go服务端。

Github Actions 官方的定义:

在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

Github Actions 的工作原理:

实际上就是Github官方给我们提供了一个虚拟机环境(如Windows、MacOS、Linux),项目安装、初始化依赖、打包编译全都是在这台虚拟机上操作的,再通过命令把最终打包生成的文件上传到云服务器,然后使用 ssh 在云服务器上执行一些命令,就完事了。

如何使用 Github Actions ?

1、我们需要在项目的根目录下创建.github/workflows/deploy.yaml,yaml文件的文件名可以自定义。

2、编写 deploy.yaml

name: CRM CIon:push:branches: [ "main" ]pull_request:branches: [ "main" ]
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Use Node.jsuses: actions/setup-node@v3with:node-version: '18.12.0'    - name: Build Webrun: cd web && npm install && npm run build  - name: Use Gouses: actions/setup-go@v3with:go-version: 1.19- name: Build Serverrun: cd server && go mod tidy && go build -o crmserver main.go- name: Deploy CRMenv:KEY: ${{ secrets.SSH_PRIVATE_KEY }}HOST: ${{ secrets.REMOTE_HOST }}run: |mkdir -p ~/.ssh/ && echo "$KEY" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsascp -o StrictHostKeyChecking=no -r web/dist ubuntu@${HOST}:/usr/local/nginx/html/ssh -o StrictHostKeyChecking=no ubuntu@${HOST} "sudo /usr/local/nginx/sbin/nginx -s reload"scp -o StrictHostKeyChecking=no -r server/crmserver ubuntu@${HOST}:/home/ubuntu/ssh -o StrictHostKeyChecking=no ubuntu@${HOST} "sudo /home/ubuntu/crmapi/restart.sh > /dev/null 2>&1 &"

挺简单的,有几个地方需要说明一下。

env:KEY: ${{ secrets.SSH_PRIVATE_KEY }}HOST: ${{ secrets.REMOTE_HOST }}

SSH_PRIVATE_KEY 指的是你在自己电脑上生成的SSH私钥(这个私钥必须能连接到云服务器才行),REMOTE_HOST 指的是云服务器的IP地址,因为这两个变量属于敏感信息,所以需要在代码库->Settings->secrets->Actions 中设置,设置完成后,就可以通过 secrets 来调用。

mkdir -p ~/.ssh/ && echo "$KEY" > ~/.ssh/id_rsa && chmod 600~/.ssh/id_rsa

这个的作用就是让 Github 提供给我们的虚拟机能够连接到云服务器,所以我们需要把 ssh 私钥给虚拟机。

ssh -o StrictHostKeyChecking=no ubuntu@${HOST} "sudo /home/ubuntu/crmapi/restart.sh > /dev/null 2>&1 &"

这个就是在使用ssh执行云服务器上编写的脚本,用于重启服务端。/dev/null2>&1& 指的是把控制台(Go服务端运行)输出的内容输出到空设备,这样可以避免 Github Actions 一直处于运行状态。

/home/ubuntu/crmapi/restart.sh 脚本如下:

#!/bin/bash
sudo pkill crmserver
sudo cp /home/ubuntu/crmserver /home/ubuntu/crmapi/
sudo nohup /home/ubuntu/crmapi/crmserver > /home/ubuntu/crmapi/crmserver.log 2>&1 &

nohup 命令可以让二进制文件 crmserver 在后台运行,并把结果输出到 crmserver.log 文件中。

最终,我们把 .github/workflows/deploy.yaml 提交并推送到代库,Github Actions 就会自动执行,之后你每进行一次 push 操作,Actions就会执行一次。执行成功,就相当于项目部署成功。

扫描下方二维码,关注公众号「GoCode」,看更多优质干货!偷偷学习,然后惊艳所有人!!!

希望这篇文章对你有帮助,关于 Github Actions 的更多用法,大家可以参考官方文档。

自动部署项目,全靠它了!相关推荐

  1. Pycharm自动部署项目

    Pycharm自动部署项目 欢迎访问我的博客https://www.marxcbr.cn/ 大家好呀,又有几天不见各位了.断更了几天,给大家说声抱歉.清明节大家都挺忙的,有扫墓祭祖的,也有趁小长假去游 ...

  2. pythonmysql部署_详解centos7+django+python3+mysql+阿里云部署项目全流程

    (PS:本文假设你已经在本地联调好django和客户端,只是需要将django部署到外网) 购买阿里云服务器 到[阿里云官网],选择轻量应用服务器, 步骤如图所示: 地域随便选择哪一个,镜像的话,对比 ...

  3. Eclipse自动部署项目到Tomcat的webapps下的有效方法

    Eclipse自动部署项目到Tomcat的webapps下的有效方法 开发JavaEE项目,常用的工具有MyEclipse,Eclipse,netBeans等,个人比较喜欢用Eclipse,因为它My ...

  4. jenkins自动部署项目到tomcat机器问题之jenkins打版项目卡住

    jenkins自动部署项目到tomcat机器 背景: 今天测试同事在执行jenkins自动打版项目并发布到tomcat机器的时候,出现一直卡住的情况 控制台日志输出如下 jenkins机器配置: je ...

  5. Window环境下的Git+GitHub+jenkins+Tomcat实现自动部署项目并发送构建邮件

    Git+GitHub+jenkins+Tomcat实现自动部署项目 我们这里要实现的效果是:团队通过Git把项目push到GitHub上去,然后Jenkins通过GitHub的webhook(钩子)来 ...

  6. git 服务器自动部署项目之GitHooks

    转自 http://blog.csdn.net/wsyw126/article/details/52167147 背景描述 在刚开始用git的时候,每次都是将本地将代码push到远程仓库,然后再ssh ...

  7. git管理和自动部署项目

    当一个项目需要纳入到版本控制的时候,选择的工具还是比较多的,最常见的就是工具有CVS,SVN,GIT等.在平时的开发中视情况而定,从来就没有最好的版本控制工具,只有最适合的工具.在这里我习惯用git来 ...

  8. vue项目前端服务器,【前端技术】vue自动部署项目到服务器

    想要的功能 前端打包之后自动上传文件夹到服务器 在不提交代码的前提下,也可以完成上述功能 经过各种百度谷歌,最后有两种方案可以选择 第一种是写一个shell,通过lftp上传文件夹,但是会有个权限的问 ...

  9. 搭建subversion 服务器,并自动部署项目

    1 subversion目录文件说明: *dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据 *db目录:就是所有版本控制的数据存放文件 *hooks目录:放置hoo ...

最新文章

  1. 腾讯应用研究一面 武汉
  2. 思科发布安全大数据分析架构 OpenSOC
  3. Linux课程第六天学习笔记
  4. oracle 函数参数类型,ORACLE 11g中的表值函数? (参数化视图)
  5. excel乘法公式怎么输入_Excel函数中的IF条件函数怎么用?四个IF函数公式带你轻松上手...
  6. review what i studied `date` - 2017-4-24
  7. 6 张图带你彻底搞懂分布式事务 XA 模式
  8. u盘读写测试_关于闪迪u盘cz880速度测试
  9. 震惊了!每30秒学会一个Python小技巧,Github星数6000+
  10. scare机器人如何手眼标定_基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...
  11. 前端学习(891):bom导读
  12. vue中waiting for update signal from wds_10个vue快捷开发技巧助你成为中级前端工程师!(二)...
  13. SpringBoot版本:1.5.12.RELEASE 文件大小限制异常拦截网关zuul报错
  14. servlet ehcache beanfactroy c3p0 配置文件
  15. 记自己的第一个完整的java web项目
  16. 矩阵乘法 算法训练 试题_计算方法练习题及答案汇总(共八套).docx
  17. VUCA的复杂性——业务架构真正的挑战
  18. Microsoft Visual Studio 2013 产品密匙
  19. debconf-set-selections mysql_在Ubuntu上的MySQL脚本安装
  20. [转]叔本华《要么庸俗 要么孤独》

热门文章

  1. MBR、EBR、DBR
  2. KS值是衡量分类模型预测准确度的重要指标之一,它反映了模型预测结果与实际数据分布差异的程度。本文将介绍什么是KS值,如何计算以及在Python中如何实现。
  3. autoCAD数据库读写
  4. Mysql隐式类型转换
  5. ArcGIS基础:实现高斯正算与反算
  6. 物联网平台技术架构和应用场景
  7. 乐观锁和悲观锁的简单实现
  8. Siemens Simcenter FloEFD 2021.2.0 for Catia V5
  9. 硬件常见问题——信号过冲
  10. sqlserver字符串转日期