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"]