http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/

NodeJS+Express+MySQL开发小记(1)里讲过在本地搭建 NodeJS 网站的若干细节。本人最近在阿里云服务器上面按最低配租了4个月的云服务器,所以想试着把这个项目部署到云上。云服务器操作系统是Ubuntu 14.04 LTS。之前一直在Windows下做开发,对于Linux下的环境搭建、配置还不是很熟悉,搭建的过程中学到很多东西。

本文简单记录对服务器进行部署的一些细节方面与解决方案。

安装MySQL Server

直接通过apt-get就可以:

1
sudo apt-get install mysql-server

安装过程会提示 After this operation, 96.4 MB of additional disk space will be used.。MySQL的版本为Server version: 5.5.43-0ubuntu0.14.04.1 (Ubuntu)

安装完成后,运行

1
mysql -u root -p

输入密码,即可进入MySQL的终端了。

用Git进行版本控制

出于跟风,以及提高技术的目的,毫不犹豫地选择了Git而不是SVN来进行代码版本控制。最初是使用Github来作为远程服务器,用了大概两个月,感觉对于开发这种业务性太强的项目(尤其要在代码里使用数据库的),使用开源的Github仓库来托管并不让人放心。

后来发现了国内的业界良心 Git@OSC ,其宣布永久开放git公有库和私有库。相关新闻:

此货的功能与Github并无太大区别,考虑到私有仓库的免费,便果断迁移了过来。

用Git部署代码

最开始是从Github上获取代码的:

1
2
3
4
cd /var
mkdir www
cd www
git clone https://github.com/zilong-thu/d.git debate

以后如果代码发生变动,可以这样更新代码:

1
2
cd debate
git pull origin master

后来远程代码仓库迁移到git@osc,那么可以添加这个新的remote,命名为osc,然后以后就只从osc进行代码获取了。以后提交代码,也就只往git@osc提交,就一切OK了。

1
2
3
git remote add osc https://git.oschina.net/zilong-thu/d.git
 
git pull osc master

如果要删除Github那个remote,可以这样:

1
git remote rm origin

使用SSH而非HTTPS

先生成一个SSH公钥,方法:

注意,如果是 Windows &/8 + Git Bash 环境,那么在将你的key添加到 ssh-agent 中时应该使用这个命令(参考 Stack Overflow : Could not open a connection to your authentication agent):

1
eval $(ssh-agent -s)

在用于开发的电脑上,修改本地代码库的remote url

1
git remote set-url origin git@github.com:USERNAME/OTHERREPOSITORY.git

参考

以及一个中文的 Pro Git:

运行服务

安装依赖

debate目录下,安装node模块,执行

1
npm install

安装好所有依赖后,如下启动服务器:

1
npm start

使用阿里云给的IP加上端口号,即可访问到开启了的网站。

使NodeJS服务在后台运行

目前是使用putty使用ssh远程登录来操作服务器的,如果关闭这个putty,即会话终止,则服务也随即停止。解决思路自然是让程序在后台不间断地运行。解决方案可以参考:

因此,在/var/www/debate目录下新建一个shell脚本start.sh,内容为:

1
2
# Debate server start shell script
nohup npm start &

&是为了让程序能够在后台运行。这时候ctrl+c,或者关闭putty会话,就都不会杀死这个服务进程了。

用supervisor自动重启服务

NodeJS代码发生变化时,一般是必须重启Node程序才可以生效的。每次手动重启的话太麻烦,可以使用专为NodeJS打造的node-supervisor模块来实现代码变动时自动重启,以及服务崩溃时自动重启的功能。

其官网的描述是这样的:

Node Supervisor is used to restart programs when they crash.
It can also be used to restart programs when a *.js file changes.

务必要全局安装:

1
npm install -g supervisor

对于express 4.*版本,启动服务时是这样的:

1
npm start

它其实上会到package.json里面寻找这个:

1
2
3
"scripts": {
"start": "node ./bin/www"
}

因此执行的实际上是node ./bin/www。那么使用supervisor来代替npm start的话就应该是supervisor ./bin/www。因此,在shell脚本里可以这样写:

1
nohup supervisor ./bin/www &

如此一来,当更新代码时,就不必手动去重启NodeJS服务了。

停止服务

使用kill

先列出所有进程,找到Node服务的进程ID,将其杀死,即可停止服务了。

1
2
3
4
5
6
ps aux
 
root 11200 1.1 4.0 898452 20436 ? Sl Jun19 75:13 node /usr/local
root 11387 0.0 15.4 923264 77080 ? Sl Jun19 0:03 node ./bin/www
 
kill 11200

只要杀死node /usr/local开启的进程,node ./bin/www进程也随之死掉了。

###使用进程名+脚本来停止服务

端口

如果运行在未被占用的非80端口上,服务器一声不吭就给开了。但是如果用80端口,可能要注意一下权限的问题。最近都是使用root用户来开启Node服务并运行于80端口上,没有碰到什么问题。

使用80端口后,访问服务就不必加端口号了。

用shell实现自动化管理

NodeJS+Express+MySQL开发小记(2):服务器部署的更多相关文章

  1. vue+nodejs+express+mysql 建立一个在线网盘程序

    vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...

  2. 使用pm2启动nodejs+express+mysql管理系统步骤

    背景: 由于个人兴趣,了解了一下nodejs+express+mysql项目.在项目搭建完成并开发完成并部署时,遇到一个尴尬的问题,就是后台的servive服务启动问题.日常开发时,打开2个cm窗口, ...

  3. nodejs+express+mysql 增删改查

    之前,一直使用的是nodejs+thinkjs来完成自己所需的项目需求,而对于nodejs中另外一中应用框架express却了解的少之又少,这两天就简单的了解了一下如何使用express来做一些数据库 ...

  4. NodeJS+Express+mySQL服务端开发详解

    随着NodeJS的发展,现在已经被很多人熟知,NodeJS已经成为了前端开发人员必备的技能.本文不会对NodeJS过多介绍 如果你感兴趣可以访问NodeJS 官网, 维基百科 本文是利用NodeJS+ ...

  5. 【原创】基于NodeJS Express框架开发的一个VIP视频网站项目及源码分享

    项目名称:视频网站项目 开发语言:HTML,CSS(前端),JavaScript,NODEJS(expres)(后台) 数据库:MySQL 开发环境:Win7,Webstorm 上线部署环境:Linu ...

  6. nodejs+express+mysql实现restful风格的增删改查示例

    首先,放上项目github地址:https://github.com/codethereforam/express-mysql-demo 一.前言 之前学的java,一直用的ssm框架写后台.前段时间 ...

  7. 进入全屏 nodejs+express+mysql实现restful风格的增删改查示例

    首先,放上项目github地址:https://github.com/codethereforam/express-mysql-demo 一.前言 之前学的java,一直用的ssm框架写后台.前段时间 ...

  8. 使用 NodeJS+Express+MySQL 实现简单的增删改查

    关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...

  9. 基于nodejs+express+mysql+webstorm+html的 增删改查

    一.工具准备 Nodejs框架,WebStorm.Mysql服务.Navicat.此篇文章只讲项目的搭建过程,至于Nodejs,WebStorm.Mysql的下载.安装与配置网上资源很多,请自行查阅, ...

随机推荐

  1. linux常用命令说明

    1. 基础快捷键使用 ctrl + c:停止进程 ctrl + l:清屏 ctrl + r:搜索历史命令 ctrl + q:退出 2.常用目录或文件夹命令 说明:安装linux时,创建一个itcast ...

  2. 使用yield和send实现简单的协程函数

    使用yield和send实现协程 协程的本质是在一个线程里实现多个任务之间的来回切换,我们使用yield和send可以实现简单的协程 def pro(): print(1) n = yield &qu ...

  3. 1.关于Java

    一.Java简介 1.java语言的特性 java语言的重要特性:跨平台: 一次编译,到处运行. 2.java的环境搭建: 1.JRE: java运行环境. JRE = java 虚拟机 + 核心类库 ...

  4. Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式

    JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...

  5. 2017CCPC秦皇岛 G题Numbers&&ZOJ3987【大数】

    题意: 给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n,并且要使得这m个数的或值最小. 思路: 从二进制的角度分析,如果这m个数中有一个数某一位为1,那么最后或起来这一位肯定是为1的, ...

  6. 爬虫代理及ssl验证

    IP代理:import requests url='https://weibo.com/' proxies={ 'http':'116.196.66.197:99999' } # 此处的proxies ...

  7. 《第一行代码-李兴华》-10.3 System类

    10.3 System类 视频地址:System类 /** * * 统计某项操作执行时间 * */ long start = System.currentTimeMillis();//返回以毫秒为单位 ...

  8. Linux 01 计算机系统硬件组成简介

    PC服务器 1U = 4.445cm 企业1-2U比较多 互联网公司,品牌 DELL,HP, IBM. Dell品牌 2010年之前:1850,1950(1u),2850,2950(2u) 2010年 ...

  9. ANSI C、ISO C、Standard C联系与区别

    做C语言开发的人,经常会遇到“ANSI C”.“ISO C”与“Standard C”三种术语,经常会让人傻傻分不清楚.博主之前按也是搞不清三者的关系,于是某天下定决心,一定要搞清楚三者的关系,先百度 ...

  10. Codeforces Round #545 (Div. 2)(D. Camp Schedule)

    题目链接:http://codeforces.com/contest/1138/problem/D 题目大意:给你两个字符串s1和s2(只包含0和1),对于s1中,你可以调换任意两个字符的位置.问你最 ...