up
This commit is contained in:
@@ -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
@@ -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 服务器用户有权限创建文件");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user