Debian服务器上ThinkPHP的部署策略
导读:Debian服务器上部署 ThinkPHP 的策略 一 架构与前置准备 运行环境建议:使用 Nginx + PHP-FPM + MariaDB/MySQL,Web 根目录指向项目的 public 目录,开启 URL 重写 以兼容 Thin...
Debian服务器上部署 ThinkPHP 的策略
一 架构与前置准备
- 运行环境建议:使用 Nginx + PHP-FPM + MariaDB/MySQL,Web 根目录指向项目的 public 目录,开启 URL 重写 以兼容 ThinkPHP 路由。
- 安装基础组件(以 Debian 11/12 为例,PHP 版本可按需选择,如 PHP 8.1/8.2):
- 更新索引并安装软件包:
- sudo apt update & & sudo apt upgrade -y
- sudo apt install -y nginx mariadb-server composer
- sudo apt install -y php php-fpm php-mysql php-mbstring php-xml php-curl php-gd php-zip
- 验证版本:php -v、nginx -v、mysql --version
- 更新索引并安装软件包:
- 创建项目与目录(示例以 ThinkPHP 6 为例):
- 使用 Composer 创建:composer create-project topthink tp6
- 目录建议:/var/www/tp6,Web 根指向:/var/www/tp6/public
- 目录权限与属主(以 www-data 为运行用户):
- sudo chown -R www-data:www-data /var/www/tp6
- find /var/www/tp6 -type d -exec chmod 755 { } ;
- find /var/www/tp6 -type f -exec chmod 644 { } ;
- chmod -R 775 /var/www/tp6/runtime
- 数据库准备(安全初始化后):
- sudo mysql_secure_installation
- 登录 MariaDB:sudo mysql -u root -p
- 创建库与用户并授权:
- CREATE DATABASE tp6 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘tp6’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT ALL PRIVILEGES ON tp6.* TO ‘tp6’@‘localhost’;
- FLUSH PRIVILEGES;
- 防火墙放行(如使用 UFW):sudo ufw allow ‘Nginx Full’。
二 Web 服务器与路由配置
- Nginx 推荐配置(站点文件:/etc/nginx/sites-available/tp6):
- 核心要点:root 指向 public;try_files 支持 PATH_INFO;fastcgi_pass 与系统 PHP-FPM 套接字一致;禁止访问 .env。
- 示例:
- server {
listen 80;
server_name your.domain.com;
root /var/www/tp6/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# 按实际版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.env {
deny all;
}
可选:静态资源缓存
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control “public, immutable”; } }
- server {
listen 80;
server_name your.domain.com;
root /var/www/tp6/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# 按实际版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.env {
deny all;
}
- 启用站点并校验:
- sudo ln -s /etc/nginx/sites-available/tp6 /etc/nginx/sites-enabled/
- sudo nginx -t & & sudo systemctl reload nginx
- Apache 可选方案(启用重写):
- 启用模块:sudo a2enmod rewrite
- 虚拟主机示例(DocumentRoot 指向项目根目录,依赖 .htaccess 将请求导向 public/index.php):
- < VirtualHost *:80> ServerName your.domain.com DocumentRoot /var/www/tp6 < Directory /var/www/tp6> Options Indexes FollowSymLinks AllowOverride All Require all granted ErrorLog ${ APACHE_LOG_DIR} /error.log CustomLog ${ APACHE_LOG_DIR} /access.log combined
- 启用站点:sudo a2enmod rewrite & & sudo systemctl reload apache2。
三 应用配置与数据库接入
- 环境配置:
- 复制 .env.example 为 .env,配置数据库连接与密钥:
- DB_TYPE=mysql
- DB_HOST=127.0.0.1
- DB_NAME=tp6
- DB_USER=tp6
- DB_PWD=StrongPass!
- DB_PORT=3306
- APP_DEBUG=false
- APP_ENV=production
- 如项目使用多模块或自定义目录,确保 runtime、cache、log 等可写。
- 复制 .env.example 为 .env,配置数据库连接与密钥:
- Composer 与依赖:
- 进入项目目录执行:composer install --optimize-autoloader --no-dev
- 可选:配置国内镜像加速(首次或全局):composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 可选缓存与会话(提升性能与并发):
- 使用 Redis 作为缓存/会话存储(需安装 php-redis 并在配置中启用)。
四 安全与性能优化
- 安全基线:
- 关闭调试:将 APP_DEBUG 设为 false;生产环境禁用 whoops 等开发组件。
- 保护敏感文件:禁止访问 .env、.git 等;Nginx 中 location ~ /.env { deny all; } 。
- 最小权限:运行用户为 www-data,仅赋予必要目录写权限(如 runtime)。
- 数据库安全:仅本地访问、强口令、最小权限、定期备份。
- 性能优化:
- 启用 OPcache(生产环境强烈建议):在 php.ini 中设置
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.validate_timestamps=0(配合部署流程热更新)
- 静态资源:配置长期 Cache-Control/Expires,使用 gzip/brotli 压缩(Nginx 启用 gzip_static)。
- 会话与缓存:优先 Redis,减少数据库压力。
- 启用 OPcache(生产环境强烈建议):在 php.ini 中设置
五 部署流程与常见问题
- 标准化部署流程:
- 代码获取:git clone 或 rsync 到 /var/www/tp6
- 安装依赖:composer install --optimize-autoloader --no-dev
- 配置:.env 数据库与密钥、APP_DEBUG=false
- 权限:chown/chmod,确保 runtime 可写
- 数据库迁移/初始化:php think migrate:run(如有迁移脚本)
- Nginx/Apache 校验与重载:nginx -t & & systemctl reload nginx
- 健康检查:curl -I https://your.domain.com 或查看日志 tail -f /var/log/nginx/error.log
- 常见问题速查:
- 502 Bad Gateway:检查 PHP-FPM 是否运行(systemctl status php8.2-fpm)、Nginx 中 fastcgi_pass 套接字路径是否一致。
- 路由 404/白屏:确认 root 指向 public;Nginx 包含 try_files $uri $uri/ /index.php?$query_string; 并确保 PATH_INFO 可用。
- Composer 安装慢:设置国内镜像 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。
- 权限错误:确认 runtime、日志、缓存目录属主为 www-data 且可写。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian服务器上ThinkPHP的部署策略
本文地址: https://pptw.com/jishu/787526.html
