sme*_*zer 8 ssl laravel docker laravel-8 laravel-sail
我刚刚按照他们的文档中的说明创建了一个新的 Laravel 8 项目。使用Laravel Sail我在我的机器上本地运行该站点,使用sail up. 我设置了一个条目/etc/hosts,因此URL我去的是http://local.dev.domain.com(取代domain.com了我自己的实际域名,并指向localhost了在/etc/hosts文件中)......所有的伟大工程。
但是,该站点需要使用 Facebook 登录,而 Facebook 仅在推荐人上需要 https 网址。我已经尝试了所有可以在网上找到的有关mkcert使用 docker设置 SSL 证书的方法,但是使用手动创建的证书(通过)设置 nginx或尝试使用 letencrypt 都因各种原因而失败(端口冲突,letsencrypting 希望域成为一个真正的(和失败,如果我做创建一个子域极致挑战),我复制证书要等/etc/ssl/certs泊坞窗图像和运行中update-ca-certificates,尝试设置应用程序端口443在我的.env文件,以及打开两个端口80,并443在docker-compose.yml文件...但一切都以浏览器拒绝请求而告终https://local.dev.domain.com
我花了几个小时试图让它工作,但似乎没有人使用带有 SSL 的 Laravel Sail docker 镜像。
任何指针?
[编辑以获取更多信息] 正如评论中所指出的,您需要将别名设置为仅使用sail ...,但我已经这样做了:
我也试过不使用 bash 别名vendor/bin/sail share,但无济于事:
在您的情况下,您需要一个真正的域,您拥有。自签名证书将不起作用,因为 Facebook 不会承认它是可信的。要获得该域的免费 ssl 证书,您可以使用 Let's Encrypt,获得该证书的最简单方法是使用 certbot。问题是您需要在您的网络服务器上安装该证书。不幸的是,Laravel Sail使用不支持 ssl的内置网络服务器。您需要在应用程序前面放置一个像 nginx 这样的网络服务器并在那里安装证书。
现在您可以使用 Expose 提供的内置隧道:https : //beyondco.de/docs/expose/server/ssl
这是通过 sail share
改用ngrok可能更容易,它本质上是一样的,但很商业化。您所要做的就是下载、注册和运行ngrok http --region=eu 9000,它会为您创建一个用于开发的 https 链接。
我通过使用Caddy作为 Laravel Sail 容器的反向代理解决了这个问题。Caddy 有一个称为自动 HTTPS 的功能,可以动态生成本地证书。
1 - 将 Caddy 添加为您的服务docker-compose.yml
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- '80:80'
- '443:443'
volumes:
- './docker/Caddyfile:/etc/caddy/Caddyfile'
- sailcaddy:/data
- sailcaddy:/config
networks:
- sail
# Remove "ports" from laravel.test service
volumes:
sailcaddy:
driver: local
Run Code Online (Sandbox Code Playgroud)
2 - 创建一个简单的Caddyfile并将其配置为反向代理
{
on_demand_tls {
ask http://laravel.test/caddy-check
}
local_certs
}
:443 {
tls internal {
on_demand
}
reverse_proxy laravel.test {
header_up Host {host}
header_up X-Real-IP {remote}
header_up X-Forwarded-For {remote}
header_up X-Forwarded-Port {server_port}
header_up X-Forwarded-Proto {scheme}
health_timeout 5s
}
}
Run Code Online (Sandbox Code Playgroud)
3 - 为 Caddy 设置端点以授权其为其生成证书的域
<?php
namespace App\Http\Controllers;
use App\Store;
use Illuminate\Http\Request;
class CaddyController extends Controller
{
public function check(Request $request)
{
$authorizedDomains = [
'laravel.test',
'www.laravel.test',
// Add subdomains here
];
if (in_array($request->query('domain'), $authorizedDomains)) {
return response('Domain Authorized');
}
// Abort if there's no 200 response returned above
abort(503);
}
}
Run Code Online (Sandbox Code Playgroud)
有关涉及的完整代码更改,请参阅此要点。这篇博文解释了如何信任 Caddy 根证书。
| 归档时间: |
|
| 查看次数: |
4397 次 |
| 最近记录: |