自动部署 打造个人网站:阿里云(ECS)+域名+Node+Webhooks(github)

news/2024/5/20 16:24:21/文章来源:https://blog.csdn.net/qq_38868135/article/details/109948162

        我的个人网站

        前阵子赶上双十一优惠,买了三年的阿里云1核+2G+40G的云服务器(三年一共二百多),配了个简单的node服务,为了使用GitHub的webhooks功能,后期又买了一年的.club域名(第一年8rmb),现把流程梳理如下,供大家参考。

一. 服务器购买与SSH连接

购买服务器

进入活动首页点击购买,选择配置:

  • 共享标准型 s6
  • CentOS 7.8 64位
  • 高效云盘 40GiB
  • 成都 可用区 A(可用区选哪都差不多,不用过多纠结)

因为只有第一次购买才有优惠,所以直接购置了三年,一共239。

       购买完成后会自动创建一个ecs实例,登录到阿里云控制台查看实例。在产品与服务 标签栏中可以看到“云服务器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服务了
node服务

       pm2 第一次启动某一服务后会记住该服务并自动命名(上面的“server”),下一次对该服务操作时可以直接使用名字(pm2 restart server),就不用去敲路径了。
       可通过pm2 list查看服务器上所有node服务的状态。
       如果在远程仓库中没有现成的node服务端代码,可以参考网上的案例,临时搭建一个简单的node服务。

配置安全组(开通端口)

       启动一个node服务后默认只能在服务器上访问,如果想在外网上访问就需要将服务的端口号手动配置到ecs控制台的安全组中。
点击控制台左侧菜单的网络与安全->安全组进入安全组配置界面
安全组配置界面

注意!一定要选对左上角的区域(购买服务器时的可用区)
       在这个界面有一个默认安全组,我们直接点击该条安全组的配置规则,进入规则配置页面。点击手动添加,填写我们所启动的node服务的相关信息。
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过程,可以接着往下看。
devops

五. 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

进入webhooks配置界面

  • Payload URL必须是域名,ip是不可以的,path为上面接口中定义的接口路径
  • Secret可以不填,但一定要把Active点上
  • 其他项目根据需求填写即可
    配置webhook
           最后,测试这个流程,从本地push代码到github上,几分钟后在浏览器中调用其他可以反应代码修改的接口,看是否有变化,或者提前连接服务器并在xshell中查看脚本打印的内容,或者使用pm2 log service_name查看日志。
           我发现在添加pm2 restart server之后就看不到脚本中打印的内容了,具体不清楚为啥,但可以肯定的是代码可以正常更新,服务也可以正常重启。

六. 其他

  • 建议下载阿里云APP,要不然每次登录控制台都要进行身份验证。
  • 腾讯云和阿里云同时期的优惠程度差不多,双十一期间,腾讯云服务器1核2G+50G也是80多。
  • 刚买的服务器几天内可能会出现异常登录的消息提醒,属于正常现象,因为默认的ssh端口号是22,有很多网络攻击会频繁的攻击这些服务器,咱们的服务器又没有购置安全服务,所以会出现这种情况,大可不必放在心上。如果实在想提高安全性,可通过更改默认端口号(22)或者购买安全服务等方式解决。
  • 优惠只限第一次购买云服务器的用户。
  • 在阿里云控制台和手机app上都能连接服务器,并进行简单操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_883653.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫爬取导航网站所有网址并建立自己的导航网站

分析目标网站 目标网站的域名│www.dianyinggou.com/linkNav/网站结构 | 静态是否反爬虫 | 否 制定攻略 1.将分类页面的目录和名称写进列表里面,然后通过循环将列表里面的目录和名称依次导出,目的是为了组合成新的链接,方便访问下级链接 如…

管理联系人网站(web小项目)

此项目主要功能有: 输入验证码登录 查看联系人列表 添加联系人 修改/删除联系人 批量删除联系人 功能预览: 所有文件一览 注:web目录下的css,fonts,js是Bootstrap框架的,要使用需在Bootstrap官网下载…

d3-tip文本提示框实现步骤+click和mouseout触发动作事件冲突_解决方法

目录 d3-tip介绍d3-tip实现步骤1、添加使用的JavaScript函数库2、为柱形图创建tip3、调用tip4、确定数据集5、添加触发动作事件6、click和mouseout触发动作事件冲突_解决方法 d3-tip介绍 d3-tip是D3可视化工具中的一种,可用于生成自定义文本提示框。如下图所示&…

淘宝网站发展详解

一、引言 光棍节的狂欢 “时间到,开抢!”坐在电脑前早已等待多时的小美一看时间已到 2011 年 11 月 11 日零时,便迫不及待地投身于淘宝商城一年一度的大型网购促销活动 —— “淘宝双11购物狂欢节”。小美打开早已收藏好的宝贝 —— 某品牌的…

浏览器兼容性问题,前端性能优化、SEO优化

目录 一、常见浏览器兼容性问题及解决二、前端性能优化三、SEO优化 一、常见浏览器兼容性问题及解决 不同浏览器的内核不尽相同,所以各个浏览器对网页的解析存在一定的差异。 浏览器内核主要分为两种,一是渲染引擎,另一个是js 引擎&#xff…

Nginx静态网站的部署

Nginx静态网站的部署 静态网站的部署 首先先看一下nginx/conf/nginx.conf 配置文件内的信息: #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pi…

使用node.js爬网站图

目标网站:http://m.mmjpg.com/hot/ var http require(http); var request require(request); var fs require(fs); var Promise require(bluebird); var curIndex 1 var curYear 2015 //下载文件 function downloadFile(uri,filename){return new Promise((re…

dedecms—网站栏目的显示

1.首先去网址下载安装包:http://www.dedecms.com/,然后根据提示进行安装,安装完成效果如下: 2.在templets添加一个属于自己的文件夹,比如demo 3.登录dedecms进行配置 4.在demo下面建三个模板index_article.htm&#xf…

(转)大型网站架构系列:电商网站架构案例(3)

本文章是电商网站架构案例的第三篇,主要介绍数据库集群,读写分离,分库分表,服务化,消息队列的使用,以及本电商案例的架构总结。 6.5数据库集群(读写分离,分库分表) 大型网…

【围观】IBM网站首页改版

意外上http://www.ibm.com/发现改版了,从源码里的日期来看是6月30号改的,整体效果非常大气,拉动垂直滚动条的时候导航还会变化,有点创意。企业建站时可以借鉴。

小白自学http网站的请求命令和基础原理集锦(HTTP工作原理;GET, POST,HEAD,OPTIONS, PUT,PATCH,DELETE,TRACE 和 CONNECT 方法)

参考及引用文章: MDN: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-Fetch-Mode HTTP 8种请求方式介绍: https://www.cnblogs.com/songyao666/p/11453529.html HTTP : https://www.runoob.com/http/http-methods.html 如何…

如何获得网站的CSS

一.使用右键保存 打开你喜欢的页面直接文件--->另存为,你会发现保存的位置有一个.files文件夹,里面有js和css文件。 二.使用css文件路径下载 首先进入你要获取代码的空间,再点击浏览器的菜单“查看”---“源文件”(Maxthon是“…

个人源码检索网站已经开始开发

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43769147 没想到域名可以在年前完成备案,网站目前还只是有个大概的样子,后期会继续完善,还请继续关注,网址:http://www.llwjy.com/ 网站…

phpcms网站搬家 至 服务器 完整并且详细过程

想要自己的网站让人们看到那就要上传服务器空间后,这样才会通过搜索域名进行网页访问。 但是在上传的过程中肯定会有很多东西要修改,例如数据库怎么上传、路径怎么修改等。。。。。这些对于生手可能会慌乱,不用害怕! 这就让大家看…

网站建设从多方面做起提升用户体验【转】

网站的用户体验有哪些呢?在网站建设中又怎样提升用户体验呢?用户体验是一个非常广泛的定义。总的概括有七个方面。具体的我们一起来分析一下。 第一、网站的性能方面。这一个方面主要是从网站的加载速度角度分析得出的。网站选择的服务器是否稳定,在域名解析的时候…

搜索引擎爬取网站策略

爬虫优先算法 整个的广度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的"子节点"(也就是超链接)提取出来,放入队列中依次进行抓取。被处理过的链接需要放 入一张表(通常称为Visited表)中。每次新处理一个链接之前,需要查…

SpringBoot统一处理异常:给你网站的404和500页面换上好看的图片嘞(详解+贡献代码)

进来的小伙伴,谢谢这么可爱的(●’◡’●),还关注我,嘿嘿嘿 一、好玩好看的先上 不管是404还是500错误页面都是用户最常见,也是最不想见到的页面,那有没有什么能将这些错误页面,不用冷冰冰的文字呈现&…

怎么制作手机网站

随着网站建设的发展,对于网站建设形式上有了很大的变化和创新,从根据不同行业如企业、集团、门户、商城等网站建设,发展到手机、WAP、个人网站等等。实现了网站建设的创新。对于行业类的网站,我想大家都很熟悉了,因为这…

怎么选择自己适合的网站模板?

很多用户在选择网站模版的时候都是盲目的选择,觉得哪套演示模板的最好看就选哪套,其实不然,今天就教你几招怎样选择自己合适的网站模板。 在选取网站模板的时候首页要明确自己所做的行业,会需要一些什么特定的功能,比如…