Code前端首页关于Code前端联系我们

如何在Windows平台上部署Laravel项目?

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

Laravel 框架需要启用三个功能:PHP Web、队列和任务调度。官方文档仅包含 Linux 设置说明。虽然Linux纯CLI看起来更先进,但Windows也是一种解决方案。

PHP Web

参考 使用IIS在Windows上部署PHP项目,完成环境配置。

Laravel 项目 public 目录已包含用于 IIS 部署的 web.config 文件。内容是URL重写规则:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
          <match url="^(.*)/$" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="/{R:1}" />
        </rule>
        <rule name="Imported Rule 2" stopProcessing="true">
          <match url="^" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
复制代码

添加IIS站点时,站点的物理路径必须指向public 目录。一般来说,其他站点配置都是从根配置文件继承的,比如与FastCGI相关的配置。同时使用多个站点需要将域名与站点绑定,否则只有一个站点可以使用80端口。

域名之间的控制

您可以在MDN的文档中获取更多有关域名之间域名的信息- HTTP 访问控制 (CORS)。通过添加特殊响应标头来管理 Web 浏览器中的跨域限制。 IIS 可以在HTTP 响应头 中设置相应的响应头。

HTTP 响应标头 可以在 IIS 管理器中设置为全局设置或每个位置。如果针对站点进行配置,则会修改站点物理路径下的 web.config 文件。配置

后,您将看到 web.config 节点添加到 rewrite 节点之后。

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="example.com" />
    </customHeaders>
</httpProtocol>
复制代码

其他组装项目类似。推荐的方式是将更改后的web.config文件签入版本控制系统进行控制。

请注意,此处的设置适用于所有 URL。如果要针对特定​​的 URL 路径,需要手动添加以下内容 节点:

<location path="api">
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="example.com" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</location>
复制代码

如果需要更详细的 CORS 控制,则需要安装 IIS CORS 模块,请参见IIS CORS模块配置参考|用于配置的 Microsoft 文档。

当然,在PHP代码中控制更加灵活。

客户端缓存

Web客户端缓存主要对应Cache-ControlETagEag♷❀♷

标头控制,来自 HTTP 缓存 在 MDN 中查看文档请参阅developer.mozilla.org/zh-CN/docs/… 了解详细信息。

这里,客户端缓存控制主要是针对静态资源,动态资源可以通过代码来控制。默认情况下,HTTP客户端,包括APP开发中使用的浏览器和HTTP请求库,都是按照HTTP协议约定进行缓存的。

默认情况下,静态资源请求的 IIS 响应头包含 EtagLast-Modified。您可以通过

设置通用标头 选项 Cache-Control❀ 设置 HTTP 响应标头。响应头如下:
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Type: application/javascript
Content-Encoding: gzip
Last-Modified: Fri, 11 Jan 2019 15:06:10 GMT
Accept-Ranges: bytes
ETag: "05d6b2fbfa9d41:0"
Vary: Accept-Encoding
Date: Sat, 12 Jan 2019 17:26:08 GMT
Content-Length: 112411
复制代码

如果稍后站点操作完成,相关节点也会添加到项目中 web.config public 如果:则需要按目录引导,手动将以下内容添加到 节点:

<location path="favicon.ico">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
      </staticContent>
    </system.webServer>
</location>
复制代码

您可以获取更多关于 官方文档缓存的信息。 |微软文档。

SQL Server

如果您需要在 Windows 上部署 PHP Web 项目,那么 SQL Server 一定是一个非常常见的原因。

PHP 访问 SQL Server 数据库需要安装两个数据库驱动:

  • Microsoft Drivers for PHP for SQL Server
  • Microsoft ODBC Driver for SQL Server

影响因素是上述两个驱动的版本。 SQL Server 版本、PHP 版本和 Windows 版本。详细的对应关系可以参见官方文档 系统要求 Microsoft Drivers for PHP for SQL Server - SQL Server | Microsoft Drivers for PHP for SQL Server微软文档。

以 Laravel 5.7 为例 php> = 7.1.3 要求:

  • Microsoft Drivers for PHP SQL Server 5.3/5.2
  • Microsoft ODBC Driver for SQL Server 17+ /13.1 /11
  • SQL Server 2008 R2 ~ SQL Server 2017
  • Windows 10、Windows Server 2012 ~ Windows Server 2016

总结:生产环境至少只能选择Windows2 Server作为开发环境。

安装适用于 SQL Server 5.3 的 Microsoft PHP 驱动程序和适用于 SQL Server 17+ 的 Microsoft ODBC 驱动程序。配置PHP插件后,您可以从SQL Server 2008 R2到SQL Server 2017访问数据库。

Queue

队列在官方文档中的实现是Supervisor。您还可以在 Linux 上使用 systemd。在Windows中使用相同的想法,将队列作为系统服务运行需要使用NSSM——Non-Sucking Service Manager。

将下载的nssm.exe路径添加到系统路径变量中后,在命令行上使用nssm install

Path建议填写完整的php.exe路径,启动目录,填写项目启动目录。参数

操作参数artisan 队列:work sqs --sleep=3 --tries=3

其他需要考虑的事情是登录 该服务以用户身份运行,包括访问权限、环境变量和身份验证。一般情况下,保留本地系统帐户。如果使用指定用户,则如果用户的密码无效或已更改,服务将不会启动。

任务调度

任务调度和队列的区别在于执行周期不同。官方文档中实现任务调度的方法是使用crontab命令通过Windows计划任务每​​分钟调用一个任务条目。可以达到同样的目的。

打开计划任务程序并创建任务。根据日程

触发选择一次,但时间要根据经过的时间进行调整。 任务重复间隔设置为 1 分钟,持续时间无持续时间

操作时,在配置程序中填写整个PHP.exe路径。 开始,定义为Laravel项目路径,参数填充为artisan Schedule:run

检查设置 如果已过了预定的开始时间,请立即启动任务 ,删除 如果请求后任务仍在运行,请强制停止、 最后选择 不要开始新的事件

作者:TomCzHen
链接:https://juejin.im/post/5c3b062a518825255007f0ce
来源:掘金。商业转载请联系作者获得许可。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门