287 lines
5.2 KiB
Markdown
287 lines
5.2 KiB
Markdown
# 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 服务器用户有写入权限
|