如何在 Windows10 環境下部署配置一鍵啟動的 Homestead + Laravel +vue + PM2 專案

snowlyg發表於2018-08-31

我在homestead 內要啟動node寫的專案,我使用的是pm2 去執行和管理node 專案。使用pm2 的好處是方便除錯和部署專案。不過homestead 裡面並沒有內建 pm2 功能,我只能自己安裝.

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

安裝pm2

npm install pm2@latest -g

這個時候會有個報錯

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 會報沒有許可權的錯誤。

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

sudo npm install pm2@latest

安裝。

我採用的是切換root 使用者,但是homestead沒有給root設定密碼,所以我們要先設定下root 使用者的密碼

sudo passwd root 

然後用新設定的密碼登陸 root 使用者,安裝PM2.

安裝完成後, 初始化pm2

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 就可以了。

在 windows10 系統中安裝 homestead 本地開發環境

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章