nodejs項目部署到騰訊雲詳細步驟

一、nodejs 安裝

一、登陸服務器html

mac下首先打開終端,而後輸入sudo su - 回車進入根目錄
而後輸入:ssh -p 端口號 服務器用戶名@ip (例如ssh -p 22 userkunyu@119.29.37.XX
)回車,到這會讓你輸入yes或者no來確認是否鏈接,輸入yes回車

而後輸入在服務器上的用戶密碼回車

到此進入的是你在服務器上的帳戶的目錄,即爲鏈接成功
複製代碼

先更新一下(第一次使用服務器先更新下)前端

yum update -y
複製代碼

二、下載nodejsnode

從nodejs官網獲取下載對應操做系統的鏈接react

wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.xz
複製代碼

wget命令下載Node.js安裝包。 下載完成後能夠看到服務器目錄下有了nodejs的安裝包。linux

image

解壓該安裝包nginx

tar xvf node-v8.10.0-linux-x64.tar.xz
複製代碼

在服務器目錄能夠看到解壓後的文件mongodb

image

node默認安裝在/root/node-v8.10.0-linux-x64/目錄下, 將node安裝到其餘目錄(如:/opt/node/)下,shell

拓展:數據庫

linux centos 各目錄文件解釋npm

Linux 目錄結構

mkdir -p /opt/node/
mv /root/node-v8.10.0-linux-x64/* /opt/node/
複製代碼

image

刪除/root/node-v8.10.0-linux-x64/安裝包

rm -rf /root/node-v8.10.0-linux-x64/
複製代碼

該安裝包是編譯好的文件,解壓以後,在bin文件夾中就已存在node和npm,無需重複編譯。

3.建立軟連接,使node和npm命令全局有效。經過建立軟連接的方法,使得在任意目錄下均可以直接使用node和npm命令:

ln -s /opt/node/bin/node /usr/local/bin/node
ln -s /opt/node/bin/npm /usr/local/bin/npm

複製代碼

四、安裝cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org 
複製代碼

配置環境變量,全局命令

ln -s /opt/node/bin/cnpm /usr/local/bin/cnpm
複製代碼

這時 輸入 node -v 就會看到版本信息了

二、安裝pm2

pm2 是一個帶有負載均衡功能的Node應用的進程管理器.當你要把你的獨立代碼利用所有的服務器上的全部CPU,並保證進程永遠都活着,0秒的重載。

咱們在本地運行node項目,只是node serve.js 就能夠跑起來了,可是若是關掉,項目就不能運行了,pm2解決了這一問題,使進程常駐。

安裝pm2

npm install pm2@latest -g
複製代碼

建立軟連接,使pm2命令全局有效

ln -s /opt/node/bin/pm2 /usr/local/bin/pm2
複製代碼

輸入 pm2 -v 能夠看到版本信息了

三、安裝mongodb

一、下載mongodb

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.3.tgz
複製代碼

二、解壓下載的包

tar -zxvf mongodb-linux-x86_64-3.6.3.tgz
複製代碼

三、重命名mongodb-linux-x86_64-3.6.3

mv mongodb-linux-x86_64-3.6.3 mongodb3.6.3
複製代碼

四、在/usr/local下建立mongodb目錄

mkdir -p mongodb
複製代碼

五、將 mongodb3.6.3移動到 /usr/local/mongodb 目錄中:

mv /mongodb3.6.3/ /usr/local/mongodb
複製代碼

六、在 /usr/local/mongodb/mongodb3.6.3/ 目錄中建立一個存放數據與日誌的目錄:

mkdir -p data/koa2-blog/db
mkdir -p data/koa2-blog/log
複製代碼

七、在 /usr/local/mongodb/mongodb3.6.3/conf 目錄中建立配置文件 mongodb.conf:

mkdir -p conf
vim mongodb.conf
複製代碼

mongodb.conf

# 設置端口號(默認的端口號是 27017)
port = 27018

#遠程鏈接要指定ip 否則沒法鏈接。0.0.0.0不限制ip訪問,並開啓對應端口
bind_ip=0.0.0.0

# 設置數據文件的存放目錄
dbpath = /usr/local/mongodb/mongodb3.6.3/data/koa2-blog/db

# 設置日誌文件的存放目錄及其日誌文件名
logpath = /usr/local/mongodb/mongodb3.6.3/data/koa2-blog2/log/mongodb.log

# 設置每一個數據庫將被保存在一個單獨的目錄
directoryperdb = true

# 設置爲以守護進程的方式運行,即在後臺運行
fork = true

# 日誌追加
logappend=true

# 訪問權限
auth=false

複製代碼

參數解釋:

參數解釋: 
--dbpath 數據庫路徑(數據文件)
--logpath 日誌文件路徑
--master 指定爲主機器
--slave 指定爲從機器
--source 指定主機器的IP地址
--pologSize 指定日誌文件大小不超過64M.由於resync是很是操做量大且耗時,最好經過設置一個足夠大的oplogSize來避免resync(默認的 oplog大小是空閒磁盤大小的5%)。
--logappend 日誌文件末尾添加,即便用追加的方式寫日誌
--journal 啓用日誌
--port 啓用端口號
--fork 在後臺運行
--only 指定只複製哪個數據庫
--slavedelay 指從複製檢測的時間間隔
--auth 是否須要驗證權限登陸(用戶名和密碼)
--syncdelay 數據寫入硬盤的時間(秒),0是不等待,直接寫入
--notablescan 不容許表掃描
--maxConns 最大的併發鏈接數,默認2000  
--pidfilepath 指定進程文件,不指定則不產生進程文件
--bind_ip 綁定IP,綁定後只能綁定的IP訪問服務
複製代碼

八、自定義服務

在/lib/systemd/system/目錄下新建mongodb.service文件,內容以下

[Unit]
     Description=mongodb
     After=network.target remote-fs.target nss-lookup.target
[Service]
     Type=forking
     ExecStart=/usr/local/mongodb/mongodb3.6.3/bin/mongod -f /usr/local/mongodb/mongodb3.6.3/conf/mongodb.conf
     ExecReload=/bin/kill -s HUP $MAINPID
     ExecStop=/usr/local/mongodb/mongodb3.6.3/bin/mongod --shutdown -f /usr/local/mongodb/mongodb3.6.3/conf/mongodb.conf
     PrivateTmp=true
[Install]
    WantedBy=multi-user.target

複製代碼

九、設置權限

chmod 754 mongodb.service 
複製代碼

十、啓動關閉服務,設置開機啓動

#啓動服務 
systemctl start mongodb.service   
#關閉服務 
systemctl stop mongodb.service   
#開機啓動 
systemctl enable mongodb.service 
# 查看狀態
systemctl status mongodb.service
# 若是mongodb.service配置錯誤 在更改後記得從新加載文件
systemctl daemon-reload
複製代碼

十一、設置mongo,mongod命令爲全局有效

ln -s /usr/local/mongodb/mongodb3.6.3/bin/mongo  /usr/local/bin/mongo
ln -s /usr/local/mongodb/mongodb3.6.3/bin/mongod  /usr/local/bin/mongod
複製代碼

鏈接數據庫成功

[root@VM_0_11_centos ~]# mongo --port=27018
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27018/
MongoDB server version: 3.6.3
Server has startup warnings: 
2018-03-27T13:14:24.748+0800 I STORAGE  [initandlisten] 
2018-03-27T13:14:24.748+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-03-27T13:14:24.748+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] 
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] 
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] 
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-03-27T13:14:27.801+0800 I CONTROL  [initandlisten]
>
複製代碼

十二、設置數據庫訪問權限

步驟一:進入admin表

use admin
複製代碼

步驟二:建立一個超級管理帳戶

db.createUser({user:"admin",pwd:"wz123",roles:[{role:"userAdminAnyDatabase", db: "admin"}]})
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}

複製代碼

步驟三:開啓權限驗證 在/usr/local/mongodb/mongodb3.6.3/conf/mongodb.conf中設置

# 訪問權限
auth=true
複製代碼

重啓mongodb服務後再鏈接數據庫,show users 查看全部用戶,能夠看到出錯了,須要驗證管理員的權限。

[root@VM_0_11_centos ~]# mongo --port=27018
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27018/
MongoDB server version: 3.6.3
> use admin
switched to db admin
> show users
2018-03-27T14:10:38.323+0800 E QUERY    [thread1] Error: not authorized on admin to execute command { usersInfo: 1.0, $db: "admin" } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1686:1
shellHelper.show@src/mongo/shell/utils.js:799:9
shellHelper@src/mongo/shell/utils.js:706:15
@(shellhelp2):1:1
> 
複製代碼

權限驗證後,能夠查看用戶users了

> db.auth('admin','wz123')
1
> show users
{
	"_id" : "admin.admin",
	"user" : "admin",
	"db" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}

複製代碼

這裏對admin 建立的 admin 用戶,僅僅只有特權去管理用戶和角色, 若是你試圖執行其餘任何操做,例如在test數據庫中的foo集合中去讀數據,mongodb將返回錯誤。

你建立用戶的數據庫(這裏就是test數據庫)是該用戶認證數據庫。儘管用戶認證是這個數據庫,用戶依然能夠有其餘數據庫的角色。即用戶認證數據庫不限制用戶權限。

權限角色有如下幾種:

內建的角色 
數據庫用戶角色:read、readWrite; 
數據庫管理角色:dbAdmin、dbOwner、userAdmin; 
集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
備份恢復角色:backup、restore; 
全部數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 
超級用戶角色:root // 這裏還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase) 
內部角色:__system 
角色說明: 
Read:容許用戶讀取指定數據庫 
readWrite:容許用戶讀寫指定數據庫 
dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile 
userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶 
clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。 
readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限 
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限 
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限 
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。 
root:只在admin數據庫中可用。超級帳號,超級權限
複製代碼

步驟四:建立數據庫,並給此數據庫設置訪問權限

給數據庫koa2 設置讀寫的權限

[root@VM_0_11_centos ~]# mongo --port=27018
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27018/
MongoDB server version: 3.6.3
> use admin
switched to db admin
> db.auth('admin','wz123')
1
> use koa2
switched to db koa2
> db.createUser({user:'wz',pwd:'wz123',roles:[{role:'readWrite',db:'koa2'}]})
Successfully added user: {
	"user" : "wz",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "koa2"
		}
	]
}
> 
複製代碼

步驟五

寫測試數據,Robo 3T鏈接數據庫,向koa2數據庫中寫入一個test 集合

db.test.insert({title:'測試',name:'大王',age:12})
複製代碼

打開RoBo 3T鏈接數據庫,能夠看到集合collection有test

image

四、安裝Nginx

yum install nginx
複製代碼

修改/etc/nginx下的配置nginx.conf 刪除全部寫入

## 工做模式與鏈接數上限
events {
    ## 單個進程的最大鏈接數
    worker_connections 1024;
}

## 設置http 服務器
http {
    include /etc/nginx/conf.d/*.conf;
}

複製代碼

在/etc/nginx/conf.d 下新建 koa2-blog-8081.conf

server{
    listen 80;
    server_name  118.25.6.XXX;
    ## 配置前端文件
    location / {
        root /home/koa2-blog/build/;
        index  index.html index.htm;
    }
    ## 配置後端接口
     location /api {
           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_set_header Connection "";
           proxy_set_header Cookie $http_cookie;
           proxy_pass http://127.0.0.1:8081;
         }
}

複製代碼

以後重啓Nginx

systemctl restart nginx.service
複製代碼

命令:

#啓動nginx服務
systemctl start nginx.service
#中止nginx服務
systemctl stop nginx.service
#重啓nginx服務
systemctl restart nginx.service
#從新讀取nginx配置(這個最經常使用, 不用中止nginx服務就能使修改的配置生效)
systemctl reload nginx.service
複製代碼

nginx.conf全解析

五、項目上傳到服務器

後端傳到/home/koa2-blog/目錄下 前端react項目也build後,傳到此目錄下

--koa2-blog
    --build
    --server
    --node_modules
    --package.json
複製代碼

pm2運行server.js

pm2經常使用命令

pm2 start server.js
複製代碼

在瀏覽器中打開前端項目,就開看到網站能夠訪問了

參考文章

相關文章
相關標籤/搜索