From ac48983b6657611f1981d1beef8c9dc2f7f83e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E9=97=BB=E9=A3=8E?= Date: Wed, 24 Jun 2026 18:04:15 +0800 Subject: [PATCH] up --- DEPLOY.md | 286 ++++++++++++++++++++++++++++++++++++++++++++++++ includes/db.php | 22 +++- 2 files changed, 306 insertions(+), 2 deletions(-) create mode 100644 DEPLOY.md diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..a291267 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,286 @@ +# Linux 服务器部署指南 + +## 快速修复数据库权限问题 + +如果遇到 `unable to open database file` 错误,执行以下命令: + +```bash +# 进入项目目录 +cd /path/to/php_app_downloader + +# 确保 data 目录及子目录存在 +mkdir -p data/apps data/uploads + +# 设置 data 目录权限(关键步骤) +chmod 777 data +chmod 777 data/apps +chmod 777 data/uploads + +# 如果数据库文件已存在,设置其权限 +chmod 666 data/database.db + +# 设置所有者为 Web 服务器用户(可选,推荐) +# Apache 用户通常是 www-data 或 apache +# Nginx 用户通常是 www-data 或 nginx +chown -R www-data:www-data data/ +``` + +## 完整部署步骤 + +### 1. 上传文件 + +将所有项目文件上传到服务器,例如: +```bash +/var/www/html/php_app_downloader/ +``` + +### 2. 创建必要的目录 + +```bash +cd /var/www/html/php_app_downloader +mkdir -p data/apps data/uploads +``` + +### 3. 设置权限 + +**方法一:简单粗暴(适合测试环境)** +```bash +chmod -R 777 data/ +``` + +**方法二:更安全(推荐生产环境)** +```bash +# 设置目录所有者为 Web 服务器用户 +chown -R www-data:www-data data/ + +# 设置目录权限 +chmod 755 data/ +chmod 755 data/apps/ +chmod 755 data/uploads/ + +# 确保 Web 服务器可以写入 +chmod g+w data/ +chmod g+w data/apps/ +chmod g+w data/uploads/ +``` + +### 4. 验证权限 + +```bash +ls -la data/ +``` + +应该看到类似输出: +``` +drwxrwxr-x 4 www-data www-data 4096 Jun 24 17:36 . +drwxr-xr-x 8 www-data www-data 4096 Jun 24 17:36 .. +drwxrwxr-x 2 www-data www-data 4096 Jun 24 17:36 apps +drwxrwxr-x 2 www-data www-data 4096 Jun 24 17:36 uploads +``` + +### 5. 配置 Web 服务器 + +#### Apache (.htaccess) + +如果使用 Apache,可以在项目根目录创建 `.htaccess`: + +```apache +# 禁止直接访问 data 目录 + + Order Deny,Allow + Deny from all + + +# 允许下载 APK 文件 + + Order Allow,Deny + Allow from all + + +# PHP 配置 +php_value upload_max_filesize 100M +php_value post_max_size 100M +php_value max_execution_time 300 +``` + +#### Nginx (nginx.conf) + +```nginx +server { + listen 80; + server_name your-domain.com; + root /var/www/html/php_app_downloader; + index index.php index.html; + + # 上传文件大小限制 + client_max_body_size 100M; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + # 禁止直接访问 data 目录(除了 APK 文件) + location ~ ^/data/(?!apps/.*\.apk$) { + deny all; + } + + # PHP 处理 + location ~ \.php$ { + fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } +} +``` + +### 6. PHP 配置检查 + +确保 PHP 配置允许上传大文件: + +```bash +# 编辑 php.ini +sudo nano /etc/php/7.4/fpm/php.ini + +# 修改以下配置 +upload_max_filesize = 100M +post_max_size = 100M +max_execution_time = 300 +memory_limit = 256M + +# 重启 PHP-FPM +sudo systemctl restart php7.4-fpm +``` + +### 7. 测试 + +1. 访问主页:`http://your-domain.com/` +2. 访问后台:`http://your-domain.com/admin/` +3. 使用 `admin/admin` 登录 +4. 尝试上传一个 APK 文件 + +## 常见问题排查 + +### 问题 1: unable to open database file + +**原因:** data 目录不可写 + +**解决:** +```bash +chmod 777 data/ +chown www-data:www-data data/ +``` + +### 问题 2: 文件上传失败 + +**原因:** PHP 上传限制或目录权限 + +**解决:** +```bash +# 检查 PHP 配置 +php -i | grep upload_max_filesize +php -i | grep post_max_size + +# 设置目录权限 +chmod 777 data/apps/ +``` + +### 问题 3: 图片不显示 + +**原因:** Logo 路径错误或文件权限 + +**解决:** +```bash +# 检查 logo.png 权限 +chmod 644 logo.png + +# 检查上传目录权限 +chmod 777 data/uploads/ +``` + +### 问题 4: Session 问题导致无法登录 + +**原因:** PHP session 目录不可写 + +**解决:** +```bash +# 检查 session 目录 +ls -la /var/lib/php/sessions/ + +# 设置权限 +sudo chmod 733 /var/lib/php/sessions/ +sudo chown root:www-data /var/lib/php/sessions/ +``` + +## 安全加固建议 + +### 1. 修改默认密码 + +编辑 `admin/index.php`,找到: +```php +if ($username === 'admin' && $password === 'admin') { +``` + +修改为: +```php +if ($username === 'admin' && $password === 'your_strong_password') { +``` + +### 2. 限制后台访问 + +在 Nginx 中添加 IP 白名单: +```nginx +location /admin/ { + allow 192.168.1.100; # 你的 IP + deny all; +} +``` + +### 3. 启用 HTTPS + +使用 Let's Encrypt 免费证书: +```bash +sudo apt install certbot python3-certbot-nginx +sudo certbot --nginx -d your-domain.com +``` + +### 4. 定期备份 + +创建备份脚本: +```bash +#!/bin/bash +# backup.sh +DATE=$(date +%Y%m%d_%H%M%S) +tar -czf /backup/app_backup_$DATE.tar.gz /var/www/html/php_app_downloader/data/ +``` + +## 监控和维护 + +### 检查磁盘空间 +```bash +df -h +du -sh data/apps/ +``` + +### 清理旧版本 +定期在管理后台删除不需要的旧版本 + +### 日志监控 +```bash +# Apache 日志 +tail -f /var/log/apache2/error.log + +# Nginx 日志 +tail -f /var/log/nginx/error.log + +# PHP 日志 +tail -f /var/log/php7.4-fpm.log +``` + +--- + +如有问题,请检查: +1. PHP 版本 >= 7.0 +2. SQLite 扩展已启用 +3. data 目录权限正确 +4. Web 服务器用户有写入权限 diff --git a/includes/db.php b/includes/db.php index e17bc59..c0e5a05 100644 --- a/includes/db.php +++ b/includes/db.php @@ -1,9 +1,24 @@ setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); @@ -42,8 +57,11 @@ try { foreach ($defaults as $config) { $stmt->execute($config); } + + // 设置新创建的数据库文件权限 + @chmod($db_path, 0666); } } catch (PDOException $e) { - die("数据库连接失败: " . $e->getMessage()); + die("数据库连接失败: " . $e->getMessage() . "

请确保:
1. data 目录存在且可写 (chmod 777 data)
2. Web 服务器用户有权限创建文件"); }