File size: 3,603 Bytes
17bc34e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
#!/bin/bash
# Hugging Face Spaces WordPress 服务启动脚本
# 管理 WordPress、Python 应用和清理服务
set -e
echo "=== 启动 WordPress for Hugging Face Spaces ==="
# 创建必要的目录
echo "创建必要的目录..."
mkdir -p /var/www/html/wp-content/database
mkdir -p /var/www/html/wp-content/uploads
mkdir -p /var/www/html/wp-content/cache
mkdir -p /var/log/wordpress
mkdir -p /var/log/apache2
# 设置权限
echo "设置文件权限..."
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html/wp-content/database
chmod -R 755 /var/www/html/wp-content/database
# 检查并安装 SQLite 插件
echo "检查 SQLite 插件..."
if [ ! -d "/var/www/html/wp-content/plugins/sqlite-database-integration" ]; then
echo "安装 SQLite 数据库集成插件..."
cd /tmp
wget -q https://downloads.wordpress.org/plugin/sqlite-database-integration.2.1.5.zip
unzip -q sqlite-database-integration.2.1.5.zip
mv sqlite-database-integration /var/www/html/wp-content/plugins/
chown -R www-data:www-data /var/www/html/wp-content/plugins/sqlite-database-integration
rm sqlite-database-integration.2.1.5.zip
echo "SQLite 插件安装完成"
else
echo "SQLite 插件已存在"
fi
# 复制 wp-config.php 如果不存在
if [ ! -f "/var/www/html/wp-config.php" ]; then
echo "复制 wp-config.php..."
cp /usr/src/wordpress/wp-config.php /var/www/html/
chown www-data:www-data /var/www/html/wp-config.php
fi
# 启动 cron 服务
echo "启动 cron 服务..."
service cron start
# 启动 Apache 在后台
echo "启动 Apache 服务..."
apache2ctl start
# 等待 Apache 启动
sleep 3
# 检查 Apache 状态
if pgrep apache2 > /dev/null; then
echo "Apache 启动成功"
else
echo "Apache 启动失败"
exit 1
fi
# 启动 Python 应用
echo "启动 Python 应用..."
cd /app
export FLASK_ENV=production
export FLASK_APP=app.py
# 在后台启动 Python 应用
python3 app.py &
PYTHON_PID=$!
echo "Python 应用启动,PID: $PYTHON_PID"
# 等待服务启动
sleep 5
# 健康检查
echo "执行健康检查..."
for i in {1..10}; do
if curl -f -s http://localhost:7860/health > /dev/null; then
echo "健康检查通过"
break
else
echo "等待服务启动... ($i/10)"
sleep 2
fi
if [ $i -eq 10 ]; then
echo "健康检查失败,服务可能未正常启动"
fi
done
# 显示服务状态
echo "=== 服务状态 ==="
echo "Apache: $(pgrep apache2 > /dev/null && echo '运行中' || echo '已停止')"
echo "Python App: $(kill -0 $PYTHON_PID 2>/dev/null && echo '运行中' || echo '已停止')"
echo "Cron: $(pgrep cron > /dev/null && echo '运行中' || echo '已停止')"
# 显示访问信息
echo "=== 访问信息 ==="
echo "WordPress: http://localhost:7860/wordpress"
echo "应用首页: http://localhost:7860/"
echo "健康检查: http://localhost:7860/health"
echo "清理状态: http://localhost:7860/api/cleanup/status"
echo "=== 启动完成 ==="
# 保持容器运行
echo "保持服务运行..."
while true; do
# 检查关键服务是否还在运行
if ! pgrep apache2 > /dev/null; then
echo "Apache 服务已停止,重新启动..."
apache2ctl start
fi
if ! kill -0 $PYTHON_PID 2>/dev/null; then
echo "Python 应用已停止,重新启动..."
cd /app
python3 app.py &
PYTHON_PID=$!
fi
if ! pgrep cron > /dev/null; then
echo "Cron 服务已停止,重新启动..."
service cron start
fi
sleep 30
done |