|
FROM wordpress:latest |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
COPY config/wp_php.ini /usr/local/etc/php/conf.d/conf.ini |
|
|
|
|
|
RUN mkdir -p /var/www/html/wp-content/database |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
RUN mkdir -p /var/log && \ |
|
touch /var/log/php_errors.log && \ |
|
chmod 644 /var/log/php_errors.log |
|
|
|
|
|
RUN a2enmod rewrite && \ |
|
a2enmod headers && \ |
|
a2enmod expires |
|
|
|
|
|
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf |
|
|
|
|
|
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 |
|
|
|
|
|
CMD ["/usr/local/bin/start-wordpress.sh"] |