File size: 7,379 Bytes
5d4c685 e902072 5d4c685 e902072 5d4c685 e902072 5d4c685 e902072 5d4c685 |
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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
FROM wordpress:latest
# 安装必要工具和SQLite支持
RUN apt-get update && apt-get install -y \
sqlite3 \
libsqlite3-dev \
curl \
wget \
unzip \
git \
jq \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install pdo_sqlite
# 下载并安装SQLite Integration插件
RUN cd /tmp && \
wget --timeout=30 --tries=3 https://downloads.wordpress.org/plugin/sqlite-integration.zip && \
unzip sqlite-integration.zip && \
mv sqlite-integration /var/www/html/wp-content/plugins/ && \
rm sqlite-integration.zip
# 复制PHP配置
COPY config/wp_php.ini /usr/local/etc/php/conf.d/conf.ini
# 创建SQLite数据库目录
RUN mkdir -p /var/www/html/wp-content/database
# 配置Apache监听7860端口
RUN sed -i 's/Listen 80/Listen 7860/' /etc/apache2/ports.conf && \
sed -i 's/:80>/:7860>/' /etc/apache2/sites-available/000-default.conf
# 创建必要的目录
RUN mkdir -p /var/www/html/wp-content/mu-plugins
RUN mkdir -p /var/www/html/wp-content/backup
RUN mkdir -p /var/www/html/wp-content/uploads
# 创建SQLite数据库配置文件
RUN echo "<?php\n\
define('USE_MYSQL', false);\n\
define('DB_DIR', '/var/www/html/wp-content/database/');\n\
define('DB_FILE', 'wordpress.db');\n" > /var/www/html/wp-content/db.php
# 创建SQLite Integration必须使用插件加载器
RUN echo "<?php\n\
// SQLite Integration Must Use Plugin Loader\n\
if ( ! defined( 'ABSPATH' ) ) {\n\
exit;\n\
}\n\
\n\
// 加载SQLite Integration插件\n\
if ( file_exists( WP_CONTENT_DIR . '/plugins/sqlite-integration/load.php' ) ) {\n\
require_once WP_CONTENT_DIR . '/plugins/sqlite-integration/load.php';\n\
}\n" > /var/www/html/wp-content/mu-plugins/sqlite-integration-loader.php
# 创建wp-config.php用于SQLite
RUN echo "<?php\n\
define('DB_NAME', 'wordpress');\n\
define('DB_USER', 'root');\n\
define('DB_PASSWORD', '');\n\
define('DB_HOST', '');\n\
define('DB_CHARSET', 'utf8');\n\
define('DB_COLLATE', '');\n\
define('FS_METHOD', 'direct');\n\
define('WP_DEBUG', false);\n\
define('SQLITE_INTEGRATION_PLUGIN_PATH', '/var/www/html/wp-content/plugins/sqlite-integration/');\n\
\$table_prefix = 'wp_';\n\
if ( ! defined( 'ABSPATH' ) ) {\n\
define( 'ABSPATH', __DIR__ . '/' );\n\
}\n\
require_once ABSPATH . 'wp-settings.php';\n" > /var/www/html/wp-config.php
# 创建GitHub备份脚本
RUN echo '#!/bin/bash\n\
set -e\n\
\n\
echo "=== WordPress GitHub Backup Loader ==="\n\
\n\
# 检查环境变量\n\
if [ -z "$GITHUB_TOKEN" ] || [ -z "$GITHUB_REPO" ]; then\n\
echo "警告: GITHUB_TOKEN 或 GITHUB_REPO 环境变量未设置,跳过GitHub备份加载"\n\
else\n\
echo "开始从GitHub加载备份数据..."\n\
\n\
# 设置GitHub API URL\n\
GITHUB_API="https://api.github.com/repos/$GITHUB_REPO"\n\
\n\
# 获取最近30天的备份文件\n\
THIRTY_DAYS_AGO=$(date -d "30 days ago" +%Y-%m-%d)\n\
\n\
echo "查找 $THIRTY_DAYS_AGO 之后的备份文件..."\n\
\n\
# 获取备份文件列表\n\
BACKUP_FILES=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \\\n\
"$GITHUB_API/contents/backups" | jq -r ".[] | select(.name | test(\"backup-[0-9]{4}-[0-9]{2}-[0-9]{2}\")) | .name" | sort -r)\n\
\n\
if [ -z "$BACKUP_FILES" ]; then\n\
echo "未找到备份文件"\n\
else\n\
# 获取最新的备份文件\n\
LATEST_BACKUP=$(echo "$BACKUP_FILES" | head -n 1)\n\
echo "找到最新备份: $LATEST_BACKUP"\n\
\n\
# 下载并解压备份\n\
DOWNLOAD_URL=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \\\n\
"$GITHUB_API/contents/backups/$LATEST_BACKUP" | jq -r ".download_url")\n\
\n\
if [ "$DOWNLOAD_URL" != "null" ]; then\n\
echo "下载备份文件..."\n\
cd /var/www/html/wp-content/backup\n\
curl -L -o "$LATEST_BACKUP" "$DOWNLOAD_URL"\n\
\n\
# 解压备份\n\
if [[ "$LATEST_BACKUP" == *.tar.gz ]]; then\n\
echo "解压备份文件..."\n\
tar -xzf "$LATEST_BACKUP"\n\
\n\
# 恢复数据库\n\
if [ -f "wordpress.db" ]; then\n\
echo "恢复SQLite数据库..."\n\
cp wordpress.db /var/www/html/wp-content/database/\n\
fi\n\
\n\
# 恢复上传文件\n\
if [ -d "uploads" ]; then\n\
echo "恢复上传文件..."\n\
cp -r uploads/* /var/www/html/wp-content/uploads/\n\
fi\n\
\n\
echo "备份恢复完成"\n\
fi\n\
fi\n\
fi\n\
fi\n\
\n\
echo "=== 启动Apache ===\"\n\
# 设置权限 (跳过chown,在HF Spaces中不需要)\n\
chmod -R 755 /var/www/html 2>/dev/null || true\n\
\n\
# 启动Apache\n\
exec apache2-foreground' > /usr/local/bin/start-wordpress.sh && \
chmod +x /usr/local/bin/start-wordpress.sh
# 创建备份脚本
RUN echo '#!/bin/bash\n\
set -e\n\
\n\
echo "=== WordPress GitHub Backup ==="\n\
\n\
# 检查环境变量\n\
if [ -z "$GITHUB_TOKEN" ] || [ -z "$GITHUB_REPO" ]; then\n\
echo "错误: GITHUB_TOKEN 或 GITHUB_REPO 环境变量未设置"\n\
exit 1\n\
fi\n\
\n\
# 创建备份目录\n\
BACKUP_DIR="/tmp/wordpress-backup"\n\
DATE=$(date +%Y-%m-%d-%H%M%S)\n\
BACKUP_NAME="backup-$DATE"\n\
\n\
mkdir -p "$BACKUP_DIR/$BACKUP_NAME"\n\
\n\
echo "创建备份: $BACKUP_NAME"\n\
\n\
# 备份SQLite数据库\n\
if [ -f "/var/www/html/wp-content/database/wordpress.db" ]; then\n\
echo "备份SQLite数据库..."\n\
cp /var/www/html/wp-content/database/wordpress.db "$BACKUP_DIR/$BACKUP_NAME/"\n\
fi\n\
\n\
# 备份上传文件\n\
if [ -d "/var/www/html/wp-content/uploads" ]; then\n\
echo "备份上传文件..."\n\
cp -r /var/www/html/wp-content/uploads "$BACKUP_DIR/$BACKUP_NAME/"\n\
fi\n\
\n\
# 创建压缩包\n\
cd "$BACKUP_DIR"\n\
tar -czf "$BACKUP_NAME.tar.gz" "$BACKUP_NAME"\n\
\n\
# 上传到GitHub\n\
echo "上传备份到GitHub..."\n\
\n\
# 将文件转换为base64\n\
FILE_CONTENT=$(base64 -w 0 "$BACKUP_NAME.tar.gz")\n\
\n\
# 上传到GitHub\n\
curl -X PUT \\\n\
-H "Authorization: token $GITHUB_TOKEN" \\\n\
-H "Content-Type: application/json" \\\n\
-d "{\\\"message\\\": \\\"WordPress backup $DATE\\\", \\\"content\\\": \\\"$FILE_CONTENT\\\"}" \\\n\
"https://api.github.com/repos/$GITHUB_REPO/contents/backups/$BACKUP_NAME.tar.gz"\n\
\n\
echo "备份完成: $BACKUP_NAME.tar.gz"\n\
\n\
# 清理临时文件\n\
rm -rf "$BACKUP_DIR"\n\
\n\
echo "备份上传到GitHub完成"' > /usr/local/bin/backup-wordpress.sh && \
chmod +x /usr/local/bin/backup-wordpress.sh
# 设置权限 (跳过chown,在HF Spaces中不需要)
# 创建日志目录
RUN mkdir -p /var/log && \
touch /var/log/php_errors.log && \
chmod 644 /var/log/php_errors.log
# 启用Apache模块
RUN a2enmod rewrite && \
a2enmod headers && \
a2enmod expires
# 设置Apache配置
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
# 设置最终权限 (跳过chown,在HF Spaces中不需要)
RUN chmod -R 755 /var/www/html
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:7860/ || exit 1
# 暴露端口
EXPOSE 7860
# 启动WordPress
CMD ["/usr/local/bin/start-wordpress.sh"] |