语言和框架指南
运行 Laravel 应用在容器化环境
29 分
back4app 容器是一个强大的平台,用于托管 laravel 应用程序。凭借其自动部署 docker 化 laravel 应用的能力,您可以轻松地在可扩展和灵活的环境中启动您的项目。 在本指南中,我们将引导您完成在 back4app 容器上准备和部署 laravel 应用程序的过程,涵盖从简单项目到更复杂设置的所有内容。我们将从必要的准备工作开始,然后转向将应用程序 docker 化、在本地测试、将项目推送到 github、在 back4app 容器上设置项目、监控部署以及排除常见问题。 如果您有任何问题或意见,请随时在 slack 的 back4app 社区的 #containers 频道中参与讨论。您也可以随时通过 community\@back4app com 联系我们。 随时,如果您想查看在 back4app 容器上运行的示例 laravel 项目,请访问: https //github com/templates back4app/containers laravel sample 1 准备您的 laravel 应用程序 a 项目结构: 验证您的 laravel 应用程序是否遵循正确的目录结构,所有必要的文件和文件夹,如 app , routes , resources , 和 public , 组织得当。 b 依赖项 检查所有必需的依赖项是否在 composer json 文件中列出,包括它们的正确版本。 确保您已使用 composer install 安装所有依赖项,以生成一个 composer lock 文件。 c 环境变量 如果您的应用程序依赖于环境变量,请确保您有一个 env 文件,其中定义了必要的变量。 在部署到 back4app 容器时,您需要在部署设置中配置这些环境变量。 d 服务器设置(如适用) 如果您的 laravel 应用程序包含自定义服务器(例如 apache 或 nginx),请确保其正确设置并配置为服务您的 laravel 应用程序。 在本地测试您的服务器,以确保其按预期工作。 e 应用优化 通过实施性能最佳实践来优化您的laravel应用程序。 使用像lighthouse这样的工具来审核您的应用程序,并解决任何性能或可访问性问题。 f 跨浏览器兼容性 在多个浏览器和设备上测试您的应用程序,以确保正确的渲染和功能。 一旦您彻底审查并准备好您的laravel应用程序,您可以继续下一步,即为您的项目创建一个dockerfile。 2 容器化 将laravel应用程序容器化涉及在您的项目根目录中创建一个dockerfile。dockerfile包含构建应用程序docker镜像的指令,然后可以将其部署到back4app容器。以下是如何为常规laravel应用程序创建dockerfile的详细说明: 1 在您的laravel应用程序的根目录中创建一个名为dockerfile(没有任何文件扩展名)的新文件。 2 定义基础镜像:使用from命令开始dockerfile,指定基础镜像。对于典型的laravel应用程序,基础镜像应该是php镜像,例如, php 8 1 apache 。 from php 8 1 apache 3 设置工作目录:使用workdir命令设置docker容器内应用程序的工作目录。这是您的应用程序文件将被存储和执行的地方。 workdir /var/www/html 4 复制项目文件:使用copy命令将laravel应用程序目录中的所有文件复制到docker容器中。 copy 5 安装依赖:使用run命令安装laravel应用程序所需的依赖,使用 composer install 。 run apt get update && apt get install y \\ unzip \\ libzip dev \\ && docker php ext install zip \\ && php r "copy('https //getcomposer org/installer', 'composer setup php');" \\ && php composer setup php install dir=/usr/local/bin filename=composer \\ && php r "unlink('composer setup php');" \\ && composer install no scripts no autoloader prefer dist 6 设置apache服务器:启用apache的重写模块,配置 000 default conf 文件以包含laravel的适当apache设置,并设置apache环境变量。 run a2enmod rewrite copy /docker/apache/000 default conf /etc/apache2/sites available/ env apache document root /var/www/html/public 7 生成laravel应用密钥:laravel需要一个应用密钥来加密用户会话和其他敏感数据。使用run命令生成应用密钥。 run php artisan key\ generate 8 构建laravel应用程序:添加一个run命令来使用构建脚本构建您的laravel应用程序,通常是 composer dump autoload , php artisan config\ cache , php artisan route\ cache 和 php artisan view\ cache 。 run composer dump autoload \\ && php artisan config\ cache \\ && php artisan route\ cache \\ && php artisan view\ cache 9 暴露服务器端口:使用expose命令指定您的服务器将在docker容器内运行的端口。例如,您可以使用80端口。 expose 80 10 启动服务器:使用cmd命令指定启动服务器的命令,以服务于您构建的laravel应用程序。 cmd \["apache2 foreground"] 常规laravel应用程序的完整dockerfile应如下所示: \#dockerfile example on running php laravel app using apache web server from php 8 1 apache \# install necessary libraries run apt get update && apt get install y \\ libonig dev \\ libzip dev \# install php extensions run docker php ext install \\ mbstring \\ zip \# copy laravel application copy /var/www/html \# set working directory workdir /var/www/html \# install composer copy from=composer\ latest /usr/bin/composer /usr/bin/composer \# install dependencies run composer install \# change ownership of our applications run chown r www data\ www data /var/www/html run docker php ext install mbstring copy env example env run php artisan key\ generate \# expose port 80 expose 80 \# adjusting apache configurations run a2enmod rewrite copy apache config conf /etc/apache2/sites available/000 default conffrom php 8 1 apache workdir /var/www/html copy run apt get update && apt get install y \\ unzip \\ libzip dev \\ && docker php ext install zip \\ && php r "copy('https //getcomposer org/installer', 'composer setup php');" \\ && php composer setup php install dir=/usr/local/bin filename=composer \\ && php r "unlink('composer setup php');" \\ && composer install no scripts no autoloader prefer dist run a2enmod rewrite copy /docker/apache/000 default conf /etc/apache2/sites available/ env apache document root /var/www/html/public run php artisan key\ generate \\ && composer dump autoload \\ && php artisan config\ cache \\ && php artisan route\ cache \\ && php artisan view\ cache expose 80 cmd \["apache2 foreground"] 3 在本地测试您的项目 在将您的laravel应用程序部署到back4app容器之前,重要的是使用docker在本地进行测试。这有助于确保您的应用程序按预期运行,并帮助您在部署之前识别和修复任何问题。 为您的laravel应用程序构建docker镜像 在终端中,导航到项目的根目录并运行以下命令,替换 your app name 为您的应用程序名称 在本地运行 docker 容器 接下来,运行以下命令以在本地启动 docker 容器。此命令将容器的暴露端口(例如,80)映射到您本地计算机上的一个端口(例如,8000): 测试您的应用程序 打开一个网页浏览器并导航到 http //localhost 8080 http //localhost 8000/ 以查看您的 laravel 应用程序。确保一切按预期工作。如果遇到任何问题,请在继续下一步之前解决它们。 4 将您的项目推送到 github 在您的项目根目录中创建一个 gitignore 文件,以排除不必要或敏感的文件(例如, vendor , env , node modules , 等等)。初始化一个 git 仓库,提交您的项目文件,并将其推送到远程仓库(例如,在 github 上)。 5 在 back4app 容器上部署您的应用程序 创建 back4app 账户后,您可以按照文档中列出的步骤进行操作: 1 将您的 github 仓库与 back4app 连接 https //www back4app com/docs containers/integrate with github 2 准备您的项目进行部署 https //www back4app com/docs containers/prepare your deployment 总之,容器将遵循您 dockerfile 中详细说明的指令并开始创建您的应用程序。 6 监控部署并解决可能的错误 请关注 back4app 容器仪表板上的部署日志和状态。解决部署过程中出现的任何错误或问题。如果是更复杂的项目,请确保所有必要的服务(如数据库或外部 api)已正确配置并可访问。 7 排除常见问题 在 back4app 容器上运行 laravel 应用程序时常见的部署错误列在 这里 https //www back4app com/docs containers/troubleshooting 。 部署 laravel 应用程序时可能出现的其他常见错误包括: 端口配置不正确 laravel 应用程序在部署到 back4app 容器时应配置为在指定端口上运行。如果应用程序仍然无法访问,请检查 dockerfile 以确保正确的端口已暴露(例如,expose 80 用于端口 80)。 不兼容或缺失的依赖项 确保所有必需的依赖项都列在 composer json 文件中,并且它们的版本彼此兼容以及与您的应用程序代码兼容。缺失或不兼容的依赖项可能导致运行时错误。 无效的环境变量或配置 检查您的应用程序是否依赖于特定的环境变量或配置文件,并确保它们在 back4app 容器环境中正确设置。在您的 dockerfile 中使用 env 命令设置任何必要的环境变量。 无法可靠地确定服务器的完全限定域名"错误 问题:当 apache 无法确定服务器的完全限定域名 (fqdn) 时,会发生此错误。 解决方案:要抑制此错误,您可以在 apache 配置中全局设置 servername 指令。按如下方式修改 apache 配置文件 ( apache config conf ): apache config conf servername localhost \<virtualhost 80> documentroot /var/www/html/public \<directory /var/www/html/public> allowoverride all order allow,deny allow from all \</directory> \# log access messages to access log file errorlog /var/log/apache2/access log customlog /var/log/apache2/access log combined \# log error messages to error log file loglevel error errorlog /var/log/apache2/error log \</virtualhost> 500 内部服务器错误 问题:此错误表示服务器配置或应用程序本身存在问题。 解决方案: 检查 apache 错误日志 ( /var/log/apache2/error log ) 以获取更具体的错误信息。这可以帮助识别错误的根本原因。 验证 apache 配置文件 ( apache config conf ) 是否正确设置了适当的 documentroot 和 directory 指令,以适应您的 laravel 应用程序。 确保在 dockerfile 中安装并启用了必要的 php 扩展。使用 docker php ext install 命令安装所需的扩展,并使用 run a2enmod 命令启用 apache 模块。 检查您的 laravel 应用程序文件的文件权限和所有权。使用 chown 命令确保文件由适当的用户拥有(在大多数情况下为 www data )。 apache 配置问题 问题:不正确或配置错误的 apache 设置可能导致错误或意外行为。 解决方案: 仔细检查 apache 配置文件 ( apache config conf ) 以确保它正确指向 laravel 应用程序的 documentroot 目录,并具有适当的 directory 指令。 通过在 dockerfile 中运行 run a2enmod rewrite 来启用 rewrite 模块。这对于 laravel 的路由正常工作是必要的。 缺失或不正确的依赖项 问题:如果您的 laravel 应用程序缺少或有错误的依赖项,可能会导致错误或意外行为。 解决方案: 检查 composer json 文件以确保所有必需的依赖项都列出,包括它们的正确版本。 运行 composer install 来安装依赖项并生成一个 composer lock 文件。 验证必要的 php 扩展是否已在 dockerfile 中安装并启用,使用 docker php ext install 命令。 文件权限问题 问题:不正确的文件权限可能会导致 laravel 的文件存储或缓存出现问题。 解决方案: 在 dockerfile 中使用 chown 命令将 laravel 应用程序文件的所有权更改为适当的用户(在大多数情况下为 www data )。 确保存储和缓存目录具有正确的权限。您可以在 dockerfile 中运行 chmod 命令以设置适当的权限。 应用程序崩溃或未处理的异常 在您的 laravel 应用程序代码中未处理的异常或崩溃可能会导致部署失败或意外行为。检查您的应用程序日志以查找任何错误消息,并解决代码中的任何问题。通过运行 docker logs your app name 来检查容器日志,看看是否有任何错误或异常被抛出。使用像 sentry 这样的工具来跟踪和监控您应用程序中的错误。 服务器配置 如果您的 laravel 应用程序包含自定义服务器配置(例如,apache 或 nginx),请确保在 dockerfile 中正确配置,并安装必要的模块或配置。 文件权限不正确 文件权限不正确可能会导致在 back4app 容器上部署 laravel 应用程序时出现运行时错误。请确保必要的目录和文件具有正确的权限,如 laravel 文档中所述。 内存限制 如果您的应用程序在 back4app 容器上部署时内存不足,请考虑使用 php ini 设置在 dockerfile 中增加内存限制。 网络问题 如果您的 laravel 应用程序依赖于外部服务或 api,请确保它们在 back4app 容器环境中正确配置并可访问。使用 docker 网络命令来排查任何网络问题。 8 扩展您的应用程序 对于需要额外资源或水平/垂直扩展的更复杂项目,请考虑升级您的 back4app 容器计划,以处理增加的流量和负载。 9 示例应用程序 有关示例 laravel 应用程序项目,您可以访问: https //github com/templates back4app/containers python flask sample