Laravel Octane

This commit is contained in:
Refringe 2024-06-19 23:24:02 -04:00
parent 8da9268fff
commit e457d6901d
Signed by: Refringe
SSH Key Fingerprint: SHA256:t865XsQpfTeqPRBMN2G6+N8wlDjkgUCZF3WGW6O9N/k
17 changed files with 573 additions and 9 deletions

View File

@ -74,3 +74,6 @@ MAIL_FROM_NAME="${APP_NAME}"
NOVA_LICENSE_KEY=
SAIL_XDEBUG_MODE=develop,debug,coverage
OCTANE_SERVER=frankenphp
OCTANE_HTTPS=true

16
.github/README.md vendored
View File

@ -16,7 +16,7 @@ This is a [Laravel](https://laravel.com/docs/11.x) project that uses [Sail](http
### Accessing the Application:
Once the Docker containers are running with Sail you can access the application at <http://localhost>.
Once the Docker containers are running with Sail you can access the application at <https://localhost>.
### Available Services:
@ -29,13 +29,13 @@ Once the Docker containers are running with Sail you can access the application
### Notable Routes
| Service | Authentication | Access Via Host |
|----------------------------------|----------------|----------------------------|
| Administration Panel (Nova) | Via User Role | <http://localhost/nova> |
| Redis Queue Management (Horizon) | Via User Role | <http://localhost/horizon> |
| Website Status (Pulse) | Via User Role | <http://localhost/pulse> |
| Meilisearch WebUI | Local Only | <http://localhost:7700> |
| Mailpit WebUI | Local Only | <http://localhost:8025> |
| Service | Authentication | Access Via Host |
|----------------------------------|----------------|-----------------------------|
| Administration Panel (Nova) | Via User Role | <https://localhost/nova> |
| Redis Queue Management (Horizon) | Via User Role | <https://localhost/horizon> |
| Website Status (Pulse) | Via User Role | <https://localhost/pulse> |
| Meilisearch WebUI | Local Only | <http://localhost:7700> |
| Mailpit WebUI | Local Only | <http://localhost:8025> |
Most of these connection settings should already be configured in the `.env.example` file. Simply save the `.env.example` file as `.env` and adjust further settings as needed.

4
.gitignore vendored
View File

@ -18,3 +18,7 @@ yarn-error.log
/.idea
/.vscode
.DS_Store
/caddy
frankenphp
frankenphp-worker.php

View File

@ -13,6 +13,7 @@
"laravel/horizon": "^5.24",
"laravel/jetstream": "^5.1",
"laravel/nova": "^4.34",
"laravel/octane": "^2.4",
"laravel/pulse": "^1.2",
"laravel/sanctum": "^4.0",
"laravel/scout": "^10.10",

259
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "f408f6620fb7450f606e83307b085e60",
"content-hash": "27e93d0addfc37a8772b43a5887e4f0d",
"packages": [
{
"name": "aws/aws-crt-php",
@ -1832,6 +1832,91 @@
],
"time": "2024-06-13T01:25:09+00:00"
},
{
"name": "laminas/laminas-diactoros",
"version": "3.3.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
"reference": "74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45",
"reference": "74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45",
"shasum": ""
},
"require": {
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
"psr/http-factory": "^1.0.2",
"psr/http-message": "^1.1 || ^2.0"
},
"provide": {
"psr/http-factory-implementation": "^1.1 || ^2.0",
"psr/http-message-implementation": "^1.1 || ^2.0"
},
"require-dev": {
"ext-curl": "*",
"ext-dom": "*",
"ext-gd": "*",
"ext-libxml": "*",
"http-interop/http-factory-tests": "^0.9.0",
"laminas/laminas-coding-standard": "~2.5.0",
"php-http/psr7-integration-tests": "^1.3",
"phpunit/phpunit": "^9.6.16",
"psalm/plugin-phpunit": "^0.18.4",
"vimeo/psalm": "^5.22.1"
},
"type": "library",
"extra": {
"laminas": {
"config-provider": "Laminas\\Diactoros\\ConfigProvider",
"module": "Laminas\\Diactoros"
}
},
"autoload": {
"files": [
"src/functions/create_uploaded_file.php",
"src/functions/marshal_headers_from_sapi.php",
"src/functions/marshal_method_from_sapi.php",
"src/functions/marshal_protocol_version_from_sapi.php",
"src/functions/normalize_server.php",
"src/functions/normalize_uploaded_files.php",
"src/functions/parse_cookie_header.php"
],
"psr-4": {
"Laminas\\Diactoros\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "PSR HTTP Message implementations",
"homepage": "https://laminas.dev",
"keywords": [
"http",
"laminas",
"psr",
"psr-17",
"psr-7"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-diactoros/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-diactoros/issues",
"rss": "https://github.com/laminas/laminas-diactoros/releases.atom",
"source": "https://github.com/laminas/laminas-diactoros"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2024-02-16T16:06:16+00:00"
},
{
"name": "laravel/fortify",
"version": "v1.21.3",
@ -2374,6 +2459,95 @@
},
"time": "2024-06-12T16:57:44+00:00"
},
{
"name": "laravel/octane",
"version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/octane.git",
"reference": "2c818d7d213de793b180fc2a079f71c951d494c7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/octane/zipball/2c818d7d213de793b180fc2a079f71c951d494c7",
"reference": "2c818d7d213de793b180fc2a079f71c951d494c7",
"shasum": ""
},
"require": {
"laminas/laminas-diactoros": "^3.0",
"laravel/framework": "^10.10.1|^11.0",
"laravel/serializable-closure": "^1.3.0",
"nesbot/carbon": "^2.66.0|^3.0",
"php": "^8.1.0",
"symfony/console": "^6.0|^7.0",
"symfony/psr-http-message-bridge": "^2.2.0|^6.4|^7.0"
},
"conflict": {
"spiral/roadrunner": "<2023.1.0",
"spiral/roadrunner-cli": "<2.6.0",
"spiral/roadrunner-http": "<3.3.0"
},
"require-dev": {
"guzzlehttp/guzzle": "^7.6.1",
"inertiajs/inertia-laravel": "^0.6.9|^1.0",
"laravel/scout": "^10.2.1",
"laravel/socialite": "^5.6.1",
"livewire/livewire": "^2.12.3|^3.0",
"mockery/mockery": "^1.5.1",
"nunomaduro/collision": "^6.4.0|^7.5.2|^8.0",
"orchestra/testbench": "^8.5.2|^9.0",
"phpstan/phpstan": "^1.10.15",
"phpunit/phpunit": "^10.4",
"spiral/roadrunner-cli": "^2.6.0",
"spiral/roadrunner-http": "^3.3.0"
},
"bin": [
"bin/roadrunner-worker",
"bin/swoole-server"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
},
"laravel": {
"providers": [
"Laravel\\Octane\\OctaneServiceProvider"
],
"aliases": {
"Octane": "Laravel\\Octane\\Facades\\Octane"
}
}
},
"autoload": {
"psr-4": {
"Laravel\\Octane\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
}
],
"description": "Supercharge your Laravel application's performance.",
"keywords": [
"frankenphp",
"laravel",
"octane",
"roadrunner",
"swoole"
],
"support": {
"issues": "https://github.com/laravel/octane/issues",
"source": "https://github.com/laravel/octane"
},
"time": "2024-05-31T19:17:54+00:00"
},
{
"name": "laravel/prompts",
"version": "v0.1.24",
@ -7598,6 +7772,89 @@
],
"time": "2024-05-31T14:57:53+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
"version": "v7.1.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "9a5dbb606da711f5d40a7596ad577856f9402140"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9a5dbb606da711f5d40a7596ad577856f9402140",
"reference": "9a5dbb606da711f5d40a7596ad577856f9402140",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/http-message": "^1.0|^2.0",
"symfony/http-foundation": "^6.4|^7.0"
},
"conflict": {
"php-http/discovery": "<1.15",
"symfony/http-kernel": "<6.4"
},
"require-dev": {
"nyholm/psr7": "^1.1",
"php-http/discovery": "^1.15",
"psr/log": "^1.1.4|^2|^3",
"symfony/browser-kit": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0"
},
"type": "symfony-bridge",
"autoload": {
"psr-4": {
"Symfony\\Bridge\\PsrHttpMessage\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "PSR HTTP message bridge",
"homepage": "https://symfony.com",
"keywords": [
"http",
"http-message",
"psr-17",
"psr-7"
],
"support": {
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.1"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
},
{
"name": "symfony/routing",
"version": "v7.1.1",

View File

@ -0,0 +1 @@
{"admin":{"listen":"localhost:2019"},"apps":{"frankenphp":{"workers":[{"file_name":"/var/www/html/public/frankenphp-worker.php"}]},"http":{"servers":{"srv0":{"automatic_https":{"disable_redirects":true},"listen":[":443"],"logs":{"logger_names":{"localhost":["log0"]}},"routes":[{"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/var/www/html/public"},{"encodings":{"br":{},"gzip":{},"zstd":{}},"handler":"encode","prefer":["zstd","br","gzip"]}]},{"handle":[{"handler":"static_response","headers":{"Location":["{http.request.orig_uri.path}/"]},"status_code":308}],"match":[{"file":{"try_files":["{http.request.uri.path}/frankenphp-worker.php"]},"not":[{"path":["*/"]}]}]},{"handle":[{"handler":"rewrite","uri":"{http.matchers.file.relative}"}],"match":[{"file":{"split_path":[".php"],"try_files":["{http.request.uri.path}","{http.request.uri.path}/frankenphp-worker.php","frankenphp-worker.php"]}}]},{"handle":[{"handler":"php","resolve_root_symlink":true,"split_path":[".php"]}],"match":[{"path":["*.php"]}]},{"handle":[{"handler":"file_server"}]}]}]}]}],"match":[{"host":["localhost"]}],"terminal":true}]}}}},"logging":{"logs":{"default":{"exclude":["http.log.access.log0"]},"log0":{"encoder":{"fields":{"uri":{"actions":[{"parameter":"authorization","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log0"],"level":"INFO"}}}}

216
config/octane.php Normal file
View File

@ -0,0 +1,216 @@
<?php
use Laravel\Octane\Contracts\OperationTerminated;
use Laravel\Octane\Events\RequestHandled;
use Laravel\Octane\Events\RequestReceived;
use Laravel\Octane\Events\RequestTerminated;
use Laravel\Octane\Events\TaskReceived;
use Laravel\Octane\Events\TaskTerminated;
use Laravel\Octane\Events\TickReceived;
use Laravel\Octane\Events\TickTerminated;
use Laravel\Octane\Events\WorkerErrorOccurred;
use Laravel\Octane\Events\WorkerStarting;
use Laravel\Octane\Events\WorkerStopping;
use Laravel\Octane\Listeners\CloseMonologHandlers;
use Laravel\Octane\Listeners\EnsureUploadedFilesAreValid;
use Laravel\Octane\Listeners\EnsureUploadedFilesCanBeMoved;
use Laravel\Octane\Listeners\FlushOnce;
use Laravel\Octane\Listeners\FlushTemporaryContainerInstances;
use Laravel\Octane\Listeners\ReportException;
use Laravel\Octane\Listeners\StopWorkerIfNecessary;
use Laravel\Octane\Octane;
return [
/*
|--------------------------------------------------------------------------
| Octane Server
|--------------------------------------------------------------------------
|
| This value determines the default "server" that will be used by Octane
| when starting, restarting, or stopping your server via the CLI. You
| are free to change this to the supported server of your choosing.
|
| Supported: "roadrunner", "swoole", "frankenphp"
|
*/
'server' => env('OCTANE_SERVER', 'frankenphp'),
/*
|--------------------------------------------------------------------------
| Force HTTPS
|--------------------------------------------------------------------------
|
| When this configuration value is set to "true", Octane will inform the
| framework that all absolute links must be generated using the HTTPS
| protocol. Otherwise your links may be generated using plain HTTP.
|
*/
'https' => env('OCTANE_HTTPS', true),
/*
|--------------------------------------------------------------------------
| Octane Listeners
|--------------------------------------------------------------------------
|
| All of the event listeners for Octane's events are defined below. These
| listeners are responsible for resetting your application's state for
| the next request. You may even add your own listeners to the list.
|
*/
'listeners' => [
WorkerStarting::class => [
EnsureUploadedFilesAreValid::class,
EnsureUploadedFilesCanBeMoved::class,
],
RequestReceived::class => [
...Octane::prepareApplicationForNextOperation(),
...Octane::prepareApplicationForNextRequest(),
//
],
RequestHandled::class => [
//
],
RequestTerminated::class => [
// FlushUploadedFiles::class,
],
TaskReceived::class => [
...Octane::prepareApplicationForNextOperation(),
//
],
TaskTerminated::class => [
//
],
TickReceived::class => [
...Octane::prepareApplicationForNextOperation(),
//
],
TickTerminated::class => [
//
],
OperationTerminated::class => [
FlushOnce::class,
FlushTemporaryContainerInstances::class,
// DisconnectFromDatabases::class,
// CollectGarbage::class,
],
WorkerErrorOccurred::class => [
ReportException::class,
StopWorkerIfNecessary::class,
],
WorkerStopping::class => [
CloseMonologHandlers::class,
],
],
/*
|--------------------------------------------------------------------------
| Warm / Flush Bindings
|--------------------------------------------------------------------------
|
| The bindings listed below will either be pre-warmed when a worker boots
| or they will be flushed before every new request. Flushing a binding
| will force the container to resolve that binding again when asked.
|
*/
'warm' => [
...Octane::defaultServicesToWarm(),
],
'flush' => [
//
],
/*
|--------------------------------------------------------------------------
| Octane Swoole Tables
|--------------------------------------------------------------------------
|
| While using Swoole, you may define additional tables as required by the
| application. These tables can be used to store data that needs to be
| quickly accessed by other workers on the particular Swoole server.
|
*/
'tables' => [],
/*
|--------------------------------------------------------------------------
| Octane Swoole Cache Table
|--------------------------------------------------------------------------
|
| While using Swoole, you may leverage the Octane cache, which is powered
| by a Swoole table. You may set the maximum number of rows as well as
| the number of bytes per row using the configuration options below.
|
*/
'cache' => [
'rows' => 1000,
'bytes' => 10000,
],
/*
|--------------------------------------------------------------------------
| File Watching
|--------------------------------------------------------------------------
|
| The following list of files and directories will be watched when using
| the --watch option offered by Octane. If any of the directories and
| files are changed, Octane will automatically reload your workers.
|
*/
'watch' => [
'app',
'bootstrap',
'config/**/*.php',
'database/**/*.php',
'public/**/*.php',
'resources/**/*.php',
'routes',
'composer.lock',
'.env',
],
/*
|--------------------------------------------------------------------------
| Garbage Collection Threshold
|--------------------------------------------------------------------------
|
| When executing long-lived PHP scripts such as Octane, memory can build
| up before being cleared by PHP. You can force Octane to run garbage
| collection if your application consumes this amount of megabytes.
|
*/
'garbage' => 50,
/*
|--------------------------------------------------------------------------
| Maximum Execution Time
|--------------------------------------------------------------------------
|
| The following setting configures the maximum execution time for requests
| being handled by Octane. You may set this value to 0 to indicate that
| there isn't a specific time limit on Octane request execution time.
|
*/
'max_execution_time' => 30,
];

View File

@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIBvDCCAWOgAwIBAgIQUPkU4Z3HUQbYRjRljGOjMjAKBggqhkjOPQQDAjAzMTEw
LwYDVQQDEyhDYWRkeSBMb2NhbCBBdXRob3JpdHkgLSBFQ0MgSW50ZXJtZWRpYXRl
MB4XDTI0MDYyMDAzMTAxNVoXDTI0MDYyMDE1MTAxNVowADBZMBMGByqGSM49AgEG
CCqGSM49AwEHA0IABFjRwZWZ/E0iWVeB2RmGXD0VnRo9/zj5tQVAbMrovA0pDeaZ
pwvJGUpeOJZ7Rl0pEnn6E9VdWkEfE8TwkiDkmnKjgYswgYgwDgYDVR0PAQH/BAQD
AgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUuFKW
KHlfrt2bkwFod5O1ePbhFbQwHwYDVR0jBBgwFoAULkuRvmee4uyHjngRY7tcF4E4
cK0wFwYDVR0RAQH/BA0wC4IJbG9jYWxob3N0MAoGCCqGSM49BAMCA0cAMEQCIHWP
CnqrAygZAByGMoluAQ3fwBxSOS5Z1LRtND4wuOJFAiBf/trU/r9AFHSrTe1GRfdg
m6xB6pZW4bro5a1k2Q7c3Q==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIByDCCAW2gAwIBAgIQIllJh/YSmMWMU2lIn1FQVjAKBggqhkjOPQQDAjAwMS4w
LAYDVQQDEyVDYWRkeSBMb2NhbCBBdXRob3JpdHkgLSAyMDI0IEVDQyBSb290MB4X
DTI0MDYyMDAzMTAxNVoXDTI0MDYyNzAzMTAxNVowMzExMC8GA1UEAxMoQ2FkZHkg
TG9jYWwgQXV0aG9yaXR5IC0gRUNDIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEG
CCqGSM49AwEHA0IABFxBGjt1vYtRzmwckuNWL4vGjXdx/LvFyzHj3Jx3bmjPm3fM
l8xAXGBYsdPjPmm4GLkf3Gfd+L78FQxthNLp+CujZjBkMA4GA1UdDwEB/wQEAwIB
BjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQuS5G+Z57i7IeOeBFju1wX
gThwrTAfBgNVHSMEGDAWgBSjUti0EevDfOiFojU7pHtguMv/5TAKBggqhkjOPQQD
AgNJADBGAiEArY5ftzJtAXT3dWiV4AaxUk99oNmdAPZBhNmcwHEwf6YCIQC95l4h
JLzYrTC/nsl92Z8JEueCiFsUsCjgwjNV5OQT0w==
-----END CERTIFICATE-----

View File

@ -0,0 +1,6 @@
{
"sans": [
"localhost"
],
"issuer_data": null
}

View File

@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIO8L7+17S/xd2FvywlJiPrIDIn8h7X9cxAMv96iochhnoAoGCCqGSM49
AwEHoUQDQgAEWNHBlZn8TSJZV4HZGYZcPRWdGj3/OPm1BUBsyui8DSkN5pmnC8kZ
Sl44lntGXSkSefoT1V1aQR8TxPCSIOSacg==
-----END EC PRIVATE KEY-----

1
data/caddy/instance.uuid Normal file
View File

@ -0,0 +1 @@
adf48f36-64b4-4db4-96a4-f87a52e59f44

View File

@ -0,0 +1 @@
{"tls":{"timestamp":"2024-06-20T02:40:43.59823126Z","instance_id":"adf48f36-64b4-4db4-96a4-f87a52e59f44"}}

View File

@ -0,0 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIByDCCAW2gAwIBAgIQIllJh/YSmMWMU2lIn1FQVjAKBggqhkjOPQQDAjAwMS4w
LAYDVQQDEyVDYWRkeSBMb2NhbCBBdXRob3JpdHkgLSAyMDI0IEVDQyBSb290MB4X
DTI0MDYyMDAzMTAxNVoXDTI0MDYyNzAzMTAxNVowMzExMC8GA1UEAxMoQ2FkZHkg
TG9jYWwgQXV0aG9yaXR5IC0gRUNDIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEG
CCqGSM49AwEHA0IABFxBGjt1vYtRzmwckuNWL4vGjXdx/LvFyzHj3Jx3bmjPm3fM
l8xAXGBYsdPjPmm4GLkf3Gfd+L78FQxthNLp+CujZjBkMA4GA1UdDwEB/wQEAwIB
BjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQuS5G+Z57i7IeOeBFju1wX
gThwrTAfBgNVHSMEGDAWgBSjUti0EevDfOiFojU7pHtguMv/5TAKBggqhkjOPQQD
AgNJADBGAiEArY5ftzJtAXT3dWiV4AaxUk99oNmdAPZBhNmcwHEwf6YCIQC95l4h
JLzYrTC/nsl92Z8JEueCiFsUsCjgwjNV5OQT0w==
-----END CERTIFICATE-----

View File

@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIH/U421H6TJK+A+wharUGKbJMFYUWI+tpllxHEMCQjtsoAoGCCqGSM49
AwEHoUQDQgAEXEEaO3W9i1HObByS41Yvi8aNd3H8u8XLMePcnHduaM+bd8yXzEBc
YFix0+M+abgYuR/cZ934vvwVDG2E0un4Kw==
-----END EC PRIVATE KEY-----

View File

@ -0,0 +1,11 @@
-----BEGIN CERTIFICATE-----
MIIBpDCCAUqgAwIBAgIRANsipO9KwE/leWJcuFrPB+wwCgYIKoZIzj0EAwIwMDEu
MCwGA1UEAxMlQ2FkZHkgTG9jYWwgQXV0aG9yaXR5IC0gMjAyNCBFQ0MgUm9vdDAe
Fw0yNDA2MjAwMzEwMTVaFw0zNDA0MjkwMzEwMTVaMDAxLjAsBgNVBAMTJUNhZGR5
IExvY2FsIEF1dGhvcml0eSAtIDIwMjQgRUNDIFJvb3QwWTATBgcqhkjOPQIBBggq
hkjOPQMBBwNCAAQV0JrBvTOYnR9xu/RHAXfxv4JprDJppBP/lfzeFmhUNvIdsCbq
0AmvlDW/F6YhX6bdA3X20iNE3LTlMD+vhcxmo0UwQzAOBgNVHQ8BAf8EBAMCAQYw
EgYDVR0TAQH/BAgwBgEB/wIBATAdBgNVHQ4EFgQUo1LYtBHrw3zohaI1O6R7YLjL
/+UwCgYIKoZIzj0EAwIDSAAwRQIhAKvg96k6Znn7wdM1mNrsilxEu43z7MAQ3kuh
Tjj9DsSOAiBPyLow3G3zTbwMT7cP14REfLNk0szBhD86H5ULQcffdQ==
-----END CERTIFICATE-----

View File

@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIHFAkiM79Q5BpZqTse9f/pezqyE9bGXpFiyLi5+2WtvKoAoGCCqGSM49
AwEHoUQDQgAEFdCawb0zmJ0fcbv0RwF38b+CaawyaaQT/5X83hZoVDbyHbAm6tAJ
r5Q1vxemIV+m3QN19tIjRNy05TA/r4XMZg==
-----END EC PRIVATE KEY-----

View File

@ -11,12 +11,17 @@ services:
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
- '443:443'
- '443:443/udp'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --host=localhost --port=443 --admin-port=2019 --https"
XDG_CONFIG_HOME: /var/www/html/config
XDG_DATA_HOME: /var/www/html/data
volumes:
- '.:/var/www/html'
networks:
@ -26,6 +31,7 @@ services:
- redis
- meilisearch
- mailpit
- memcached
mysql:
image: 'mysql/mysql-server:8.0'
ports:
@ -91,6 +97,12 @@ services:
- '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
networks:
- sail
memcached:
image: 'memcached:alpine'
ports:
- '${FORWARD_MEMCACHED_PORT:-11211}:11211'
networks:
- sail
networks:
sail:
driver: bridge