roadiz / headless-edition
Roadiz – Headless edition
Requires
- php: >=7.4
- rezozero/tree-walker: ~0.8.4
- roadiz/abstract-api-theme: ~4.0.0
- roadiz/roadiz: ~1.7.0
- symfony/rate-limiter: ^5.2
Requires (Dev)
- phpstan/phpstan: ^0.12.38
- phpstan/phpstan-doctrine: ^0.12.19
- squizlabs/php_codesniffer: ^3.3
Suggests
- guzzlehttp/psr7: Required for sentry/sentry
- http-interop/http-factory-guzzle: Required for sentry/sentry
- php-http/guzzle7-adapter: Required for sentry/sentry
- sentry/sentry: Allows monolog to send your log messages to a Sentry instance.
README
Roadiz 是一个基于多态节点系统,可以处理多种服务和内容的现代 CMS。其后台办公系统在设计感和用户体验方面都得到了高度重视。其主题系统独立于后台办公,允许轻松切换和为单个内容基础设置多个主题。例如,它允许您为桌面网站创建一个主题,为移动端创建另一个主题,同时使用相同的节点层次结构。Roadiz 采用 MIT 许可证发布,因此您可以将其代码用于个人和商业项目。
文档
- Roadiz 网站: http://www.roadiz.io
- Read the Docs 文档可以在 http://docs.roadiz.io 找到
- API 文档可以在 http://api.roadiz.io 找到
- 论坛 可以在 https://ask.roadiz.io 找到
无头版本
这是 Roadiz 的 API 准备版。它旨在将您的 Apache/Nginx 服务器根目录设置为 web/
文件夹,使您的应用程序源代码保持安全,并将所有业务逻辑放入 src/
文件夹,即 \App
PHP 命名空间。
无头版本 不需要任何 主题,因此您可以直接在后台办公中构建您的 API 架构,并使用 REST API 入口点,无需编写任何代码。内置的 tree-walker 会自动配置以遍历节点类型的子字段,当请求单个节点(通过 id 或 slug)时创建 JSON 图。
无头版本 严重依赖于 roadiz/abstract-api-theme
功能,您可以在其 readme 中找到有关已注册路由和 API 入口点的更多信息。《AbstractApiTheme》已经为您注册,因此您可以立即开始创建您的数据结构。任何额外的配置都可以在您的 src/AppServiceProvider.php
容器服务提供商中找到。
自动节点源控制器解析已禁用,对节点源路径的任何请求都将结束在 src/Controller/NullController.php
,因此您的应用程序客户端必须使用您安全的 API 终端点。
用于暴露内容 API 的静态站点生成器模板
无头版本是为了与 NuxtJS 应用程序配合使用并最小化 API 调用而构建的。
您将要进行的最重要的调用是 通过路径获取单个节点源,它结合了通过路径搜索节点源并以其在单个数据上下文中的内容进行检索。
要检索主页,您可以执行 GET /api/1.0/nodes-sources/by-path?path=/
{ "slug": "homepage", "@type": "Page", "node": { "nodeName": "homepage", "home": true, "visible": true, "tags": [], "attributeValues": [] }, "translation": { "locale": "en" }, "urlAliases": [], "title": "Homepage", "metaTitle": "Homepage – Headless", "metaKeywords": "", "metaDescription": "Homepage – Headless", "url": "/", "@id": "http://headless.test/api/1.0/page/2/en", "head": { "siteName": "Headless", "homePageUrl": "/" } }
这比执行
/api/1.0/nodes-sources?path=/
更有效,后者是一个 hydra:Collection 响应- 然后一旦您知道
@id
,您就可以请求单个节点源响应:/api/1.0/page/2/en
您将找到一些模板模型和控制器,用于为构建菜单和查找社交链接提供通用内容。例如:/api/1.0/common
会暴露CommonContentResponse
模型,该模型可以自定义以公开一些通过NodesSources API端点获取可能很痛苦的有用数据,例如分层菜单视图或Roadiz设置。
{ "mainMenuWalker": { "children": [], "item": { "slug": "main-menu", "@type": "Neutral", "node": { "nodeName": "main-menu", "visible": false, "tags": [] }, "title": "Main menu", "@id": "http://headless.test/api/1.0/neutral/1/en" }, "@type": "MenuNodeSourceWalker" }, "head": { "siteName": "Headless", "homePageUrl": "/" } }
使用方法
使用现成的Docker镜像
如果您不需要任何自定义代码或版本化内容模式,可以使用我们的Docker独立镜像和docker-compose.standalone.yml
示例堆栈启动Roadiz无头服务器。
如有必要,覆盖./app/conf/config.yaml文件(用于Solr配置或自定义monolog处理器)
docker-compose up -d --force-recreate docker-compose exec -u www-data app bin/roadiz migration:migrate --allow-no-migration -n docker-compose exec -u www-data app bin/roadiz install -n --env=install docker-compose exec -u www-data app bin/roadiz generate:private-key docker-compose up -d --force-recreate --no-deps app varnish docker-compose exec -u www-data app bin/roadiz users:create -m johndoe@roadiz.io -b -s -p "supersecretpassword" johndoe
然后浏览到https://headless.test/rz-admin
并构建您的无头API。
独立代码配置为从main-menu
节点创建一个CommonContentResponse
。如果您需要自定义通用内容响应,我们邀请您创建一个自定义项目。
创建一个新的自定义项目
对于自定义项目,我们建议从专用仓库开始
# Create a new Roadiz project on develop branch composer create-project roadiz/headless-edition; # Navigate into your project dir cd headless-edition;
Composer将自动根据Roadiz创建一个新项目并下载所有依赖项。
Composer脚本会自动将默认配置文件和您的入口点复制到web/
文件夹,并在项目根目录创建一个.env
文件来设置您的Docker开发环境。
使用 Docker 开发
Docker在Linux上将提供惊人的性能,并在不膨胀您的开发机器的情况下提供一个类似生产的环境
# Copy sample environment variables # and adjust them against your needs. nano .env; # Build PHP image docker-compose build; # Create and start containers docker-compose up -d; # Initialize database and base content docker-compose exec -u www-data app bin/roadiz migration:migrate --allow-no-migration -n docker-compose exec -u www-data app bin/roadiz install -n --env=install # Restart to empty caches docker-compose up -d --force-recreate --no-deps app varnish
与 Solr 容器的问题
Solr容器在项目文件夹中的.data/solr
声明其卷。第一次启动后,此文件夹可能以root
所有者创建,导致Solr无法填充它。只需运行
sudo chown -R $USER_UID:$USER_UID .data
(将$USER_UID
替换为您的本地用户id)。
使用 PHP 内置服务器开发
# Edit your Makefile "DEV_DOMAIN" variable to use a dedicated port # to your project and your theme name. nano Makefile; # Launch PHP server make dev-server;
在 Linux 上
请注意,PHP正在以www-data用户运行。您必须在构建镜像时更新您的.env
文件以反映您的本地用户UID
。
# Type id command in your favorite terminal app id # It should output something like # uid=1000(toto)
因此,在启动和构建您的Docker镜像之前,在.env
文件中使用相同的uid。
USER_UID=1000
更新 Roadiz 源代码
只需调用composer update
即可升级Roadiz包。如果您需要迁移数据库,则需要执行常规操作。
最大化生产性能
您可以遵循关于性能调整Symfony应用程序的已记录文章。
优化类自动加载
composer dump-autoload --optimize --no-dev --classmap-authoritative
增加 PHP 缓存大小
; php.ini opcache.max_accelerated_files = 20000 realpath_cache_size=4096K realpath_cache_ttl=600
使用 Gitlab Registry 构建 Docker 镜像
您可以通过我们的roadiz/php80-nginx-alpine
基础镜像、持续集成工具如Gitlab CI和私有Docker注册库来创建带有Roadiz项目的独立Docker镜像。所有主题资源都将在一个受控环境中编译,并且每次更新时,您的生产网站都将有最小的时间中断。
确保不要忽略主题中的package.lock
或yarn.lock
,以避免在CI系统编译主题资源时出现依赖错误。您也可以为项目的composer.lock
做同样的事情,以确保您在开发和CI作业中都使用相同的依赖项版本。
无头版本提供了一个带有Dockerfile
的基本配置集
- 自定义
.gitlab-ci.yml
文件以反映您的Gitlab实例配置和您的主题路径以及您的项目名称。 - 在您的仓库设置中启用注册和持续集成。
- 将您的代码推送到您的Gitlab实例。在成功推送新的
标签
并完成测试和构建作业后,应触发镜像构建。