ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

使用 Laradock 在 Docker 中运行 Contao:NGINX + PHP-FPM + MySQL 完整实战指南

使用 Laradock 在 Docker 中运行 Contao:NGINX + PHP-FPM + MySQL 完整实战指南 使用 Laradock 在 Docker 中运行 ContaoNGINX PHP-FPM MySQL 完整实战指南【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址: https://gitcode.com/gh_mirrors/la/laradock本篇指南以 Laradock 开源仓库本仓库laradock为基础讲解如何用一套现成的 Docker 编排环境在几分钟内跑起基于 Symfony 的 Contao CMS 站点。你将掌握启动 web 服务与数据库的准确命令、通过DATABASE_URL把 Contao 连到 MySQL 容器、用workspace容器安装站点并创建管理员以及随时切换 PHP 版本、多站点并行与上线部署的完整方案——全程无需在宿主机安装 PHP、Composer 或 MySQL。什么是 ContaoContao 是一个基于 Symfony 构建的开源 CMS面向编辑人员和代理机构适合需要结构化、注重可访问性的站点搭建场景而非单纯博客工具。一个 Contao 站点本质上是一个 PHP 应用由 MySQL或 MariaDB数据库支撑通过 Web 服务器对外提供访问既可以通过 Contao Manager基于 Web 的图形化安装器安装也可以从命令行用 Composer 安装。为什么要把 Contao 跑在 Docker 里Docker 会把 Contao 运行所需的每一个组件NGINX、PHP-FPM、MySQL打包成相互隔离的容器并且这些容器在任何机器上的行为都一致。相比在笔记本上直接安装 PHP 和 MySQL——不同项目之间版本冲突、在我机器上能跑的问题层出不穷——使用一次性容器可以获得与生产环境一致、删除后即干净消失的环境。同一台电脑上一个站点可以运行当前 Contao 发行版所需的 PHP 版本另一个老项目停留在旧版本而机器上无需全局安装任何东西。而把容器之间自己接起来基础镜像、PHP 扩展、网络、权限往往是一周的繁琐 Docker 工作——这正是 Laradock 帮你消除的部分。为什么 Laradock 适合 ContaoContao 自带的 Contao Manager 是一个自包含的 PHP 文件它在底层驱动 Composer但它不是 Docker 工具也不解决 Web 服务器、PHP 或数据库的搭建问题。一个开箱即用、无锁定的环境仍然很重要。Laradock 是框架无关的不会被锁定在单一技术栈今天跑 Contao明天在同一套环境、用同样的命令旁边加一个 Laravel API、WordPress 站点或纯 PHP 脚本都没问题。灵活性更强提供 100 个预配置服务PHP 版本从 5.6 到 8.5 任选老旧的 Contao 4 安装和最新的 Contao 5 构建都能拿到各自需要的运行时。仓库的 .env.example 中列出了可接受的版本取值8.5 - 8.4 - 8.3 - 8.2 - 8.1 - 8.0 - 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6。一切透明、完全自持没有生成文件、没有魔法、你和 Docker 之间没有包装二进制。每一个 Dockerfile 和 compose 文件都直接躺在仓库里供你阅读和修改。无需学习新知识你使用的是原生的docker compose这套知识可直接迁移到生产环境。仓库根目录的 laradock CLI 脚本只是可选便利层其设计契约就是无状态、不生成文件、打印每条真实执行的 docker compose 命令——纯docker compose永远可用。具体到 Contao它给你的是生产风格的 NGINX PHP-FPM 组合、已接好的 MySQL/MariaDB、内置 Composer 和 git 的workspace容器以及一行配置就能切换的任意 PHP 版本。用 Laradock 在 Docker 上运行 Contao第 1 步把 Laradock 加入你的项目cd my-contao-site git clone https://github.com/laradock/laradock.git cd laradock还没有 Contao 项目先克隆 Laradock然后在后续步骤中从workspace容器里创建项目即可。第 2 步选择站点需要的服务Contao 需要一个 Web 服务器和一个数据库。只启动这些即可Web 服务器会自动拉入 PHP-FPM方式一Laradock CLI./laradock start nginx mysql workspace方式二原生 Docker Composecp .env.example .env docker compose up -d nginx mysql workspace偏好 MariaDB 而不是 MySQL把名字换掉即可./laradock start nginx mariadb workspace。完整的服务目录见 DOCUMENTATION/docs/Intro.md。如果希望被逐步引导可选的 CLI 会带你做出选择先./laradock setup再./laradock start它会把执行的每条真实命令都打印出来。从源码看这几个容器的关联见 docker-compose.yml 的include机制与各服务自身的 compose 文件nginx/compose.yml 暴露${NGINX_HOST_HTTP_PORT}:80与${NGINX_HOST_HTTPS_PORT}:443并通过depends_on: php-fpm声明对 PHP-FPM 的依赖它将APP_CODE_PATH_HOST挂载进容器同时挂载nginx/sites到/etc/nginx/sites-available。php-fpm/compose.yml 通过构建参数接收LARADOCK_PHP_VERSION${PHP_VERSION}即 Laradock.env中的PHP_VERSION对外只expose9000 端口并把对应版本的./php-fpm/php${PHP_VERSION}.ini挂载为php.ini。workspace/compose.yml 是你的开发 shell同时连接frontend与backend两个网络挂载同一份应用代码目录。nginx/sites/default.conf 中站点根目录为/var/www/publicPHP 请求经fastcgi_pass php-upstream转发给 PHP-FPM这就是 Contao 的public目录被直接访问的底层来源。第 3 步让 Contao 指向容器Contao 从项目.env的DATABASE_URL读取数据库连接。使用服务名作为主机名数据库、用户、密码使用 mysql/defaults.env 中的默认值DATABASE_URLmysql://default:secretmysql:3306/default?serverVersion8.0如需覆盖其中的任何值把对应行加到 Laradock 的.env即可它总是优先。可覆盖的默认值清单见 mysql/defaults.envMYSQL_VERSION8.4、MYSQL_DATABASEdefault、MYSQL_USERdefault、MYSQL_PASSWORDsecret、MYSQL_PORT3306、MYSQL_ROOT_PASSWORDroot若改用 MariaDB则对应 mariadb/defaults.env 中的MARIADB_VERSION11.4与同名变量。MySQL 容器正是通过 mysql/compose.yml 中的MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD、MYSQL_ROOT_PASSWORD环境变量接收这些配置的。第 4 步安装并运行你的站点进入workspace容器用 Composer 创建项目并从命令行安装方式一Laradock CLI./laradock workspace方式二原生 Docker Composedocker compose exec workspace bash进入容器后composer create-project contao/managed-edition my-contao-site cd my-contao-site vendor/bin/contao-console contao:migrate vendor/bin/contao-console contao:user:createcontao:migrate负责建立数据库表结构contao:user:create创建你的第一个后台管理员。然后打开 http://localhost 访问前端http://localhost/contao进入后台。至此一个完整的 Contao 站点已经在 Docker 上跑起来了。从源码看workspace镜像把 Composer 作为一等公民内置参见 workspace/Dockerfile——它会拷贝composer.json与auth.json到~/.composer、通过COMPOSER_VERSION参数执行composer self-update、把~/.composer/vendor/bin加入 PATH并且支持COMPOSER_GLOBAL_INSTALL、COMPOSER_REPO_PACKAGIST等构建参数也就是说你可以在.env中开启全局 Composer 包或自定义 Packagist 镜像再重建容器生效。随时更换 PHP 版本这正是原生安装最痛苦、而 Laradock 最亮眼的地方。在 Laradock 的.env中设置版本并重建PHP_VERSION8.3方式一Laradock CLI./laradock rebuild php-fpm workspace方式二原生 Docker Composedocker compose build php-fpm workspace当前 Contao5.7要求 PHP 8.3 或更新因此同一个工具可以并排运行需要 PHP 8.3 的 Contao 5 项目以及固定在 PHP 7.4 上的旧 Contao 4 项目彼此隔离且都没有安装在你的机器上。这一能力在源码层面有直接支撑PHP_VERSION同时作为LARADOCK_PHP_VERSION构建参数传入 php-fpm/compose.yml 和 workspace/compose.yml且 php-fpm/compose.yml 会按版本挂载对应的php${PHP_VERSION}.ini——改一个变量整个运行时含每个版本的 ini 配置随之切换。让站点上线站点准备好之后同一套 Laradock 栈就变成了你的部署工具把应用构建成一个加固的镜像推送到你选择的托管平台./laradock ship然后选择一个目标平台按其短指南操作即可——单台服务器、托管平台或 Kubernetes 都行。Deploy to Production列出了每个提供商Fly.io、Render、Railway、DigitalOcean、AWS、Google Cloud、Azure、Kamal、Kubernetes每个都附带现成的配置文件见仓库 production/providers 目录下的fly.toml、render.yaml、railway.json、aws-app-runner.json、aws-ecs-task-definition.json、azure-container-app.yaml、digitalocean-app.yaml、google-cloud-run.yaml、kamal-deploy.yml等。没有任何针对特定提供商的魔法需要学习Docker 镜像在任何地方运行结果都一样。仓库的 production/Dockerfile 与 production/compose.yml 就是./laradock ship背后用来构建应用镜像的基础设施。常见问题用 Laradock 跑 Contao还需要安装 PHP、Composer 或 MySQL 吗不需要。一切都存在于容器内部。Composer、git 和 MySQL 均已提供你永远不需要在宿主机上安装它们。一个典型的 Contao 站点应该启动哪些服务nginx mysql workspace覆盖了大多数站点Web 服务器、数据库和一个 shell。偏好 MariaDB 就把mysql换成mariadb。可以在不同 PHP 版本上运行多个 Contao 站点吗可以。给每个站点一套独立的 Laradock使用唯一的COMPOSE_PROJECT_NAME和DATA_PATH_HOST这两个变量都定义在 .env.example 与 .env.exampleCOMPOSE_PROJECT_NAME用于区分容器名前缀DATA_PATH_HOST用于隔离每个数据库引擎的数据目录在每个 Laradock 中设置不同的PHP_VERSION它们就能在同一台机器上独立运行。在 macOS、Windows 和 Linux 上效果一样吗一样。Laradock 能在任何可运行 Docker 的地方运行。在 macOS/Windows 上文件同步速度取决于 Docker DesktopVirtioFS 有很大帮助这是 Docker Desktop 的特性并非 Laradock 特有。这和我在生产环境用的 Docker 配置是一样的吗容器是生产风格的真实的 NGINX PHP-FPM所以它比原生安装更接近生产环境。加固步骤参见 Prepare Laradock for Production仓库中该章节还包含镜像构建、框架附加要求与安全加固的完整说明。想对比不同环境的取舍参见完整的Laradock vs Others对比。准备开始Getting Started大约五分钟即可上手。【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址: https://gitcode.com/gh_mirrors/la/laradock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表