Upload 5 files
Browse files- Dockerfile +234 -0
- README.md +141 -100
- app.py +38 -0
- requirements.txt +6 -0
- spaces.yml +29 -0
Dockerfile
ADDED
@@ -0,0 +1,234 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM wordpress:latest
|
2 |
+
|
3 |
+
# 安装必要工具和SQLite支持
|
4 |
+
RUN apt-get update && apt-get install -y \
|
5 |
+
sqlite3 \
|
6 |
+
libsqlite3-dev \
|
7 |
+
curl \
|
8 |
+
wget \
|
9 |
+
unzip \
|
10 |
+
git \
|
11 |
+
jq \
|
12 |
+
&& rm -rf /var/lib/apt/lists/* \
|
13 |
+
&& docker-php-ext-install pdo_sqlite
|
14 |
+
|
15 |
+
# 下载并安装SQLite Integration插件
|
16 |
+
RUN cd /tmp && \
|
17 |
+
wget --timeout=30 --tries=3 https://downloads.wordpress.org/plugin/sqlite-integration.zip && \
|
18 |
+
unzip sqlite-integration.zip && \
|
19 |
+
mv sqlite-integration /var/www/html/wp-content/plugins/ && \
|
20 |
+
rm sqlite-integration.zip && \
|
21 |
+
chown -R www-data:www-data /var/www/html/wp-content/plugins/sqlite-integration
|
22 |
+
|
23 |
+
# 复制PHP配置
|
24 |
+
COPY config/wp_php.ini /usr/local/etc/php/conf.d/conf.ini
|
25 |
+
|
26 |
+
# 创建SQLite数据库目录
|
27 |
+
RUN mkdir -p /var/www/html/wp-content/database
|
28 |
+
|
29 |
+
# 配置Apache监听7860端口
|
30 |
+
RUN sed -i 's/Listen 80/Listen 7860/' /etc/apache2/ports.conf && \
|
31 |
+
sed -i 's/:80>/:7860>/' /etc/apache2/sites-available/000-default.conf
|
32 |
+
|
33 |
+
# 创建必要的目录
|
34 |
+
RUN mkdir -p /var/www/html/wp-content/mu-plugins
|
35 |
+
RUN mkdir -p /var/www/html/wp-content/backup
|
36 |
+
RUN mkdir -p /var/www/html/wp-content/uploads
|
37 |
+
|
38 |
+
# 创建SQLite数据库配置文件
|
39 |
+
RUN echo "<?php\n\
|
40 |
+
define('USE_MYSQL', false);\n\
|
41 |
+
define('DB_DIR', '/var/www/html/wp-content/database/');\n\
|
42 |
+
define('DB_FILE', 'wordpress.db');\n" > /var/www/html/wp-content/db.php
|
43 |
+
|
44 |
+
# 创建SQLite Integration必须使用插件加载器
|
45 |
+
RUN echo "<?php\n\
|
46 |
+
// SQLite Integration Must Use Plugin Loader\n\
|
47 |
+
if ( ! defined( 'ABSPATH' ) ) {\n\
|
48 |
+
exit;\n\
|
49 |
+
}\n\
|
50 |
+
\n\
|
51 |
+
// 加载SQLite Integration插件\n\
|
52 |
+
if ( file_exists( WP_CONTENT_DIR . '/plugins/sqlite-integration/load.php' ) ) {\n\
|
53 |
+
require_once WP_CONTENT_DIR . '/plugins/sqlite-integration/load.php';\n\
|
54 |
+
}\n" > /var/www/html/wp-content/mu-plugins/sqlite-integration-loader.php
|
55 |
+
|
56 |
+
# 创建wp-config.php用于SQLite
|
57 |
+
RUN echo "<?php\n\
|
58 |
+
define('DB_NAME', 'wordpress');\n\
|
59 |
+
define('DB_USER', 'root');\n\
|
60 |
+
define('DB_PASSWORD', '');\n\
|
61 |
+
define('DB_HOST', '');\n\
|
62 |
+
define('DB_CHARSET', 'utf8');\n\
|
63 |
+
define('DB_COLLATE', '');\n\
|
64 |
+
define('FS_METHOD', 'direct');\n\
|
65 |
+
define('WP_DEBUG', false);\n\
|
66 |
+
define('SQLITE_INTEGRATION_PLUGIN_PATH', '/var/www/html/wp-content/plugins/sqlite-integration/');\n\
|
67 |
+
\$table_prefix = 'wp_';\n\
|
68 |
+
if ( ! defined( 'ABSPATH' ) ) {\n\
|
69 |
+
define( 'ABSPATH', __DIR__ . '/' );\n\
|
70 |
+
}\n\
|
71 |
+
require_once ABSPATH . 'wp-settings.php';\n" > /var/www/html/wp-config.php
|
72 |
+
|
73 |
+
# 创建GitHub备份脚本
|
74 |
+
RUN echo '#!/bin/bash\n\
|
75 |
+
set -e\n\
|
76 |
+
\n\
|
77 |
+
echo "=== WordPress GitHub Backup Loader ==="\n\
|
78 |
+
\n\
|
79 |
+
# 检查环境变量\n\
|
80 |
+
if [ -z "$GITHUB_TOKEN" ] || [ -z "$GITHUB_REPO" ]; then\n\
|
81 |
+
echo "警告: GITHUB_TOKEN 或 GITHUB_REPO 环境变量未设置,跳过GitHub备份加载"\n\
|
82 |
+
else\n\
|
83 |
+
echo "开始从GitHub加载备份数据..."\n\
|
84 |
+
\n\
|
85 |
+
# 设置GitHub API URL\n\
|
86 |
+
GITHUB_API="https://api.github.com/repos/$GITHUB_REPO"\n\
|
87 |
+
\n\
|
88 |
+
# 获取最近30天的备份文件\n\
|
89 |
+
THIRTY_DAYS_AGO=$(date -d "30 days ago" +%Y-%m-%d)\n\
|
90 |
+
\n\
|
91 |
+
echo "查找 $THIRTY_DAYS_AGO 之后的备份文件..."\n\
|
92 |
+
\n\
|
93 |
+
# 获取备份文件列表\n\
|
94 |
+
BACKUP_FILES=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \\\n\
|
95 |
+
"$GITHUB_API/contents/backups" | jq -r ".[] | select(.name | test(\"backup-[0-9]{4}-[0-9]{2}-[0-9]{2}\")) | .name" | sort -r)\n\
|
96 |
+
\n\
|
97 |
+
if [ -z "$BACKUP_FILES" ]; then\n\
|
98 |
+
echo "未找到备份文件"\n\
|
99 |
+
else\n\
|
100 |
+
# 获取最新的备份文件\n\
|
101 |
+
LATEST_BACKUP=$(echo "$BACKUP_FILES" | head -n 1)\n\
|
102 |
+
echo "找到最新备份: $LATEST_BACKUP"\n\
|
103 |
+
\n\
|
104 |
+
# 下载并解压备份\n\
|
105 |
+
DOWNLOAD_URL=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \\\n\
|
106 |
+
"$GITHUB_API/contents/backups/$LATEST_BACKUP" | jq -r ".download_url")\n\
|
107 |
+
\n\
|
108 |
+
if [ "$DOWNLOAD_URL" != "null" ]; then\n\
|
109 |
+
echo "下载备份文件..."\n\
|
110 |
+
cd /var/www/html/wp-content/backup\n\
|
111 |
+
curl -L -o "$LATEST_BACKUP" "$DOWNLOAD_URL"\n\
|
112 |
+
\n\
|
113 |
+
# 解压备份\n\
|
114 |
+
if [[ "$LATEST_BACKUP" == *.tar.gz ]]; then\n\
|
115 |
+
echo "解压备份文件..."\n\
|
116 |
+
tar -xzf "$LATEST_BACKUP"\n\
|
117 |
+
\n\
|
118 |
+
# 恢复数据库\n\
|
119 |
+
if [ -f "wordpress.db" ]; then\n\
|
120 |
+
echo "恢复SQLite数据库..."\n\
|
121 |
+
cp wordpress.db /var/www/html/wp-content/database/\n\
|
122 |
+
chown www-data:www-data /var/www/html/wp-content/database/wordpress.db\n\
|
123 |
+
fi\n\
|
124 |
+
\n\
|
125 |
+
# 恢复上传文件\n\
|
126 |
+
if [ -d "uploads" ]; then\n\
|
127 |
+
echo "恢复上传文件..."\n\
|
128 |
+
cp -r uploads/* /var/www/html/wp-content/uploads/\n\
|
129 |
+
chown -R www-data:www-data /var/www/html/wp-content/uploads/\n\
|
130 |
+
fi\n\
|
131 |
+
\n\
|
132 |
+
echo "备份恢复完成"\n\
|
133 |
+
fi\n\
|
134 |
+
fi\n\
|
135 |
+
fi\n\
|
136 |
+
fi\n\
|
137 |
+
\n\
|
138 |
+
echo "=== 启动Apache ==="\n\
|
139 |
+
# 设置权限\n\
|
140 |
+
chown -R www-data:www-data /var/www/html\n\
|
141 |
+
chmod -R 755 /var/www/html\n\
|
142 |
+
\n\
|
143 |
+
# 启动Apache\n\
|
144 |
+
exec apache2-foreground' > /usr/local/bin/start-wordpress.sh && \
|
145 |
+
chmod +x /usr/local/bin/start-wordpress.sh
|
146 |
+
|
147 |
+
# 创建备份脚本
|
148 |
+
RUN echo '#!/bin/bash\n\
|
149 |
+
set -e\n\
|
150 |
+
\n\
|
151 |
+
echo "=== WordPress GitHub Backup ==="\n\
|
152 |
+
\n\
|
153 |
+
# 检查环境变量\n\
|
154 |
+
if [ -z "$GITHUB_TOKEN" ] || [ -z "$GITHUB_REPO" ]; then\n\
|
155 |
+
echo "错误: GITHUB_TOKEN 或 GITHUB_REPO 环境变量未设置"\n\
|
156 |
+
exit 1\n\
|
157 |
+
fi\n\
|
158 |
+
\n\
|
159 |
+
# 创建备份目录\n\
|
160 |
+
BACKUP_DIR="/tmp/wordpress-backup"\n\
|
161 |
+
DATE=$(date +%Y-%m-%d-%H%M%S)\n\
|
162 |
+
BACKUP_NAME="backup-$DATE"\n\
|
163 |
+
\n\
|
164 |
+
mkdir -p "$BACKUP_DIR/$BACKUP_NAME"\n\
|
165 |
+
\n\
|
166 |
+
echo "创建备份: $BACKUP_NAME"\n\
|
167 |
+
\n\
|
168 |
+
# 备份SQLite数据库\n\
|
169 |
+
if [ -f "/var/www/html/wp-content/database/wordpress.db" ]; then\n\
|
170 |
+
echo "备份SQLite数据库..."\n\
|
171 |
+
cp /var/www/html/wp-content/database/wordpress.db "$BACKUP_DIR/$BACKUP_NAME/"\n\
|
172 |
+
fi\n\
|
173 |
+
\n\
|
174 |
+
# 备份上传文件\n\
|
175 |
+
if [ -d "/var/www/html/wp-content/uploads" ]; then\n\
|
176 |
+
echo "备份上传文件..."\n\
|
177 |
+
cp -r /var/www/html/wp-content/uploads "$BACKUP_DIR/$BACKUP_NAME/"\n\
|
178 |
+
fi\n\
|
179 |
+
\n\
|
180 |
+
# 创建压缩包\n\
|
181 |
+
cd "$BACKUP_DIR"\n\
|
182 |
+
tar -czf "$BACKUP_NAME.tar.gz" "$BACKUP_NAME"\n\
|
183 |
+
\n\
|
184 |
+
# 上传到GitHub\n\
|
185 |
+
echo "上传备份到GitHub..."\n\
|
186 |
+
\n\
|
187 |
+
# 将文件转换为base64\n\
|
188 |
+
FILE_CONTENT=$(base64 -w 0 "$BACKUP_NAME.tar.gz")\n\
|
189 |
+
\n\
|
190 |
+
# 上传到GitHub\n\
|
191 |
+
curl -X PUT \\\n\
|
192 |
+
-H "Authorization: token $GITHUB_TOKEN" \\\n\
|
193 |
+
-H "Content-Type: application/json" \\\n\
|
194 |
+
-d "{\\\"message\\\": \\\"WordPress backup $DATE\\\", \\\"content\\\": \\\"$FILE_CONTENT\\\"}" \\\n\
|
195 |
+
"https://api.github.com/repos/$GITHUB_REPO/contents/backups/$BACKUP_NAME.tar.gz"\n\
|
196 |
+
\n\
|
197 |
+
echo "备份完成: $BACKUP_NAME.tar.gz"\n\
|
198 |
+
\n\
|
199 |
+
# 清理临时文件\n\
|
200 |
+
rm -rf "$BACKUP_DIR"\n\
|
201 |
+
\n\
|
202 |
+
echo "备份上传到GitHub完成"' > /usr/local/bin/backup-wordpress.sh && \
|
203 |
+
chmod +x /usr/local/bin/backup-wordpress.sh
|
204 |
+
|
205 |
+
# 设置权限
|
206 |
+
RUN chown www-data:www-data /var/www/html/wp-config.php
|
207 |
+
|
208 |
+
# 创建日志目录
|
209 |
+
RUN mkdir -p /var/log && \
|
210 |
+
touch /var/log/php_errors.log && \
|
211 |
+
chown www-data:www-data /var/log/php_errors.log && \
|
212 |
+
chmod 644 /var/log/php_errors.log
|
213 |
+
|
214 |
+
# 启用Apache模块
|
215 |
+
RUN a2enmod rewrite && \
|
216 |
+
a2enmod headers && \
|
217 |
+
a2enmod expires
|
218 |
+
|
219 |
+
# 设置Apache配置
|
220 |
+
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
|
221 |
+
|
222 |
+
# 设置最终权限
|
223 |
+
RUN chown -R www-data:www-data /var/www/html && \
|
224 |
+
chmod -R 755 /var/www/html
|
225 |
+
|
226 |
+
# 健康检查
|
227 |
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
228 |
+
CMD curl -f http://localhost:7860/ || exit 1
|
229 |
+
|
230 |
+
# 暴露端口
|
231 |
+
EXPOSE 7860
|
232 |
+
|
233 |
+
# 启动WordPress
|
234 |
+
CMD ["/usr/local/bin/start-wordpress.sh"]
|
README.md
CHANGED
@@ -1,159 +1,200 @@
|
|
1 |
-
#
|
2 |
|
3 |
-
|
4 |
|
5 |
-
|
6 |
|
7 |
-
|
8 |
-
- [phpMyAdmin](https://hub.docker.com/r/phpmyadmin/phpmyadmin/)
|
9 |
-
- [MySQL](https://hub.docker.com/_/mysql/)
|
10 |
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
-
|
14 |
-
- [Configuration](#configuration)
|
15 |
-
- [Installation](#installation)
|
16 |
-
- [Usage](#usage)
|
17 |
-
|
18 |
-
## Requirements
|
19 |
-
|
20 |
-
Make sure you have the latest versions of **Docker** and **Docker Compose** installed on your machine.
|
21 |
-
|
22 |
-
Clone this repository or copy the files from this repository into a new folder. In the **docker-compose.yml** file you may change the IP address (in case you run multiple containers) or the database from MySQL to MariaDB.
|
23 |
-
|
24 |
-
Make sure to [add your user to the `docker` group](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user) when using Linux.
|
25 |
-
|
26 |
-
## Configuration
|
27 |
-
|
28 |
-
Copy the example environment into `.env`
|
29 |
|
|
|
30 |
```
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
32 |
```
|
33 |
|
34 |
-
|
35 |
|
36 |
-
|
37 |
|
38 |
-
|
|
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
|
|
|
|
43 |
|
44 |
-
|
|
|
|
|
45 |
|
46 |
-
|
47 |
-
* `wp-app` – the location of your WordPress application
|
48 |
|
49 |
-
|
50 |
|
51 |
-
|
52 |
|
53 |
-
|
54 |
|
55 |
-
###
|
56 |
|
57 |
-
|
|
|
|
|
|
|
58 |
|
59 |
-
|
60 |
-
docker-compose
|
61 |
-
```
|
62 |
-
|
63 |
-
### Stopping containers
|
64 |
|
65 |
-
|
66 |
-
docker-compose
|
67 |
```
|
68 |
|
69 |
-
###
|
70 |
|
71 |
-
|
|
|
|
|
72 |
|
73 |
-
|
74 |
-
docker-
|
75 |
```
|
76 |
|
77 |
-
|
78 |
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
82 |
|
83 |
-
|
84 |
|
85 |
-
|
|
|
|
|
|
|
86 |
|
87 |
-
|
88 |
-
|
|
|
|
|
89 |
|
90 |
-
|
|
|
|
|
|
|
91 |
|
92 |
-
|
93 |
-
docker-compose up
|
94 |
-
```
|
95 |
|
96 |
-
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
```
|
102 |
|
103 |
-
|
|
|
|
|
104 |
|
105 |
-
|
106 |
-
./export.sh
|
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 |
-
|
|
|
1 |
+
# WordPress with SQLite for Hugging Face Spaces
|
2 |
|
3 |
+
这是一个专为 Hugging Face Spaces 设计的 WordPress 项目,使用 SQLite 数据库和 GitHub 自动备份功能。
|
4 |
|
5 |
+
## 🚀 快速部署到 Hugging Face Space
|
6 |
|
7 |
+
### 1. 创建 Hugging Face Space
|
|
|
|
|
8 |
|
9 |
+
1. 访问 [Hugging Face Spaces](https://huggingface.co/spaces)
|
10 |
+
2. 点击 "Create new Space"
|
11 |
+
3. 选择以下配置:
|
12 |
+
- **SDK**: `Docker`
|
13 |
+
- **Hardware**: `CPU basic` (推荐) 或更高
|
14 |
+
- **Visibility**: 根据需要选择
|
15 |
|
16 |
+
### 2. 上传项目文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
+
将以下文件上传到你的 Space:
|
19 |
```
|
20 |
+
Dockerfile
|
21 |
+
app.py
|
22 |
+
requirements.txt
|
23 |
+
config/wp_php.ini
|
24 |
+
.dockerignore (可选)
|
25 |
+
spaces.yml (可选)
|
26 |
```
|
27 |
|
28 |
+
### 3. 配置环境变量 (可选 - 用于GitHub备份)
|
29 |
|
30 |
+
在 Space 的 Settings 页面添加以下环境变量:
|
31 |
|
32 |
+
- `GITHUB_TOKEN`: 你的 GitHub Personal Access Token
|
33 |
+
- `GITHUB_REPO`: GitHub 仓库路径 (格式: `username/repository-name`)
|
34 |
|
35 |
+
#### 创建 GitHub Token:
|
36 |
+
1. 访问 GitHub Settings > Developer settings > Personal access tokens
|
37 |
+
2. 创建新 token,需要以下权限:
|
38 |
+
- `repo` (完整仓库访问权限)
|
39 |
+
- `contents:write` (写入仓库内容)
|
40 |
|
41 |
+
#### 准备 GitHub 仓库:
|
42 |
+
1. 创建一个新的 GitHub 仓库用于存储备份
|
43 |
+
2. 在仓库中创建 `backups` 文件夹
|
44 |
|
45 |
+
### 4. 启动 Space
|
|
|
46 |
|
47 |
+
保存设置后,Space 会自动构建和启动。首次构建需要 5-10 分钟。
|
48 |
|
49 |
+
## 🏠 本地开发部署
|
50 |
|
51 |
+
如果你想在本地开发环境中运行此项目:
|
52 |
|
53 |
+
### 使用 Docker Compose
|
54 |
|
55 |
+
```bash
|
56 |
+
# 克隆或下载项目
|
57 |
+
git clone <your-repo-url>
|
58 |
+
cd wordpress-docker-compose-master
|
59 |
|
60 |
+
# 构建并启动
|
61 |
+
docker-compose up --build
|
|
|
|
|
|
|
62 |
|
63 |
+
# 或者在后台运行
|
64 |
+
docker-compose up -d --build
|
65 |
```
|
66 |
|
67 |
+
### 使用 Docker 直接构建
|
68 |
|
69 |
+
```bash
|
70 |
+
# 构建镜像
|
71 |
+
docker build -t wordpress-sqlite .
|
72 |
|
73 |
+
# 运行容器
|
74 |
+
docker run -p 7860:7860 wordpress-sqlite
|
75 |
```
|
76 |
|
77 |
+
### 本地开发配置
|
78 |
|
79 |
+
- 数据持久化:使用 Docker volumes 保存数据
|
80 |
+
- 主题开发:可以挂载本地主题目录
|
81 |
+
- 插件开发:可以挂载本地插件目录
|
82 |
+
- 配置文件:可以修改 `config/wp_php.ini`
|
83 |
|
84 |
+
## 🔧 功能特性
|
85 |
|
86 |
+
### ✅ SQLite 数据库
|
87 |
+
- 无需外部数据库服务
|
88 |
+
- 数据存储在 `/var/www/html/wp-content/database/`
|
89 |
+
- 自动配置 SQLite Integration 插件
|
90 |
|
91 |
+
### ✅ GitHub 自动备份
|
92 |
+
- **启动时恢复**: Space 重启时自动从 GitHub 加载最近 30 天的备份
|
93 |
+
- **手动备份**: 可以手动运行备份脚本
|
94 |
+
- **备份内容**: SQLite 数据库 + 上传文件
|
95 |
|
96 |
+
### ✅ Hugging Face Space 优化
|
97 |
+
- 端口 7860 (HF Space 标准端口)
|
98 |
+
- 内存优��配置
|
99 |
+
- 健康检查支持
|
100 |
|
101 |
+
## 📖 使用说明
|
|
|
|
|
102 |
|
103 |
+
### 访问 WordPress
|
104 |
|
105 |
+
**Hugging Face Space:**
|
106 |
+
- **前台**: `https://your-space-name.hf.space/`
|
107 |
+
- **后台**: `https://your-space-name.hf.space/wp-admin/`
|
|
|
108 |
|
109 |
+
**本地开发:**
|
110 |
+
- **前台**: `http://localhost:7860/`
|
111 |
+
- **后台**: `http://localhost:7860/wp-admin/`
|
112 |
|
113 |
+
### 初次设置
|
|
|
|
|
114 |
|
115 |
+
1. 访问你的 Space URL
|
116 |
+
2. 按照 WordPress 安装向导完成设置
|
117 |
+
3. 创建管理员账户
|
118 |
+
4. 开始使用 WordPress
|
119 |
|
120 |
+
### 手动备份到 GitHub
|
121 |
|
122 |
+
如果配置了 GitHub 环境变量,可以手动创建备份:
|
123 |
+
|
124 |
+
```bash
|
125 |
+
# 在 Space 的终端中运行
|
126 |
+
/usr/local/bin/backup-wordpress.sh
|
127 |
```
|
128 |
|
129 |
+
## 🔍 故障排除
|
130 |
|
131 |
+
### 1. Space 无法启动
|
132 |
+
- 检查 Dockerfile 语法
|
133 |
+
- 确认端口设置为 7860
|
134 |
+
- 查看构建日志中的错误信息
|
135 |
|
136 |
+
### 2. WordPress 显示 403 错误
|
137 |
+
- 等待容器完全启动 (1-2 分钟)
|
138 |
+
- 检查健康检查状态
|
139 |
+
- 确认 SQLite 插件正确安装
|
140 |
|
141 |
+
### 3. GitHub 备份失败
|
142 |
+
- 验证 `GITHUB_TOKEN` 和 `GITHUB_REPO` 环境变量
|
143 |
+
- 确认 GitHub Token 有正确权限
|
144 |
+
- 检查仓库中是否存在 `backups` 文件夹
|
145 |
|
146 |
+
### 4. 数据丢失
|
147 |
+
- Space 重启时会自动尝试从 GitHub 恢复备份
|
148 |
+
- 手动恢复:将备份文件解压到相应目录
|
149 |
|
150 |
+
## 📁 项目结构
|
151 |
|
152 |
```
|
153 |
+
.
|
154 |
+
├── Dockerfile # Docker 构建文件 (HF Space)
|
155 |
+
├── app.py # HF Space 入口文件
|
156 |
+
├── requirements.txt # Python 依赖 (HF Space)
|
157 |
+
├── spaces.yml # HF Space 配置
|
158 |
+
├── README.md # 项目说明
|
159 |
+
├── DEPLOYMENT_GUIDE.md # 部署指南
|
160 |
+
├── docker-compose.yml # Docker Compose (SQLite)
|
161 |
+
├── docker-compose.local.yml # 本地开发配置
|
162 |
+
├── docker-compose.mysql.yml # MySQL 版本 (备份)
|
163 |
+
├── config/
|
164 |
+
│ ├── wp_php.ini # PHP 配置
|
165 |
+
│ └── pma_php.ini # phpMyAdmin 配置 (MySQL版本)
|
166 |
+
├── .dockerignore # Docker 忽略文件
|
167 |
+
└── env.example # 环境变量示例 (MySQL版本)
|
168 |
```
|
169 |
|
170 |
+
## 🔒 安全注意事项
|
171 |
|
172 |
+
1. **GitHub Token 安全**:
|
173 |
+
- 使用最小权限原则
|
174 |
+
- 定期轮换 Token
|
175 |
+
- 不要在代码中硬编码 Token
|
176 |
|
177 |
+
2. **WordPress 安全**:
|
178 |
+
- 使用强密码
|
179 |
+
- 定期更新 WordPress 和插件
|
180 |
+
- 限制管理员访问
|
181 |
|
182 |
+
3. **备份安全**:
|
183 |
+
- 备份仓库设为私有
|
184 |
+
- 定期检查备份完整性
|
185 |
|
186 |
+
## 📝 更新日志
|
187 |
|
188 |
+
- **v1.0.0**: 初始版本,支持 SQLite 和 GitHub 备份
|
189 |
+
|
190 |
+
## 🤝 贡献
|
191 |
+
|
192 |
+
欢迎提交 Issue 和 Pull Request!
|
193 |
+
|
194 |
+
## 📄 许可证
|
195 |
|
196 |
+
本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。
|
197 |
|
198 |
+
---
|
199 |
|
200 |
+
**注意**: 这是一个为 Hugging Face Spaces 特别优化的 WordPress 部署方案。如果你需要在其他平台部署,可能需要调整配置。
|
app.py
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Hugging Face Space entry point for WordPress with SQLite
|
4 |
+
This file is required by Hugging Face Spaces to properly start the Docker container.
|
5 |
+
"""
|
6 |
+
|
7 |
+
import os
|
8 |
+
import subprocess
|
9 |
+
import time
|
10 |
+
import sys
|
11 |
+
|
12 |
+
def main():
|
13 |
+
"""
|
14 |
+
Main entry point for the Hugging Face Space
|
15 |
+
This will start the WordPress container and keep it running
|
16 |
+
"""
|
17 |
+
print("🚀 Starting WordPress with SQLite for Hugging Face Space...")
|
18 |
+
|
19 |
+
# Check if we're running in a Docker container
|
20 |
+
if os.path.exists('/.dockerenv'):
|
21 |
+
print("✅ Running inside Docker container")
|
22 |
+
# If we're in Docker, the container should already be set up
|
23 |
+
# Just keep the process alive
|
24 |
+
try:
|
25 |
+
while True:
|
26 |
+
time.sleep(60)
|
27 |
+
# Optional: Add health check here
|
28 |
+
print("💓 WordPress container is running...")
|
29 |
+
except KeyboardInterrupt:
|
30 |
+
print("\n🛑 Shutting down WordPress...")
|
31 |
+
sys.exit(0)
|
32 |
+
else:
|
33 |
+
print("❌ This should run inside a Docker container")
|
34 |
+
print("Please deploy this to Hugging Face Spaces with Docker SDK")
|
35 |
+
sys.exit(1)
|
36 |
+
|
37 |
+
if __name__ == "__main__":
|
38 |
+
main()
|
requirements.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Requirements for Hugging Face Space
|
2 |
+
# This WordPress deployment primarily uses Docker,
|
3 |
+
# but this file is included for HF Space compatibility
|
4 |
+
|
5 |
+
# Basic Python dependencies (minimal)
|
6 |
+
requests>=2.25.0
|
spaces.yml
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: WordPress with SQLite
|
2 |
+
sdk: docker
|
3 |
+
app_port: 7860
|
4 |
+
colorFrom: blue
|
5 |
+
colorTo: purple
|
6 |
+
short_description: WordPress with SQLite database and GitHub backup support
|
7 |
+
description: |
|
8 |
+
A complete WordPress installation with SQLite database support, optimized for Hugging Face Spaces.
|
9 |
+
Features include:
|
10 |
+
- SQLite database (no external database required)
|
11 |
+
- GitHub automatic backup and restore
|
12 |
+
- Optimized for Hugging Face Spaces
|
13 |
+
- Easy deployment and management
|
14 |
+
|
15 |
+
tags:
|
16 |
+
- wordpress
|
17 |
+
- sqlite
|
18 |
+
- cms
|
19 |
+
- blog
|
20 |
+
- website
|
21 |
+
- backup
|
22 |
+
- github
|
23 |
+
|
24 |
+
license: mit
|
25 |
+
|
26 |
+
# Environment variables (optional)
|
27 |
+
# Users can set these in their Space settings:
|
28 |
+
# GITHUB_TOKEN: GitHub Personal Access Token for backup functionality
|
29 |
+
# GITHUB_REPO: GitHub repository path (username/repository-name) for backups
|