1: 介绍

Phlo 是一个集成平台,拥有自己的全栈语言。您编写 .phlo 源文件;Phlo 将它们编译为您可以打开和阅读的 PHP、CSS 和 JavaScript,所有运行时错误都指向您编写的 .phlo 行。相同的语言包含四个层次:语言本身、应用平台(后端资源加上 phlo.js SPA 引擎)、服务器平台(FrankenPHP、phloWS、phloWA)和操作平台(Phlo Dashboard)。本指南涵盖了所有这些内容。生产版本运行在共享运行时,通常在 /srv/phlo/ 中,而每个应用程序保留自己的源代码、数据、生成的 PHP 和 webroot。

1.1: 哲学

1.2: 安装

Phlo 需要 PHP 8.3 或更高版本;CLI 构建在相同的 PHP 上运行。对于生产环境,推荐使用 FrankenPHP 作为运行时(内置网络服务器,工作模式);经典的 PHP-FPM 在 Nginx 后面也可以工作。

使用捆绑的安装程序获取运行时并搭建您的第一个应用:

git clone https://github.com/q-ainl/phlo.git /srv/phlo
php /srv/phlo/install.php /srv/example.nl/

安装程序会询问名称、主机和目标,显示运行时目录并让您选择资源(它们的 @ requires 会自动包含),写入入口点、data/app.jsondata/app.md、第一个 route 和 .gitignore,并在完成干净构建和具体后续步骤后才结束。

更喜欢一个能自我清理的副本吗?将 install.php 复制到新的应用目录并在那里运行;成功安装后它会自我删除:

cp /srv/phlo/install.php /srv/example.nl/ && cd /srv/example.nl && php install.php

接下来的部分描述了安装程序为您设置的内容,以及如何手动构建相同的东西。

1.3: 项目结构

一个典型的应用程序:

/srv/example.nl/
  app.phlo
  page.home.phlo
  data/
    app.json
    auth.ini
    creds.ini
  php/
    app.php
    classmap.php
  release/
    www/
      app.php
  www/
    app.php

php/www/app.jswww/app.cssrelease/ 是构建输出。只能通过源代码更改它们并重新构建。

1.4: 入口点

开发入口点在 www/app.php

<?php
require('/srv/phlo/phlo.php');
phlo_app (
    id: 'Example',
    host: 'dev.example.nl',
    auth: true,
    build: true,
    debug: true,
    app: '/srv/example.nl/',
    data: '/srv/example.nl/data/',
);

发布入口点在 release/www/app.php

<?php
require('/srv/phlo/phlo.php');
phlo_app (
    id: 'Example',
    host: 'stage.example.nl',
    app: '/srv/example.nl/release/',
    php: '/srv/example.nl/release/',
    data: '/srv/example.nl/data/',
);

1.5: Build

从开发入口点使用 CLI:

php www/app.php build::run
php www/app.php build::lint
php www/app.php build::release

build::run 转换开发输出,build::lint 检查生成的 PHP,build::release 写入发布输出。

1.6: 网络服务器

Web 服务器在开发环境中指向 www/,在阶段/生产环境中指向 release/www/。未知路径被重写为 app.php

对于 FrankenPHP(推荐),一个 Caddyfile 块就足够了:

example.nl {
    root * /srv/example.nl/release/www
    php_server
}

对于 Nginx:

root /srv/example.nl/release/www;

location / {
    try_files $uri $uri/ /app.php?$query_string;
}

我们使用必要的cookie来使该网站正常工作。在您的许可下,我们还使用分析工具来改善网站。