コンテンツにスキップ
BlackOps1.xは試験的なバージョンです。Production Readyは2.xを予定しています。Releases
BlackOps
Esc
navigateopen⌘Jpreview
このページの内容

Local Runtime

Docker ComposeでArtifact、Migration、HTTPを準備し、Install直後のApplicationを実行する。

InstallしたApplicationは、Docker ComposeでPHP 8.5 CLI、FrankenPHP 1、PostgreSQL 18を起動できます。依存Install、Artifact Build、MigrationはImage起動へ含まれないため、順番に明示実行します。OperationのRuntime検索情報を持つManifestはBuildで生成します。

ImageとDependency

Project Rootで実行します。

docker compose build app http
docker compose run --rm app composer install

Defaultのdocker compose upはPostgreSQLとWorker Mode HTTPだけを継続起動します。Deferred Worker、Scheduler、Migration、Retention Purgeは自動開始しません。

OperationとArtifact

Discovery対象のOperationを確認し、Operation Manifest、HTTP Manifest、DI Containerをvar/build/へCompileします。

docker compose run --rm app php blackops operation:list
docker compose run --rm app php blackops build:compile

BuildはTyped Self-handled Signatureを検証し、OperationをHandlerとしてContainerへ自動登録します。HTTP/Worker RuntimeはCompile済みArtifactだけを読み、Request処理中にSource Discoveryや再Compileを行いません。

Database Migration

Statusを確認してからFramework Migrationを適用します。

docker compose run --rm app php blackops database:status
docker compose run --rm app php blackops database:migrate --dry-run
docker compose run --rm app php blackops database:migrate

HTTPやWorkerの起動時にMigrationは実行されません。Application Migrationがある場合も同じCommandへ統合されます。

HTTPを起動する

docker compose up -d

既定Portは8080です。.envHTTP_PORTで変更できます。Stable 1.1.0/welcomeは匿名Inline Operationです。

curl http://127.0.0.1:8080/welcome
{"message":"Welcome to BlackOps"}

Repository main PreviewでSample Authenticationを有効にした場合だけ、同じPreview内の全RequestへX-Sample-Token: local-exampleを付けます。

FrankenPHPはLocalではplain HTTPのWorker Modeで動作します。TLS、Domain、Process SupervisionはDeployment環境が所有します。

Worker ModeのRequest境界

Default Worker ModeはApplication、Environment、Configuration、Compile済みRuntimeをProcess起動時に一度だけ構成します。

docker compose up -d http
curl -H 'X-Sample-Token: local-example' http://127.0.0.1:8080/welcome

Worker ModeのPortは既定8080で、HTTP_PORTから変更できます。1 WorkerあたりのRequest上限はFRANKENPHP_MAX_REQUESTSで指定し、既定1000に達するとFrankenPHPがWorker Threadを再起動します。

Frameworkは各Request前にDatabase Connectionを確認し、Stale Connectionをcloseして一度だけ再接続します。再接続できないRequest、Throwableが発生したRequest、未完了Transactionを残したRequestは500となり、次RequestへConnectionを持ち越しません。Operation ScopeはRequest終了時に空であることを確認し、JSONL Journalは毎Request flushします。

Worker ModeではApplication ServiceもRequest間で再利用されます。Request Body、Actor、Tenant、PSR-7 Request等をService propertyやstaticへ保存せず、Operation ValueまたはExecution Contextから受け取ります。FrankenPHPが自動resetしない$_ENVはEntrypointがProcess開始時の値へ復元します。

Classic Modeは明示Fallbackとしてclassic-mode Profileから起動します。同じconfig/、Build Artifact、Database Configurationを使うため、Application Codeの別実装は不要です。既定Portは8081で、CLASSIC_HTTP_PORTから変更できます。

docker compose --profile classic-mode up -d http-classic
curl -H 'X-Sample-Token: local-example' http://127.0.0.1:8081/welcome

WorkerとMaintenance

Deferred OperationはHTTP Processとは別のWorkerで実行します。

docker compose run --rm app php blackops worker:run --iterations=1
docker compose --profile worker up -d worker

SchedulerとRetentionも明示Profile/Commandだけで開始します。

docker compose run --rm app php blackops retention:plan
docker compose run --rm app php blackops retention:purge --dry-run
docker compose --profile maintenance up -d scheduler

変更を伴うPurgeは--confirmを明示するまで実行されません。作業後はLocal Runtimeを停止できます。

docker compose down

InlineとDeferredを続けて試す場合はQuickstart and Skeletonへ進んでください。Runtime構成の詳細はApplication BootstrapInline and Deferredを参照してください。起動、Token、Migrationの問題はTroubleshootingへ戻ってください。