Node.js项目线上服务器部署与发布

Node.js项目线上服务器部署与发布

配置公钥 和密钥 可以登录服务器不需要密码
看是否已经存在公钥和密钥
看用户文件夹下是否存在


image
image

ctrl +d 退出用户
sudo rm -f xxx 删除一个文件

//连接
ssh ubuntu@118.89.56.230
// 先给root一个密码
sudo passwd root
// 然后切换到root su root
//在root下
sudo adduser skl
增加一个用户

//然后在root下给skl sudo 权限
 gpasswd -a skl sudo
 
 //
 sudo visudo
 增加下面的skl 
image

ctrl +X保存 之后shift+Y enter 退出

可以在root 下进入skl 用户 su skl
或者 sudo su skl


//重启服务
 sudo service ssh restart
//生成公钥和私钥
 ssh-keygen -t rsa -C "shoukailiang@qq.com"
//配置文件 修改默认端口
sudo vi /etc/ssh/sshd_config

改过端口后 连接服务器会连不上

出现
: ssh: connect to host 118.89.56.230 port 22: Connection refused

这时候就要虚入输入端口号了

  • ssh -p 8888 ubuntu@118.89.56.230
    (8888是刚刚改过的端口)
//更新
sudo apt-get update

//安装一些
sudo apt-get install vim openssl build-essential libssl-dev wget curl git

//找到github上的nvm 
https://github.com/creationix/nvm
找到安装脚本

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

image

装完后若发现nvm 不是一个命令 在来一个命令窗口

安装好nvm 就可以安装nodejs了

nvm install v8.2.1

指定一下node版本

nvm use v8.2.2

设置一下默认

nvm alias default v8.2.1

设置成淘宝

用一个nrm 包

npm --registry=http://registry.npm.taobao.org install -g nrm

nrm use taobao

安装一些包

npm i pm2 webpack gulp grunt-cli -g

查看全局安装过的包 npm list -g -depth 0

创建 app.js 如下

创建 vi app.js

var http=require('http');
var server=http.createServer(function (req,res) {
    res.writeHead(200,{'Content-Type':'text/plain'})
    res.end('Hello SKL\n');
})
server.listen(8081);
console.log('Server running at http://118.89.56.230:8081');

之后 node app.js
就可以在浏览器中访问 127.0.0.1:8081

使用nginx 80端口

停止apache 服务
sudo service apache2 stop

移除Apache 2

sudo update-rc.d -f apache2 remove

sudo apt-get remove apache2
下载 nginx 
   sudo apt-get install nginx

配置

  1. cd /etc/nginx/
  2. cd conf.d
  3. sudo vi shoukailiang-cn-8081.conf
    写入
upstream blog{
    server 127.0.0.1:8081;
}

# NGINX Server Instance,PORT 80
server {
    listen 80;
    server_name 118.89.56.230;


    # Proxy to the Node instance
    location / {
      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_pass http://blog;
      proxy_redirect off;
    }
 }

4.sudo nginx -t 测试是否成功

  1. sudo nginx -s reload 重启 nginx

之后输入118.89.56.230 就可以看到了 把8081 的服务都导向到Nginx的80端口

让 Nginx的版本信息在浏览器的头信息中不那么明显

cd /etc/nginx
sudo vi nginx.conf
去掉下面配置文件前的# 保存

去掉


image

然后 sudo service nginx reload

MongoDB ubuntu16.04

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

命令:
xxxx

sudo apt-get install -y mongodb-org
其中这一步速度很慢,改成阿里云的连接
cd /etc/apt/sources.list.d
vi mongodb-org-3.4.list  (注意看安装时的版本)
改成:
deb [ arch=amd64,arm64 ] http://mirrors.aliyun.com/mongodb/apt/ubuntu xenial/mongodb-org/3.6 multiverse
命令:
// 改过镜像后要upadte一下
xxxx
xxx
xxx
 sudo service mongod start
 之后 mongo就启动了
若遇到无法写入。加sudo 

mongodb 默认跑在27017 端口上
//修改
sudo vi /etc/mongod.conf
port 改成了19997 

文件上传

 scp ./test.html shoukailiang@118.89.56.230:/home/shoukailiang/test
 scp -P 8888 ant-mobile-recruit-app.tar shoukailiang@118.89.56.230:/home/shoukailiang/

打包

tar

    -c : 打包

    -v : 显示过程

    -f : 指定打包后的文件名
    
    -x : 解打包
    
    -z:压缩为.tar.gz格式
    
//压缩
tar -cvf japan.tar japan
tar -zcvf japan.tar.gz japan
//解压
tar -xvf japan.tar
tar -zxvf japan.tar

配置可以让域名访问服务器

cd /etc/nginx/conf.d
sudo mv shoukailiang-cn-8081.conf www-shoukailiang-cn-3000.conf
修改配置文件
upstream blog{                                                      
        server 127.0.0.1:3000;                                      
}                                                                   
# NGINX Server Instance,PORT 80                                     
server {                                                            
        listen 80;                                                  
        server_name www.shoukailiang.cn;                            
# Proxy to the Node instance                                        
location / {                                                        
       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_pass http://blog;                                      
       proxy_redirect off;                                          
     }                                                              
}    
// 重启nginx
sudo nginx -s reload

配一下防火墙

sudo apt-get update && sudo apt-get upgrade
sudo iptables -F //先清掉所有的规则
sudo vi /etc/iptables.up.rules
------------------------------------------  
*filter
# 允许所有建立起来的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许所有出去的流量
-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
# ping
-A INPUT -p icmp -m  icmp --icmp-type  8 -j ACCEPT
# allow ssh port login
-A INPUT -p  tcp -m state --state NEW --dport 8888 -j ACCEPT

# MongoDB connection
-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

# 3000端口
-A INPUT -s 127.0.0.1 -p tcp --destination-port 3000 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 3000 -m state --state ESTABLISHED -j ACCEPT

# 9093端口
-A INPUT -s 127.0.0.1 -p tcp --destination-port 9093 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 9093 -m state --state ESTABLISHED -j ACCEPT

# 记录被拒绝的请求
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
# drop incoming sensitive connections
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
# reject all other inbound
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT  
-------------------------------------------
sudo iptables-restore </etc/iptables.up.rules //载入规则
sudo ufw status //查看防火墙状态
sudo ufw enable //激活

sudo vi /etc/network/if-up.d/iptables //让他开机自动启动
·-----------------------------------
#!/bin/sh
iptables-restore /etc/iptables.up.rulea
-----------------------------------------------------
sudo chmod +x /etc/network/if-up.d/iptables



### 出现invalid host header的问题

// react的话在config里面的webpackDevServer.config.js里面加一个
disableHostCheck: true

https配置

// 在腾讯云上申请证书(具体详见文档:https://cloud.tencent.com/document/product/400/4143)
// 把证书下载下来上传到服务器
// 修改配置文件
upstream blog{
     server 127.0.0.1:3000;
}
# NGINX Server Instance,PORT 80
server {
        listen 80;
        server_name www.shoukailiang.cn;
        # rewrite ^(.*) https://$host$1 permanent;
        return 301 https://www.shoukailiang.cn$request_uri;
}
server {
        listen 443;
        server_name www.shoukailiang.cn; #填写绑定证书的域名
        ssl on;
        ssl_certificate /home/shoukailiang/https-key/1_www.shoukailiang.cn_bundle.crt;
        ssl_certificate_key  /home/shoukailiang/https-key/2_www.shoukailiang.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
        ssl_prefer_server_ciphers on;

        # if($ssl_protocol = ""){
         #  rewrite ^(.*) https://$host$1 permanent;
        # }
# Proxy to the Node instance
location / {
       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_pass http://blog;
       proxy_redirect off;
        }
}
测试nginx 
重启nginx
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • 最近在搞一个微信小项目,开发代码已经弄好,也顺利部署到阿里云服务器上,其中遇到了一些坑,特此记录下部署的流程和遇到...
    四月既望阅读 898评论 0 0
  • 看了一个作家说“当你竭尽全力,上帝自会给你主持公道”,换言之,当你努力了,生活最后会给你一个满意的答复。其实,不管...
    丁玉菡阅读 236评论 0 0
  • 如果大家要問,人最想獲得什麼超能力的話,拋開什麼停止時間、空手變錢這種不靠譜的,恐怕「讀心術」會排在前列。人嘛,總...
    Pope怯懦懦地阅读 329评论 0 1
  • 白玉堂刚刚避开皇家护卫队,又遇到了关口士兵排查,为了过这道关口,他只好大打出手,将守关口的士兵杀害了大部分,才顺利...
    文欣728阅读 552评论 0 2