diff --git a/deploy_dev.sh b/deploy_dev.sh
index af8605f..3818436 100755
--- a/deploy_dev.sh
+++ b/deploy_dev.sh
@@ -16,9 +16,6 @@ NC='\033[0m' # No Color
ubuntu_HOST="ubuntu"
DEPLOY_PATH="/var/www"
DEPLOY_NAME="app.cloud"
-# Sudo 密码(如果需要,建议配置无密码 sudo 更安全)
-# 配置无密码 sudo: 在服务器上运行: echo "username ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
-SUDO_PASSWORD="1231"
# 打印带颜色的消息
print_info() {
@@ -62,15 +59,13 @@ deploy_to_server() {
return 1
fi
- # SSH 执行部署操作
+ # SSH 执行部署操作(非交互模式)
print_info "在 ${server} 上执行部署操作..."
print_info "部署路径: ${DEPLOY_PATH}/${DEPLOY_NAME}"
- # 注意:密码通过环境变量传递,避免在命令行中暴露
- ssh_output=$(SSH_SUDO_PASSWORD="${SUDO_PASSWORD}" ssh ${server} bash << SSH_EOF
+ ssh_output=$(ssh ${server} bash << SSH_EOF
set -e
DEPLOY_PATH="${DEPLOY_PATH}"
DEPLOY_NAME="${DEPLOY_NAME}"
- SUDO_PASSWORD="\${SSH_SUDO_PASSWORD}"
# 检查部署目录是否存在
if [ ! -d "\${DEPLOY_PATH}" ]; then
@@ -78,35 +73,35 @@ deploy_to_server() {
exit 1
fi
- # 检查是否有权限写入(尝试创建测试文件)
+ # 检查是否有权限写入,若无则尝试免密 sudo(sudo -n)
+ SUDO_CMD=""
if ! touch "\${DEPLOY_PATH}/.deploy_test" 2>/dev/null; then
- echo "提示:没有直接写入权限,将使用 sudo 执行操作"
- USE_SUDO=1
+ if sudo -n true 2>/dev/null; then
+ echo "提示:没有直接写入权限,使用 sudo -n 执行部署操作"
+ SUDO_CMD="sudo -n"
+ else
+ echo "错误:没有写入权限,且 sudo 需要密码(非交互部署无法输入)"
+ echo "请执行以下任一方案后重试:"
+ echo " 1) 将部署目录改为当前用户可写目录(例如 /home/\$USER/www)"
+ echo " 2) 为当前用户配置免密 sudo(NOPASSWD)"
+ exit 1
+ fi
else
rm -f "\${DEPLOY_PATH}/.deploy_test"
- USE_SUDO=0
+ echo "提示:检测到部署目录可直接写入"
fi
# 备份旧版本(如果存在)
if [ -d "\${DEPLOY_PATH}/\${DEPLOY_NAME}" ]; then
echo "备份旧版本..."
- if [ "\$USE_SUDO" = "1" ]; then
- echo "\${SUDO_PASSWORD}" | sudo -S rm -rf "\${DEPLOY_PATH}/\${DEPLOY_NAME}_bak" 2>/dev/null || true
- echo "\${SUDO_PASSWORD}" | sudo -S mv "\${DEPLOY_PATH}/\${DEPLOY_NAME}" "\${DEPLOY_PATH}/\${DEPLOY_NAME}_bak" || { echo "错误:备份失败,权限不足"; exit 1; }
- else
- rm -rf "\${DEPLOY_PATH}/\${DEPLOY_NAME}_bak" 2>/dev/null || true
- mv "\${DEPLOY_PATH}/\${DEPLOY_NAME}" "\${DEPLOY_PATH}/\${DEPLOY_NAME}_bak" || { echo "错误:备份失败"; exit 1; }
- fi
+ \$SUDO_CMD rm -rf "\${DEPLOY_PATH}/\${DEPLOY_NAME}_bak" 2>/dev/null || true
+ \$SUDO_CMD mv "\${DEPLOY_PATH}/\${DEPLOY_NAME}" "\${DEPLOY_PATH}/\${DEPLOY_NAME}_bak" || { echo "错误:备份失败,权限不足"; exit 1; }
fi
# 移动新版本到部署目录(覆盖现有目录)
if [ -d ~/\${DEPLOY_NAME} ]; then
echo "移动新版本到部署目录..."
- if [ "\$USE_SUDO" = "1" ]; then
- echo "\${SUDO_PASSWORD}" | sudo -S mv ~/\${DEPLOY_NAME} "\${DEPLOY_PATH}/" || { echo "错误:移动文件失败,权限不足"; exit 1; }
- else
- mv ~/\${DEPLOY_NAME} "\${DEPLOY_PATH}/" || { echo "错误:移动文件失败"; exit 1; }
- fi
+ \$SUDO_CMD mv ~/\${DEPLOY_NAME} "\${DEPLOY_PATH}/" || { echo "错误:移动文件失败,权限不足"; exit 1; }
echo "部署完成!"
else
echo "错误:找不到 ~/\${DEPLOY_NAME} 目录"
@@ -116,7 +111,11 @@ deploy_to_server() {
# 重新加载 nginx(如果配置了)
if command -v nginx &> /dev/null; then
echo "重新加载 nginx..."
- echo "\${SUDO_PASSWORD}" | sudo -S nginx -t && echo "\${SUDO_PASSWORD}" | sudo -S nginx -s reload || echo "警告:nginx 重新加载失败,请手动检查"
+ if [ -n "\$SUDO_CMD" ]; then
+ \$SUDO_CMD nginx -t && \$SUDO_CMD nginx -s reload || echo "警告:nginx 重新加载失败,请手动检查"
+ else
+ nginx -t && nginx -s reload || echo "警告:nginx 重新加载失败,请手动检查"
+ fi
fi
SSH_EOF
)
diff --git a/index.html b/index.html
index 8c623d6..9a71eef 100644
--- a/index.html
+++ b/index.html
@@ -5,10 +5,9 @@
-
-
+
-
+
@@ -41,6 +40,34 @@
+
+
+
+