自动部署 打造个人网站:阿里云(ECS)+域名+Node+Webhooks(github)
我的个人网站
前阵子赶上双十一优惠,买了三年的阿里云1核+2G+40G的云服务器(三年一共二百多),配了个简单的node服务,为了使用GitHub的webhooks功能,后期又买了一年的.club域名(第一年8rmb),现把流程梳理如下,供大家参考。
一. 服务器购买与SSH连接
购买服务器
进入活动首页点击购买,选择配置:
- 共享标准型 s6
- CentOS 7.8 64位
- 高效云盘 40GiB
- 成都 可用区 A(可用区选哪都差不多,不用过多纠结)
因为只有第一次购买才有优惠,所以直接购置了三年,一共239。
购买完成后会自动创建一个ecs实例,登录到阿里云控制台查看实例。在产品与服务 标签栏中可以看到“云服务器ECS”入口(没有的话可以在搜索栏搜索“云服务器ECS”)。点击左侧菜单的实例,可以看到刚买的ecs实例相关信息。如果显示为空,需要在页面左上角切换地域,定位到所买服务的区域。
ssh连接
在实例信息中找到公网IP,打开xshell或其他ssh工具,输入ssh root@ip
,回车后会提示输入密码,输入正确的密码后就可以连接到服务器了。指定端口号连接:ssh root@ip -p 端口号
。
二. 环境安装与配置
git
服务器上默认安装了git,如果没有安装(通过git --version判断是否安装),可根据网上教程进行安装。阿里云社区-阿里云服务器搭建Git
node
下载并安装node
cd /usr/local/src
wget https://cdn.npm.taobao.org/dist/node/v14.14.0/node-v14.14.0-linux-x64.tar.xz
tar -xvf node-v14.14.0-linux-x64.tar.xz
创建软链接(否则无法在全局使用node与npm命令,相当与windows设置环境变量)
ln -s /usr/local/src/node-v14.14.0-linux-x64/bin/npm /usr/local/bin/npm
ln -s /usr/local/src/node-v14.14.0-linux-x64/bin/node /usr/local/bin/node
pm2
pm2是方便管理node服务的工具,也可以不安装,直接使用node命令启动服务。
npm install pm2 -g
创建软链接
ln -s /usr/local/src/node-v14.14.0-linux-x64/bin/pm2 /usr/local/bin/
三. node服务部署与端口开通
node服务部署
cd到home文件夹下执行git clone https://github.com/user name/project name.git
下载最新代码,npm install安装项目依赖后使用如下命令启动服务。
pm2 start /home/project name/server.js
这时候使用pm2 list已经可以看到刚才启动的node服务了
pm2 第一次启动某一服务后会记住该服务并自动命名(上面的“server”),下一次对该服务操作时可以直接使用名字(pm2 restart server
),就不用去敲路径了。
可通过pm2 list
查看服务器上所有node服务的状态。
如果在远程仓库中没有现成的node服务端代码,可以参考网上的案例,临时搭建一个简单的node服务。
配置安全组(开通端口)
启动一个node服务后默认只能在服务器上访问,如果想在外网上访问就需要将服务的端口号手动配置到ecs控制台的安全组中。
点击控制台左侧菜单的网络与安全->安全组进入安全组配置界面
注意!一定要选对左上角的区域(购买服务器时的可用区)
在这个界面有一个默认安全组,我们直接点击该条安全组的配置规则,进入规则配置页面。点击手动添加,填写我们所启动的node服务的相关信息。
保存后就可以通过外网访问自己服务器上的node服务了(在浏览器地址栏中输入ip:端口号+path)。
之后如果远程库代码更新,只需要连接服务器,cd到项目文件夹下,手动git pull
更新代码,然后pm2 restart service_name
重启服务即可。
四. 域名注册与解析
如果想要免去背ip的苦恼,实现一些类似webhooks的配置,就需要个域名了,很多域名第一年费用10元左右,还是比较便宜的,但是往后每一年的价钱会越来越贵。
购买域名
在阿里云官网上搜索域名注册进入域名注册页面
可通过搜索确认想要注册的域名是否已经被注册
点击立即购买购买想要的域名,购买域名后可在域名控制台中查看。
正常来说新买的域名是需要实名认证和备案的,但如果你是个人使用且不是.com之类 的域名,可暂时不备案,如需备案可按照阿里云官网流程进行备案。
域名解析配置
现在我们有了域名有了ip,下一步需要做的就是把我们的域名和ip绑定起来,点击域名控制台中的解析。
进入解析界面后添加记录,记录类型默认,主机记录填www(www.域名访问)或@(域名访问),解析线路默认,记录值就是你的服务器ip,TTL默认10分钟就行。
配置完成后10分钟就可以通过域名访问你的网站了,还记得之前使用的是ip:端口号+path的形式访问服务,现在可以使用域名:端口号+path的形式了。
到此为止,我们已经在ecs上部署了一个node服务,而且可以使用域名访问该服务,如果还想要增加一些DevOps的内容,比如第五点所描述的ci/cd过程,可以接着往下看。
五. shell脚本编写与Webhooks配置
如果你在开发一个demo或者自己的小项目,一定希望自己的代码push到远程仓库之后可以自动发布到自己的服务器上,而不是重复连接服务器->更新代码->重启服务的繁琐操作(以下shell脚本只提供拉取代码并重启服务的功能,不包含拉取代码后自动安装npm包、修改环境等功能,也不包含数据库的管理)。
Webhooks的原理就是当我们从本地push代码到远程仓库时,类似于github这样的代码托管网站会监测到我们的push动作,向我们提前设置好的接口发送post请求,当我们的接口被调用时,执行我们提前写好的.sh文件中的脚本,从而实现代码的更新和node服务的重启。
以下内容以github上的Webhooks功能为例,其他代码托管网站也有类似功能,大家可以自己探索。
执行git命令记住账号密码
使用xshell连接服务器并执行git config --global credential.helper store
,这一条命令的作用是保存远程仓库的账号和密码,之后执行git pull时就不需要输入密码了,否则在脚本中执行git pull时会失败。
编写shell脚本
在项目根目录下新建deploy.sh文件并添加如下代码:
#!/bin/bashWEB_PATH='/home/node-restful' # 你的node项目所在目录echo "Start deployment"
cd $WEB_PATH
echo "pulling source code..."
git pull
echo "restart..."
pm2 restart server # server是pm2管理下的某个node服务名称,可通过pm2 list查看
echo "Finished."
在node代码中添加接口
// webhooks接口
app.post('/webhooks/push', function (req, res) {run_cmd('sh', ['./deploy.sh'], function (text) { console.log(text) });res.end(JSON.stringify({ success: true }));
})
// 执行脚本
function run_cmd(cmd, args, callback) {var spawn = require('child_process').spawn;var child = spawn(cmd, args);var resp = "";child.stdout.on('data', function (buffer) { resp += buffer.toString(); });child.stdout.on('end', function () { callback(resp) });
}
我的项目中引用了express,大家可以根据自己项目的具体情况修改代码。
添加webhook
- Payload URL必须是域名,ip是不可以的,path为上面接口中定义的接口路径
- Secret可以不填,但一定要把Active点上
- 其他项目根据需求填写即可
最后,测试这个流程,从本地push代码到github上,几分钟后在浏览器中调用其他可以反应代码修改的接口,看是否有变化,或者提前连接服务器并在xshell中查看脚本打印的内容,或者使用pm2 log service_name
查看日志。
我发现在添加pm2 restart server
之后就看不到脚本中打印的内容了,具体不清楚为啥,但可以肯定的是代码可以正常更新,服务也可以正常重启。
六. 其他
- 建议下载阿里云APP,要不然每次登录控制台都要进行身份验证。
- 腾讯云和阿里云同时期的优惠程度差不多,双十一期间,腾讯云服务器1核2G+50G也是80多。
- 刚买的服务器几天内可能会出现异常登录的消息提醒,属于正常现象,因为默认的ssh端口号是22,有很多网络攻击会频繁的攻击这些服务器,咱们的服务器又没有购置安全服务,所以会出现这种情况,大可不必放在心上。如果实在想提高安全性,可通过更改默认端口号(22)或者购买安全服务等方式解决。
- 优惠只限第一次购买云服务器的用户。
- 在阿里云控制台和手机app上都能连接服务器,并进行简单操作。
自动部署 打造个人网站:阿里云(ECS)+域名+Node+Webhooks(github)相关推荐
- Jenkins打包部署gitee项目至阿里云ECS服务器
原文地址:Jenkins打包部署gitee项目至阿里云ECS服务器 - BIGTREE (whwtree.com) 所需插件: Git Parameter Plug-In插件 Publish Over ...
- Vue项目自动部署【精简版】NuxtJS + GitHub Actions + Linux 自动部署学习(包含阿里云Linux ECS购买过程、传统部署流程、pm2、Github Actions)
购买阿里云Linux服务器 如果已有服务器请直接跳转到[传统部署方式] 登录阿里云,访问 云服务器 ECS 购买地址:https://ecs-buy.aliyun.com/ 也可从首页导航菜单进入. ...
- 阿里云ECS服务器部署Node.js项目详细教程及多网站部署
本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...
- 阿里云ECS服务器部署Node.js项目全过程详解
本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...
- 个人博客,懒人终章部署,阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目,还在用
阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目: 最近看见网上很多Jenkins的自动部署SpringBoot的Demo,但是都要自己安装JDK,Maven.. ...
- 【阿里云ECS最佳实践】ECS+RDS构建云服务器主动防御系统部署开源蜜罐系统Hfish及ECS周边功能测试
点击免费领取ECS,云上部署轻松搞定:https://click.aliyun.com/m/1000370355/ 云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓 ...
- 怎么把springboot部署到阿里云_听说“一分钟就能部署阿里云ECS集群”?
导读 "企业上云"是当下大势所趋,"提效.降成本" 也是企业上云.迁云和管理云必须关注的问题.今天我们将从一个集群部署的场景出发,介绍阿里云如何借助生态工具Te ...
- 阿里云ECS主机部署LAMP环境
阿里云ECS主机一键部署LAMP环境 1.LAMP概念 LAMP是Linux+Apache+MySQL+Perl/PHP/Python等组成常用来搭建动态网站或者服务器的开源软件,它们本身都是独立的程 ...
- 通过阿里云ECS服务器部署FRP实现Windows自带远程桌面
由于TeamViewer的高额使用费及其安全问题,萌生了自己搭建FRP实现Windows远程桌面的想法,网上找了一圈基本没有全面且安全落地的,大部分都是面向技术达人的,对于新手的我来说走了不少弯路,在 ...
最新文章
- 本地 无法启动 SQL Server 错误代码126
- nginx 操作笔记
- java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法
- 操作系统课设--具有优先级的线程调度
- 文献记录(part44)--Skeletonisation algorithms with theoretical guarantees for unorganised point ...
- 『设计模式』80年代的人们就已经领悟了设计模式-- 发布者/订阅者模式 (包括发布者/订阅者模式和观察者模式的区别)
- 再次遇到golang乱码问题,用simplifiedchinese解决
- ios 后台唤醒应用_苹果不用背锅了!微信被杀后台是因为“耍流氓”?用户该听谁的?...
- 上海大华条码称代码_上海大华条码秤使用说明书
- RadAsm:object file not found
- 如何在Web前端实现CAD图文字全文搜索
- python 小说 云_python爬小说
- ESP32开发路程——环境搭建、引脚、烧录、UART、ADC、WS2812、RFID、DAC、FreeRTOS、CJSON
- 【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天
- OC面向对象的三大特征(封装 继承 多态)习题2 复合
- 阿里巴巴mysql集群方案_云原生下,如何实现高可用的MySQL?
- ibatis代码自动生成-ibatis使用者的福音来了
- 人工智能常识和干货,适合收藏
- 宾夕法尼亚大学计算机专业研究生,宾夕法尼亚大学计算机工程研究生排名最新消息精讲篇...
- 微机化远动系统与计算机网络,【浅析】智能电网调度自动化现状与发展