繁体   English   中英

部署Laravel到Azure时宕机

[英]Downtime when deploying Laravel to Azure

我正在将 laravel 站点部署到 Azure Web 应用程序(运行 linux)。

升级到 PHP 8 和 nginx 后,我在部署后遇到了更多的停机时间。 几分钟的 nginx Bad Gateway 错误。

为了让 laravel 与 nginx 一起工作,我需要将 nginx conf 文件从我的项目复制到服务器上的 nginx 配置中。

我在部署后运行 startup.sh,第一行有以下命令:

cp /home/site/wwwroot/devops/nginx.conf /etc/nginx/sites-available/default;
service nginx reload

我的 nginx.conf 的内容:

server {
    # adjusted nginx.conf to make Laravel 8 apps with PHP 8.0 features runnable on Azure App Service
    # @see https://laravel.com/docs/8.x/deployment
    listen 8080;
    listen [::]:8080;
    root /home/site/wwwroot/public;
    index index.php;

    client_max_body_size 100M;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    gzip on;
    gzip_proxied    any;
    gzip_min_length 256;
    gzip_types
      application/atom+xml
      application/geo+json
      application/javascript
      application/x-javascript
      application/json
      application/ld+json
      application/manifest+json
      application/rdf+xml
      application/rss+xml
      application/xhtml+xml
      application/xml
      font/eot
      font/otf
      font/ttf
      image/svg+xml
      text/css
      text/javascript
      text/plain
      text/xml;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_connect_timeout         300;
        fastcgi_send_timeout           3600;
        fastcgi_read_timeout           3600;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}

我也尝试过使用 Azure 部署槽,但交换是在 Bad Gateway 错误消失之前发生的。

我还能做些什么来最大程度地减少停机时间/项目重新启动和运行的时间吗?

“Bad Gateway”错误表明 Nginx 无法连接到后端,在本例中为 PHP-FPM。

您可以尝试采取一些措施来最大程度地减少停机时间:

  • 增加 nginx 配置文件中的 fastcgi_connect_timeout、fastcgi_send_timeout 和 fastcgi_read_timeout 值。 这将使 PHP-FPM 有更多时间启动和响应请求。

  • 优化您的 PHP 代码。 确保您的代码针对性能进行了优化,因为这将有助于减少网站启动所需的时间。

  • 使用 Azure Deployment Slots 进行测试。 部署槽允许您在将代码部署到生产环境之前在暂存环境中测试您的代码。 这有助于降低生产环境停机的风险。

  • 尝试确保您的 PHP-FPM 和 nginx 服务始终处于运行状态,并且在服务器启动时自动启动它们。

  • 尝试通过使用滚动升级的部署过程来减少部署期间所需的重新启动次数。

  • 最后,您可以尝试先部署一个简单的 HTML 文件,然后再部署 Laravel 代码库。 这将确保 web 服务器和 PHP 在部署 Laravel 代码库之前正常工作。

通过反复试验找出适合您的用例的最佳解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM