因为这学期数据库project 里其他成员都不想做后端,我作为小白就铁肩担道义,开始了Node.js 学习之路(其实只是 Express 框架)。摸爬滚打着完成了本地的开发之后就遇到了怎么部署到服务器上的问题,本周末用了一天半的时间终于成功部署完毕,顺便尝试了很多个自己的第一次:
- 第一次搭建Linux服务器
- 第一次 使用SSH
- 第一次在生产环境下使用 Git
第一步先是寻找合适的部署环境。作为小白, 一开始我想到的是Amazon Web Service, Google App Engine这些云计算平台,但是仔细比较之后发现显然是不合适我们这样一个作业项目。之后在网上搜 nodejs hosting,找到的 heroku, OpenShift 等等我觉得也不是很满意。最后还是是先上知乎搜了一圈相关问题,最后确定下来还是租一个 VPS 。租用 VPS 虽然需要自己搭建环境,但是同时也意味着拥有更多的自由度,同时也可以锻炼相关的技能。货比三家我最后选择了DigitalOcean,原因主要是不仅便宜(每月5刀,按小时计算),而且社区和文档都很齐全,很适合我这样的小白... 注册好账号之后就开始选择具体的产品(他们的术语叫 Droplet...)的页面,可以选择系统以及预装程序。这里我没太多想就选择了 CentOS 7+512MB RAM+20 G SSD,价格是一个月5刀。同时这里可以预先选择一个 SSH KEY 以便日后远程登陆。创建 SSH KEY 的教程网上很多啊我就照着一步一步弄好了。 关于创建用户,更改 SSH 验证等内容,我觉得下面这篇教程简单到不能再简单: https://www./community/tutorials/initial-server-setup-with-centos-7
配置环境
开发工具
创建好之后开始一步一步安装需要的软件。gcc make 这些编译工具都是系统自带的(貌似 Ubuntu要自己装),Emacs则需要自己安装。不过安装好 Emacs之后我略有一点傻眼,感觉体验不如在本地上使用那么爽啊,所以后来遇到要改文件的地方我就在桌面的 Emacs里通过SSH 访问文件再修改。不过后来遇到一个问题,就是不知道怎么通过本地的 Emacs远程修改服务器上需要 root权限的文件。遇到这些文件我就只好用服务器上的vim啦。 除此以外就是安装一下 Git, 很简单:
sudo yum install git
Node.js MySQL
Node.js 需要下载源代码安装。cd 到一个空文件夹,下载源代码:
wget http:///dist/v0.10.30/node-v0.10.30.tar.gz 解压并进入文件夹:
tar xzvf node-v* && cd node-v* 这里的 xzvf 代表的是什么呢?具体可以看这篇: http://www./faq/howto-open-a-tar-gz-file-in-linux-unix/
之后开始执行配置和编译:
./configure // 执行 Node.js 安装包自带的脚本,修改相关的系统配置文件
make //编译 C源代码为 可执行的 Linux程序
最后是安装及检查版本:
sudo make install
node --version
npm -v
安装 MySQL :
sudo yum install http://dev./get/mysql-community-release-el7-5.noarch.rpm
安装好之后就先启动服务器:
sudo systemctl start mysqld 并且修改 root 用户的密码,具体的操作网上太多不细说。修改好之后用 WorkBench 连接并把我本地的测试数据库 SQL 导入。
同步项目
搭建完环境就可以同步项目啦:
git clone https://your project url 之后的一些小修小补就可以直接在服务器上改,改完再同步到 github:
git add .
git commit -m <version>
git push origin master
在本地做的修改也用同样的方法同步到 github, 之后去服务器上
git pull 就可以完成一次项目同步。
监听 :80端口
Node.js 默认监听:3000端口,在本地当然无所谓,但是部署到服务器上以后我想把它转到:80(HTTP)端口上。 但是直接在 app.js 里修改相关的监听命令会报错,查了一下原来是 Linux 下非 root 权限不能使用1024以下的端口。又听说为了安全缘故,千万不要用 root 权限去运行服务器。于是开始去网上搜索怎么用 Nginx 服务器给 Node.js 做反向代理,在花了两个多小时证明了诸多错误方法之后,终于成功。 其实很简单,只要在 Nginx的配置文件里加上:
location / yourpath {
proxy_pass http://127.0.0.1:3000;
}
然后启动/重启 Nginx服务器 sudo systemctl start/restart nginx sudo systemctl enable nginx ``` 这样,所有指向 http:///yourpath\* 的 URL 都会被转到:3000端口进行访问。
退出终端后继续运行 Node.js
一开始我都是直接用Node /path/app.js 启动服务器的。但是退出 SSH 后进程自动就结束了。解决方案是使用 Npm 模块 forever,建立 UNIX daemon 进程,让 Node.js 保持运行。 安装: sudo npm -g install forever 开启进程: forever start /path/app.js 查看所有进程: forever list 关闭所有进程: forever stopall
结尾
到这里就算基本部署完毕这个 Node.js +MySQL 环境啦。虽然非常简单,但是作为小白,还是学到不少的东西。
|