编写好deploy.sh文件
执行代码
npm run deploy test
或npm run deploy publish
为正式和测试两个环境
#!/usr/bin/env bash
# 任意命令出错时终止运行
set -e
RED="\033[0;31m"
YELLOW="\033[1;33m"
GREEN="\033[0;32m"
RESET="\033[0m"
now=$(date +%s)
//获取当前路径(因为放在build文件夹下所以加上/../)
base=$( cd "$(dirname "$0" /../)" ; pwd -P )
echo "开始远程部署"
ENV_TYPE=$1
if [ "$ENV_TYPE" = "publish" ]; then
echo "环境为: publish"
elif [ "$ENV_TYPE" = "test" ]; then
echo "环境为: test"
else
echo "未指定环境或不支持的环境 $ENV_TYPE, 目前支持的环境有:\n\tpublish\n\ttest\n"
exit 1
fi
echo "打包dist"
rm -rf $base/deploy/$ENV_TYPE
mkdir -p $base/deploy/$ENV_TYPE
tar -zcvf $base/deploy/$ENV_TYPE/$now.tar.gz -C $base/dist .
echo "打包完成: $base/deploy/$ENV_TYPE/$now.tar.gz"
echo "需要进行远程部署吗? (Y/n)"
read answer
if [ "$answer" != "" ] && [ "$answer" != "Y" ] && [ "$answer" != "y" ] ;then
echo "本地打包完成!"
exit 0
fi
echo "进行远程部署"
server_host="root@服务器ip"
server_port=端口默认22
server_dist="服务器部署路径"
project_name="smart-sanitation" #文件夹名
if [ "$ENV_TYPE" = "test" ]; then
project_name="smart-sanitation-test"
fi
# 指定当前目录 请保证处于此项目根目录
ssh -p $server_port $server_host "mkdir -p $server_dist/$project_name/"
echo "[$ENV_TYPE] 上传资源"
scp -P $server_port $base/deploy/$ENV_TYPE/$now.tar.gz $server_host:$server_dist/$project_name/
echo "[$ENV_TYPE] 上传资源成功, 开始部署"
ssh -p $server_port $server_host "tar -xzf $server_dist/$project_name/$now.tar.gz -C $server_dist/$project_name"
rm -rf $base/deploy/$ENV_TYPE
echo "部署成功!"
如果要手动输入密码可忽略小面
免密登录注意事项
1.本机生成公钥放在服务器的/root/.ssh/authorized_keys
里面
2.如果还不能免密登录需要设置文件夹权限
- 文件夹root 设置为 700
chmod 600 /root
- 文件夹.ssh 设置为 700
chmod 600 /root/.ssh
- 文件authorized_keys 设置为 600
chmod 600 /root/.ssh/authorized_keys
3.查看文件夹所属用户 如果所属用户不是root
- 更改文件拥有者 (chown )
- 改变文件的用户组用命令 ( chgrp )
- 同时修改用户和组 (chown )