🌟 告别手动续期!Laravel项目自动管理SSL证书实战指南
🚀 一、3分钟极速安装
解决依赖冲突是关键!
# 基础安装
composer require daanra/laravel-lets-encrypt
# 遇Guzzle冲突时(Laravel老项目常见)
composer require daanra/laravel-lets-encrypt guzzlehttp/guzzle:^6
# 发布配置 & 迁移数据库
php artisan vendor:publish --provider="Daanra\LaravelLetsEncrypt\LetsEncryptServiceProvider"
php artisan migrate
💡 迁移失败?检查数据库连接配置!
⚙️ 二、核心配置详解
编辑 config/lets-encrypt.php:
return [
'domains' => ['yourdomain.com', 'api.yourdomain.com'], // 支持多域名!
'storage_path' => storage_path('app/letsencrypt'), // 证书安全存储
'webserver_software' => 'nginx', // 或 'apache'
'email' => 'admin@yourdomain.com', // 证书到期提醒邮箱
'environment' => env('LETS_ENCRYPT_ENV', 'staging'), // 测试用staging!
];
避坑指南:
- 测试阶段务必用 staging 环境,避免触发Let's Encrypt的5次/周申请限制
- 生产环境切换 production 后需重新生成证书
🔐 三、域名验证实战技巧
- HTTP-01挑战的终极解决方案 路由配置(routes/web.php)
Route::get('/.well-known/acme-challenge/{token}', function ($token) {
return Storage::get("public/.well-known/acme-challenge/{$token}");
})->withoutMiddleware(['web']); // 关键!跳过所有中间件
- 服务器配置 Nginx用户必加:
location ^~ /.well-known/acme-challenge/ {
alias /path/to/storage/app/public/.well-known/acme-challenge/;
try_files $uri =404;
}
⚡ 四、证书自动化管理
一条命令搞定全流程
# 生成证书(首次执行)
php artisan lets-encrypt:create yourdomain.com
# 设置自动续期(app/Console/Kernel.php)
protected function schedule(Schedule $schedule) {
$schedule->command('lets-encrypt:renew')->monthly();
}
✅ 证书自动存入 storage/app/letsencrypt/yourdomain.com ✅ 90天有效期自动续期,永久规避HTTPS中断风险
🚨 五、生产环境硬核部署
Web服务器配置示例
# Nginx配置片段
server {
listen 443 ssl;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
# 其他配置...
}
🔧 六、高频问题急救手册
问题现象解决方案
- 证书生成失败:检查 /.well-known 能否公开访问
- Apache报SSL协议错误:启用 sudo a2enmod ssl
- Laravel Sail无证书:容器挂载证书并配置 .env
- Websockets无法启用SSL:修改 config/websockets.php
🛡️ 七、企业级安全实践
- 证书监控:
php artisan lets-encrypt:check # 实时验证证书状态
搭配 Slack/邮件通知,到期前自动预警
- 私钥防护:
chmod 600 -R storage/app/letsencrypt # 禁止目录公开访问
终极提示:正式上线前,务必在 staging 环境完成全流程测试!避免操作失误导致生产环境被Let's Encrypt限流。
立即告别繁琐的证书续期,让HTTPS成为Laravel项目的默认安全基座!