前言

之前做的几个项目都托管在阿里云服务器,但是最近要到期了。想着到底要不要续期,毕竟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环境部署的更多相关文章

  1. 制作nodejs项目镜像,实现docker下的快速部署

    前言 前面的文章<centos7+ docker1.12 实践部署docker及配置direct_lvm>中,已经实践了如何在centos7下安装,配置docker, 所以接下来就打算去制 ...

  2. ubuntu下nodejs和npm的安装及升级

    ubuntu 下 nodejs 和 npm 的安装及升级 参考:https://segmentfault.com/a/1190000007542620 一:ubuntu下安装 node 和 npm命令 ...

  3. Ubuntu下hadoop环境的搭建(伪分布模式)

    Ubuntu下hadoop环境的搭建(伪分布模式) 一.必要资源的下载 1.Java jdk(jdk-8u25-linux-x64.tar.gz)的下载 具体链接为: http://www.oracl ...

  4. Ubuntu下设置环境变量

    Ubuntu下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户:   一:用于当前终端: 在当前终端中输入:export PATH=$PATH:<你的要加入的路径&g ...

  5. ubuntu 下添加环境变量

    ubuntu 下添加环境变量 方法1: 第一种临时设置,用 export 指令,如在$PATH中增加JAVA文件夹: $export PATH=$PATH:/usr/local/lib/jdk1.6. ...

  6. ubuntu下在apache部署python站点

    ubuntu下在apache部署python站点 我的是ubuntu14 32为的虚拟机,默认安装的python为3.4 环境:apache + mysql + django + python3 软件 ...

  7. # centos7下FFmpeg环境部署记录

    # centos7下FFmpeg环境部署记录 随着视频在网站上的应用越来越多,越来越多的网站服务器需要支持视频转码,视频压缩,FFmpeg是目前最好用的网站服务器后台转码程序,应用最多.FFmpeg是 ...

  8. Ubuntu下使用crontab部署定时任务

    Ubuntu下使用crontab部署定时任务 安装cron apt-get install cron 开启crontab日志 默认情况下的日志是没有开启的,我们需要找到 /etc/rsyslog.d/ ...

  9. Ubuntu下编程环境GNU安装

    ubuntu下C编程   环境搭建 其实,linux下写C也是很容易的.IDE的话用 eclipse 集成 CDT 模块就行了.当然这属于重量级的了,就如同VC++之于windows一样.那有没有像T ...

随机推荐

  1. mybatis if test加筛选条件

    最近在项目使用mybatis中碰到个问题 <if test="type=='y'"> and status = 0 </if> 当传入的type的值为y的时 ...

  2. 简单轻量级的一套JS 类库(RapidDevelopmentFramework.JS)

    1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...

  3. 错误Fatal error: Call to undefined function mb_strlen()的解决办法

    其实这个就是没有开启php_mbstring模块.Windows下只需要修改安装目录下的php.ini文件把extension=php_mbstring.dll前面的“#”号注释符去掉保存后重启Apa ...

  4. Python的迭代器与生成器

    Python中的生成器和迭代器方便好用,但是平时对生成器和迭代器的特性掌握的不是很到位,今天将这方面的知识整理一下. 迭代器 为了更好的理解迭代器和生成,我们需要简单的回顾一下迭代器协议的概念. 迭代 ...

  5. JAVA基础——运算符和表达式

    JAVA语言常用的运算符和表达式详解 一.简述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 age 的值设置为 20 ,这时候就需要一个&q ...

  6. Less 的使用

    Less 的使用 开发时直接使用 引用你的样式文件(main.less) (必须在less.min.js) 前引用 引用less.min.js 文件 <link href="resou ...

  7. 极客圈(一)树莓派3B协同Python打造个性化天气闹钟

    人生苦短,我用Python~ 一直想自己折腾些极客的东西出来,供自己使用或者是供他人使用.一则可能对自己的生活是一种帮助,二则是对自己技能的提高,三则显得高大上,一直努力,一直提高,一直Happy!~ ...

  8. 如何编写高效的SQL

    编写高效的sql可以给用户带来好的体验,需要开发这没有意识到这一点因为他们不关心也不知道怎么做.高效的sql可以给用户节省很多时间,这样就不需要dba来找上门,也不需要搭建RCA和性能调优. 性能不好 ...

  9. npm的理解

    一 概念方面 npm的全称是node package manger ,是一个nodejs包管理工具,已经成为非官方的发布node模块包的标准.有了npm可以很快速的找到特定服务器要使用的包,进行下载, ...

  10. 通用JSONHelp 的通用的封装

    1. 最近项目已经上线了 ,闲暇了几天 想将JSON  的序列化 以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了.但是我想封装一套为自己开发的项目使用 ...