This commit is contained in:
2026-06-24 18:04:15 +08:00
parent bc0223bf07
commit ac48983b66
2 changed files with 306 additions and 2 deletions
+286
View File
@@ -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 目录
<Directory "data">
Order Deny,Allow
Deny from all
</Directory>
# 允许下载 APK 文件
<FilesMatch "\.(apk)$">
Order Allow,Deny
Allow from all
</FilesMatch>
# 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 服务器用户有写入权限
+20 -2
View File
@@ -1,9 +1,24 @@
<?php
// 数据库连接和初始化
$db_path = __DIR__ . '/../data/database.db';
$data_dir = __DIR__ . '/../data';
$db_path = $data_dir . '/database.db';
$is_new_db = !file_exists($db_path);
// 检查 data 目录是否存在和可写
if (!is_dir($data_dir)) {
die("错误: data 目录不存在。请创建目录并设置权限: mkdir -p data && chmod 777 data");
}
if (!is_writable($data_dir)) {
die("错误: data 目录不可写。请设置权限: chmod 777 data");
}
// 如果数据库文件存在但不可写
if (file_exists($db_path) && !is_writable($db_path)) {
die("错误: 数据库文件不可写。请设置权限: chmod 666 data/database.db");
}
try {
$db = new PDO('sqlite:' . $db_path);
$db->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() . "<br><br>请确保:<br>1. data 目录存在且可写 (chmod 777 data)<br>2. Web 服务器用户有权限创建文件");
}