centOS7下 安裝nodejs+nginx+mongodb+pm2部署vue項目


一、購買服務器並遠程連接

1.購買服務器和域名

可以選擇阿里雲或者是其他的廠商的服務器。然后會獲得服務器ip地址,用戶名和密碼。

購買域名,將域名綁定到ip地址上。

2.下載xshell,winscp

xshell和winscp都是可以用來操控服務器的,比如上傳上傳文件,修改文件權限等。

一個是有圖形化的操作,一個是用代碼操控。

我兩個都下了,因為我怕xsehll沒能操控好的地方,用可視化圖形來操控。

連接服務器

打開xshell

 

 二、安裝node

參考這篇文章:https://blog.csdn.net/q3585914/article/details/75306447

1.首先切換到/usr/local/src 使用wget下載node文件

cd /usr/local/src

wget https://nodejs.org/dist/v6.11.1/node-v6.11.1-linux-x64.tar.xz

 

如果不知道wget是什么,那就去node官網直接下載tar.xz后綴的文件到自己電腦。

node官網所有版本的下載地址:https://nodejs.org/en/download/releases/

 

打開winscp連接服務器,連接方式和xshell差不多。

找到root文件夾。把下載的tar.xz文件上傳上去。注意要下linux版本的。

2.解壓到當前文件夾

打開xsehll我們可以看到是一個撇的路徑這就是已經在root目錄下了。

注意:如果不是一個撇,通過直接cd回車就可以回到這個root目錄下。

不要輸入成cd /  變成這樣 。這個就不是在root目錄下了

 

解壓剛才上傳到服務端的文件:

tar xvf node-v6.11.1-linux-x64.tar.xz

3.創建軟鏈接,設置全局環境便令使node和npm命令全局有效

通過創建軟鏈接的方法,使得在任意目錄下都可以直接使用node和npm命令:

ln -s /usr/local/src/node-v6.11.1-linux-x64/bin/node /usr/local/bin/node

ln -s /usr/local/src/node-v6.11.1-linux-x64/bin/npm /usr/local/bin/npm

node -v 查看node版本檢測是否安裝成功。

如果報如下錯誤:

bash node :command not found

那就需要設置全局環境變量:修改/etc/profile文件使其永久性生效,並對所有系統用戶生效。

 vi /etc/profile

  

按鍵盤j字母移動到最下面一行加上:

export NODE_HOME=/usr/local/src/node-v10.15.0-linux-x64/bin

export PATH=$NODE_HOME:$PATH

然后保存退出,重啟,之后node、npm就配置好了

 如果不會使用vi命令編輯文件,通過winscp將文件下載到本地,然后使用sublime,vs code等編輯器打開,不要直接記事本打開,編輯保存,上傳到服務端。

不要使用記事本直接打開,也不要只用winscp提供的編輯器打開編輯,會造成一些錯誤,下面會說到。

 

三、安裝mongodb

1.安裝

到官網下載,見官網有安裝說明。https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

選擇社區版,以及選擇合適的linux版本。我的是centOS所以選擇了RedHat

 

安裝MongoDB

sudo yum install -y mongodb-org

取消自動升級

新版本出來yum會自動升級,添加以下代碼到/etc/yum.repos.d/mongodb-org-3.4.repo文件中

exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools

下面是mongdb默認數據庫文件以及日志的指令位置

  • /var/lib/mongo (the data directory)
  • /var/log/mongodb (the log directory)

開啟mongodb

sudo service mongod start

關閉MongoDB

sudo service mongod stop

重啟MongoDB.

sudo service mongod restart

四、配置mongoDB

創建用戶

否則不可以可以使用如mongoimport上傳數據等一些操作。

原因見:https://www.jianshu.com/p/1404b32432d0

創建一個頂級用戶,用於存放所有的用戶。

開啟mongodb服務:

sudo service mongod start

開啟數據庫:

mongo

 

創建admin數據庫:

use admin 

 

建立一個超級用戶admin,命令如下:  
db.createUser( 

  { 

    user: "admin", 

    pwd: "admin", 

    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] 

  } );

 

建立針對某個數據庫的用戶

admin雖然是超級管理員,但是對具體的數據庫,還是需要有對應的用戶,用戶是和數據庫走的,因此還需要建立ta數據庫的用戶。

use ta

//使用數據庫,需要注意的是在建立ta數據庫用戶的時候一定要先啟用ta數據庫,否則會出現問題。

 

db.createUser({user:'test1',pwd:'test1',roles:[{role:'readWrite',db:'ymall'}]})

 

 

開啟數據庫權限:

編輯配置文件: vi /etc/mongod.conf

添加以下:

security:

   authorization: enabled

 

保存並重新啟動。

如下錯誤:是因為我們添加security:authorization: enabled的時候格式沒有寫對,多試試格式。

ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)

重啟mongod:

systemctl restart mongod.service

啟用 db.auth(用戶名,密碼),認證登錄,認證登錄使用數據庫:

db.auth('admin', 'admin123')  返回1表示成功

再次執行show dbs

啟用ta數據庫,查看該數據庫集合:

 

執行 db.auth('test1','test1')  然后再對ta數據庫進行相應的操作。 

 

 

 將winscp上傳到服務器中的數據導入到數據庫中

mongoimport --host=127.0.0.1 --port 27017 -u 用戶名 -p 密碼 -d ymall -c users --file /home/web-shop/models/mall-users

 

四、安裝nginx

下載:  yum install nginx

開啟nginx服務:systemctl start nginx

要關閉防火牆

查看防火牆狀態    firewall-cmd --state

停止firewall    systemctl stop firewalld.service

禁止firewall開機啟動     systemctl disable firewalld.service

五、pm2

npm install -g pm2

 

查詢pm2的安裝路徑 顯示是: /usr/local/bin/pm2

whereis pm2

 

為了可以在任何目錄都可以使用pm2命令,我們將此文件夾加入環境變量

ln  -s /usr/local/bin/pm2 /usr/local/bin

六、部署自己代碼

參考鏈接:

https://blog.csdn.net/u014054437/article/details/79981307

https://segmentfault.com/a/1190000012186563

上傳項目文件夾:

我選擇了服務器中home目錄下將自己之前編寫的node服務端代碼server文件j夾,以及前端的packages.json一起上傳。

server文件夾重命名為vue-project。

上傳vue文件

npm run build后會生成的dist文件夾,將里面所有文件都拷貝到vue-project下的public目錄。

為什么拷貝到public文件夾下呢?

因為自己node使用express框架,並用express-generator生成了項目結構。其中app.js設置了express解析的靜態資源路徑:

app.use(express.static(path.join(__dirname, 'public')));

也可以是直接將dist文件夾直接上傳vue-project。修改app.js

app.use(express.static(path.join(__dirname, 'dist')));

 

npm install 安裝依賴包

開啟node服務 node /bin/www,或者是pm2 /bin/www

修改nginx配置

修改配置文件:vi /etc/nginx/nginx.conf

在http{}里添加一個server{}

    server {
        listen 80;
        server_name aa.xxxx.com; //自己的一級或者是二級域名
        location / {
 root /home/vue-project/public; //app.js中配置的靜態資源路徑文件夾
 index index.html index.htm; //主頁入口文件
            proxy_set_header   Host      $http_host;
            proxy_pass http://127.0.0.1:5000; //開啟的node項目的端口號
            proxy_redirect     off;
            proxy_set_header   X-Real-IP       $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

 

保存重啟nginx

systemctl restart nginx.service

關於nginx的報錯

檢查修改的配置文件是否有錯:nginx -t -c /etc/nginx/nginx.conf

報錯:nginx: [emerg] unknown directive "#" in  nginx/conf/nginx.conf:5

 

【原因】:
conf文件被記事本編輯過,保存了含BOM頭的文件,(查閱資料所得:類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於一般的文件,這樣並不會產生什么麻煩。)
 
 
【解決】:
 
用其他編輯器另存為其他編碼再保存上傳的也解決不了。
最后還是新建了文件,將nginx.conf將內容復制過來,然后將服務端的刪掉,本地再上傳上去,解決。
 
 

原文鏈接:

https://blog.csdn.net/dafei4/article/details/86562399

https://www.cnblogs.com/djlele/p/6991683.html

https://www.cnblogs.com/jstarseven/p/4683679.html

 

訪問網站

保證mongdb,nginx,node開啟,防火牆關閉。

輸入域名就可以訪問了。

多頁面的配置

自己也寫了一個多頁面,不過使用了xtpl作為模板。

所有的步驟都是一樣的,僅在niginx中添加配置的server的時候,有點不同local中不用配置root和 index屬性就可以訪問到了。不過自己也沒有深究,先占坑吧。

    server {
        listen 80;
        server_name xxxx.com www.xxxx.com;
        location / {
            proxy_set_header   Host      $http_host;
            proxy_pass http://127.0.0.1:3000;
            proxy_redirect     off;
            proxy_set_header   X-Real-IP       $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

最后

自己也是小白,里面有錯誤之處還請指正。

mongdb添加用戶開啟權限訪問的部分的內容是自己以前看到,然后保存在word里沒有記錄原鏈接。還是向原作者表示感謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM