如何在 Windows10 環境下部署配置一鍵啓動的 Homestead + Laravel +vue + PM2 項目

如何在 windows10 環境下部署配置一鍵啓動的 Homestead + Laravel +vue + PM2 項目

我在homestead 內要啓動node寫的項目,我使用的是pm2 去運行和管理node 項目。使用pm2 的好處是方便調試和部署項目。不過homestead 裏面並無內置 pm2 功能,我只能本身安裝.前端

進入homestead 虛擬機(用 vagrant ssh 或者 使用shell工具 我推薦使用 finalshell 是一個很強大的免費工具)vue

安裝pm2node

npm install pm2@latest -g

這個時候會有個報錯shell

npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/pm2
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/pm2/node_modules
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! path /usr/local/lib/node_modules/pm2
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules/pm2'
npm ERR!  { [Error: EACCES: permission denied, access '/usr/local/lib/node_modules/pm2']
npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, access \'/usr/local/lib/node_modules/pm2\'',
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules/pm2' }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2018-08-30T01_48_01_688Z-debug.log

由於homestead 默認登錄的是 vagrant 用戶 。因此運行npm install pm2@latest -g 會報沒有權限的錯誤。npm

要切換到 root 用戶 或者 使用windows

sudo npm install pm2@latest

安裝。bash

我採用的是切換root 用戶,可是homestead沒有給root設置密碼,因此咱們要先設置下root 用戶的密碼ssh

sudo passwd root

而後用新設置的密碼登錄 root 用戶,安裝PM2.工具

安裝完成後, 初始化pm2this

pm2 init

會生成配置文件 ecosystem.config.js ,設置好項目配置文件.

啓動項目

pm2 start ecosystem.config.js

到這時候就能夠訪問node項目了。

不過有問題每次啓動homestead的時候都要到虛擬機裏面啓動pm2 仍是很麻煩還好 homestead 有相關的解決方案,在 homestead 目錄下有個 after.sh 的 shell 腳本就是用來啓動 homestead 後執行相關 shell 操做的。

我在裏面加內容

#!/usr/bin/env bash
# If you would like to do some extra provisioning you may
# add any commands you wish to this file and they will
# be run after the Homestead machine is provisioned.

# 切換到root 用戶
su root -c "root"

# 啓動微課堂後臺前端項目
npm install pm2@latest -g

# 啓動微課堂後臺前端項目
pm2 start ~/onlineducation.config.js

重啓 homestead 會報錯

homestead: su: must be run from a terminal
    homestead: npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/pm2
    homestead: npm WARN
    homestead: checkPermissions Missing write access to /usr/local/lib/node_modules/pm2/node_modules
    homestead: npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
    homestead: npm ERR! path /usr/local/lib/node_modules/pm2
    homestead: npm ERR! code EACCES
    homestead: npm ERR! errno
    homestead:  -13
    homestead: npm
    homestead: ERR!
    homestead:  syscall
    homestead:  access
    homestead: npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules/pm2'
    homestead: npm ERR!
    homestead:   { [Error: EACCES: permission denied, access '/usr/local/lib/node_modules/pm2']
    homestead: npm ERR!
    homestead:    stack:
    homestead: npm
    homestead: ERR!    'Error: EACCES: permission denied, access \'/usr/local/lib/node_modules/pm2\'',
    homestead: npm
    homestead:  ERR!
    homestead:    errno: -13,
    homestead: npm ERR!
    homestead:    code: 'EACCES',
    homestead: npm ERR!   syscall: 'access',
    homestead: npm ERR!   path: '/usr/local/lib/node_modules/pm2' }
    homestead: npm
    homestead: ERR!
    homestead:
    homestead: npm ERR! The operation was rejected by your operating system.
    homestead: npm ERR! It is likely you do not have the permissions to access this file as the current user
    homestead: npm ERR!
    homestead: npm ERR!
    homestead:  If you believe this might be a permissions issue, please double-check the
    homestead: npm ERR! permissions of the file and its containing directories, or try running
    homestead: npm
    homestead: ERR!
    homestead:  the command again as root/Administrator (though this is not recommended).
    homestead: npm
    homestead: ERR! A complete log of this run can be found in:
    homestead: npm ERR!     /home/vagrant/.npm/_logs/2018-08-30T01_35_38_735Z-debug.log
    homestead: [PM2] Spawning PM2 daemon with pm2_home=/home/vagrant/.pm2

su 命令只能在終端運行,看來只能用其餘方法切換用戶了。

修改 after.sh 腳本 使用 expect改爲可遠程執行的腳本

#!/usr/bin/env bash
# If you would like to do some extra provisioning you may
# add any commands you wish to this file and they will
# be run after the Homestead machine is provisioned.

# 安裝 expect
sudo snap install expect

# 安裝 pm2
sudo npm install pm2@latest -g

# 切換到root 用戶
expect -c "
spawn su - root
expect \":\"
send \"root\r\"
expect \":\"
send \"cd \/home\/vagrant\r\"
expect \":\"
send \"pm2 start onlineducation.config.js\r\"
expect \":\"
interact
"

若是 expect 不能安裝,能夠進入虛擬機先安裝好,再重啓 homestead 就能夠了。

相關文章
相關標籤/搜索