feat: add deployment script for automated project deployment to remote server with backup functionality
This commit is contained in:
55
deploy.sh
Executable file
55
deploy.sh
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 服务器配置
|
||||||
|
SERVER="123.57.93.143"
|
||||||
|
USER="root"
|
||||||
|
REMOTE_DIR="/home/media-front"
|
||||||
|
BACKUP_DIR="$REMOTE_DIR/backup"
|
||||||
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
|
# 本地构建
|
||||||
|
echo "Building project..."
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# 检查构建是否成功
|
||||||
|
if [ ! -d "dist" ]; then
|
||||||
|
echo "Build failed! dist directory not found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 创建部署包
|
||||||
|
echo "Creating deployment package..."
|
||||||
|
tar -czf dist.tar.gz dist/
|
||||||
|
|
||||||
|
# 创建远程目录
|
||||||
|
echo "Creating remote directories..."
|
||||||
|
ssh $USER@$SERVER "mkdir -p $REMOTE_DIR $BACKUP_DIR"
|
||||||
|
|
||||||
|
# 如果远程目录存在部署文件,先备份
|
||||||
|
echo "Backing up existing deployment..."
|
||||||
|
ssh $USER@$SERVER "if [ -d $REMOTE_DIR/dist ]; then \
|
||||||
|
tar -czf $BACKUP_DIR/dist_backup_$TIMESTAMP.tar.gz $REMOTE_DIR/dist && \
|
||||||
|
rm -rf $REMOTE_DIR/dist; \
|
||||||
|
fi"
|
||||||
|
|
||||||
|
# 上传新的部署包
|
||||||
|
echo "Uploading new deployment package..."
|
||||||
|
scp dist.tar.gz $USER@$SERVER:$REMOTE_DIR/
|
||||||
|
|
||||||
|
# 解压部署包
|
||||||
|
echo "Extracting deployment package..."
|
||||||
|
ssh $USER@$SERVER "cd $REMOTE_DIR && \
|
||||||
|
tar -xzf dist.tar.gz && \
|
||||||
|
rm dist.tar.gz"
|
||||||
|
|
||||||
|
# 清理本地部署包
|
||||||
|
echo "Cleaning up local deployment package..."
|
||||||
|
rm dist.tar.gz
|
||||||
|
|
||||||
|
echo "Deployment completed successfully!"
|
||||||
|
echo "Your application is now deployed to $REMOTE_DIR/dist"
|
||||||
|
echo "A backup has been created at $BACKUP_DIR/dist_backup_$TIMESTAMP.tar.gz"
|
||||||
|
|
||||||
|
# 清理旧的备份(保留最近10个)
|
||||||
|
echo "Cleaning up old backups..."
|
||||||
|
ssh $USER@$SERVER "cd $BACKUP_DIR && ls -t dist_backup_*.tar.gz | tail -n +11 | xargs rm -f 2>/dev/null || true"
|
||||||
@@ -49,17 +49,9 @@
|
|||||||
{ id: 'other', label: '其他' }
|
{ id: 'other', label: '其他' }
|
||||||
];
|
];
|
||||||
|
|
||||||
// 添加 SHA-256 加密函数
|
// 添加简单的Base64编码函数
|
||||||
async function sha256(message: string): Promise<string> {
|
function encodePassword(message: string): string {
|
||||||
if (typeof window !== 'undefined' && window.crypto?.subtle) {
|
return btoa(message);
|
||||||
const hashBuffer = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(message));
|
|
||||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
||||||
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
||||||
} else {
|
|
||||||
// Node.js 环境下用 Node 原生 crypto 模块
|
|
||||||
const { createHash } = await import('crypto');
|
|
||||||
return createHash('sha256').update(message).digest('hex');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化函数:检查认证状态
|
// 初始化函数:检查认证状态
|
||||||
@@ -131,13 +123,13 @@
|
|||||||
async function handleLogin(e: Event) {
|
async function handleLogin(e: Event) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
try {
|
try {
|
||||||
// 对密码进行加密
|
// 对密码进行简单编码
|
||||||
const hashedPassword = await sha256(password);
|
const encodedPassword = encodePassword(password);
|
||||||
|
|
||||||
// 使用验证接口验证登录
|
// 使用验证接口验证登录
|
||||||
const response = await request.post<ApiResponse<{token: string}>>('/user/login', {
|
const response = await request.post<ApiResponse<{token: string}>>('/user/login', {
|
||||||
username,
|
username,
|
||||||
password: hashedPassword
|
password: encodedPassword
|
||||||
});
|
});
|
||||||
|
|
||||||
if (response.data.code === 200) {
|
if (response.data.code === 200) {
|
||||||
|
|||||||
Reference in New Issue
Block a user