我的个人网站

前阵子赶上双十一优惠,买了三年的阿里云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)相关推荐

  1. Jenkins打包部署gitee项目至阿里云ECS服务器

    原文地址:Jenkins打包部署gitee项目至阿里云ECS服务器 - BIGTREE (whwtree.com) 所需插件: Git Parameter Plug-In插件 Publish Over ...

  2. Vue项目自动部署【精简版】NuxtJS + GitHub Actions + Linux 自动部署学习(包含阿里云Linux ECS购买过程、传统部署流程、pm2、Github Actions)

    购买阿里云Linux服务器 如果已有服务器请直接跳转到[传统部署方式] 登录阿里云,访问 云服务器 ECS 购买地址:https://ecs-buy.aliyun.com/ 也可从首页导航菜单进入. ...

  3. 阿里云ECS服务器部署Node.js项目详细教程及多网站部署

    本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...

  4. 阿里云ECS服务器部署Node.js项目全过程详解

    本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...

  5. 个人博客,懒人终章部署,阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目,还在用

    阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目: 最近看见网上很多Jenkins的自动部署SpringBoot的Demo,但是都要自己安装JDK,Maven.. ...

  6. 【阿里云ECS最佳实践】ECS+RDS构建云服务器主动防御系统部署开源蜜罐系统Hfish及ECS周边功能测试

    点击免费领取ECS,云上部署轻松搞定:https://click.aliyun.com/m/1000370355/ 云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓 ...

  7. 怎么把springboot部署到阿里云_听说“一分钟就能部署阿里云ECS集群”?

    导读 "企业上云"是当下大势所趋,"提效.降成本" 也是企业上云.迁云和管理云必须关注的问题.今天我们将从一个集群部署的场景出发,介绍阿里云如何借助生态工具Te ...

  8. 阿里云ECS主机部署LAMP环境

    阿里云ECS主机一键部署LAMP环境 1.LAMP概念 LAMP是Linux+Apache+MySQL+Perl/PHP/Python等组成常用来搭建动态网站或者服务器的开源软件,它们本身都是独立的程 ...

  9. 通过阿里云ECS服务器部署FRP实现Windows自带远程桌面

    由于TeamViewer的高额使用费及其安全问题,萌生了自己搭建FRP实现Windows远程桌面的想法,网上找了一圈基本没有全面且安全落地的,大部分都是面向技术达人的,对于新手的我来说走了不少弯路,在 ...

最新文章

  1. 本地 无法启动 SQL Server 错误代码126
  2. nginx 操作笔记
  3. java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法
  4. 操作系统课设--具有优先级的线程调度
  5. 文献记录(part44)--Skeletonisation algorithms with theoretical guarantees for unorganised point ...
  6. 『设计模式』80年代的人们就已经领悟了设计模式-- 发布者/订阅者模式 (包括发布者/订阅者模式和观察者模式的区别)
  7. 再次遇到golang乱码问题,用simplifiedchinese解决
  8. ios 后台唤醒应用_苹果不用背锅了!微信被杀后台是因为“耍流氓”?用户该听谁的?...
  9. 上海大华条码称代码_上海大华条码秤使用说明书
  10. RadAsm:object file not found
  11. 如何在Web前端实现CAD图文字全文搜索
  12. python 小说 云_python爬小说
  13. ESP32开发路程——环境搭建、引脚、烧录、UART、ADC、WS2812、RFID、DAC、FreeRTOS、CJSON
  14. 【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天
  15. OC面向对象的三大特征(封装 继承 多态)习题2 复合
  16. 阿里巴巴mysql集群方案_云原生下,如何实现高可用的MySQL?
  17. ibatis代码自动生成-ibatis使用者的福音来了
  18. 人工智能常识和干货,适合收藏
  19. 宾夕法尼亚大学计算机专业研究生,宾夕法尼亚大学计算机工程研究生排名最新消息精讲篇...
  20. 微机化远动系统与计算机网络,【浅析】智能电网调度自动化现状与发展

热门文章

  1. java没提示_java运行不了,出现以下提示,如何解决。
  2. 用Docker mxnet安装和使用
  3. fstat、stat和lstat用法
  4. 【Kaggle从入门到放弃】(01):竞赛类型
  5. vue3从入门到入院
  6. Linux 系统编程 -进程概念篇
  7. ts 打开sourcemap_使用ts-node和vsc来调试TypeScript代码
  8. 0X Swagger2
  9. 别怕,遇到Map源码面试题这样答就对了
  10. 16福师硬盘是计算机的,福师16春《计算机应用基础》在线作业一分析.docx