1: 介绍

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

1.1: 哲学

1.2: 安装

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

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

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

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

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

cp /opt/phlo/install.php /var/www/example.nl/ && cd /var/www/example.nl && php install.php

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

1.3: 项目结构

一个典型的应用程序:

/var/www/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('/opt/phlo/phlo.php');
phlo_app (
	id: 'Example',
	host: 'dev.example.nl',
	auth: true,
	build: true,
	debug: true,
	app: '/var/www/example.nl/',
	data: '/var/www/example.nl/data/',
);

release/www/app.php 中发布入口点:

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

1.5: Build

在开发过程中,每个请求都会自动重建已更改的源文件,因此浏览器重新加载就是所需的所有更改。CLI 明确提供相同的构建,用于脚本、CI 和代理:

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 * /var/www/example.nl/release/www
	php_server
}

对于 Nginx:

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

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

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