本文目录导读:

我来全面介绍PHP应用的托管方案,从基础到进阶:
托管方式分类
共享主机(Shared Hosting)
- 特点:成本低,管理简单
- 适用:小型网站、个人项目
- 提供商:Bluehost、HostGator、阿里云虚拟主机
VPS(虚拟专用服务器)
- 特点:更多控制权,可定制
- 适用:中型应用、电商网站
- 成本:$5-50/月
- 操作系统:Linux(推荐CentOS/Ubuntu)
部署方式详解
传统LAMP/LEMP栈部署
# Ubuntu/Debian 安装LAMP sudo apt update sudo apt install apache2 mysql-server php php-mysql # 安装LEMP(Nginx) sudo apt install nginx mysql-server php-fpm php-mysql
Apache配置示例:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Nginx配置示例:
server {
listen 80;
server_name example.com;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
使用Docker容器化
Dockerfile:
FROM php:8.2-fpm # 安装扩展 RUN docker-php-ext-install pdo_mysql mysqli mbstring # 复制应用 COPY . /var/www/html # 设置权限 RUN chown -R www-data:www-data /var/www/html WORKDIR /var/www/html
docker-compose.yml:
version: '3'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./app:/var/www/html
depends_on:
- php
php:
build: .
volumes:
- ./app:/var/www/html
environment:
- DB_HOST=mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: app_db
PaaS平台托管
Heroku:
# 创建Procfile web: vendor/bin/heroku-php-apache2 public/ # 部署 heroku create app-name git push heroku main
Vercel:
// vercel.json
{
"functions": {
"api/*.php": {
"runtime": "vercel-php@0.6.0"
}
},
"routes": [
{ "src": "/(.*)", "dest": "/api/index.php" }
]
}
框架特定部署
Laravel部署
# 服务器要求 composer install --optimize-autoloader --no-dev php artisan config:cache php artisan route:cache php artisan view:cache # 目录权限 chmod -R 775 storage bootstrap/cache
WordPress部署
- 使用专业的WordPress托管(如WP Engine)
- 或者手动配置Nginx + PHP-FPM
- 使用Redis/Memcached缓存
性能优化
PHP-FPM优化
; /etc/php/8.2/fpm/pool.d/www.conf pm = dynamic pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20
开启OPcache
; php.ini opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60
使用CDN
- CloudFlare(免费) -阿里云CDN
- AWS CloudFront
安全配置
PHP安全配置
; php.ini expose_php = Off disable_functions = exec,shell_exec,system,passthru,popen open_basedir = /var/www/html:/tmp
使用SSL
# Let's Encrypt免费SSL sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d example.com
防火墙配置
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw deny 22/tcp
监控与日志
日志配置
; php.ini error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT log_errors = On error_log = /var/log/php/error.log
使用监控工具
- New Relic(APM监控)
- Sentry(错误追踪)
- Datadog(性能监控)
自动部署CI/CD
# GitHub Actions示例
name: Deploy to Production
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/html
git pull origin main
composer install --no-dev
php artisan migrate
推荐的具体方案
小项目($0-10/月)
- Vercel/Netlify (静态+API)
- Heroku免费层
- 虚拟主机(Bluehost基础版)
中等项目($20-100/月)
- DigitalOcean VPS ($5/月起)
- AWS EC2 t3.micro
- Linode 2GB实例
大型项目($100+/月)
- AWS Elastic Beanstalk
- Google Cloud Run
- 阿里云ECS + RDS
常见问题解决
500错误排查
# 检查错误日志 tail -f /var/log/nginx/error.log tail -f /var/log/php-fpm/error.log
权限问题
# 修复目录权限
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
需要我详细说明某个具体托管方案的实现步骤吗?