diff --git a/.env.example b/.env.example index 361ae45..29346b1 100644 --- a/.env.example +++ b/.env.example @@ -74,3 +74,6 @@ MAIL_FROM_NAME="${APP_NAME}" NOVA_LICENSE_KEY= SAIL_XDEBUG_MODE=develop,debug,coverage + +OCTANE_SERVER=frankenphp +OCTANE_HTTPS=true diff --git a/.github/README.md b/.github/README.md index a2e0ce6..8682990 100644 --- a/.github/README.md +++ b/.github/README.md @@ -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 . +Once the Docker containers are running with Sail you can access the application at . ### 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 | | -| Redis Queue Management (Horizon) | Via User Role | | -| Website Status (Pulse) | Via User Role | | -| Meilisearch WebUI | Local Only | | -| Mailpit WebUI | Local Only | | +| Service | Authentication | Access Via Host | +|----------------------------------|----------------|-----------------------------| +| Administration Panel (Nova) | Via User Role | | +| Redis Queue Management (Horizon) | Via User Role | | +| Website Status (Pulse) | Via User Role | | +| Meilisearch WebUI | Local Only | | +| Mailpit WebUI | Local Only | | 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. diff --git a/.gitignore b/.gitignore index 1891c29..99ccde4 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,7 @@ yarn-error.log /.idea /.vscode .DS_Store + +/caddy +frankenphp +frankenphp-worker.php diff --git a/composer.json b/composer.json index 430fc92..f452e4c 100644 --- a/composer.json +++ b/composer.json @@ -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", diff --git a/composer.lock b/composer.lock index 950776b..3dc0859 100644 --- a/composer.lock +++ b/composer.lock @@ -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", diff --git a/config/caddy/autosave.json b/config/caddy/autosave.json new file mode 100644 index 0000000..d5799da --- /dev/null +++ b/config/caddy/autosave.json @@ -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"}}}} \ No newline at end of file diff --git a/config/octane.php b/config/octane.php new file mode 100644 index 0000000..7d60507 --- /dev/null +++ b/config/octane.php @@ -0,0 +1,216 @@ + 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, + +]; diff --git a/data/caddy/certificates/local/localhost/localhost.crt b/data/caddy/certificates/local/localhost/localhost.crt new file mode 100644 index 0000000..e93e50c --- /dev/null +++ b/data/caddy/certificates/local/localhost/localhost.crt @@ -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----- diff --git a/data/caddy/certificates/local/localhost/localhost.json b/data/caddy/certificates/local/localhost/localhost.json new file mode 100644 index 0000000..1d36945 --- /dev/null +++ b/data/caddy/certificates/local/localhost/localhost.json @@ -0,0 +1,6 @@ +{ + "sans": [ + "localhost" + ], + "issuer_data": null +} \ No newline at end of file diff --git a/data/caddy/certificates/local/localhost/localhost.key b/data/caddy/certificates/local/localhost/localhost.key new file mode 100644 index 0000000..944cf47 --- /dev/null +++ b/data/caddy/certificates/local/localhost/localhost.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIO8L7+17S/xd2FvywlJiPrIDIn8h7X9cxAMv96iochhnoAoGCCqGSM49 +AwEHoUQDQgAEWNHBlZn8TSJZV4HZGYZcPRWdGj3/OPm1BUBsyui8DSkN5pmnC8kZ +Sl44lntGXSkSefoT1V1aQR8TxPCSIOSacg== +-----END EC PRIVATE KEY----- diff --git a/data/caddy/instance.uuid b/data/caddy/instance.uuid new file mode 100644 index 0000000..5af579f --- /dev/null +++ b/data/caddy/instance.uuid @@ -0,0 +1 @@ +adf48f36-64b4-4db4-96a4-f87a52e59f44 \ No newline at end of file diff --git a/data/caddy/last_clean.json b/data/caddy/last_clean.json new file mode 100644 index 0000000..6eb55d8 --- /dev/null +++ b/data/caddy/last_clean.json @@ -0,0 +1 @@ +{"tls":{"timestamp":"2024-06-20T02:40:43.59823126Z","instance_id":"adf48f36-64b4-4db4-96a4-f87a52e59f44"}} \ No newline at end of file diff --git a/data/caddy/pki/authorities/local/intermediate.crt b/data/caddy/pki/authorities/local/intermediate.crt new file mode 100644 index 0000000..6cd0c8d --- /dev/null +++ b/data/caddy/pki/authorities/local/intermediate.crt @@ -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----- diff --git a/data/caddy/pki/authorities/local/intermediate.key b/data/caddy/pki/authorities/local/intermediate.key new file mode 100644 index 0000000..ac9a20b --- /dev/null +++ b/data/caddy/pki/authorities/local/intermediate.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIH/U421H6TJK+A+wharUGKbJMFYUWI+tpllxHEMCQjtsoAoGCCqGSM49 +AwEHoUQDQgAEXEEaO3W9i1HObByS41Yvi8aNd3H8u8XLMePcnHduaM+bd8yXzEBc +YFix0+M+abgYuR/cZ934vvwVDG2E0un4Kw== +-----END EC PRIVATE KEY----- diff --git a/data/caddy/pki/authorities/local/root.crt b/data/caddy/pki/authorities/local/root.crt new file mode 100644 index 0000000..e0bebbb --- /dev/null +++ b/data/caddy/pki/authorities/local/root.crt @@ -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----- diff --git a/data/caddy/pki/authorities/local/root.key b/data/caddy/pki/authorities/local/root.key new file mode 100644 index 0000000..6cd8791 --- /dev/null +++ b/data/caddy/pki/authorities/local/root.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIHFAkiM79Q5BpZqTse9f/pezqyE9bGXpFiyLi5+2WtvKoAoGCCqGSM49 +AwEHoUQDQgAEFdCawb0zmJ0fcbv0RwF38b+CaawyaaQT/5X83hZoVDbyHbAm6tAJ +r5Q1vxemIV+m3QN19tIjRNy05TA/r4XMZg== +-----END EC PRIVATE KEY----- diff --git a/docker-compose.yml b/docker-compose.yml index da5e05c..ea1db30 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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