nodejs專案部署到騰訊雲詳細步驟

名字不能缺發表於2018-03-28

1、nodejs 安裝

1、登入伺服器

mac下首先開啟終端,然後輸入sudo su - 回車進入根目錄
然後輸入:ssh -p 埠號 伺服器使用者名稱@ip (例如ssh -p 22 userkunyu@119.29.37.XX
)回車,到這會讓你輸入yes或者no來確認是否連線,輸入yes回車

然後輸入在伺服器上的使用者密碼回車

到此進入的是你在伺服器上的賬戶的目錄,即為連線成功
複製程式碼

先更新一下(第一次使用伺服器先更新下)

yum update -y
複製程式碼

2、下載nodejs

從nodejs官網獲取下載對應作業系統的連線

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

wget命令下載Node.js安裝包。 下載完成後可以看到伺服器目錄下有了nodejs的安裝包。

image

解壓該安裝包

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

在伺服器目錄可以看到解壓後的檔案

image

node預設安裝在/root/node-v8.10.0-linux-x64/目錄下, 將node安裝到其他目錄(如:/opt/node/)下,

擴充:

linux centos 各目錄檔案解釋

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

複製程式碼

4、安裝cnpm

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

配置環境變數,全域性命令

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

這時 輸入 node -v 就會看到版本資訊了

2、安裝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 可以看到版本資訊了

3、安裝mongodb

1、下載mongodb

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

2、解壓下載的包

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

3、重新命名mongodb-linux-x86_64-3.6.3

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

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

mkdir -p mongodb
複製程式碼

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

mv /mongodb3.6.3/ /usr/local/mongodb
複製程式碼

6、在 /usr/local/mongodb/mongodb3.6.3/ 目錄中建立一個存放資料與日誌的目錄:

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

7、在 /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訪問服務
複製程式碼

8、自定義服務

在/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

複製程式碼

9、設定許可權

chmod 754 mongodb.service 
複製程式碼

10、啟動關閉服務,設定開機啟動

#啟動服務 
systemctl start mongodb.service   
#關閉服務   
systemctl stop mongodb.service   
#開機啟動   
systemctl enable mongodb.service 
# 檢視狀態
systemctl status mongodb.service
# 如果mongodb.service配置錯誤 在更改後記得重新載入檔案
systemctl daemon-reload
複製程式碼

11、設定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]
>
複製程式碼

12、設定資料庫訪問許可權

步驟一:進入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

4、安裝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全解析

5、專案上傳到伺服器

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

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

pm2執行server.js

pm2常用命令

pm2 start server.js
複製程式碼

在瀏覽器中開啟前端專案,就開看到網站可以訪問了

參考文章

相關文章