部署指南
本指南介绍如何将逍遥图库系统部署到生产环境。
部署前准备
1. 服务器要求
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 1 核 | 2 核+ |
| 内存 | 1GB | 2GB+ |
| 硬盘 | 10GB | SSD 50GB+ |
| 带宽 | 1Mbps | 5Mbps+ |
2. 软件要求
- PHP 8.0+
- MySQL 8.0+
- Nginx / Apache / IIS
- Redis(推荐)
- Composer 2.0+
3. 生产环境检查清单
- [ ]
APP_DEBUG = false - [ ] 数据库密码已修改为强密码
- [ ] 目录权限已正确设置
- [ ] SSL 证书已配置
- [ ] 备份策略已制定
宝塔面板部署
宝塔面板是最简单的部署方式。
步骤 1:创建网站
- 登录宝塔面板
- 点击「网站」→「添加站点」
- 填写信息:
- 域名:
your-domain.com - 根目录:
/www/wwwroot/photo-gallery - PHP 版本:8.0+
- 数据库:MySQL
- 域名:
步骤 2:上传代码
方式一:FTP 上传
# 使用 FileZilla 等 FTP 工具上传
方式二:Git 部署
cd /www/wwwroot
git clone https://gitee.com/sinma/zeaya.git photo-gallery
步骤 3:配置网站
关键配置
运行目录必须设置为 /(根目录),不是 /public!
- 点击网站 → 设置
- 找到「网站目录」→「运行目录」
- 选择
/(根目录) - 保存
步骤 4:安装依赖
cd /www/wwwroot/photo-gallery
composer install --no-dev
步骤 5:配置环境
# 编辑 .env 文件
vi .env
修改以下配置:
APP_DEBUG = false
DB_HOST = 127.0.0.1
DB_NAME = your_database
DB_USER = your_username
DB_PASS = your_password
步骤 6:设置权限
# 设置所有者
chown -R www:www /www/wwwroot/photo-gallery
# 设置基本权限
chmod -R 755 /www/wwwroot/photo-gallery
# 设置写入权限
chmod -R 777 runtime
chmod -R 777 storage
# 保护 .env 文件
chmod 600 .env
步骤 7:导入数据库
- 宝塔面板 → 数据库 → 选择数据库 → 管理
- 点击「导入」
- 选择
database/migrations/create_tables.sql
步骤 8:配置伪静态
在网站设置中,选择「伪静态」→「thinkphp」
或手动配置 Nginx:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
}
步骤 9:配置 SSL
- 网站设置 → SSL
- 选择「Let's Encrypt」
- 点击「申请」
- 开启「强制 HTTPS」
Nginx 部署
完整配置示例
server {
listen 80;
listen [::]:80;
server_name your-domain.com;
# HTTP 重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-domain.com;
root /www/wwwroot/photo-gallery;
index index.php index.html;
# SSL 配置
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# 安全头
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
# 敏感目录保护
location ~ ^/(app|config|database|vendor|runtime|view)/ {
deny all;
}
# 隐藏文件保护
location ~ /\. {
deny all;
}
# 禁止上传目录执行 PHP
location ~* ^/(storage|static/uploads)/.*\.(php|phar)$ {
deny all;
}
# 静态资源缓存
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# URL 重写
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP 处理
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
Docker 部署
docker-compose.yml
version: '3'
services:
app:
image: php:8.2-fpm
volumes:
- ./:/var/www/html
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www/html
- ./webserver_config/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: photo_gallery
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
- redis_data:/data
volumes:
mysql_data:
redis_data:
启动:
docker-compose up -d
性能优化
1. PHP 配置优化
编辑 php.ini:
; 文件上传
upload_max_filesize = 10M
post_max_size = 20M
; 执行时间
max_execution_time = 300
; 内存
memory_limit = 256M
; OPcache(必须开启)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
2. MySQL 优化
# my.cnf
innodb_buffer_pool_size = 256M
query_cache_type = 1
query_cache_size = 32M
3. 启用 Redis 缓存
确保 .env 中配置了 Redis,并在 config/cache.php 中启用。
4. 启动队列监听
# 使用 Supervisor 管理队列
[program:zeaya-queue]
command=php /www/wwwroot/photo-gallery/think queue:listen
directory=/www/wwwroot/photo-gallery
autostart=true
autorestart=true
user=www
备份策略
数据库备份
# 每日备份
mysqldump -u root -p photo_gallery > backup_$(date +%Y%m%d).sql
# 使用宝塔面板计划任务
0 2 * * * mysqldump -u root -p photo_gallery | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz
文件备份
# 备份上传文件
tar -czf storage_$(date +%Y%m%d).tar.gz storage/
监控告警
1. 日志监控
定期检查 runtime/log/ 目录下的错误日志。
2. 服务监控
使用宝塔面板的监控功能,或安装 Prometheus + Grafana。
3. 磁盘监控
确保磁盘空间充足,特别是存储图片的目录。
常见问题
1. 502 Bad Gateway
原因:PHP-FPM 未启动或配置错误
解决:
# 检查 PHP-FPM 状态
systemctl status php8.2-fpm
# 重启
systemctl restart php8.2-fpm
2. 权限被拒绝
原因:目录权限不正确
解决:
chown -R www:www /www/wwwroot/photo-gallery
chmod -R 755 /www/wwwroot/photo-gallery
chmod -R 777 runtime storage
3. 数据库连接失败
原因:配置错误或 MySQL 未启动
解决:
- 检查
.env中的数据库配置 - 确认 MySQL 服务正在运行
- 检查数据库用户权限
