NodeJS项目迁移兼Ubuntu下NodeJS环境部署
前言
之前做的几个项目都托管在阿里云服务器,但是最近要到期了。想着到底要不要续期,毕竟100/月。后面看着阿里云有个活动,800/三年。果断买下。环境部署折腾了一天,其中也遇到几个坑。
目录
一、安装环境
1.1 安装NodeJS环境
1.2 安装版本控制软件Git
1.3 安装MongoDB数据库
1.4 安装Nginx
二、导入数据
三、安装项目
四、部署项目
4.1 Nginx配置
4.2 启用HTTPS
4.3 使用PM2部署项目
4.4 开启阿里云外网访问
五、踩坑记录
5.1 数据库导入失败
5.2 PM2部署失败
一、安装环境
为了保证项目运行不出问题,在新服务器安装和原服务器一致的环境。项目迁移历时一天,两台服务器的系统都是Ubuntu 16.04 64位。
1.1 安装NodeJS环境
自带的NodeJS版本是4.2.6,版本有点低,使用npm的n模块更新到最新版。
安装NPM
sudo apt-get install npm
使用淘宝源
阿里云访问npm的速度非常慢,这里通过设置,让NPM从淘宝镜像更新模块
npm set registry https://registry.npm.taobao.org // 设置从淘宝镜像更新
npm set disturl https://npm.taobao.org/dist
npm cache clean // 清除缓存
更新NodeJS
npm install n // 更新NodeJS的模块
n stable // 更新到最新稳定版
node -v // v8.2.1
1.2 安装版本控制软件Git
sudo apt-get install git
1.3 安装MongoDB数据库
sudo apt-get install mongodb // 安装MongoDB
service mongodb start // 启动服务
mongod // 进入交互式控制台,能加入说明启动成功,ctrl+c退出
1.4 安装Nginx
sudo apt-get install nginx // 安装Nginx
二、导入数据
把以前的数据库完整的迁移过来
从源服务器导出数据库
mongodump -h localhost --port 27017 -d test -o database_dump
导入MongoDB数据库
mongorestore -d test database_dump/test
三、安装项目
项目是在Github开源,直接拉取就行。
git clone https://github.com/bergwhite/nchat.git // 克隆项目
cd nchat // 进入目录
npm install 安装模块
npm run build
四、部署项目
4.1 Nginx配置
vim /etc/nginx/nginx.conf // 编辑Nginx的配置
http {
server {
listen 80;
server_name hostName;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name hostName;
ssl on;
# SSL证书会插入到这里
# 完整根目录
location / {
root /*/*/*;
index index.html;
}
# 反向代理V2EX API到本地,解决跨域问题
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://www.v2ex.com/api/;
}
}
...
4.2 启用HTTPS
sudo apt-get update // 更新软件源
sudo apt-get install software-properties-common // 安装
sudo add-apt-repository ppa:certbot/certbot // 添加仓库
sudo apt-get update // 更新软件源
sudo apt-get install python-certbot-nginx // 安装
sudo certbot --nginx // 生成证书(自动添加到Nginx)
sudo certbot --nginx certonly // 生成证书(手动添加到Nginx)
4.3 使用PM2部署项目
sudo apt-get install pm2 // 安装pm2
4.4 开启阿里云外网访问
在安全组里添加需要放行的NodeJS项目端口即可。
五、踩坑记录
5.1 数据库导入失败
导入数据库的时候,有一个Collection没有导入成功
Assertion failure amt == (size_t)( size - 4 ) src/mongo/tools/tool.cpp 330
解决方案
把报错的Collection单独导出,然后重新导入到新服务器的数据库
5.2 PM2部署失败
运行下面的代码会失败
pm2 start -i 0 --name test ./bin/www
解决方案
使用fork模式启动
pm2 start --name nchat3 ./bin/www
参考连接
NodeJS项目迁移兼Ubuntu下NodeJS环境部署的更多相关文章
- 制作nodejs项目镜像,实现docker下的快速部署
前言 前面的文章<centos7+ docker1.12 实践部署docker及配置direct_lvm>中,已经实践了如何在centos7下安装,配置docker, 所以接下来就打算去制 ...
- ubuntu下nodejs和npm的安装及升级
ubuntu 下 nodejs 和 npm 的安装及升级 参考:https://segmentfault.com/a/1190000007542620 一:ubuntu下安装 node 和 npm命令 ...
- Ubuntu下hadoop环境的搭建(伪分布模式)
Ubuntu下hadoop环境的搭建(伪分布模式) 一.必要资源的下载 1.Java jdk(jdk-8u25-linux-x64.tar.gz)的下载 具体链接为: http://www.oracl ...
- Ubuntu下设置环境变量
Ubuntu下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户: 一:用于当前终端: 在当前终端中输入:export PATH=$PATH:<你的要加入的路径&g ...
- ubuntu 下添加环境变量
ubuntu 下添加环境变量 方法1: 第一种临时设置,用 export 指令,如在$PATH中增加JAVA文件夹: $export PATH=$PATH:/usr/local/lib/jdk1.6. ...
- ubuntu下在apache部署python站点
ubuntu下在apache部署python站点 我的是ubuntu14 32为的虚拟机,默认安装的python为3.4 环境:apache + mysql + django + python3 软件 ...
- # centos7下FFmpeg环境部署记录
# centos7下FFmpeg环境部署记录 随着视频在网站上的应用越来越多,越来越多的网站服务器需要支持视频转码,视频压缩,FFmpeg是目前最好用的网站服务器后台转码程序,应用最多.FFmpeg是 ...
- Ubuntu下使用crontab部署定时任务
Ubuntu下使用crontab部署定时任务 安装cron apt-get install cron 开启crontab日志 默认情况下的日志是没有开启的,我们需要找到 /etc/rsyslog.d/ ...
- Ubuntu下编程环境GNU安装
ubuntu下C编程 环境搭建 其实,linux下写C也是很容易的.IDE的话用 eclipse 集成 CDT 模块就行了.当然这属于重量级的了,就如同VC++之于windows一样.那有没有像T ...
随机推荐
- 【解决】VS2013 + Qt 5.7(5.6适用)使用QSqlDatabase出现“无法解析的外部符号"错误
原始日期: 2016-08-03 22:09 错误如下: error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscal ...
- 解决安卓手机input获取焦点时会将底部固定定位按钮顶起的问题
一个页面上有个固定在底部的按钮,页面中有个input框,点击input框获取焦点时,在苹果手机上没事,但在安卓手机上弹出的键盘会将按钮顶起来,这就很不好看了,想了个办法解决一下.之前一直觉得用inpu ...
- Haoop MapReduce 的Partition和reduce端的二次排序
先贴一张原理图(摘自hadoop权威指南第三版) 实际中看了半天还是不太理解其中的Partition,和reduce端的二次排序,最终根据实验来结果来验证自己的理解 1eg 数据如下 20140101 ...
- html路径问题
1.绝对路径 绝对路径是指文件在硬盘上真正存在的路径.例如"bg.jpg"这个图片是存放在硬盘的"E:\book\网页布局代码\第2章"目录下,那么 ...
- laravel怎么创建一个简单的blog
主要功能实现:点击标题跳转 第一步:创建路由: Route::get('/articles','ArticlesController@index'); Route::get('/articles/{i ...
- Thrift总结(二)创建RPC服务
前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口.不清楚的可以看这个<Thrift总结(一)介绍>.做好之前的准备工作以后,下面就开始如何 ...
- DOCKER 从入门到放弃(二)
搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...
- tokuDB 安装与备份小记
线上的数据增长越来越快,数据量的增长也愈来愈大,尤其是日志类数据,这对于数据迁移.数据备份恢复而言,都是一个非常大的挑战. 于是想到了 13 年开源 tokuDB 存储引擎,来解决我们迫在眉睫的容量问 ...
- C#设置WebBrowser默认浏览器
由于VS的WebBrowser控件的默认浏览器是IE7,好多网页兼容性不是很好,所以要修改下默认浏览器. 设置前: 设置后: 在WebBrowser界面加载时执行以下方法,设置浏览器. /// ...
- Python3 常用数据类型语法
1.int类型 int类型的数据是没有长度限制的,它的最大长度只与计算机的内存有关. bin(i) 返回二进制表示结果, hex(i) 十六进制, int(i) 整数( ...