pm2 ubuntu multipass 輕量虛擬機(jī)
1、安裝multipass 虛擬機(jī),下載地址:

2、安裝后查看版本
multipass version
3、新建容器
multipass launch --name dg
//高級(jí) 指定參數(shù)
multipass launch -n dg -c 2 -m 4G -d 10G
自定義配置創(chuàng)建可以參考如下方式:
-n, –name: 名稱
-c, –cpus: cpu 核心數(shù), 默認(rèn): 1
-m, –mem: 內(nèi)存大小, 默認(rèn): 1G
-d, –disk: 硬盤大小, 默認(rèn): 5G
4、下載最新的鏡像
multipass exec dg -- lsb_release -d
5、查看虛機(jī)列表
multipass list

6、查看虛機(jī)詳細(xì)信息
multipass info --all

7、進(jìn)入虛擬機(jī)
multipass shell dg
8、重啟、暫停虛機(jī)
# 暫停
$ multipass stop dg
# 啟動(dòng)
$ multipass start dg
9、刪除/釋放虛擬機(jī)
# 刪除
$ multipass delete dg
# 釋放
$ multipass purge dg
10、配置自動(dòng)化
既要保持開發(fā)環(huán)境和線上環(huán)境一致,又要節(jié)省部署時(shí)間。我們可以使用 --cloud-init 對(duì)容器進(jìn)行初始化配置:
$ multipass launch --name ubuntu --cloud-init config.yaml
config.yaml 是初始化配置文件,內(nèi)容如下:
#cloud-config
runcmd:
- curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
- sudo apt-get install -y nodejs
- wget https://releases.leanapp.cn/leancloud/lean-cli/releases/download/v0.21.0/lean-cli-x64.deb
- sudo dpkg -i lean-cli-x64.deb
掛載宿主機(jī)目錄
// 在window 主機(jī)上用管理員角色運(yùn)行cmd
multipass set local.privileged-mounts=Yes
//指定目錄www
multipass mount D:\multipassData next:ubuntu/www
// 卸載數(shù)據(jù)卷
multipass umount next
//文件傳輸
multipass transfer 主機(jī)文件 容器名: 容器目錄
multipass transfer hello.txt next:/home/ubuntu/bash
沒(méi)有權(quán)限會(huì)報(bào)如下錯(cuò)誤

安裝nodeJS、nvm、 pm2
1、安裝nvm
在安裝nvm之前先安裝git
sudo apt-get install git
#拉取nvm項(xiàng)目
git clone https://gitee.com/Annlix/nvm-sh_nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
#執(zhí)行安裝命令
./install.sh
#安裝之后輸入nvm還是提示沒(méi)有這時(shí)候需要執(zhí)行以下命令或者關(guān)閉終端重新開啟
source ./nvm.sh
#獲取node版本
nvm ls-remote

#安裝node
nvm install v16.13.1
#安裝pm2
sudo npm i -g pm2
or 安裝最新發(fā)行版
nvm install --lts


開啟服務(wù)
pm2 start app.js
pm2 list
pm2 dash


映射虛機(jī)服務(wù)到本機(jī)ip,使得局域網(wǎng)主機(jī)可以訪問(wèn)
管理員賬號(hào)打開cmd
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=4202 connectaddress=172.18.207.164 connectport=1337
查看 本機(jī)映射關(guān)系
netsh interface portproxy show all

查看pm2 啟動(dòng)的node 服務(wù)端口號(hào)
方式1
lsof -i -P | grep node
方式2
ss -tnlp | grep node
根據(jù)端口號(hào)查看pid
lsof -i :1337

更多pm2操作,查看https://blog.csdn.net/uikoo9/article/details/79018750
ssh 配置
為了使終端操作更加便利,我們配置ssh 秘鑰登錄虛擬機(jī),配置如下
1、創(chuàng)建公鑰
使用xshell 創(chuàng)建新的連接



生成秘鑰,保存在虛機(jī)中,生成密鑰時(shí)不設(shè)置訪問(wèn)密碼

公鑰未放置在服務(wù)器上報(bào)錯(cuò)如下

2、編輯虛機(jī)文件
vim操作文檔 https://www.51sjk.com/b150b210453/
vim ~/.ssh/authorized_keys
粘貼公鑰

// 使用管理員賬戶編輯, sudo -i
vi /etc/ssh/sshd_config
添加如下配置
#RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
#PermitRootLogin yes
#PasswordAuthentication no #此行會(huì)關(guān)閉密碼登錄功能,請(qǐng)確認(rèn)密鑰登陸功能設(shè)置好后再添加,后來(lái)部署發(fā)現(xiàn),在ssh 鏈接時(shí)加#號(hào)注釋掉的這三個(gè)配置項(xiàng)還會(huì)報(bào)錯(cuò),所以需要注釋掉。
編輯配置文件

3、登錄成功
image.png
拓展:https://blog.csdn.net/xinyuezitang/article/details/123936253
pm2 deploy ecosystem.config.js
使用pm2構(gòu)建next.js 項(xiàng)目。
需要處理的是,
1、本地公鑰放置服務(wù)器,效果:ssh可以直接訪問(wèn)服務(wù)器
2、服務(wù)器生成公私鑰,公鑰放置到遠(yuǎn)程倉(cāng)庫(kù)使得服務(wù)器可以直接拉取倉(cāng)庫(kù)代碼
具體操作見(jiàn)文檔https://blog.csdn.net/weixin_46246496/article/details/125990261
3、服務(wù)器安裝 git ,nvm ,node,npm ,pm2
4、創(chuàng)建pm2快捷方式
//查找應(yīng)用
whereis node
//創(chuàng)建快捷方式
sudo ln -s [path] /usr/bin/node
缺失的相關(guān)報(bào)錯(cuò)
image.png

服務(wù)器開啟ssh 服務(wù)
首先更新源
sudo apt-get update
安裝 ssh 服務(wù)
sudo apt-get install openssh-server
檢測(cè)是否已啟動(dòng)
ps -e | grep ssh
看到有 ssh 字樣,說(shuō)明已啟動(dòng),如果沒(méi)有就手動(dòng)啟動(dòng)
/etc/init.d/ssh start
配置 ssh-server,配置文件位于 /etc/ssh/sshd_config,默認(rèn)端口為 22,為了安全,一般自定義為其他端口,然后重啟
sudo /etc/init.d/ssh resart
在 windows 中,使用 putty 或者 SSH Secure Shell 等登錄虛擬機(jī)
也可以在shell 中使用telnet ip:port 進(jìn)行驗(yàn)證
備注 ,遇到的問(wèn)題
1、項(xiàng)目目錄未在服務(wù)器創(chuàng)建,首次運(yùn)行,需要克隆項(xiàng)目到相應(yīng)目錄, 設(shè)置目錄權(quán)限 777,
sudo chmod -R 777 某一目錄 //此例為wangxia

2、服務(wù)器端使用ssh 地址正常拉下代碼則公鑰配置生效
3、需要設(shè)置的pm2 deploy文件,由于是虛擬機(jī)服務(wù)器,所以ip暴露也是可以的。key對(duì)應(yīng)的就是你的本機(jī)私鑰文件。

4、期間設(shè)置過(guò)服務(wù)器的git global name/email,不知道是否是部署項(xiàng)目所必須的
5、開啟了windows linux子系統(tǒng)(必須?部署的時(shí)候到是提示沒(méi)有wsl 的報(bào)錯(cuò)了。。。)
附上部署成功截圖

6、構(gòu)建部署需在gitbash 里面操作,(linux文件目錄?)

