如何简单通过ftp直接推送到服务器部署vite项目?
思考
已知gitbash类似于linux的命令窗口,他可以运行sh脚本,
且内置ssh,可以进行sftp文件推送
那么我们可以在项目中新建一个 deploy.sh
脚本,然后通过gitbash 去执行它
预备动作
- 服务器的Ip
- ssh的账号密码
- 传送到服务器的位置
开始
你可以在项目下创建一个 scripts/deploy.sh
脚本,然后编写以下内容
# 定义变量
REMOTE_USER="ssh用户名"
REMOTE_HOST="服务器公网ip"
REMOTE_PORT=22 #ssh端口 默认22
# 这里以 1panel的网站默认目录为例子
REMOTE_DIR="/opt/1panel/apps/openresty/openresty/www/sites/myweb/index"
# 定义项目目录
PROJECT_DIR=$(dirname $(pwd))
# 定义打包后的输出目录 这里指向的是后面 npm run build 打包后的文件路径
BUILD_DIR="$PROJECT_DIR/dist"
# 定义压缩包名称
ARCHIVE_NAME="zip.tar.gz"
# 进入项目目录
cd $PROJECT_DIR
# 安装依赖
echo "正在安装项目依赖..."
pnpm install
# 打包项目 这里就是执行打包命令
echo "正在打包 Vite 项目"
pnpm run build
# 检查打包是否成功
if [ $? -ne 0 ]; then
echo "打包失败,脚本终止。"
exit 1
fi
# 进入dist目录并压缩文件
echo "正在压缩打包后的文件..."
cd $BUILD_DIR # 进入到dist目录下
tar -zcf ../ARCHIVE_NAME ./* # 将dist的内容压缩
# 检查压缩是否成功
if [ $? -ne 0 ]; then
echo "压缩失败,脚本终止。"
exit 1
fi
# 返回项目目录
cd ..
# 上传压缩包到远程服务器 如果端口默认是22 可以省略 -P $REMOTE_PORT
# scp -P 端口 文件名 ftp用户名@服务器地址:服务器目录
echo "正在上传压缩包到远程服务器..."
scp -P $REMOTE_PORT $ARCHIVE_NAME $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
# 检查上传是否成功
if [ $? -eq 0 ]; then
echo "上传成功!正在解压文件..."
# 通过SSH连接服务器并执行解压命令
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_DIR && tar -xzf $ARCHIVE_NAME && rm $ARCHIVE_NAME"
if [ $? -eq 0 ]; then
echo "部署完成!文件已成功解压到远程服务器。"
else
echo "解压失败,请手动检查服务器。"
fi
else
echo "上传失败,请检查网络连接和服务器配置。"
fi
# 删除本地压缩包
rm $ARCHIVE_NAME
关于脚本的内容,我简要的注释在了上面的文件中,有些不懂的大家也可以自己问ai
使用方式
打开脚本目录,
直接输入 ./deploy.sh 就可以执行了
整合多环境
至此我们已经完成了一个项目的打包上传到服务器了
那么如果说我有多个环境呢,如何抽离开呢,下面给大家提供了一个例子
首先额外多了一个 scripts/deploy-config.sh
文件
#!/bin/bash
# 基础配置
REMOTE_USER="ssh用户名"
REMOTE_HOST="服务器公网ip"
REMOTE_PORT=22 #ssh端口 默认22
# 测试环境配置
TEST_REMOTE_DIR="/opt/1panel/apps/openresty/openresty/www/sites/my_test/index" # 测试环境目录
TEST_BUILD_COMMAND="build:test" # 这个脚本自己去package.json定义,结合 .env来区分打包环境
TEST_ENV_NAME="测试环境"
# 生产环境配置
PROD_REMOTE_DIR="/opt/1panel/apps/openresty/openresty/www/sites/my/index" # 请替换为实际的生产环境目录
PROD_BUILD_COMMAND="build:prod"
PROD_ENV_NAME="生产环境"
修改 scripts/deploy.sh
#!/bin/bash
# 检查部署环境参数
if [ "$1" != "test" ] && [ "$1" != "prod" ]; then
echo "请指定部署环境: test 或 prod"
echo "使用方法: ./deploy.sh test|prod"
exit 1
fi
# 导入配置
source $(dirname "$0")/deploy-config.sh
# 根据环境参数设置变量
if [ "$1" == "test" ]; then
REMOTE_DIR=$TEST_REMOTE_DIR
BUILD_COMMAND=$TEST_BUILD_COMMAND
ENV_NAME=$TEST_ENV_NAME
else
REMOTE_DIR=$PROD_REMOTE_DIR
BUILD_COMMAND=$PROD_BUILD_COMMAND
ENV_NAME=$PROD_ENV_NAME
fi
# 定义项目目录
PROJECT_DIR=$(dirname $(pwd))
# 定义打包后的输出目录
BUILD_DIR="$PROJECT_DIR/dist"
# 定义压缩包名称
ARCHIVE_NAME="dist.tar.gz"
# 进入项目目录
cd $PROJECT_DIR
# 安装依赖
echo "正在安装项目依赖..."
pnpm install
# 打包项目
echo "正在打包 Vite 项目到${ENV_NAME}..."
pnpm run $BUILD_COMMAND
# 检查打包是否成功
if [ $? -ne 0 ]; then
echo "打包失败,脚本终止。"
exit 1
fi
# 进入dist目录并压缩文件
echo "正在压缩打包后的文件..."
cd $BUILD_DIR
tar -zcf ../$ARCHIVE_NAME ./*
# 检查压缩是否成功
if [ $? -ne 0 ]; then
echo "压缩失败,脚本终止。"
exit 1
fi
# 返回项目目录
cd ..
# 上传压缩包到远程服务器
echo "正在上传压缩包到远程服务器..."
scp -P $REMOTE_PORT $ARCHIVE_NAME $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
# 检查上传是否成功
if [ $? -eq 0 ]; then
echo "上传成功!正在解压文件..."
# 通过SSH连接服务器并执行解压命令
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_DIR && tar -xzf $ARCHIVE_NAME && rm $ARCHIVE_NAME"
if [ $? -eq 0 ]; then
echo "部署完成!文件已成功解压到远程服务器。"
else
echo "解压失败,请手动检查服务器。"
fi
else
echo "上传失败,请检查网络连接和服务器配置。"
fi
# 删除本地压缩包
rm $ARCHIVE_NAME
已知gitbash类似于linux的命令窗口,他可以运行sh脚本,且内置ssh,可以进行sftp文件推送
那么我们可以在项目中新建一个 deploy.sh
脚本,然后通过gitbash 去执行它