【问题标题】:install wildcard lets encrypt ssl certificate on laravel sail安装通配符可以在 laravel 帆上加密 ssl 证书
【发布时间】:2021-07-10 10:00:55
【问题描述】:

我使用 laravel 8 和第一方软件包 laravel Sails (Docker) 和 tenancy for laravel

创建了一个 SaaS 应用

SaaS 软件包。 我需要在主应用程序上安装通配符让加密 SSL,所有租户应用程序都将使用 HTTPS。 我试着像这样安装certbot image

  certbot:
    image: certbot/certbot:latest

图像已安装,但我不知道之后该做什么。

我尝试不使用 docker 使用 certbot instructions 它已经安装并且一切都成功了,但是网站没有打开并且所有的请求都超时了。

更新:

这是我的 docker-compose.yml 文件中的端口部分

ports:
    - '443:443'

我运行了docker ps,所有服务都已启动并运行。

我跑了sudo ufw status,这就是结果

【问题讨论】:

    标签: laravel docker ssl lets-encrypt laravel-sail


    【解决方案1】:

    TLDR:Laravel 帆不适用于生产。使用不同的 docker 配置,如果需要示例,可以在这里找到:https://github.com/thomasmoors/laravel-docker

    另外,通配符证书不能通过使用HTTP-01 challenges获得,你需要一个DNS-01 challenge,你可以通过在你的dns配置中添加一个txt记录来做到这一点。


    Let's Encrypt 的通配符证书只能使用DNS-01 challenge。但是,这需要您将 TXT 记录粘贴到您的 DNS 注册表中。所以除非你有一个 api 来改变你的 dns,否则不要使用通配符。可能值得一试:https://stackexchange.github.io/dnscontrol/ 但是我不知道你的域名提供商是否支持这个。

    对于常规(非通配符)证书:

    默认 Laravel Sail runs using the built in php artisan serve command-webserver,不支持 ssl 证书。所以你需要添加一个像nginx这样的反向代理。 正因为如此,我相信 Sai 没有准备好生产,也没有打算。我已经为 laravel 制作了一个非 Sail docker-compose 配置示例:https://github.com/thomasmoors/laravel-docker

    Certbot 工作 by placing a file on your webserver which will be retrieved for the challenge。但是,您当前的配置似乎没有在您的网络服务器和 Certbot 之间共享卷。您还需要允许 certbot 修改您的 nginx 配置。

    您的代码的默认位置是/var/www/html,因此您应该通过为 Certbot 服务添加一个卷来启用 Certbot 写入该目录:

    upstream sentry_docker {
            server 192.168.1.94:9005;
    }
    
    server {
    
        server_name example.dev;
    
    
    
         location / {
    
    
                   proxy_pass http://sentry_docker;
                   proxy_set_header Host $host;
    }
    
    
    
    
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/example.dev/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.dev/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    }
    
    
    
    
    
    
    
    server {
        if ($host = example.dev) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
    
        server_name example.dev;
        listen 80;
        return 404; # managed by Certbot
    
    
    }
    
         certbot:
            image: certbot/certbot:latest
            volumes:
              - .:/var/www/html
              - ./data/nginx:/etc/nginx/conf.d
    
    

    【讨论】:

      【解决方案2】:

      没有足够的信息可以帮助您,但我可以建议您查看本指南https://github.com/Daanra/laravel-lets-encrypt 并仔细检查您的配置。 如果网站没有显示,根据错误,问题可能与网络(防火墙)或其他原因(应用程序未运行并将自身绑定到 http 请求的端口 80 和 https 的 443 端口)有关。

      【讨论】:

      • 我更新了问题,请检查。关于“仔细检查您的配置”,如果您能指定哪个文件,我将不胜感激。
      • 当我启用sudo ufw allow 'Nginx Full' 时,域在端口80 上工作并显示nginx 默认页面,但https 不起作用。
      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多