Ubuntu 14.10 64位LTS
登录到远程服务器

ssh root@ip
创造用户
# sudo useradd-m-d/home/sang-s/bin/bash-c " the sang user "-U sang # passwd sang输入新的UNIX密码:重新键入新的UNIX密码:passwd:密码更新成功
用户添加创建登录用户密码设置用户登录密码
授予须藤权限
如果需要使用sudu权限,请修改
# sudo vi /etc/sudoers
复制根线,改成桑。
#用户权限规范rootALL= ALL sangALL= ALL
切换用户
# su - sang $ ls $ $ pwd /home/sang $。
安装必要的软件。
安装git
如果没有sudo权限复制到桑帐号,请切换到root帐号。
sudo apt-get更新sudo apt-get安装git
安装nginx
sudo apt-get安装nginx
靴子
sudo apt-get安装sysv-RC-conf sudo sysv-RC-conf nginx
准备工作目录
mkdir -p工作空间/githubcd工作空间/github
安装节点
安装nvm
$ curl-o-https://raw . githubusercontent . com/creation IX/nvm/v 0 . 31 . 0/install . sh | bash % Total % Received % Xferd平均速度时间时间时间当前Dload上传总花费左速度100 7766 100 7766 0 0 28614 0-:-:-:-:-::-:-28656 = >将nvm作为脚本下载到'/home/sang/。nvm'= >将源字符串附加到/home/sang/。bashrc= >关闭并重新打开您的终端,开始使用nvm$ source ~/。bashrc $ nvm节点版本管理器
安装nodejs lts版本
$ nvm安装4下载https://nodejs.org/dist/v4.3.2/node-v4.3.2-linux-x64.tar.xz...# # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 100.0%现在使用节点4.3.2创建默认别名:default-> 4$node-vv 4 . 3 . 2
将其设为默认值。
$ nvm别名默认4.3默认-> 4.3
确认npm版本
$ npm -v2.14.12
只要大于2.9.1,如果不是,请npm i -g npm@2.9.1
安装nrm
$ npm i -g nrmnpm WARN已弃用npmconf@0.1.16:此软件包已重新集成到npm中,现在相对于npm/home/sang/已经过时。nvm/versions/node/v 4 . 3 . 2/bin/NRM->/home/sang/。nvm/versions/node/v 4 . 3 . 2/lib/node _ modules/NRM/CLI . js NRM @ 0 . 3 . 0/home/sang/。nvm/versions/node/v 4 . 3 . 2/lib/node_modules/nrm├──ini@1.3.4├──only@0.0.2├──extend@1.3.0├──async@0.7.0├──open@0.0.5├──指挥官@2.9.0 ├── npmconf@0.1.16 ├──节点-echo@0.0.6 └──请求@2.69.0
速度测量
$ nrm测试* npm - 274ms cnpm - 6868ms淘宝- 716ms edunpm - 5598ms eu - Fetch错误au - Fetch错误sl - 1234ms nj - 2228ms pt - Fetch错误
切换源
$ nrm使用npm注册表已被设置为:https://registry.npmjs.org/
部署节点应用程序
基础
git克隆pm ipm2启动
修改nginx

cat/etc/nginx/sites-enabled/default upstream back end _ nodejs { server 127 . 0 . 0 . 1:3019 max _ fails = 0 fail _ time out = 10s;#服务器127 . 0 . 0 . 1:3001;keepalive 512} server { listen 80 default _ server;listen[::]:80 default _ server IPv6 only = on;# root/usr/share/nginx/html;root/home/sang/workspace/OS China/base 2-we chat-jssdk/public;索引index.html index.htm;#使网站可从http://localhost/server _ name nodeonly.mengxiaoban.cn at35.com访问;client _ max _ body _ size 16Mkeepalive _ timeout 10location / {#首先尝试将请求作为文件,然后#作为目录,然后返回显示404。# try _ files $ uri $ uri/= 404;#取消注释以在此位置启用na xsi # include/etc/nginx/na xsi . rules proxy _ set _ header X-Real-IP $ remote _ addr;proxy _ set _ header X-Forwarded-For $ proxy _ add _ X _ Forwarded _ For;proxy _ set _ header Host $ http _ Host;Proxy _ set _ header X-NginX-Proxy true;proxy _ redirect offproxy_next_upstream错误超时http _ 500 http _ 502 http _ 503 http _ 504;proxy_set_header连接“”proxy _ http _ version 1.1proxy _ pass http://back end _ nodejs;}}
注意
上游backend_nodejs定义的代理转发的api地址,下面的location/proxy_pass,从上游取根,把静态资源放在下面,比如express下面的public目录。
然后重启nginx。
sudo nginx -s重新加载
pm2的自动部署
Pm2是具有负载均衡功能的节点应用程序的进程管理器。当你想在所有服务器的所有CPU上使用你的独立代码,并确保进程总是活动的,0秒过载时,PM2是完美的。可以感受一下官方的部署文档例子,github项目地址。
主要特点:
内置负载均衡后台运行0秒停机重装,我理解的大概意思是维护升级时不用停机。带有Ubuntu和CentOS的启动脚本停止不稳定进程控制台检测提供HTTP API远程控制和实时接口API
Pm2部署简单的应用程序
安装pm2
npm安装-g pm2
使用pm2部署简单的项目
$ pm2 start app.js -名称“和赫达”-i 0 -手表
Pm2启动app.js:用pm2启动app.js-i 0:用最大进程数启动- name:指定一个你喜欢的名字- watch:启动监控模式,如果代码有变化pm2会自动重启。
查看pm2部署
pm2 ls
是这样的:
Pm2自动部署远程服务器
目前我们部署服务器的方式是用oschina托管项目,然后在服务器中安装git将项目克隆到服务器中,再用pm2部署项目。如果项目以任何方式被修改,它将需要运行到几个服务器来提取代码,然后pm2重新加载项目。痛得要命。现在用pm2的远程部署方式来解决这个痛苦的问题!
准备工作/即将开始工作
在本地机器和在线服务器之间建立ssh信任,无密码登录。
生成git ssh公钥
$ git config-global user . name " he heda " $ git config-global user . email " he heda @ mail . com " $ ssh-key gen-t RSA-C " he heda @ mail . com "
连续按三次enter,这样生成的ssh公钥就添加到github中了。
查看生成的ssh公钥
$ ls ~/。ssh/authorized _ keys id _ RSA id _ RSA . pub已知主机
理论上,ssh公钥已经生成,id_rsa.pub在。用户主目录中的ssh是生成的公钥。文件authorized_keys是授权的ssh公钥。使用ssh协议进行远程访问时,如果本机的ssh公钥在这个文件中,就可以直接访问。
将ssh公钥复制到服务器
$ scp ~/。ssh/id _ rsa.pubusername @ ip:用户的主目录/。ssh/授权密钥
执行此命令将本地id_rsa.pub复制到。ssh/服务器的目录,并将其命名为authorized_keys,这样就可以不用密码就可以访问远程服务器。在上一步中,服务器的SSH公钥已经添加到github中,这样服务器中的克隆项目就不需要密码了。
Pm2配置文件生态系统. json
官方部署文件示例
{" deploy ":{ " your project name ":{ " user ":" node "," host" : ["ip"]," ref" : "origin/master "," repo" : "git.oschina.net "," path" : "/your/deploy/folder/"," post-deploy ":" NPM install;PM2 start bin/www-name ' Hz-frontend '-watch "," env" : { "NODE_ENV": "dev" } } }
User:您登录到远程主机的用户名host:服务器的ip地址ref:部署的分支repo:GitHub或oschina中托管的地址path:部署到服务器的目录post-deploy:部署时的命令
执行部署
服务器中的首次部署
pm2在您的projectname设置上部署ecosystem.json
上面的命令是将项目从github或oschina克隆到指定的路径。需要注意的是,pm2将目录结构分为:
|当前|共享|源|

克隆后,执行安装和启动。
pm2在您的项目名称上部署生态系统
建议官方在部署的项目中使用生态系统. json启动项目:
{ " apps ":[{//Application # 1 " name ":" Hz-MQ "," script" : "index.js "," args" : " - toto=heya coco -d 1 "," watch": true," node_args" : " - harmony "," merge_logs" : true," cwd" : "/Users/zxy/work/hz-mq "," env": { "NODE_ENV": "development "," AWESOME _ SERVICE _ API _ TOKEN ":" XXX " }," env_production ":{ " NODE _ ENV ":" production " }," ENV _ production "
这个比较简单,就不一一说了。之所以不用,是因为在项目中本地使用和在服务器上使用都需要来回修改启动目录。


