├── .docker
├── 8.3
│ └── Dockerfile
├── config
│ ├── grafana.ini
│ ├── local-config.yaml
│ ├── nginx.conf
│ └── prometheus.yml
├── grafana
│ └── .gitignore
├── mysql
│ └── .gitignore
└── prometheus
│ └── .gitignore
├── .editorconfig
├── .env.example
├── .gitattributes
├── .gitignore
├── LICENSE.txt
├── README.md
├── app
├── Http
│ └── Controllers
│ │ ├── Controller.php
│ │ └── DatapointController.php
├── Models
│ ├── Datapoint.php
│ └── User.php
└── Providers
│ └── AppServiceProvider.php
├── artisan
├── bootstrap
├── app.php
├── cache
│ ├── .gitignore
│ ├── packages.php
│ └── services.php
└── providers.php
├── composer.json
├── composer.lock
├── config
├── app.php
├── auth.php
├── cache.php
├── database.php
├── filesystems.php
├── logging.php
├── mail.php
├── queue.php
├── services.php
└── session.php
├── database
├── .gitignore
├── factories
│ ├── DataPointFactory.php
│ └── UserFactory.php
├── migrations
│ ├── 2014_10_12_000000_create_users_table.php
│ └── 2020_04_18_020722_create_datapoints_table.php
└── seeders
│ ├── DataPointTableSeeder.php
│ ├── DatabaseSeeder.php
│ └── UsersTableSeeder.php
├── docker-compose.yml
├── docker
├── 8.0
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
├── 8.1
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
├── 8.2
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
├── 8.3
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
├── mariadb
│ └── create-testing-database.sh
├── mysql
│ └── create-testing-database.sh
└── pgsql
│ └── create-testing-database.sql
├── package-lock.json
├── package.json
├── phpunit.xml
├── public
├── .htaccess
├── favicon.ico
├── index.php
└── robots.txt
├── resources
├── css
│ └── app.css
├── js
│ ├── app.js
│ └── bootstrap.js
├── lang
│ └── en
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
└── views
│ └── welcome.blade.php
├── routes
├── console.php
└── web.php
├── server.php
├── storage
├── app
│ ├── .gitignore
│ └── public
│ │ └── .gitignore
├── framework
│ ├── .gitignore
│ ├── cache
│ │ ├── .gitignore
│ │ └── data
│ │ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ ├── testing
│ │ └── .gitignore
│ └── views
│ │ ├── .gitignore
│ │ └── b18d705f49d4cb87cb2bde363b3ca5bd2bbb5823.php
└── logs
│ └── .gitignore
├── tests
├── Feature
│ └── HomePageTest.php
├── TestCase.php
└── Unit
│ └── ExampleTest.php
└── vite.config.js
/.docker/8.3/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM laravelsail/php83-composer:latest
2 |
3 | # Install APCu extension
4 | RUN pecl install apcu && docker-php-ext-enable apcu
5 |
--------------------------------------------------------------------------------
/.docker/config/grafana.ini:
--------------------------------------------------------------------------------
1 | [auth.anonymous]
2 | enabled = true
3 | org_role = Admin
4 |
5 | [auth.basic]
6 | enabled = false
7 |
8 | [auth]
9 | disable_login_form = true
--------------------------------------------------------------------------------
/.docker/config/local-config.yaml:
--------------------------------------------------------------------------------
1 | auth_enabled: false
2 |
3 | server:
4 | http_listen_port: 3100
5 |
6 | ingester:
7 | lifecycler:
8 | address: 127.0.0.1
9 | ring:
10 | kvstore:
11 | store: inmemory
12 | final_sleep: 0s
13 | chunk_idle_period: 5m
14 | chunk_block_size: 262144
15 | chunk_retain_period: 1m
16 | max_transfer_retries: 0
17 |
18 | schema_config:
19 | configs:
20 | - from: 2020-10-24
21 | store: boltdb-shipper
22 | object_store: filesystem
23 | schema: v11
24 | index:
25 | prefix: index_
26 | period: 24h
27 |
28 | storage_config:
29 | boltdb_shipper:
30 | active_index_directory: /loki/index
31 | cache_location: /loki/boltdb-cache
32 | shared_store: filesystem
33 | filesystem:
34 | directory: /loki/chunks
35 |
36 | limits_config:
37 | enforce_metric_name: false
38 | reject_old_samples: true
39 | reject_old_samples_max_age: 168h
40 |
41 | chunk_store_config:
42 | max_look_back_period: 0s
43 |
44 | table_manager:
45 | retention_deletes_enabled: false
46 | retention_period: 0s
47 |
--------------------------------------------------------------------------------
/.docker/config/nginx.conf:
--------------------------------------------------------------------------------
1 | server {
2 | listen 80;
3 | index index.php index.html;
4 | server_name localhost;
5 | error_log /var/log/nginx/error.log;
6 | access_log /var/log/nginx/access.log;
7 | root /var/www/html/public;
8 |
9 | location / {
10 | try_files $uri $uri/ /index.php?$query_string;
11 | }
12 |
13 | location ~ \.php$ {
14 | try_files $uri =404;
15 | fastcgi_split_path_info ^(.+\.php)(/.+)$;
16 | fastcgi_pass php:9000;
17 | fastcgi_index index.php;
18 | include fastcgi_params;
19 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
20 | fastcgi_param PATH_INFO $fastcgi_path_info;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/.docker/config/prometheus.yml:
--------------------------------------------------------------------------------
1 | global:
2 | scrape_interval: 15s
3 |
4 | scrape_configs:
5 | - job_name: 'laravel_app'
6 | static_configs:
7 | - targets: ['localhost:80']
8 | - job_name: 'loki'
9 | static_configs:
10 | - targets: ['loki:3100']
11 |
--------------------------------------------------------------------------------
/.docker/grafana/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore everything in this directory
2 | *
3 | # Except this file
4 | !.gitignore
5 | grafana.db
6 |
--------------------------------------------------------------------------------
/.docker/mysql/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore everything in this directory
2 | *
3 | # Except this file
4 | !.gitignore
5 |
--------------------------------------------------------------------------------
/.docker/prometheus/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore everything in this directory
2 | *
3 | # Except this file
4 | !.gitignore
5 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_size = 4
7 | indent_style = space
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.{yml,yaml}]
15 | indent_size = 2
16 |
17 | [docker-compose.yml]
18 | indent_size = 4
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_TIMEZONE=UTC
6 | APP_URL=http://localhost
7 |
8 | APP_LOCALE=en
9 | APP_FALLBACK_LOCALE=en
10 | APP_FAKER_LOCALE=en_US
11 |
12 | APP_MAINTENANCE_DRIVER=file
13 | # APP_MAINTENANCE_STORE=database
14 |
15 | BCRYPT_ROUNDS=12
16 |
17 | LOG_CHANNEL=stack
18 | LOG_STACK=single
19 | LOG_DEPRECATIONS_CHANNEL=null
20 | LOG_LEVEL=debug
21 |
22 | DB_CONNECTION=sqlite
23 | # DB_HOST=127.0.0.1
24 | # DB_PORT=3306
25 | # DB_DATABASE=laravel
26 | # DB_USERNAME=root
27 | # DB_PASSWORD=
28 |
29 | SESSION_DRIVER=database
30 | SESSION_LIFETIME=120
31 | SESSION_ENCRYPT=false
32 | SESSION_PATH=/
33 | SESSION_DOMAIN=null
34 |
35 | BROADCAST_CONNECTION=log
36 | FILESYSTEM_DISK=local
37 | QUEUE_CONNECTION=database
38 |
39 | CACHE_STORE=database
40 | CACHE_PREFIX=
41 |
42 | MEMCACHED_HOST=127.0.0.1
43 |
44 | REDIS_CLIENT=phpredis
45 | REDIS_HOST=127.0.0.1
46 | REDIS_PASSWORD=null
47 | REDIS_PORT=6379
48 |
49 | MAIL_MAILER=log
50 | MAIL_HOST=127.0.0.1
51 | MAIL_PORT=2525
52 | MAIL_USERNAME=null
53 | MAIL_PASSWORD=null
54 | MAIL_ENCRYPTION=null
55 | MAIL_FROM_ADDRESS="hello@example.com"
56 | MAIL_FROM_NAME="${APP_NAME}"
57 |
58 | AWS_ACCESS_KEY_ID=
59 | AWS_SECRET_ACCESS_KEY=
60 | AWS_DEFAULT_REGION=us-east-1
61 | AWS_BUCKET=
62 | AWS_USE_PATH_STYLE_ENDPOINT=false
63 |
64 | VITE_APP_NAME="${APP_NAME}"
65 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 |
3 | *.blade.php diff=html
4 | *.css diff=css
5 | *.html diff=html
6 | *.md diff=markdown
7 | *.php diff=php
8 |
9 | /.github export-ignore
10 | CHANGELOG.md export-ignore
11 | .styleci.yml export-ignore
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.phpunit.cache
2 | /node_modules
3 | /public/build
4 | /public/hot
5 | /public/storage
6 | /storage/*.key
7 | /vendor
8 | .env
9 | .env.backup
10 | .env.production
11 | .phpactor.json
12 | .phpunit.result.cache
13 | Homestead.json
14 | Homestead.yaml
15 | auth.json
16 | npm-debug.log
17 | yarn-error.log
18 | /.fleet
19 | /.idea
20 | /.vscode
21 |
22 | .DS_Store
23 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 MD Minhajul ISLAM
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Laravel Grafana
2 | A straightforward docker-compose setup to launch a Laravel application alongside Grafana, Prometheus, and Loki containers. This project aims to monitor the performance of a Laravel application using Grafana for visualization, Prometheus for metrics collection, and Loki for log aggregation.
3 |
4 | ## Usage
5 |
6 | To get started, make sure you have [Docker installed](https://docs.docker.com/docker-for-mac/install/) on your system, and then clone this repository.
7 |
8 | From the project's root directory run `./vendor/bin/sail up`. If you want to run this in background, run `./vendor/bin/sail up -d`. Then open up your browser of choice to [http://localhost:80,](http://localhost:80) and you should see your Laravel app is running.
9 |
10 | We have added three more container that handle Composer, NPM, and Artisan commands without having to have these platforms installed on your local computer. Use the following command templates from your project root:
11 |
12 | - `./vendor/bin/sail composer install`
13 | - `./vendor/bin/sail npm run dev`
14 | - `./vendor/bin/sail php artisan migrate:refresh --seed`
15 |
16 | The created containers and their respective ports (if used) are as follows:
17 |
18 | - **Laravel Application: Exposes port** - `:8000`
19 | - **MySQL Database: Exposes port** - `:3306`
20 | - **Grafana: Exposes port** - `:3000`
21 | - **Prometheus: Exposes port** - `:9000`
22 | - **Loki: Exposes port** - `:3100`
23 |
24 | These ports facilitate access to the Laravel application, Grafana dashboard, Prometheus metrics, and Loki logs.
25 |
26 | ## Persistent MySQL Storage
27 |
28 | By default, whenever you down the docker-compose network, your MySQL data will be removed as the containers are destroyed. If you would like to have your data after bringing containers up, do the following:
29 |
30 | 1. Create a `mysql` folder in the project root, alongside the `nginx` and `src` folders.
31 | 2. Under the mysql service in your `docker-compose.yml` file, add the following lines:
32 |
33 | ```
34 | volumes:
35 | - ./.docker/mysql:/var/lib/mysql
36 | ```
37 |
38 | **Credit:** Following this repo [here](https://github.com/aschmelyun/laravel-grafana-dashboard).
39 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | paginate(20);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/Models/Datapoint.php:
--------------------------------------------------------------------------------
1 | 'datetime',
23 | ];
24 | }
25 |
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | handleCommand(new ArgvInput);
14 |
15 | exit($status);
16 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | withRouting(
9 | web: __DIR__.'/../routes/web.php',
10 | commands: __DIR__.'/../routes/console.php',
11 | health: '/up',
12 | )
13 | ->withMiddleware(function (Middleware $middleware) {
14 | //
15 | })
16 | ->withExceptions(function (Exceptions $exceptions) {
17 | //
18 | })->create();
19 |
--------------------------------------------------------------------------------
/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/bootstrap/cache/packages.php:
--------------------------------------------------------------------------------
1 |
3 | array (
4 | 'providers' =>
5 | array (
6 | 0 => 'Laravel\\Sail\\SailServiceProvider',
7 | ),
8 | ),
9 | 'laravel/tinker' =>
10 | array (
11 | 'providers' =>
12 | array (
13 | 0 => 'Laravel\\Tinker\\TinkerServiceProvider',
14 | ),
15 | ),
16 | 'nesbot/carbon' =>
17 | array (
18 | 'providers' =>
19 | array (
20 | 0 => 'Carbon\\Laravel\\ServiceProvider',
21 | ),
22 | ),
23 | 'nunomaduro/collision' =>
24 | array (
25 | 'providers' =>
26 | array (
27 | 0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
28 | ),
29 | ),
30 | 'nunomaduro/termwind' =>
31 | array (
32 | 'providers' =>
33 | array (
34 | 0 => 'Termwind\\Laravel\\TermwindServiceProvider',
35 | ),
36 | ),
37 | );
--------------------------------------------------------------------------------
/bootstrap/cache/services.php:
--------------------------------------------------------------------------------
1 |
3 | array (
4 | 0 => 'Illuminate\\Auth\\AuthServiceProvider',
5 | 1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
6 | 2 => 'Illuminate\\Bus\\BusServiceProvider',
7 | 3 => 'Illuminate\\Cache\\CacheServiceProvider',
8 | 4 => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
9 | 5 => 'Illuminate\\Cookie\\CookieServiceProvider',
10 | 6 => 'Illuminate\\Database\\DatabaseServiceProvider',
11 | 7 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
12 | 8 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
13 | 9 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
14 | 10 => 'Illuminate\\Hashing\\HashServiceProvider',
15 | 11 => 'Illuminate\\Mail\\MailServiceProvider',
16 | 12 => 'Illuminate\\Notifications\\NotificationServiceProvider',
17 | 13 => 'Illuminate\\Pagination\\PaginationServiceProvider',
18 | 14 => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
19 | 15 => 'Illuminate\\Pipeline\\PipelineServiceProvider',
20 | 16 => 'Illuminate\\Queue\\QueueServiceProvider',
21 | 17 => 'Illuminate\\Redis\\RedisServiceProvider',
22 | 18 => 'Illuminate\\Session\\SessionServiceProvider',
23 | 19 => 'Illuminate\\Translation\\TranslationServiceProvider',
24 | 20 => 'Illuminate\\Validation\\ValidationServiceProvider',
25 | 21 => 'Illuminate\\View\\ViewServiceProvider',
26 | 22 => 'Laravel\\Sail\\SailServiceProvider',
27 | 23 => 'Laravel\\Tinker\\TinkerServiceProvider',
28 | 24 => 'Carbon\\Laravel\\ServiceProvider',
29 | 25 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
30 | 26 => 'Termwind\\Laravel\\TermwindServiceProvider',
31 | 27 => 'App\\Providers\\AppServiceProvider',
32 | ),
33 | 'eager' =>
34 | array (
35 | 0 => 'Illuminate\\Auth\\AuthServiceProvider',
36 | 1 => 'Illuminate\\Cookie\\CookieServiceProvider',
37 | 2 => 'Illuminate\\Database\\DatabaseServiceProvider',
38 | 3 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
39 | 4 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
40 | 5 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
41 | 6 => 'Illuminate\\Notifications\\NotificationServiceProvider',
42 | 7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
43 | 8 => 'Illuminate\\Session\\SessionServiceProvider',
44 | 9 => 'Illuminate\\View\\ViewServiceProvider',
45 | 10 => 'Carbon\\Laravel\\ServiceProvider',
46 | 11 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
47 | 12 => 'Termwind\\Laravel\\TermwindServiceProvider',
48 | 13 => 'App\\Providers\\AppServiceProvider',
49 | ),
50 | 'deferred' =>
51 | array (
52 | 'Illuminate\\Broadcasting\\BroadcastManager' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
53 | 'Illuminate\\Contracts\\Broadcasting\\Factory' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
54 | 'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
55 | 'Illuminate\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
56 | 'Illuminate\\Contracts\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
57 | 'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
58 | 'Illuminate\\Bus\\BatchRepository' => 'Illuminate\\Bus\\BusServiceProvider',
59 | 'Illuminate\\Bus\\DatabaseBatchRepository' => 'Illuminate\\Bus\\BusServiceProvider',
60 | 'cache' => 'Illuminate\\Cache\\CacheServiceProvider',
61 | 'cache.store' => 'Illuminate\\Cache\\CacheServiceProvider',
62 | 'cache.psr6' => 'Illuminate\\Cache\\CacheServiceProvider',
63 | 'memcached.connector' => 'Illuminate\\Cache\\CacheServiceProvider',
64 | 'Illuminate\\Cache\\RateLimiter' => 'Illuminate\\Cache\\CacheServiceProvider',
65 | 'Illuminate\\Foundation\\Console\\AboutCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
66 | 'Illuminate\\Cache\\Console\\ClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
67 | 'Illuminate\\Cache\\Console\\ForgetCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
68 | 'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
69 | 'Illuminate\\Auth\\Console\\ClearResetsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
70 | 'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
71 | 'Illuminate\\Foundation\\Console\\ConfigClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
72 | 'Illuminate\\Foundation\\Console\\ConfigShowCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
73 | 'Illuminate\\Database\\Console\\DbCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
74 | 'Illuminate\\Database\\Console\\MonitorCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
75 | 'Illuminate\\Database\\Console\\PruneCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
76 | 'Illuminate\\Database\\Console\\ShowCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
77 | 'Illuminate\\Database\\Console\\TableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
78 | 'Illuminate\\Database\\Console\\WipeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
79 | 'Illuminate\\Foundation\\Console\\DownCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
80 | 'Illuminate\\Foundation\\Console\\EnvironmentCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
81 | 'Illuminate\\Foundation\\Console\\EnvironmentDecryptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
82 | 'Illuminate\\Foundation\\Console\\EnvironmentEncryptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
83 | 'Illuminate\\Foundation\\Console\\EventCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
84 | 'Illuminate\\Foundation\\Console\\EventClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
85 | 'Illuminate\\Foundation\\Console\\EventListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
86 | 'Illuminate\\Foundation\\Console\\KeyGenerateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
87 | 'Illuminate\\Foundation\\Console\\OptimizeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
88 | 'Illuminate\\Foundation\\Console\\OptimizeClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
89 | 'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
90 | 'Illuminate\\Cache\\Console\\PruneStaleTagsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
91 | 'Illuminate\\Queue\\Console\\ClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
92 | 'Illuminate\\Queue\\Console\\ListFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
93 | 'Illuminate\\Queue\\Console\\FlushFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
94 | 'Illuminate\\Queue\\Console\\ForgetFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
95 | 'Illuminate\\Queue\\Console\\ListenCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
96 | 'Illuminate\\Queue\\Console\\MonitorCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
97 | 'Illuminate\\Queue\\Console\\PruneBatchesCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
98 | 'Illuminate\\Queue\\Console\\PruneFailedJobsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
99 | 'Illuminate\\Queue\\Console\\RestartCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
100 | 'Illuminate\\Queue\\Console\\RetryCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
101 | 'Illuminate\\Queue\\Console\\RetryBatchCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
102 | 'Illuminate\\Queue\\Console\\WorkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
103 | 'Illuminate\\Foundation\\Console\\RouteCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
104 | 'Illuminate\\Foundation\\Console\\RouteClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
105 | 'Illuminate\\Foundation\\Console\\RouteListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
106 | 'Illuminate\\Database\\Console\\DumpCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
107 | 'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
108 | 'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
109 | 'Illuminate\\Console\\Scheduling\\ScheduleListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
110 | 'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
111 | 'Illuminate\\Console\\Scheduling\\ScheduleClearCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
112 | 'Illuminate\\Console\\Scheduling\\ScheduleTestCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
113 | 'Illuminate\\Console\\Scheduling\\ScheduleWorkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
114 | 'Illuminate\\Console\\Scheduling\\ScheduleInterruptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
115 | 'Illuminate\\Database\\Console\\ShowModelCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
116 | 'Illuminate\\Foundation\\Console\\StorageLinkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
117 | 'Illuminate\\Foundation\\Console\\StorageUnlinkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
118 | 'Illuminate\\Foundation\\Console\\UpCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
119 | 'Illuminate\\Foundation\\Console\\ViewCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
120 | 'Illuminate\\Foundation\\Console\\ViewClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
121 | 'Illuminate\\Foundation\\Console\\ApiInstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
122 | 'Illuminate\\Foundation\\Console\\BroadcastingInstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
123 | 'Illuminate\\Cache\\Console\\CacheTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
124 | 'Illuminate\\Foundation\\Console\\CastMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
125 | 'Illuminate\\Foundation\\Console\\ChannelListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
126 | 'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
127 | 'Illuminate\\Foundation\\Console\\ClassMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
128 | 'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
129 | 'Illuminate\\Foundation\\Console\\ConfigPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
130 | 'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
131 | 'Illuminate\\Routing\\Console\\ControllerMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
132 | 'Illuminate\\Foundation\\Console\\DocsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
133 | 'Illuminate\\Foundation\\Console\\EnumMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
134 | 'Illuminate\\Foundation\\Console\\EventGenerateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
135 | 'Illuminate\\Foundation\\Console\\EventMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
136 | 'Illuminate\\Foundation\\Console\\ExceptionMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
137 | 'Illuminate\\Database\\Console\\Factories\\FactoryMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
138 | 'Illuminate\\Foundation\\Console\\InterfaceMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
139 | 'Illuminate\\Foundation\\Console\\JobMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
140 | 'Illuminate\\Foundation\\Console\\LangPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
141 | 'Illuminate\\Foundation\\Console\\ListenerMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
142 | 'Illuminate\\Foundation\\Console\\MailMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
143 | 'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
144 | 'Illuminate\\Foundation\\Console\\ModelMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
145 | 'Illuminate\\Foundation\\Console\\NotificationMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
146 | 'Illuminate\\Notifications\\Console\\NotificationTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
147 | 'Illuminate\\Foundation\\Console\\ObserverMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
148 | 'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
149 | 'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
150 | 'Illuminate\\Queue\\Console\\FailedTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
151 | 'Illuminate\\Queue\\Console\\TableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
152 | 'Illuminate\\Queue\\Console\\BatchesTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
153 | 'Illuminate\\Foundation\\Console\\RequestMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
154 | 'Illuminate\\Foundation\\Console\\ResourceMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
155 | 'Illuminate\\Foundation\\Console\\RuleMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
156 | 'Illuminate\\Foundation\\Console\\ScopeMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
157 | 'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
158 | 'Illuminate\\Session\\Console\\SessionTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
159 | 'Illuminate\\Foundation\\Console\\ServeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
160 | 'Illuminate\\Foundation\\Console\\StubPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
161 | 'Illuminate\\Foundation\\Console\\TestMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
162 | 'Illuminate\\Foundation\\Console\\TraitMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
163 | 'Illuminate\\Foundation\\Console\\VendorPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
164 | 'Illuminate\\Foundation\\Console\\ViewMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
165 | 'migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
166 | 'migration.repository' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
167 | 'migration.creator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
168 | 'Illuminate\\Database\\Console\\Migrations\\MigrateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
169 | 'Illuminate\\Database\\Console\\Migrations\\FreshCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
170 | 'Illuminate\\Database\\Console\\Migrations\\InstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
171 | 'Illuminate\\Database\\Console\\Migrations\\RefreshCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
172 | 'Illuminate\\Database\\Console\\Migrations\\ResetCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
173 | 'Illuminate\\Database\\Console\\Migrations\\RollbackCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
174 | 'Illuminate\\Database\\Console\\Migrations\\StatusCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
175 | 'Illuminate\\Database\\Console\\Migrations\\MigrateMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
176 | 'composer' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
177 | 'hash' => 'Illuminate\\Hashing\\HashServiceProvider',
178 | 'hash.driver' => 'Illuminate\\Hashing\\HashServiceProvider',
179 | 'mail.manager' => 'Illuminate\\Mail\\MailServiceProvider',
180 | 'mailer' => 'Illuminate\\Mail\\MailServiceProvider',
181 | 'Illuminate\\Mail\\Markdown' => 'Illuminate\\Mail\\MailServiceProvider',
182 | 'auth.password' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
183 | 'auth.password.broker' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
184 | 'Illuminate\\Contracts\\Pipeline\\Hub' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
185 | 'pipeline' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
186 | 'queue' => 'Illuminate\\Queue\\QueueServiceProvider',
187 | 'queue.connection' => 'Illuminate\\Queue\\QueueServiceProvider',
188 | 'queue.failer' => 'Illuminate\\Queue\\QueueServiceProvider',
189 | 'queue.listener' => 'Illuminate\\Queue\\QueueServiceProvider',
190 | 'queue.worker' => 'Illuminate\\Queue\\QueueServiceProvider',
191 | 'redis' => 'Illuminate\\Redis\\RedisServiceProvider',
192 | 'redis.connection' => 'Illuminate\\Redis\\RedisServiceProvider',
193 | 'translator' => 'Illuminate\\Translation\\TranslationServiceProvider',
194 | 'translation.loader' => 'Illuminate\\Translation\\TranslationServiceProvider',
195 | 'validator' => 'Illuminate\\Validation\\ValidationServiceProvider',
196 | 'validation.presence' => 'Illuminate\\Validation\\ValidationServiceProvider',
197 | 'Illuminate\\Contracts\\Validation\\UncompromisedVerifier' => 'Illuminate\\Validation\\ValidationServiceProvider',
198 | 'Laravel\\Sail\\Console\\InstallCommand' => 'Laravel\\Sail\\SailServiceProvider',
199 | 'Laravel\\Sail\\Console\\PublishCommand' => 'Laravel\\Sail\\SailServiceProvider',
200 | 'command.tinker' => 'Laravel\\Tinker\\TinkerServiceProvider',
201 | ),
202 | 'when' =>
203 | array (
204 | 'Illuminate\\Broadcasting\\BroadcastServiceProvider' =>
205 | array (
206 | ),
207 | 'Illuminate\\Bus\\BusServiceProvider' =>
208 | array (
209 | ),
210 | 'Illuminate\\Cache\\CacheServiceProvider' =>
211 | array (
212 | ),
213 | 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' =>
214 | array (
215 | ),
216 | 'Illuminate\\Hashing\\HashServiceProvider' =>
217 | array (
218 | ),
219 | 'Illuminate\\Mail\\MailServiceProvider' =>
220 | array (
221 | ),
222 | 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider' =>
223 | array (
224 | ),
225 | 'Illuminate\\Pipeline\\PipelineServiceProvider' =>
226 | array (
227 | ),
228 | 'Illuminate\\Queue\\QueueServiceProvider' =>
229 | array (
230 | ),
231 | 'Illuminate\\Redis\\RedisServiceProvider' =>
232 | array (
233 | ),
234 | 'Illuminate\\Translation\\TranslationServiceProvider' =>
235 | array (
236 | ),
237 | 'Illuminate\\Validation\\ValidationServiceProvider' =>
238 | array (
239 | ),
240 | 'Laravel\\Sail\\SailServiceProvider' =>
241 | array (
242 | ),
243 | 'Laravel\\Tinker\\TinkerServiceProvider' =>
244 | array (
245 | ),
246 | ),
247 | );
--------------------------------------------------------------------------------
/bootstrap/providers.php:
--------------------------------------------------------------------------------
1 | env('APP_NAME', 'Laravel'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Application Environment
21 | |--------------------------------------------------------------------------
22 | |
23 | | This value determines the "environment" your application is currently
24 | | running in. This may determine how you prefer to configure various
25 | | services the application utilizes. Set this in your ".env" file.
26 | |
27 | */
28 |
29 | 'env' => env('APP_ENV', 'production'),
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Application Debug Mode
34 | |--------------------------------------------------------------------------
35 | |
36 | | When your application is in debug mode, detailed error messages with
37 | | stack traces will be shown on every error that occurs within your
38 | | application. If disabled, a simple generic error page is shown.
39 | |
40 | */
41 |
42 | 'debug' => (bool) env('APP_DEBUG', false),
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Application URL
47 | |--------------------------------------------------------------------------
48 | |
49 | | This URL is used by the console to properly generate URLs when using
50 | | the Artisan command line tool. You should set this to the root of
51 | | the application so that it's available within Artisan commands.
52 | |
53 | */
54 |
55 | 'url' => env('APP_URL', 'http://localhost'),
56 |
57 | /*
58 | |--------------------------------------------------------------------------
59 | | Application Timezone
60 | |--------------------------------------------------------------------------
61 | |
62 | | Here you may specify the default timezone for your application, which
63 | | will be used by the PHP date and date-time functions. The timezone
64 | | is set to "UTC" by default as it is suitable for most use cases.
65 | |
66 | */
67 |
68 | 'timezone' => env('APP_TIMEZONE', 'UTC'),
69 |
70 | /*
71 | |--------------------------------------------------------------------------
72 | | Application Locale Configuration
73 | |--------------------------------------------------------------------------
74 | |
75 | | The application locale determines the default locale that will be used
76 | | by Laravel's translation / localization methods. This option can be
77 | | set to any locale for which you plan to have translation strings.
78 | |
79 | */
80 |
81 | 'locale' => env('APP_LOCALE', 'en'),
82 |
83 | 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
84 |
85 | 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
86 |
87 | /*
88 | |--------------------------------------------------------------------------
89 | | Encryption Key
90 | |--------------------------------------------------------------------------
91 | |
92 | | This key is utilized by Laravel's encryption services and should be set
93 | | to a random, 32 character string to ensure that all encrypted values
94 | | are secure. You should do this prior to deploying the application.
95 | |
96 | */
97 |
98 | 'cipher' => 'AES-256-CBC',
99 |
100 | 'key' => env('APP_KEY'),
101 |
102 | 'previous_keys' => [
103 | ...array_filter(
104 | explode(',', env('APP_PREVIOUS_KEYS', ''))
105 | ),
106 | ],
107 |
108 | /*
109 | |--------------------------------------------------------------------------
110 | | Maintenance Mode Driver
111 | |--------------------------------------------------------------------------
112 | |
113 | | These configuration options determine the driver used to determine and
114 | | manage Laravel's "maintenance mode" status. The "cache" driver will
115 | | allow maintenance mode to be controlled across multiple machines.
116 | |
117 | | Supported drivers: "file", "cache"
118 | |
119 | */
120 |
121 | 'maintenance' => [
122 | 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
123 | 'store' => env('APP_MAINTENANCE_STORE', 'database'),
124 | ],
125 |
126 | ];
127 |
--------------------------------------------------------------------------------
/config/auth.php:
--------------------------------------------------------------------------------
1 | [
17 | 'guard' => env('AUTH_GUARD', 'web'),
18 | 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
19 | ],
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Authentication Guards
24 | |--------------------------------------------------------------------------
25 | |
26 | | Next, you may define every authentication guard for your application.
27 | | Of course, a great default configuration has been defined for you
28 | | which utilizes session storage plus the Eloquent user provider.
29 | |
30 | | All authentication guards have a user provider, which defines how the
31 | | users are actually retrieved out of your database or other storage
32 | | system used by the application. Typically, Eloquent is utilized.
33 | |
34 | | Supported: "session"
35 | |
36 | */
37 |
38 | 'guards' => [
39 | 'web' => [
40 | 'driver' => 'session',
41 | 'provider' => 'users',
42 | ],
43 | ],
44 |
45 | /*
46 | |--------------------------------------------------------------------------
47 | | User Providers
48 | |--------------------------------------------------------------------------
49 | |
50 | | All authentication guards have a user provider, which defines how the
51 | | users are actually retrieved out of your database or other storage
52 | | system used by the application. Typically, Eloquent is utilized.
53 | |
54 | | If you have multiple user tables or models you may configure multiple
55 | | providers to represent the model / table. These providers may then
56 | | be assigned to any extra authentication guards you have defined.
57 | |
58 | | Supported: "database", "eloquent"
59 | |
60 | */
61 |
62 | 'providers' => [
63 | 'users' => [
64 | 'driver' => 'eloquent',
65 | 'model' => env('AUTH_MODEL', App\Models\User::class),
66 | ],
67 |
68 | // 'users' => [
69 | // 'driver' => 'database',
70 | // 'table' => 'users',
71 | // ],
72 | ],
73 |
74 | /*
75 | |--------------------------------------------------------------------------
76 | | Resetting Passwords
77 | |--------------------------------------------------------------------------
78 | |
79 | | These configuration options specify the behavior of Laravel's password
80 | | reset functionality, including the table utilized for token storage
81 | | and the user provider that is invoked to actually retrieve users.
82 | |
83 | | The expiry time is the number of minutes that each reset token will be
84 | | considered valid. This security feature keeps tokens short-lived so
85 | | they have less time to be guessed. You may change this as needed.
86 | |
87 | | The throttle setting is the number of seconds a user must wait before
88 | | generating more password reset tokens. This prevents the user from
89 | | quickly generating a very large amount of password reset tokens.
90 | |
91 | */
92 |
93 | 'passwords' => [
94 | 'users' => [
95 | 'provider' => 'users',
96 | 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
97 | 'expire' => 60,
98 | 'throttle' => 60,
99 | ],
100 | ],
101 |
102 | /*
103 | |--------------------------------------------------------------------------
104 | | Password Confirmation Timeout
105 | |--------------------------------------------------------------------------
106 | |
107 | | Here you may define the amount of seconds before a password confirmation
108 | | window expires and users are asked to re-enter their password via the
109 | | confirmation screen. By default, the timeout lasts for three hours.
110 | |
111 | */
112 |
113 | 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
114 |
115 | ];
116 |
--------------------------------------------------------------------------------
/config/cache.php:
--------------------------------------------------------------------------------
1 | env('CACHE_STORE', 'database'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Cache Stores
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the cache "stores" for your application as
26 | | well as their drivers. You may even define multiple stores for the
27 | | same cache driver to group types of items stored in your caches.
28 | |
29 | | Supported drivers: "array", "database", "file", "memcached",
30 | | "redis", "dynamodb", "octane", "null"
31 | |
32 | */
33 |
34 | 'stores' => [
35 |
36 | 'array' => [
37 | 'driver' => 'array',
38 | 'serialize' => false,
39 | ],
40 |
41 | 'database' => [
42 | 'driver' => 'database',
43 | 'connection' => env('DB_CACHE_CONNECTION'),
44 | 'table' => env('DB_CACHE_TABLE', 'cache'),
45 | 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
46 | 'lock_table' => env('DB_CACHE_LOCK_TABLE'),
47 | ],
48 |
49 | 'file' => [
50 | 'driver' => 'file',
51 | 'path' => storage_path('framework/cache/data'),
52 | 'lock_path' => storage_path('framework/cache/data'),
53 | ],
54 |
55 | 'memcached' => [
56 | 'driver' => 'memcached',
57 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
58 | 'sasl' => [
59 | env('MEMCACHED_USERNAME'),
60 | env('MEMCACHED_PASSWORD'),
61 | ],
62 | 'options' => [
63 | // Memcached::OPT_CONNECT_TIMEOUT => 2000,
64 | ],
65 | 'servers' => [
66 | [
67 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'),
68 | 'port' => env('MEMCACHED_PORT', 11211),
69 | 'weight' => 100,
70 | ],
71 | ],
72 | ],
73 |
74 | 'redis' => [
75 | 'driver' => 'redis',
76 | 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
77 | 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
78 | ],
79 |
80 | 'dynamodb' => [
81 | 'driver' => 'dynamodb',
82 | 'key' => env('AWS_ACCESS_KEY_ID'),
83 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
84 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
85 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
86 | 'endpoint' => env('DYNAMODB_ENDPOINT'),
87 | ],
88 |
89 | 'octane' => [
90 | 'driver' => 'octane',
91 | ],
92 |
93 | ],
94 |
95 | /*
96 | |--------------------------------------------------------------------------
97 | | Cache Key Prefix
98 | |--------------------------------------------------------------------------
99 | |
100 | | When utilizing the APC, database, memcached, Redis, and DynamoDB cache
101 | | stores, there might be other applications using the same cache. For
102 | | that reason, you may prefix every cache key to avoid collisions.
103 | |
104 | */
105 |
106 | 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
107 |
108 | ];
109 |
--------------------------------------------------------------------------------
/config/database.php:
--------------------------------------------------------------------------------
1 | env('DB_CONNECTION', 'sqlite'),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Database Connections
24 | |--------------------------------------------------------------------------
25 | |
26 | | Below are all of the database connections defined for your application.
27 | | An example configuration is provided for each database system which
28 | | is supported by Laravel. You're free to add / remove connections.
29 | |
30 | */
31 |
32 | 'connections' => [
33 |
34 | 'sqlite' => [
35 | 'driver' => 'sqlite',
36 | 'url' => env('DB_URL'),
37 | 'database' => env('DB_DATABASE', database_path('database.sqlite')),
38 | 'prefix' => '',
39 | 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
40 | 'busy_timeout' => null,
41 | 'journal_mode' => null,
42 | 'synchronous' => null,
43 | ],
44 |
45 | 'mysql' => [
46 | 'driver' => 'mysql',
47 | 'url' => env('DB_URL'),
48 | 'host' => env('DB_HOST', '127.0.0.1'),
49 | 'port' => env('DB_PORT', '3306'),
50 | 'database' => env('DB_DATABASE', 'laravel'),
51 | 'username' => env('DB_USERNAME', 'root'),
52 | 'password' => env('DB_PASSWORD', ''),
53 | 'unix_socket' => env('DB_SOCKET', ''),
54 | 'charset' => env('DB_CHARSET', 'utf8mb4'),
55 | 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
56 | 'prefix' => '',
57 | 'prefix_indexes' => true,
58 | 'strict' => true,
59 | 'engine' => null,
60 | 'options' => extension_loaded('pdo_mysql') ? array_filter([
61 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
62 | ]) : [],
63 | ],
64 |
65 | 'mariadb' => [
66 | 'driver' => 'mariadb',
67 | 'url' => env('DB_URL'),
68 | 'host' => env('DB_HOST', '127.0.0.1'),
69 | 'port' => env('DB_PORT', '3306'),
70 | 'database' => env('DB_DATABASE', 'laravel'),
71 | 'username' => env('DB_USERNAME', 'root'),
72 | 'password' => env('DB_PASSWORD', ''),
73 | 'unix_socket' => env('DB_SOCKET', ''),
74 | 'charset' => env('DB_CHARSET', 'utf8mb4'),
75 | 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
76 | 'prefix' => '',
77 | 'prefix_indexes' => true,
78 | 'strict' => true,
79 | 'engine' => null,
80 | 'options' => extension_loaded('pdo_mysql') ? array_filter([
81 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
82 | ]) : [],
83 | ],
84 |
85 | 'pgsql' => [
86 | 'driver' => 'pgsql',
87 | 'url' => env('DB_URL'),
88 | 'host' => env('DB_HOST', '127.0.0.1'),
89 | 'port' => env('DB_PORT', '5432'),
90 | 'database' => env('DB_DATABASE', 'laravel'),
91 | 'username' => env('DB_USERNAME', 'root'),
92 | 'password' => env('DB_PASSWORD', ''),
93 | 'charset' => env('DB_CHARSET', 'utf8'),
94 | 'prefix' => '',
95 | 'prefix_indexes' => true,
96 | 'search_path' => 'public',
97 | 'sslmode' => 'prefer',
98 | ],
99 |
100 | 'sqlsrv' => [
101 | 'driver' => 'sqlsrv',
102 | 'url' => env('DB_URL'),
103 | 'host' => env('DB_HOST', 'localhost'),
104 | 'port' => env('DB_PORT', '1433'),
105 | 'database' => env('DB_DATABASE', 'laravel'),
106 | 'username' => env('DB_USERNAME', 'root'),
107 | 'password' => env('DB_PASSWORD', ''),
108 | 'charset' => env('DB_CHARSET', 'utf8'),
109 | 'prefix' => '',
110 | 'prefix_indexes' => true,
111 | // 'encrypt' => env('DB_ENCRYPT', 'yes'),
112 | // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
113 | ],
114 |
115 | ],
116 |
117 | /*
118 | |--------------------------------------------------------------------------
119 | | Migration Repository Table
120 | |--------------------------------------------------------------------------
121 | |
122 | | This table keeps track of all the migrations that have already run for
123 | | your application. Using this information, we can determine which of
124 | | the migrations on disk haven't actually been run on the database.
125 | |
126 | */
127 |
128 | 'migrations' => [
129 | 'table' => 'migrations',
130 | 'update_date_on_publish' => true,
131 | ],
132 |
133 | /*
134 | |--------------------------------------------------------------------------
135 | | Redis Databases
136 | |--------------------------------------------------------------------------
137 | |
138 | | Redis is an open source, fast, and advanced key-value store that also
139 | | provides a richer body of commands than a typical key-value system
140 | | such as Memcached. You may define your connection settings here.
141 | |
142 | */
143 |
144 | 'redis' => [
145 |
146 | 'client' => env('REDIS_CLIENT', 'phpredis'),
147 |
148 | 'options' => [
149 | 'cluster' => env('REDIS_CLUSTER', 'redis'),
150 | 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
151 | ],
152 |
153 | 'default' => [
154 | 'url' => env('REDIS_URL'),
155 | 'host' => env('REDIS_HOST', '127.0.0.1'),
156 | 'username' => env('REDIS_USERNAME'),
157 | 'password' => env('REDIS_PASSWORD'),
158 | 'port' => env('REDIS_PORT', '6379'),
159 | 'database' => env('REDIS_DB', '0'),
160 | ],
161 |
162 | 'cache' => [
163 | 'url' => env('REDIS_URL'),
164 | 'host' => env('REDIS_HOST', '127.0.0.1'),
165 | 'username' => env('REDIS_USERNAME'),
166 | 'password' => env('REDIS_PASSWORD'),
167 | 'port' => env('REDIS_PORT', '6379'),
168 | 'database' => env('REDIS_CACHE_DB', '1'),
169 | ],
170 |
171 | ],
172 |
173 | ];
174 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DISK', 'local'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Filesystem Disks
21 | |--------------------------------------------------------------------------
22 | |
23 | | Below you may configure as many filesystem disks as necessary, and you
24 | | may even configure multiple disks for the same driver. Examples for
25 | | most supported storage drivers are configured here for reference.
26 | |
27 | | Supported drivers: "local", "ftp", "sftp", "s3"
28 | |
29 | */
30 |
31 | 'disks' => [
32 |
33 | 'local' => [
34 | 'driver' => 'local',
35 | 'root' => storage_path('app'),
36 | 'throw' => false,
37 | ],
38 |
39 | 'public' => [
40 | 'driver' => 'local',
41 | 'root' => storage_path('app/public'),
42 | 'url' => env('APP_URL').'/storage',
43 | 'visibility' => 'public',
44 | 'throw' => false,
45 | ],
46 |
47 | 's3' => [
48 | 'driver' => 's3',
49 | 'key' => env('AWS_ACCESS_KEY_ID'),
50 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
51 | 'region' => env('AWS_DEFAULT_REGION'),
52 | 'bucket' => env('AWS_BUCKET'),
53 | 'url' => env('AWS_URL'),
54 | 'endpoint' => env('AWS_ENDPOINT'),
55 | 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
56 | 'throw' => false,
57 | ],
58 |
59 | ],
60 |
61 | /*
62 | |--------------------------------------------------------------------------
63 | | Symbolic Links
64 | |--------------------------------------------------------------------------
65 | |
66 | | Here you may configure the symbolic links that will be created when the
67 | | `storage:link` Artisan command is executed. The array keys should be
68 | | the locations of the links and the values should be their targets.
69 | |
70 | */
71 |
72 | 'links' => [
73 | public_path('storage') => storage_path('app/public'),
74 | ],
75 |
76 | ];
77 |
--------------------------------------------------------------------------------
/config/logging.php:
--------------------------------------------------------------------------------
1 | env('LOG_CHANNEL', 'stack'),
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Deprecations Log Channel
26 | |--------------------------------------------------------------------------
27 | |
28 | | This option controls the log channel that should be used to log warnings
29 | | regarding deprecated PHP and library features. This allows you to get
30 | | your application ready for upcoming major versions of dependencies.
31 | |
32 | */
33 |
34 | 'deprecations' => [
35 | 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
36 | 'trace' => env('LOG_DEPRECATIONS_TRACE', false),
37 | ],
38 |
39 | /*
40 | |--------------------------------------------------------------------------
41 | | Log Channels
42 | |--------------------------------------------------------------------------
43 | |
44 | | Here you may configure the log channels for your application. Laravel
45 | | utilizes the Monolog PHP logging library, which includes a variety
46 | | of powerful log handlers and formatters that you're free to use.
47 | |
48 | | Available drivers: "single", "daily", "slack", "syslog",
49 | | "errorlog", "monolog", "custom", "stack"
50 | |
51 | */
52 |
53 | 'channels' => [
54 |
55 | 'stack' => [
56 | 'driver' => 'stack',
57 | 'channels' => explode(',', env('LOG_STACK', 'single')),
58 | 'ignore_exceptions' => false,
59 | ],
60 |
61 | 'single' => [
62 | 'driver' => 'single',
63 | 'path' => storage_path('logs/laravel.log'),
64 | 'level' => env('LOG_LEVEL', 'debug'),
65 | 'replace_placeholders' => true,
66 | ],
67 |
68 | 'daily' => [
69 | 'driver' => 'daily',
70 | 'path' => storage_path('logs/laravel.log'),
71 | 'level' => env('LOG_LEVEL', 'debug'),
72 | 'days' => env('LOG_DAILY_DAYS', 14),
73 | 'replace_placeholders' => true,
74 | ],
75 |
76 | 'slack' => [
77 | 'driver' => 'slack',
78 | 'url' => env('LOG_SLACK_WEBHOOK_URL'),
79 | 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
80 | 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
81 | 'level' => env('LOG_LEVEL', 'critical'),
82 | 'replace_placeholders' => true,
83 | ],
84 |
85 | 'papertrail' => [
86 | 'driver' => 'monolog',
87 | 'level' => env('LOG_LEVEL', 'debug'),
88 | 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
89 | 'handler_with' => [
90 | 'host' => env('PAPERTRAIL_URL'),
91 | 'port' => env('PAPERTRAIL_PORT'),
92 | 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
93 | ],
94 | 'processors' => [PsrLogMessageProcessor::class],
95 | ],
96 |
97 | 'stderr' => [
98 | 'driver' => 'monolog',
99 | 'level' => env('LOG_LEVEL', 'debug'),
100 | 'handler' => StreamHandler::class,
101 | 'formatter' => env('LOG_STDERR_FORMATTER'),
102 | 'with' => [
103 | 'stream' => 'php://stderr',
104 | ],
105 | 'processors' => [PsrLogMessageProcessor::class],
106 | ],
107 |
108 | 'syslog' => [
109 | 'driver' => 'syslog',
110 | 'level' => env('LOG_LEVEL', 'debug'),
111 | 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
112 | 'replace_placeholders' => true,
113 | ],
114 |
115 | 'errorlog' => [
116 | 'driver' => 'errorlog',
117 | 'level' => env('LOG_LEVEL', 'debug'),
118 | 'replace_placeholders' => true,
119 | ],
120 |
121 | 'null' => [
122 | 'driver' => 'monolog',
123 | 'handler' => NullHandler::class,
124 | ],
125 |
126 | 'emergency' => [
127 | 'path' => storage_path('logs/laravel.log'),
128 | ],
129 |
130 | ],
131 |
132 | ];
133 |
--------------------------------------------------------------------------------
/config/mail.php:
--------------------------------------------------------------------------------
1 | env('MAIL_MAILER', 'log'),
18 |
19 | /*
20 | |--------------------------------------------------------------------------
21 | | Mailer Configurations
22 | |--------------------------------------------------------------------------
23 | |
24 | | Here you may configure all of the mailers used by your application plus
25 | | their respective settings. Several examples have been configured for
26 | | you and you are free to add your own as your application requires.
27 | |
28 | | Laravel supports a variety of mail "transport" drivers that can be used
29 | | when delivering an email. You may specify which one you're using for
30 | | your mailers below. You may also add additional mailers if needed.
31 | |
32 | | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
33 | | "postmark", "resend", "log", "array",
34 | | "failover", "roundrobin"
35 | |
36 | */
37 |
38 | 'mailers' => [
39 |
40 | 'smtp' => [
41 | 'transport' => 'smtp',
42 | 'url' => env('MAIL_URL'),
43 | 'host' => env('MAIL_HOST', '127.0.0.1'),
44 | 'port' => env('MAIL_PORT', 2525),
45 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
46 | 'username' => env('MAIL_USERNAME'),
47 | 'password' => env('MAIL_PASSWORD'),
48 | 'timeout' => null,
49 | 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
50 | ],
51 |
52 | 'ses' => [
53 | 'transport' => 'ses',
54 | ],
55 |
56 | 'postmark' => [
57 | 'transport' => 'postmark',
58 | // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
59 | // 'client' => [
60 | // 'timeout' => 5,
61 | // ],
62 | ],
63 |
64 | 'resend' => [
65 | 'transport' => 'resend',
66 | ],
67 |
68 | 'sendmail' => [
69 | 'transport' => 'sendmail',
70 | 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
71 | ],
72 |
73 | 'log' => [
74 | 'transport' => 'log',
75 | 'channel' => env('MAIL_LOG_CHANNEL'),
76 | ],
77 |
78 | 'array' => [
79 | 'transport' => 'array',
80 | ],
81 |
82 | 'failover' => [
83 | 'transport' => 'failover',
84 | 'mailers' => [
85 | 'smtp',
86 | 'log',
87 | ],
88 | ],
89 |
90 | 'roundrobin' => [
91 | 'transport' => 'roundrobin',
92 | 'mailers' => [
93 | 'ses',
94 | 'postmark',
95 | ],
96 | ],
97 |
98 | ],
99 |
100 | /*
101 | |--------------------------------------------------------------------------
102 | | Global "From" Address
103 | |--------------------------------------------------------------------------
104 | |
105 | | You may wish for all emails sent by your application to be sent from
106 | | the same address. Here you may specify a name and address that is
107 | | used globally for all emails that are sent by your application.
108 | |
109 | */
110 |
111 | 'from' => [
112 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
113 | 'name' => env('MAIL_FROM_NAME', 'Example'),
114 | ],
115 |
116 | ];
117 |
--------------------------------------------------------------------------------
/config/queue.php:
--------------------------------------------------------------------------------
1 | env('QUEUE_CONNECTION', 'database'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Queue Connections
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may configure the connection options for every queue backend
24 | | used by your application. An example configuration is provided for
25 | | each backend supported by Laravel. You're also free to add more.
26 | |
27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'sync' => [
34 | 'driver' => 'sync',
35 | ],
36 |
37 | 'database' => [
38 | 'driver' => 'database',
39 | 'connection' => env('DB_QUEUE_CONNECTION'),
40 | 'table' => env('DB_QUEUE_TABLE', 'jobs'),
41 | 'queue' => env('DB_QUEUE', 'default'),
42 | 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
43 | 'after_commit' => false,
44 | ],
45 |
46 | 'beanstalkd' => [
47 | 'driver' => 'beanstalkd',
48 | 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
49 | 'queue' => env('BEANSTALKD_QUEUE', 'default'),
50 | 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
51 | 'block_for' => 0,
52 | 'after_commit' => false,
53 | ],
54 |
55 | 'sqs' => [
56 | 'driver' => 'sqs',
57 | 'key' => env('AWS_ACCESS_KEY_ID'),
58 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
59 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
60 | 'queue' => env('SQS_QUEUE', 'default'),
61 | 'suffix' => env('SQS_SUFFIX'),
62 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
63 | 'after_commit' => false,
64 | ],
65 |
66 | 'redis' => [
67 | 'driver' => 'redis',
68 | 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
69 | 'queue' => env('REDIS_QUEUE', 'default'),
70 | 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
71 | 'block_for' => null,
72 | 'after_commit' => false,
73 | ],
74 |
75 | ],
76 |
77 | /*
78 | |--------------------------------------------------------------------------
79 | | Job Batching
80 | |--------------------------------------------------------------------------
81 | |
82 | | The following options configure the database and table that store job
83 | | batching information. These options can be updated to any database
84 | | connection and table which has been defined by your application.
85 | |
86 | */
87 |
88 | 'batching' => [
89 | 'database' => env('DB_CONNECTION', 'sqlite'),
90 | 'table' => 'job_batches',
91 | ],
92 |
93 | /*
94 | |--------------------------------------------------------------------------
95 | | Failed Queue Jobs
96 | |--------------------------------------------------------------------------
97 | |
98 | | These options configure the behavior of failed queue job logging so you
99 | | can control how and where failed jobs are stored. Laravel ships with
100 | | support for storing failed jobs in a simple file or in a database.
101 | |
102 | | Supported drivers: "database-uuids", "dynamodb", "file", "null"
103 | |
104 | */
105 |
106 | 'failed' => [
107 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
108 | 'database' => env('DB_CONNECTION', 'sqlite'),
109 | 'table' => 'failed_jobs',
110 | ],
111 |
112 | ];
113 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'token' => env('POSTMARK_TOKEN'),
19 | ],
20 |
21 | 'ses' => [
22 | 'key' => env('AWS_ACCESS_KEY_ID'),
23 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
24 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
25 | ],
26 |
27 | 'resend' => [
28 | 'key' => env('RESEND_KEY'),
29 | ],
30 |
31 | 'slack' => [
32 | 'notifications' => [
33 | 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
34 | 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
35 | ],
36 | ],
37 |
38 | ];
39 |
--------------------------------------------------------------------------------
/config/session.php:
--------------------------------------------------------------------------------
1 | env('SESSION_DRIVER', 'database'),
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Session Lifetime
26 | |--------------------------------------------------------------------------
27 | |
28 | | Here you may specify the number of minutes that you wish the session
29 | | to be allowed to remain idle before it expires. If you want them
30 | | to expire immediately when the browser is closed then you may
31 | | indicate that via the expire_on_close configuration option.
32 | |
33 | */
34 |
35 | 'lifetime' => env('SESSION_LIFETIME', 120),
36 |
37 | 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
38 |
39 | /*
40 | |--------------------------------------------------------------------------
41 | | Session Encryption
42 | |--------------------------------------------------------------------------
43 | |
44 | | This option allows you to easily specify that all of your session data
45 | | should be encrypted before it's stored. All encryption is performed
46 | | automatically by Laravel and you may use the session like normal.
47 | |
48 | */
49 |
50 | 'encrypt' => env('SESSION_ENCRYPT', false),
51 |
52 | /*
53 | |--------------------------------------------------------------------------
54 | | Session File Location
55 | |--------------------------------------------------------------------------
56 | |
57 | | When utilizing the "file" session driver, the session files are placed
58 | | on disk. The default storage location is defined here; however, you
59 | | are free to provide another location where they should be stored.
60 | |
61 | */
62 |
63 | 'files' => storage_path('framework/sessions'),
64 |
65 | /*
66 | |--------------------------------------------------------------------------
67 | | Session Database Connection
68 | |--------------------------------------------------------------------------
69 | |
70 | | When using the "database" or "redis" session drivers, you may specify a
71 | | connection that should be used to manage these sessions. This should
72 | | correspond to a connection in your database configuration options.
73 | |
74 | */
75 |
76 | 'connection' => env('SESSION_CONNECTION'),
77 |
78 | /*
79 | |--------------------------------------------------------------------------
80 | | Session Database Table
81 | |--------------------------------------------------------------------------
82 | |
83 | | When using the "database" session driver, you may specify the table to
84 | | be used to store sessions. Of course, a sensible default is defined
85 | | for you; however, you're welcome to change this to another table.
86 | |
87 | */
88 |
89 | 'table' => env('SESSION_TABLE', 'sessions'),
90 |
91 | /*
92 | |--------------------------------------------------------------------------
93 | | Session Cache Store
94 | |--------------------------------------------------------------------------
95 | |
96 | | When using one of the framework's cache driven session backends, you may
97 | | define the cache store which should be used to store the session data
98 | | between requests. This must match one of your defined cache stores.
99 | |
100 | | Affects: "apc", "dynamodb", "memcached", "redis"
101 | |
102 | */
103 |
104 | 'store' => env('SESSION_STORE'),
105 |
106 | /*
107 | |--------------------------------------------------------------------------
108 | | Session Sweeping Lottery
109 | |--------------------------------------------------------------------------
110 | |
111 | | Some session drivers must manually sweep their storage location to get
112 | | rid of old sessions from storage. Here are the chances that it will
113 | | happen on a given request. By default, the odds are 2 out of 100.
114 | |
115 | */
116 |
117 | 'lottery' => [2, 100],
118 |
119 | /*
120 | |--------------------------------------------------------------------------
121 | | Session Cookie Name
122 | |--------------------------------------------------------------------------
123 | |
124 | | Here you may change the name of the session cookie that is created by
125 | | the framework. Typically, you should not need to change this value
126 | | since doing so does not grant a meaningful security improvement.
127 | |
128 | */
129 |
130 | 'cookie' => env(
131 | 'SESSION_COOKIE',
132 | Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
133 | ),
134 |
135 | /*
136 | |--------------------------------------------------------------------------
137 | | Session Cookie Path
138 | |--------------------------------------------------------------------------
139 | |
140 | | The session cookie path determines the path for which the cookie will
141 | | be regarded as available. Typically, this will be the root path of
142 | | your application, but you're free to change this when necessary.
143 | |
144 | */
145 |
146 | 'path' => env('SESSION_PATH', '/'),
147 |
148 | /*
149 | |--------------------------------------------------------------------------
150 | | Session Cookie Domain
151 | |--------------------------------------------------------------------------
152 | |
153 | | This value determines the domain and subdomains the session cookie is
154 | | available to. By default, the cookie will be available to the root
155 | | domain and all subdomains. Typically, this shouldn't be changed.
156 | |
157 | */
158 |
159 | 'domain' => env('SESSION_DOMAIN'),
160 |
161 | /*
162 | |--------------------------------------------------------------------------
163 | | HTTPS Only Cookies
164 | |--------------------------------------------------------------------------
165 | |
166 | | By setting this option to true, session cookies will only be sent back
167 | | to the server if the browser has a HTTPS connection. This will keep
168 | | the cookie from being sent to you when it can't be done securely.
169 | |
170 | */
171 |
172 | 'secure' => env('SESSION_SECURE_COOKIE'),
173 |
174 | /*
175 | |--------------------------------------------------------------------------
176 | | HTTP Access Only
177 | |--------------------------------------------------------------------------
178 | |
179 | | Setting this value to true will prevent JavaScript from accessing the
180 | | value of the cookie and the cookie will only be accessible through
181 | | the HTTP protocol. It's unlikely you should disable this option.
182 | |
183 | */
184 |
185 | 'http_only' => env('SESSION_HTTP_ONLY', true),
186 |
187 | /*
188 | |--------------------------------------------------------------------------
189 | | Same-Site Cookies
190 | |--------------------------------------------------------------------------
191 | |
192 | | This option determines how your cookies behave when cross-site requests
193 | | take place, and can be used to mitigate CSRF attacks. By default, we
194 | | will set this value to "lax" to permit secure cross-site requests.
195 | |
196 | | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
197 | |
198 | | Supported: "lax", "strict", "none", null
199 | |
200 | */
201 |
202 | 'same_site' => env('SESSION_SAME_SITE', 'lax'),
203 |
204 | /*
205 | |--------------------------------------------------------------------------
206 | | Partitioned Cookies
207 | |--------------------------------------------------------------------------
208 | |
209 | | Setting this value to true will tie the cookie to the top-level site for
210 | | a cross-site context. Partitioned cookies are accepted by the browser
211 | | when flagged "secure" and the Same-Site attribute is set to "none".
212 | |
213 | */
214 |
215 | 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
216 |
217 | ];
218 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 | *.sqlite-journal
3 |
--------------------------------------------------------------------------------
/database/factories/DataPointFactory.php:
--------------------------------------------------------------------------------
1 | "temperature",
26 | 'value' => $this->faker->randomFloat(0, 90),
27 | 'cast' => "float",
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/database/factories/UserFactory.php:
--------------------------------------------------------------------------------
1 | $this->faker->name,
27 | 'email' => $this->faker->unique()->safeEmail,
28 | 'email_verified_at' => now(),
29 | 'password' => bcrypt('password'),
30 | 'remember_token' => Str::random(10),
31 | ];
32 | }
33 |
34 | public function admin(): UserFactory
35 | {
36 | return $this->state([
37 | 'email' => 'admin@email.com',
38 | 'password' => bcrypt('admin')
39 | ]);
40 | }
41 |
42 | public function user(): UserFactory
43 | {
44 | return $this->state([
45 | 'email' => 'user@email.com',
46 | 'password' => bcrypt('user')
47 | ]);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('email')->unique();
20 | $table->timestamp('email_verified_at')->nullable();
21 | $table->string('password');
22 | $table->rememberToken();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('users');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_18_020722_create_datapoints_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name', 156);
19 | $table->string('value', 156);
20 | $table->string('cast', 156)->default('string');
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::dropIfExists('datapoints');
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/database/seeders/DataPointTableSeeder.php:
--------------------------------------------------------------------------------
1 | times(10000)->create();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call([
17 | UsersTableSeeder::class,
18 | DataPointTableSeeder::class
19 | ]);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/database/seeders/UsersTableSeeder.php:
--------------------------------------------------------------------------------
1 | admin()->create();
18 |
19 | User::factory()->user()->create();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | services:
2 | laravel.test:
3 | build:
4 | context: ./docker/8.3
5 | dockerfile: Dockerfile
6 | args:
7 | WWWGROUP: '${WWWGROUP}'
8 | image: sail-8.3/app
9 | extra_hosts:
10 | - 'host.docker.internal:host-gateway'
11 | ports:
12 | - '${APP_PORT:-80}:80'
13 | - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
14 | environment:
15 | WWWUSER: '${WWWUSER}'
16 | LARAVEL_SAIL: 1
17 | XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
18 | XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
19 | IGNITION_LOCAL_SITES_PATH: '${PWD}'
20 | volumes:
21 | - '.:/var/www/html'
22 | networks:
23 | - sail
24 | depends_on:
25 | - mysql
26 | mysql:
27 | image: 'mysql/mysql-server:8.0'
28 | ports:
29 | - '${FORWARD_DB_PORT:-3306}:3306'
30 | environment:
31 | MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
32 | MYSQL_ROOT_HOST: '%'
33 | MYSQL_DATABASE: '${DB_DATABASE}'
34 | MYSQL_USER: '${DB_USERNAME}'
35 | MYSQL_PASSWORD: '${DB_PASSWORD}'
36 | MYSQL_ALLOW_EMPTY_PASSWORD: 1
37 | volumes:
38 | - 'sail-mysql:/var/lib/mysql'
39 | - './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
40 | networks:
41 | - sail
42 | healthcheck:
43 | test:
44 | - CMD
45 | - mysqladmin
46 | - ping
47 | - '-p${DB_PASSWORD}'
48 | retries: 3
49 | timeout: 5s
50 |
51 | loki:
52 | image: grafana/loki:latest
53 | ports:
54 | - "3100:3100"
55 | volumes:
56 | - loki-data:/loki
57 | networks:
58 | - sail
59 |
60 | prometheus:
61 | image: prom/prometheus:latest
62 | ports:
63 | - "9090:9090"
64 | volumes:
65 | - ./.docker/config/prometheus.yml:/etc/prometheus/prometheus.yml
66 | - prometheus-data:/prometheus
67 | command:
68 | - '--config.file=/etc/prometheus/prometheus.yml'
69 | depends_on:
70 | - laravel.test
71 | - loki
72 |
73 | promtail:
74 | image: grafana/promtail:v1.3.0
75 | volumes:
76 | - promtail-data:/var/www/html/storage/logs
77 | command: -config.file=/etc/promtail/docker-config.yaml
78 | networks:
79 | - sail
80 |
81 | grafana:
82 | image: grafana/grafana:latest
83 | container_name: grafana
84 | volumes:
85 | - ./:/var/www/html
86 | - ./.docker/config/grafana.ini:/etc/grafana/grafana.ini
87 | - ./.docker/grafana:/var/lib/grafana
88 | ports:
89 | - "3000:3000"
90 | depends_on:
91 | - mysql
92 | - prometheus
93 | networks:
94 | - sail
95 | networks:
96 | sail:
97 | driver: bridge
98 | volumes:
99 | grafana-data:
100 | prometheus-data:
101 | loki-data:
102 | promtail-data:
103 | sail-mysql:
104 | driver: local
105 |
--------------------------------------------------------------------------------
/docker/8.0/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:20.04
2 |
3 | LABEL maintainer="Taylor Otwell"
4 |
5 | ARG WWWGROUP
6 | ARG NODE_VERSION=20
7 | ARG POSTGRES_VERSION=13
8 |
9 | WORKDIR /var/www/html
10 |
11 | ENV DEBIAN_FRONTEND noninteractive
12 | ENV TZ=UTC
13 | ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
14 | ENV SUPERVISOR_PHP_USER="sail"
15 |
16 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
17 |
18 | RUN apt-get update \
19 | && mkdir -p /etc/apt/keyrings \
20 | && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \
21 | && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \
22 | && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
23 | && apt-get update \
24 | && apt-get install -y php8.0-cli php8.0-dev \
25 | php8.0-pgsql php8.0-sqlite3 php8.0-gd php8.0-imagick \
26 | php8.0-curl php8.0-memcached \
27 | php8.0-imap php8.0-mysql php8.0-mbstring \
28 | php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
29 | php8.0-intl php8.0-readline php8.0-pcov \
30 | php8.0-msgpack php8.0-igbinary php8.0-ldap \
31 | php8.0-redis php8.0-swoole php8.0-xdebug \
32 | && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
33 | && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
34 | && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
35 | && apt-get update \
36 | && apt-get install -y nodejs \
37 | && npm install -g npm \
38 | && npm install -g bun \
39 | && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \
40 | && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
41 | && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \
42 | && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
43 | && apt-get update \
44 | && apt-get install -y yarn \
45 | && apt-get install -y mysql-client \
46 | && apt-get install -y postgresql-client-$POSTGRES_VERSION \
47 | && apt-get -y autoremove \
48 | && apt-get clean \
49 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
50 |
51 | RUN update-alternatives --set php /usr/bin/php8.0
52 |
53 | RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
54 |
55 | RUN groupadd --force -g $WWWGROUP sail
56 | RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
57 |
58 | COPY start-container /usr/local/bin/start-container
59 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
60 | COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
61 | RUN chmod +x /usr/local/bin/start-container
62 |
63 | EXPOSE 80/tcp
64 |
65 | ENTRYPOINT ["start-container"]
66 |
--------------------------------------------------------------------------------
/docker/8.0/php.ini:
--------------------------------------------------------------------------------
1 | [PHP]
2 | post_max_size = 100M
3 | upload_max_filesize = 100M
4 | variables_order = EGPCS
5 | pcov.directory = .
6 |
--------------------------------------------------------------------------------
/docker/8.0/start-container:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
4 | echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
5 | exit 1
6 | fi
7 |
8 | if [ ! -z "$WWWUSER" ]; then
9 | usermod -u $WWWUSER sail
10 | fi
11 |
12 | if [ ! -d /.composer ]; then
13 | mkdir /.composer
14 | fi
15 |
16 | chmod -R ugo+rw /.composer
17 |
18 | if [ $# -gt 0 ]; then
19 | if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
20 | exec "$@"
21 | else
22 | exec gosu $WWWUSER "$@"
23 | fi
24 | else
25 | exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
26 | fi
27 |
--------------------------------------------------------------------------------
/docker/8.0/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 | user=root
4 | logfile=/var/log/supervisor/supervisord.log
5 | pidfile=/var/run/supervisord.pid
6 |
7 | [program:php]
8 | command=%(ENV_SUPERVISOR_PHP_COMMAND)s
9 | user=%(ENV_SUPERVISOR_PHP_USER)s
10 | environment=LARAVEL_SAIL="1"
11 | stdout_logfile=/dev/stdout
12 | stdout_logfile_maxbytes=0
13 | stderr_logfile=/dev/stderr
14 | stderr_logfile_maxbytes=0
15 |
--------------------------------------------------------------------------------
/docker/8.1/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:22.04
2 |
3 | LABEL maintainer="Taylor Otwell"
4 |
5 | ARG WWWGROUP
6 | ARG NODE_VERSION=20
7 | ARG POSTGRES_VERSION=15
8 |
9 | WORKDIR /var/www/html
10 |
11 | ENV DEBIAN_FRONTEND noninteractive
12 | ENV TZ=UTC
13 | ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
14 | ENV SUPERVISOR_PHP_USER="sail"
15 |
16 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
17 |
18 | RUN apt-get update \
19 | && mkdir -p /etc/apt/keyrings \
20 | && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \
21 | && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \
22 | && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
23 | && apt-get update \
24 | && apt-get install -y php8.1-cli php8.1-dev \
25 | php8.1-pgsql php8.1-sqlite3 php8.1-gd php8.1-imagick \
26 | php8.1-curl \
27 | php8.1-imap php8.1-mysql php8.1-mbstring \
28 | php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \
29 | php8.1-intl php8.1-readline \
30 | php8.1-ldap \
31 | php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \
32 | php8.1-memcached php8.1-pcov php8.1-xdebug \
33 | && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
34 | && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
35 | && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
36 | && apt-get update \
37 | && apt-get install -y nodejs \
38 | && npm install -g npm \
39 | && npm install -g bun \
40 | && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
41 | && echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
42 | && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \
43 | && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
44 | && apt-get update \
45 | && apt-get install -y yarn \
46 | && apt-get install -y mysql-client \
47 | && apt-get install -y postgresql-client-$POSTGRES_VERSION \
48 | && apt-get -y autoremove \
49 | && apt-get clean \
50 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
51 |
52 | RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1
53 |
54 | RUN groupadd --force -g $WWWGROUP sail
55 | RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
56 |
57 | COPY start-container /usr/local/bin/start-container
58 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
59 | COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini
60 | RUN chmod +x /usr/local/bin/start-container
61 |
62 | EXPOSE 80/tcp
63 |
64 | ENTRYPOINT ["start-container"]
65 |
--------------------------------------------------------------------------------
/docker/8.1/php.ini:
--------------------------------------------------------------------------------
1 | [PHP]
2 | post_max_size = 100M
3 | upload_max_filesize = 100M
4 | variables_order = EGPCS
5 | pcov.directory = .
6 |
--------------------------------------------------------------------------------
/docker/8.1/start-container:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
4 | echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
5 | exit 1
6 | fi
7 |
8 | if [ ! -z "$WWWUSER" ]; then
9 | usermod -u $WWWUSER sail
10 | fi
11 |
12 | if [ ! -d /.composer ]; then
13 | mkdir /.composer
14 | fi
15 |
16 | chmod -R ugo+rw /.composer
17 |
18 | if [ $# -gt 0 ]; then
19 | if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
20 | exec "$@"
21 | else
22 | exec gosu $WWWUSER "$@"
23 | fi
24 | else
25 | exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
26 | fi
27 |
--------------------------------------------------------------------------------
/docker/8.1/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 | user=root
4 | logfile=/var/log/supervisor/supervisord.log
5 | pidfile=/var/run/supervisord.pid
6 |
7 | [program:php]
8 | command=%(ENV_SUPERVISOR_PHP_COMMAND)s
9 | user=%(ENV_SUPERVISOR_PHP_USER)s
10 | environment=LARAVEL_SAIL="1"
11 | stdout_logfile=/dev/stdout
12 | stdout_logfile_maxbytes=0
13 | stderr_logfile=/dev/stderr
14 | stderr_logfile_maxbytes=0
15 |
--------------------------------------------------------------------------------
/docker/8.2/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:22.04
2 |
3 | LABEL maintainer="Taylor Otwell"
4 |
5 | ARG WWWGROUP
6 | ARG NODE_VERSION=20
7 | ARG POSTGRES_VERSION=15
8 |
9 | WORKDIR /var/www/html
10 |
11 | ENV DEBIAN_FRONTEND noninteractive
12 | ENV TZ=UTC
13 | ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
14 | ENV SUPERVISOR_PHP_USER="sail"
15 |
16 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
17 |
18 | RUN apt-get update \
19 | && mkdir -p /etc/apt/keyrings \
20 | && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \
21 | && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
22 | && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
23 | && apt-get update \
24 | && apt-get install -y php8.2-cli php8.2-dev \
25 | php8.2-pgsql php8.2-sqlite3 php8.2-gd php8.2-imagick \
26 | php8.2-curl \
27 | php8.2-imap php8.2-mysql php8.2-mbstring \
28 | php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \
29 | php8.2-intl php8.2-readline \
30 | php8.2-ldap \
31 | php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \
32 | php8.2-memcached php8.2-pcov php8.2-xdebug \
33 | && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
34 | && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
35 | && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
36 | && apt-get update \
37 | && apt-get install -y nodejs \
38 | && npm install -g npm \
39 | && npm install -g pnpm \
40 | && npm install -g bun \
41 | && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
42 | && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
43 | && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
44 | && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
45 | && apt-get update \
46 | && apt-get install -y yarn \
47 | && apt-get install -y mysql-client \
48 | && apt-get install -y postgresql-client-$POSTGRES_VERSION \
49 | && apt-get -y autoremove \
50 | && apt-get clean \
51 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
52 |
53 | RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2
54 |
55 | RUN groupadd --force -g $WWWGROUP sail
56 | RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
57 |
58 | COPY start-container /usr/local/bin/start-container
59 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
60 | COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini
61 | RUN chmod +x /usr/local/bin/start-container
62 |
63 | EXPOSE 80/tcp
64 |
65 | ENTRYPOINT ["start-container"]
66 |
--------------------------------------------------------------------------------
/docker/8.2/php.ini:
--------------------------------------------------------------------------------
1 | [PHP]
2 | post_max_size = 100M
3 | upload_max_filesize = 100M
4 | variables_order = EGPCS
5 | pcov.directory = .
6 |
--------------------------------------------------------------------------------
/docker/8.2/start-container:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
4 | echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
5 | exit 1
6 | fi
7 |
8 | if [ ! -z "$WWWUSER" ]; then
9 | usermod -u $WWWUSER sail
10 | fi
11 |
12 | if [ ! -d /.composer ]; then
13 | mkdir /.composer
14 | fi
15 |
16 | chmod -R ugo+rw /.composer
17 |
18 | if [ $# -gt 0 ]; then
19 | if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
20 | exec "$@"
21 | else
22 | exec gosu $WWWUSER "$@"
23 | fi
24 | else
25 | exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
26 | fi
27 |
--------------------------------------------------------------------------------
/docker/8.2/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 | user=root
4 | logfile=/var/log/supervisor/supervisord.log
5 | pidfile=/var/run/supervisord.pid
6 |
7 | [program:php]
8 | command=%(ENV_SUPERVISOR_PHP_COMMAND)s
9 | user=%(ENV_SUPERVISOR_PHP_USER)s
10 | environment=LARAVEL_SAIL="1"
11 | stdout_logfile=/dev/stdout
12 | stdout_logfile_maxbytes=0
13 | stderr_logfile=/dev/stderr
14 | stderr_logfile_maxbytes=0
15 |
--------------------------------------------------------------------------------
/docker/8.3/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:22.04
2 |
3 | LABEL maintainer="Taylor Otwell"
4 |
5 | ARG WWWGROUP
6 | ARG NODE_VERSION=20
7 | ARG MYSQL_CLIENT="mysql-client"
8 | ARG POSTGRES_VERSION=15
9 |
10 | WORKDIR /var/www/html
11 |
12 | ENV DEBIAN_FRONTEND noninteractive
13 | ENV TZ=UTC
14 | ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
15 | ENV SUPERVISOR_PHP_USER="sail"
16 |
17 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
18 |
19 | RUN apt-get update \
20 | && mkdir -p /etc/apt/keyrings \
21 | && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \
22 | && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
23 | && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
24 | && apt-get update \
25 | && apt-get install -y php8.3-cli php8.3-dev \
26 | php8.3-pgsql php8.3-sqlite3 php8.3-gd \
27 | php8.3-curl \
28 | php8.3-imap php8.3-mysql php8.3-mbstring \
29 | php8.3-xml php8.3-zip php8.3-bcmath php8.3-soap \
30 | php8.3-intl php8.3-readline \
31 | php8.3-ldap \
32 | php8.3-msgpack php8.3-igbinary php8.3-redis php8.3-swoole \
33 | php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug \
34 | && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
35 | && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
36 | && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
37 | && apt-get update \
38 | && apt-get install -y nodejs \
39 | && npm install -g npm \
40 | && npm install -g pnpm \
41 | && npm install -g bun \
42 | && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
43 | && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
44 | && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
45 | && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
46 | && apt-get update \
47 | && apt-get install -y yarn \
48 | && apt-get install -y $MYSQL_CLIENT \
49 | && apt-get install -y postgresql-client-$POSTGRES_VERSION \
50 | && apt-get -y autoremove \
51 | && apt-get clean \
52 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
53 |
54 | RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3
55 |
56 | RUN groupadd --force -g $WWWGROUP sail
57 | RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
58 |
59 | COPY start-container /usr/local/bin/start-container
60 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
61 | COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini
62 | RUN chmod +x /usr/local/bin/start-container
63 |
64 | EXPOSE 80/tcp
65 |
66 | ENTRYPOINT ["start-container"]
67 |
--------------------------------------------------------------------------------
/docker/8.3/php.ini:
--------------------------------------------------------------------------------
1 | [PHP]
2 | post_max_size = 100M
3 | upload_max_filesize = 100M
4 | variables_order = EGPCS
5 | pcov.directory = .
6 |
--------------------------------------------------------------------------------
/docker/8.3/start-container:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
4 | echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
5 | exit 1
6 | fi
7 |
8 | if [ ! -z "$WWWUSER" ]; then
9 | usermod -u $WWWUSER sail
10 | fi
11 |
12 | if [ ! -d /.composer ]; then
13 | mkdir /.composer
14 | fi
15 |
16 | chmod -R ugo+rw /.composer
17 |
18 | if [ $# -gt 0 ]; then
19 | if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
20 | exec "$@"
21 | else
22 | exec gosu $WWWUSER "$@"
23 | fi
24 | else
25 | exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
26 | fi
27 |
--------------------------------------------------------------------------------
/docker/8.3/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 | user=root
4 | logfile=/var/log/supervisor/supervisord.log
5 | pidfile=/var/run/supervisord.pid
6 |
7 | [program:php]
8 | command=%(ENV_SUPERVISOR_PHP_COMMAND)s
9 | user=%(ENV_SUPERVISOR_PHP_USER)s
10 | environment=LARAVEL_SAIL="1"
11 | stdout_logfile=/dev/stdout
12 | stdout_logfile_maxbytes=0
13 | stderr_logfile=/dev/stderr
14 | stderr_logfile_maxbytes=0
15 |
--------------------------------------------------------------------------------
/docker/mariadb/create-testing-database.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | /usr/bin/mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
4 | CREATE DATABASE IF NOT EXISTS testing;
5 | GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%';
6 | EOSQL
7 |
--------------------------------------------------------------------------------
/docker/mysql/create-testing-database.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
4 | CREATE DATABASE IF NOT EXISTS testing;
5 | GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%';
6 | EOSQL
7 |
--------------------------------------------------------------------------------
/docker/pgsql/create-testing-database.sql:
--------------------------------------------------------------------------------
1 | SELECT 'CREATE DATABASE testing'
2 | WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec
3 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "html",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "devDependencies": {
8 | "axios": "^1.6.4",
9 | "laravel-vite-plugin": "^1.0",
10 | "vite": "^5.0"
11 | }
12 | },
13 | "node_modules/@esbuild/aix-ppc64": {
14 | "version": "0.21.5",
15 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
16 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
17 | "cpu": [
18 | "ppc64"
19 | ],
20 | "dev": true,
21 | "optional": true,
22 | "os": [
23 | "aix"
24 | ],
25 | "engines": {
26 | "node": ">=12"
27 | }
28 | },
29 | "node_modules/@esbuild/android-arm": {
30 | "version": "0.21.5",
31 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
32 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
33 | "cpu": [
34 | "arm"
35 | ],
36 | "dev": true,
37 | "optional": true,
38 | "os": [
39 | "android"
40 | ],
41 | "engines": {
42 | "node": ">=12"
43 | }
44 | },
45 | "node_modules/@esbuild/android-arm64": {
46 | "version": "0.21.5",
47 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
48 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
49 | "cpu": [
50 | "arm64"
51 | ],
52 | "dev": true,
53 | "optional": true,
54 | "os": [
55 | "android"
56 | ],
57 | "engines": {
58 | "node": ">=12"
59 | }
60 | },
61 | "node_modules/@esbuild/android-x64": {
62 | "version": "0.21.5",
63 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
64 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
65 | "cpu": [
66 | "x64"
67 | ],
68 | "dev": true,
69 | "optional": true,
70 | "os": [
71 | "android"
72 | ],
73 | "engines": {
74 | "node": ">=12"
75 | }
76 | },
77 | "node_modules/@esbuild/darwin-arm64": {
78 | "version": "0.21.5",
79 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
80 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
81 | "cpu": [
82 | "arm64"
83 | ],
84 | "dev": true,
85 | "optional": true,
86 | "os": [
87 | "darwin"
88 | ],
89 | "engines": {
90 | "node": ">=12"
91 | }
92 | },
93 | "node_modules/@esbuild/darwin-x64": {
94 | "version": "0.21.5",
95 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
96 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
97 | "cpu": [
98 | "x64"
99 | ],
100 | "dev": true,
101 | "optional": true,
102 | "os": [
103 | "darwin"
104 | ],
105 | "engines": {
106 | "node": ">=12"
107 | }
108 | },
109 | "node_modules/@esbuild/freebsd-arm64": {
110 | "version": "0.21.5",
111 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
112 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
113 | "cpu": [
114 | "arm64"
115 | ],
116 | "dev": true,
117 | "optional": true,
118 | "os": [
119 | "freebsd"
120 | ],
121 | "engines": {
122 | "node": ">=12"
123 | }
124 | },
125 | "node_modules/@esbuild/freebsd-x64": {
126 | "version": "0.21.5",
127 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
128 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
129 | "cpu": [
130 | "x64"
131 | ],
132 | "dev": true,
133 | "optional": true,
134 | "os": [
135 | "freebsd"
136 | ],
137 | "engines": {
138 | "node": ">=12"
139 | }
140 | },
141 | "node_modules/@esbuild/linux-arm": {
142 | "version": "0.21.5",
143 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
144 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
145 | "cpu": [
146 | "arm"
147 | ],
148 | "dev": true,
149 | "optional": true,
150 | "os": [
151 | "linux"
152 | ],
153 | "engines": {
154 | "node": ">=12"
155 | }
156 | },
157 | "node_modules/@esbuild/linux-arm64": {
158 | "version": "0.21.5",
159 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
160 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
161 | "cpu": [
162 | "arm64"
163 | ],
164 | "dev": true,
165 | "optional": true,
166 | "os": [
167 | "linux"
168 | ],
169 | "engines": {
170 | "node": ">=12"
171 | }
172 | },
173 | "node_modules/@esbuild/linux-ia32": {
174 | "version": "0.21.5",
175 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
176 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
177 | "cpu": [
178 | "ia32"
179 | ],
180 | "dev": true,
181 | "optional": true,
182 | "os": [
183 | "linux"
184 | ],
185 | "engines": {
186 | "node": ">=12"
187 | }
188 | },
189 | "node_modules/@esbuild/linux-loong64": {
190 | "version": "0.21.5",
191 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
192 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
193 | "cpu": [
194 | "loong64"
195 | ],
196 | "dev": true,
197 | "optional": true,
198 | "os": [
199 | "linux"
200 | ],
201 | "engines": {
202 | "node": ">=12"
203 | }
204 | },
205 | "node_modules/@esbuild/linux-mips64el": {
206 | "version": "0.21.5",
207 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
208 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
209 | "cpu": [
210 | "mips64el"
211 | ],
212 | "dev": true,
213 | "optional": true,
214 | "os": [
215 | "linux"
216 | ],
217 | "engines": {
218 | "node": ">=12"
219 | }
220 | },
221 | "node_modules/@esbuild/linux-ppc64": {
222 | "version": "0.21.5",
223 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
224 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
225 | "cpu": [
226 | "ppc64"
227 | ],
228 | "dev": true,
229 | "optional": true,
230 | "os": [
231 | "linux"
232 | ],
233 | "engines": {
234 | "node": ">=12"
235 | }
236 | },
237 | "node_modules/@esbuild/linux-riscv64": {
238 | "version": "0.21.5",
239 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
240 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
241 | "cpu": [
242 | "riscv64"
243 | ],
244 | "dev": true,
245 | "optional": true,
246 | "os": [
247 | "linux"
248 | ],
249 | "engines": {
250 | "node": ">=12"
251 | }
252 | },
253 | "node_modules/@esbuild/linux-s390x": {
254 | "version": "0.21.5",
255 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
256 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
257 | "cpu": [
258 | "s390x"
259 | ],
260 | "dev": true,
261 | "optional": true,
262 | "os": [
263 | "linux"
264 | ],
265 | "engines": {
266 | "node": ">=12"
267 | }
268 | },
269 | "node_modules/@esbuild/linux-x64": {
270 | "version": "0.21.5",
271 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
272 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
273 | "cpu": [
274 | "x64"
275 | ],
276 | "dev": true,
277 | "optional": true,
278 | "os": [
279 | "linux"
280 | ],
281 | "engines": {
282 | "node": ">=12"
283 | }
284 | },
285 | "node_modules/@esbuild/netbsd-x64": {
286 | "version": "0.21.5",
287 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
288 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
289 | "cpu": [
290 | "x64"
291 | ],
292 | "dev": true,
293 | "optional": true,
294 | "os": [
295 | "netbsd"
296 | ],
297 | "engines": {
298 | "node": ">=12"
299 | }
300 | },
301 | "node_modules/@esbuild/openbsd-x64": {
302 | "version": "0.21.5",
303 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
304 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
305 | "cpu": [
306 | "x64"
307 | ],
308 | "dev": true,
309 | "optional": true,
310 | "os": [
311 | "openbsd"
312 | ],
313 | "engines": {
314 | "node": ">=12"
315 | }
316 | },
317 | "node_modules/@esbuild/sunos-x64": {
318 | "version": "0.21.5",
319 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
320 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
321 | "cpu": [
322 | "x64"
323 | ],
324 | "dev": true,
325 | "optional": true,
326 | "os": [
327 | "sunos"
328 | ],
329 | "engines": {
330 | "node": ">=12"
331 | }
332 | },
333 | "node_modules/@esbuild/win32-arm64": {
334 | "version": "0.21.5",
335 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
336 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
337 | "cpu": [
338 | "arm64"
339 | ],
340 | "dev": true,
341 | "optional": true,
342 | "os": [
343 | "win32"
344 | ],
345 | "engines": {
346 | "node": ">=12"
347 | }
348 | },
349 | "node_modules/@esbuild/win32-ia32": {
350 | "version": "0.21.5",
351 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
352 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
353 | "cpu": [
354 | "ia32"
355 | ],
356 | "dev": true,
357 | "optional": true,
358 | "os": [
359 | "win32"
360 | ],
361 | "engines": {
362 | "node": ">=12"
363 | }
364 | },
365 | "node_modules/@esbuild/win32-x64": {
366 | "version": "0.21.5",
367 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
368 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
369 | "cpu": [
370 | "x64"
371 | ],
372 | "dev": true,
373 | "optional": true,
374 | "os": [
375 | "win32"
376 | ],
377 | "engines": {
378 | "node": ">=12"
379 | }
380 | },
381 | "node_modules/@rollup/rollup-android-arm-eabi": {
382 | "version": "4.19.1",
383 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz",
384 | "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==",
385 | "cpu": [
386 | "arm"
387 | ],
388 | "dev": true,
389 | "optional": true,
390 | "os": [
391 | "android"
392 | ]
393 | },
394 | "node_modules/@rollup/rollup-android-arm64": {
395 | "version": "4.19.1",
396 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz",
397 | "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==",
398 | "cpu": [
399 | "arm64"
400 | ],
401 | "dev": true,
402 | "optional": true,
403 | "os": [
404 | "android"
405 | ]
406 | },
407 | "node_modules/@rollup/rollup-darwin-arm64": {
408 | "version": "4.19.1",
409 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz",
410 | "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==",
411 | "cpu": [
412 | "arm64"
413 | ],
414 | "dev": true,
415 | "optional": true,
416 | "os": [
417 | "darwin"
418 | ]
419 | },
420 | "node_modules/@rollup/rollup-darwin-x64": {
421 | "version": "4.19.1",
422 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz",
423 | "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==",
424 | "cpu": [
425 | "x64"
426 | ],
427 | "dev": true,
428 | "optional": true,
429 | "os": [
430 | "darwin"
431 | ]
432 | },
433 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
434 | "version": "4.19.1",
435 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz",
436 | "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==",
437 | "cpu": [
438 | "arm"
439 | ],
440 | "dev": true,
441 | "optional": true,
442 | "os": [
443 | "linux"
444 | ]
445 | },
446 | "node_modules/@rollup/rollup-linux-arm-musleabihf": {
447 | "version": "4.19.1",
448 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz",
449 | "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==",
450 | "cpu": [
451 | "arm"
452 | ],
453 | "dev": true,
454 | "optional": true,
455 | "os": [
456 | "linux"
457 | ]
458 | },
459 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
460 | "version": "4.19.1",
461 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz",
462 | "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==",
463 | "cpu": [
464 | "arm64"
465 | ],
466 | "dev": true,
467 | "optional": true,
468 | "os": [
469 | "linux"
470 | ]
471 | },
472 | "node_modules/@rollup/rollup-linux-arm64-musl": {
473 | "version": "4.19.1",
474 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz",
475 | "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==",
476 | "cpu": [
477 | "arm64"
478 | ],
479 | "dev": true,
480 | "optional": true,
481 | "os": [
482 | "linux"
483 | ]
484 | },
485 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
486 | "version": "4.19.1",
487 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz",
488 | "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==",
489 | "cpu": [
490 | "ppc64"
491 | ],
492 | "dev": true,
493 | "optional": true,
494 | "os": [
495 | "linux"
496 | ]
497 | },
498 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
499 | "version": "4.19.1",
500 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz",
501 | "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==",
502 | "cpu": [
503 | "riscv64"
504 | ],
505 | "dev": true,
506 | "optional": true,
507 | "os": [
508 | "linux"
509 | ]
510 | },
511 | "node_modules/@rollup/rollup-linux-s390x-gnu": {
512 | "version": "4.19.1",
513 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz",
514 | "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==",
515 | "cpu": [
516 | "s390x"
517 | ],
518 | "dev": true,
519 | "optional": true,
520 | "os": [
521 | "linux"
522 | ]
523 | },
524 | "node_modules/@rollup/rollup-linux-x64-gnu": {
525 | "version": "4.19.1",
526 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz",
527 | "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==",
528 | "cpu": [
529 | "x64"
530 | ],
531 | "dev": true,
532 | "optional": true,
533 | "os": [
534 | "linux"
535 | ]
536 | },
537 | "node_modules/@rollup/rollup-linux-x64-musl": {
538 | "version": "4.19.1",
539 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz",
540 | "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==",
541 | "cpu": [
542 | "x64"
543 | ],
544 | "dev": true,
545 | "optional": true,
546 | "os": [
547 | "linux"
548 | ]
549 | },
550 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
551 | "version": "4.19.1",
552 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz",
553 | "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==",
554 | "cpu": [
555 | "arm64"
556 | ],
557 | "dev": true,
558 | "optional": true,
559 | "os": [
560 | "win32"
561 | ]
562 | },
563 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
564 | "version": "4.19.1",
565 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz",
566 | "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==",
567 | "cpu": [
568 | "ia32"
569 | ],
570 | "dev": true,
571 | "optional": true,
572 | "os": [
573 | "win32"
574 | ]
575 | },
576 | "node_modules/@rollup/rollup-win32-x64-msvc": {
577 | "version": "4.19.1",
578 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz",
579 | "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==",
580 | "cpu": [
581 | "x64"
582 | ],
583 | "dev": true,
584 | "optional": true,
585 | "os": [
586 | "win32"
587 | ]
588 | },
589 | "node_modules/@types/estree": {
590 | "version": "1.0.5",
591 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
592 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
593 | "dev": true
594 | },
595 | "node_modules/asynckit": {
596 | "version": "0.4.0",
597 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
598 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
599 | "dev": true
600 | },
601 | "node_modules/axios": {
602 | "version": "1.7.2",
603 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
604 | "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
605 | "dev": true,
606 | "dependencies": {
607 | "follow-redirects": "^1.15.6",
608 | "form-data": "^4.0.0",
609 | "proxy-from-env": "^1.1.0"
610 | }
611 | },
612 | "node_modules/combined-stream": {
613 | "version": "1.0.8",
614 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
615 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
616 | "dev": true,
617 | "dependencies": {
618 | "delayed-stream": "~1.0.0"
619 | },
620 | "engines": {
621 | "node": ">= 0.8"
622 | }
623 | },
624 | "node_modules/delayed-stream": {
625 | "version": "1.0.0",
626 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
627 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
628 | "dev": true,
629 | "engines": {
630 | "node": ">=0.4.0"
631 | }
632 | },
633 | "node_modules/esbuild": {
634 | "version": "0.21.5",
635 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
636 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
637 | "dev": true,
638 | "hasInstallScript": true,
639 | "bin": {
640 | "esbuild": "bin/esbuild"
641 | },
642 | "engines": {
643 | "node": ">=12"
644 | },
645 | "optionalDependencies": {
646 | "@esbuild/aix-ppc64": "0.21.5",
647 | "@esbuild/android-arm": "0.21.5",
648 | "@esbuild/android-arm64": "0.21.5",
649 | "@esbuild/android-x64": "0.21.5",
650 | "@esbuild/darwin-arm64": "0.21.5",
651 | "@esbuild/darwin-x64": "0.21.5",
652 | "@esbuild/freebsd-arm64": "0.21.5",
653 | "@esbuild/freebsd-x64": "0.21.5",
654 | "@esbuild/linux-arm": "0.21.5",
655 | "@esbuild/linux-arm64": "0.21.5",
656 | "@esbuild/linux-ia32": "0.21.5",
657 | "@esbuild/linux-loong64": "0.21.5",
658 | "@esbuild/linux-mips64el": "0.21.5",
659 | "@esbuild/linux-ppc64": "0.21.5",
660 | "@esbuild/linux-riscv64": "0.21.5",
661 | "@esbuild/linux-s390x": "0.21.5",
662 | "@esbuild/linux-x64": "0.21.5",
663 | "@esbuild/netbsd-x64": "0.21.5",
664 | "@esbuild/openbsd-x64": "0.21.5",
665 | "@esbuild/sunos-x64": "0.21.5",
666 | "@esbuild/win32-arm64": "0.21.5",
667 | "@esbuild/win32-ia32": "0.21.5",
668 | "@esbuild/win32-x64": "0.21.5"
669 | }
670 | },
671 | "node_modules/follow-redirects": {
672 | "version": "1.15.6",
673 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
674 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
675 | "dev": true,
676 | "funding": [
677 | {
678 | "type": "individual",
679 | "url": "https://github.com/sponsors/RubenVerborgh"
680 | }
681 | ],
682 | "engines": {
683 | "node": ">=4.0"
684 | },
685 | "peerDependenciesMeta": {
686 | "debug": {
687 | "optional": true
688 | }
689 | }
690 | },
691 | "node_modules/form-data": {
692 | "version": "4.0.0",
693 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
694 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
695 | "dev": true,
696 | "dependencies": {
697 | "asynckit": "^0.4.0",
698 | "combined-stream": "^1.0.8",
699 | "mime-types": "^2.1.12"
700 | },
701 | "engines": {
702 | "node": ">= 6"
703 | }
704 | },
705 | "node_modules/fsevents": {
706 | "version": "2.3.3",
707 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
708 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
709 | "dev": true,
710 | "hasInstallScript": true,
711 | "optional": true,
712 | "os": [
713 | "darwin"
714 | ],
715 | "engines": {
716 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
717 | }
718 | },
719 | "node_modules/laravel-vite-plugin": {
720 | "version": "1.0.5",
721 | "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.5.tgz",
722 | "integrity": "sha512-Zv+to82YLBknDCZ6g3iwOv9wZ7f6EWStb9pjSm7MGe9Mfoy5ynT2ssZbGsMr1udU6rDg9HOoYEVGw5Qf+p9zbw==",
723 | "dev": true,
724 | "dependencies": {
725 | "picocolors": "^1.0.0",
726 | "vite-plugin-full-reload": "^1.1.0"
727 | },
728 | "bin": {
729 | "clean-orphaned-assets": "bin/clean.js"
730 | },
731 | "engines": {
732 | "node": "^18.0.0 || >=20.0.0"
733 | },
734 | "peerDependencies": {
735 | "vite": "^5.0.0"
736 | }
737 | },
738 | "node_modules/mime-db": {
739 | "version": "1.52.0",
740 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
741 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
742 | "dev": true,
743 | "engines": {
744 | "node": ">= 0.6"
745 | }
746 | },
747 | "node_modules/mime-types": {
748 | "version": "2.1.35",
749 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
750 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
751 | "dev": true,
752 | "dependencies": {
753 | "mime-db": "1.52.0"
754 | },
755 | "engines": {
756 | "node": ">= 0.6"
757 | }
758 | },
759 | "node_modules/nanoid": {
760 | "version": "3.3.7",
761 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
762 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
763 | "dev": true,
764 | "funding": [
765 | {
766 | "type": "github",
767 | "url": "https://github.com/sponsors/ai"
768 | }
769 | ],
770 | "bin": {
771 | "nanoid": "bin/nanoid.cjs"
772 | },
773 | "engines": {
774 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
775 | }
776 | },
777 | "node_modules/picocolors": {
778 | "version": "1.0.1",
779 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
780 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
781 | "dev": true
782 | },
783 | "node_modules/picomatch": {
784 | "version": "2.3.1",
785 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
786 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
787 | "dev": true,
788 | "engines": {
789 | "node": ">=8.6"
790 | },
791 | "funding": {
792 | "url": "https://github.com/sponsors/jonschlinkert"
793 | }
794 | },
795 | "node_modules/postcss": {
796 | "version": "8.4.40",
797 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
798 | "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
799 | "dev": true,
800 | "funding": [
801 | {
802 | "type": "opencollective",
803 | "url": "https://opencollective.com/postcss/"
804 | },
805 | {
806 | "type": "tidelift",
807 | "url": "https://tidelift.com/funding/github/npm/postcss"
808 | },
809 | {
810 | "type": "github",
811 | "url": "https://github.com/sponsors/ai"
812 | }
813 | ],
814 | "dependencies": {
815 | "nanoid": "^3.3.7",
816 | "picocolors": "^1.0.1",
817 | "source-map-js": "^1.2.0"
818 | },
819 | "engines": {
820 | "node": "^10 || ^12 || >=14"
821 | }
822 | },
823 | "node_modules/proxy-from-env": {
824 | "version": "1.1.0",
825 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
826 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
827 | "dev": true
828 | },
829 | "node_modules/rollup": {
830 | "version": "4.19.1",
831 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
832 | "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
833 | "dev": true,
834 | "dependencies": {
835 | "@types/estree": "1.0.5"
836 | },
837 | "bin": {
838 | "rollup": "dist/bin/rollup"
839 | },
840 | "engines": {
841 | "node": ">=18.0.0",
842 | "npm": ">=8.0.0"
843 | },
844 | "optionalDependencies": {
845 | "@rollup/rollup-android-arm-eabi": "4.19.1",
846 | "@rollup/rollup-android-arm64": "4.19.1",
847 | "@rollup/rollup-darwin-arm64": "4.19.1",
848 | "@rollup/rollup-darwin-x64": "4.19.1",
849 | "@rollup/rollup-linux-arm-gnueabihf": "4.19.1",
850 | "@rollup/rollup-linux-arm-musleabihf": "4.19.1",
851 | "@rollup/rollup-linux-arm64-gnu": "4.19.1",
852 | "@rollup/rollup-linux-arm64-musl": "4.19.1",
853 | "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1",
854 | "@rollup/rollup-linux-riscv64-gnu": "4.19.1",
855 | "@rollup/rollup-linux-s390x-gnu": "4.19.1",
856 | "@rollup/rollup-linux-x64-gnu": "4.19.1",
857 | "@rollup/rollup-linux-x64-musl": "4.19.1",
858 | "@rollup/rollup-win32-arm64-msvc": "4.19.1",
859 | "@rollup/rollup-win32-ia32-msvc": "4.19.1",
860 | "@rollup/rollup-win32-x64-msvc": "4.19.1",
861 | "fsevents": "~2.3.2"
862 | }
863 | },
864 | "node_modules/source-map-js": {
865 | "version": "1.2.0",
866 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
867 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
868 | "dev": true,
869 | "engines": {
870 | "node": ">=0.10.0"
871 | }
872 | },
873 | "node_modules/vite": {
874 | "version": "5.3.5",
875 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
876 | "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
877 | "dev": true,
878 | "dependencies": {
879 | "esbuild": "^0.21.3",
880 | "postcss": "^8.4.39",
881 | "rollup": "^4.13.0"
882 | },
883 | "bin": {
884 | "vite": "bin/vite.js"
885 | },
886 | "engines": {
887 | "node": "^18.0.0 || >=20.0.0"
888 | },
889 | "funding": {
890 | "url": "https://github.com/vitejs/vite?sponsor=1"
891 | },
892 | "optionalDependencies": {
893 | "fsevents": "~2.3.3"
894 | },
895 | "peerDependencies": {
896 | "@types/node": "^18.0.0 || >=20.0.0",
897 | "less": "*",
898 | "lightningcss": "^1.21.0",
899 | "sass": "*",
900 | "stylus": "*",
901 | "sugarss": "*",
902 | "terser": "^5.4.0"
903 | },
904 | "peerDependenciesMeta": {
905 | "@types/node": {
906 | "optional": true
907 | },
908 | "less": {
909 | "optional": true
910 | },
911 | "lightningcss": {
912 | "optional": true
913 | },
914 | "sass": {
915 | "optional": true
916 | },
917 | "stylus": {
918 | "optional": true
919 | },
920 | "sugarss": {
921 | "optional": true
922 | },
923 | "terser": {
924 | "optional": true
925 | }
926 | }
927 | },
928 | "node_modules/vite-plugin-full-reload": {
929 | "version": "1.2.0",
930 | "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
931 | "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
932 | "dev": true,
933 | "dependencies": {
934 | "picocolors": "^1.0.0",
935 | "picomatch": "^2.3.1"
936 | }
937 | }
938 | }
939 | }
940 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "type": "module",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build"
7 | },
8 | "devDependencies": {
9 | "axios": "^1.6.4",
10 | "laravel-vite-plugin": "^1.0",
11 | "vite": "^5.0"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | tests/Unit
10 |
11 |
12 | tests/Feature
13 |
14 |
15 |
16 |
17 | app
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Send Requests To Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/minhajul/laravel-grafana/23d75543b717e50cbb2d8b793b828a034798975f/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | handleRequest(Request::capture());
18 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/minhajul/laravel-grafana/23d75543b717e50cbb2d8b793b828a034798975f/resources/css/app.css
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 | import './bootstrap';
2 |
--------------------------------------------------------------------------------
/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | window.axios = axios;
3 |
4 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
5 |
--------------------------------------------------------------------------------
/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset!',
17 | 'sent' => 'We have emailed your password reset link!',
18 | 'throttled' => 'Please wait before retrying.',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that email address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/lang/en/validation.php:
--------------------------------------------------------------------------------
1 | 'The :attribute must be accepted.',
17 | 'active_url' => 'The :attribute is not a valid URL.',
18 | 'after' => 'The :attribute must be a date after :date.',
19 | 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
20 | 'alpha' => 'The :attribute may only contain letters.',
21 | 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
22 | 'alpha_num' => 'The :attribute may only contain letters and numbers.',
23 | 'array' => 'The :attribute must be an array.',
24 | 'before' => 'The :attribute must be a date before :date.',
25 | 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
26 | 'between' => [
27 | 'numeric' => 'The :attribute must be between :min and :max.',
28 | 'file' => 'The :attribute must be between :min and :max kilobytes.',
29 | 'string' => 'The :attribute must be between :min and :max characters.',
30 | 'array' => 'The :attribute must have between :min and :max items.',
31 | ],
32 | 'boolean' => 'The :attribute field must be true or false.',
33 | 'confirmed' => 'The :attribute confirmation does not match.',
34 | 'date' => 'The :attribute is not a valid date.',
35 | 'date_equals' => 'The :attribute must be a date equal to :date.',
36 | 'date_format' => 'The :attribute does not match the format :format.',
37 | 'different' => 'The :attribute and :other must be different.',
38 | 'digits' => 'The :attribute must be :digits digits.',
39 | 'digits_between' => 'The :attribute must be between :min and :max digits.',
40 | 'dimensions' => 'The :attribute has invalid image dimensions.',
41 | 'distinct' => 'The :attribute field has a duplicate value.',
42 | 'email' => 'The :attribute must be a valid email address.',
43 | 'ends_with' => 'The :attribute must end with one of the following: :values.',
44 | 'exists' => 'The selected :attribute is invalid.',
45 | 'file' => 'The :attribute must be a file.',
46 | 'filled' => 'The :attribute field must have a value.',
47 | 'gt' => [
48 | 'numeric' => 'The :attribute must be greater than :value.',
49 | 'file' => 'The :attribute must be greater than :value kilobytes.',
50 | 'string' => 'The :attribute must be greater than :value characters.',
51 | 'array' => 'The :attribute must have more than :value items.',
52 | ],
53 | 'gte' => [
54 | 'numeric' => 'The :attribute must be greater than or equal :value.',
55 | 'file' => 'The :attribute must be greater than or equal :value kilobytes.',
56 | 'string' => 'The :attribute must be greater than or equal :value characters.',
57 | 'array' => 'The :attribute must have :value items or more.',
58 | ],
59 | 'image' => 'The :attribute must be an image.',
60 | 'in' => 'The selected :attribute is invalid.',
61 | 'in_array' => 'The :attribute field does not exist in :other.',
62 | 'integer' => 'The :attribute must be an integer.',
63 | 'ip' => 'The :attribute must be a valid IP address.',
64 | 'ipv4' => 'The :attribute must be a valid IPv4 address.',
65 | 'ipv6' => 'The :attribute must be a valid IPv6 address.',
66 | 'json' => 'The :attribute must be a valid JSON string.',
67 | 'lt' => [
68 | 'numeric' => 'The :attribute must be less than :value.',
69 | 'file' => 'The :attribute must be less than :value kilobytes.',
70 | 'string' => 'The :attribute must be less than :value characters.',
71 | 'array' => 'The :attribute must have less than :value items.',
72 | ],
73 | 'lte' => [
74 | 'numeric' => 'The :attribute must be less than or equal :value.',
75 | 'file' => 'The :attribute must be less than or equal :value kilobytes.',
76 | 'string' => 'The :attribute must be less than or equal :value characters.',
77 | 'array' => 'The :attribute must not have more than :value items.',
78 | ],
79 | 'max' => [
80 | 'numeric' => 'The :attribute may not be greater than :max.',
81 | 'file' => 'The :attribute may not be greater than :max kilobytes.',
82 | 'string' => 'The :attribute may not be greater than :max characters.',
83 | 'array' => 'The :attribute may not have more than :max items.',
84 | ],
85 | 'mimes' => 'The :attribute must be a file of type: :values.',
86 | 'mimetypes' => 'The :attribute must be a file of type: :values.',
87 | 'min' => [
88 | 'numeric' => 'The :attribute must be at least :min.',
89 | 'file' => 'The :attribute must be at least :min kilobytes.',
90 | 'string' => 'The :attribute must be at least :min characters.',
91 | 'array' => 'The :attribute must have at least :min items.',
92 | ],
93 | 'not_in' => 'The selected :attribute is invalid.',
94 | 'not_regex' => 'The :attribute format is invalid.',
95 | 'numeric' => 'The :attribute must be a number.',
96 | 'password' => 'The password is incorrect.',
97 | 'present' => 'The :attribute field must be present.',
98 | 'regex' => 'The :attribute format is invalid.',
99 | 'required' => 'The :attribute field is required.',
100 | 'required_if' => 'The :attribute field is required when :other is :value.',
101 | 'required_unless' => 'The :attribute field is required unless :other is in :values.',
102 | 'required_with' => 'The :attribute field is required when :values is present.',
103 | 'required_with_all' => 'The :attribute field is required when :values are present.',
104 | 'required_without' => 'The :attribute field is required when :values is not present.',
105 | 'required_without_all' => 'The :attribute field is required when none of :values are present.',
106 | 'same' => 'The :attribute and :other must match.',
107 | 'size' => [
108 | 'numeric' => 'The :attribute must be :size.',
109 | 'file' => 'The :attribute must be :size kilobytes.',
110 | 'string' => 'The :attribute must be :size characters.',
111 | 'array' => 'The :attribute must contain :size items.',
112 | ],
113 | 'starts_with' => 'The :attribute must start with one of the following: :values.',
114 | 'string' => 'The :attribute must be a string.',
115 | 'timezone' => 'The :attribute must be a valid zone.',
116 | 'unique' => 'The :attribute has already been taken.',
117 | 'uploaded' => 'The :attribute failed to upload.',
118 | 'url' => 'The :attribute format is invalid.',
119 | 'uuid' => 'The :attribute must be a valid UUID.',
120 |
121 | /*
122 | |--------------------------------------------------------------------------
123 | | Custom Validation Language Lines
124 | |--------------------------------------------------------------------------
125 | |
126 | | Here you may specify custom validation messages for attributes using the
127 | | convention "attribute.rule" to name the lines. This makes it quick to
128 | | specify a specific custom language line for a given attribute rule.
129 | |
130 | */
131 |
132 | 'custom' => [
133 | 'attribute-name' => [
134 | 'rule-name' => 'custom-message',
135 | ],
136 | ],
137 |
138 | /*
139 | |--------------------------------------------------------------------------
140 | | Custom Validation Attributes
141 | |--------------------------------------------------------------------------
142 | |
143 | | The following language lines are used to swap our attribute placeholder
144 | | with something more reader friendly such as "E-Mail Address" instead
145 | | of "email". This simply helps us make our message more expressive.
146 | |
147 | */
148 |
149 | 'attributes' => [],
150 |
151 | ];
152 |
--------------------------------------------------------------------------------
/resources/views/welcome.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Laravel
8 |
9 |
10 |
11 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
56 |
57 |
58 |
59 |
64 |
65 |
76 |
81 |
84 |
85 |
86 |
87 |
88 |
91 |
92 |
93 |
Documentation
94 |
95 |
96 | Laravel has wonderful documentation covering every aspect of the framework. Whether you are a newcomer or have prior experience with Laravel, we recommend reading our documentation from beginning to end.
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
109 |
112 |
113 |
114 |
Laracasts
115 |
116 |
117 | Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
118 |
119 |
120 |
121 |
122 |
123 |
124 |
128 |
131 |
132 |
133 |
Laravel News
134 |
135 |
136 | Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
150 |
151 |
152 |
153 |
154 |
155 |
Vibrant Ecosystem
156 |
157 |
158 | Laravel's robust library of first-party tools and libraries, such as Forge , Vapor , Nova , Envoyer , and Herd help you take your projects to the next level. Pair them with powerful open source libraries like Cashier , Dusk , Echo , Horizon , Sanctum , Telescope , and more.
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 | Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})
167 |
168 |
169 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
8 | })->describe('Display an inspiring quote');
9 |
--------------------------------------------------------------------------------
/routes/web.php:
--------------------------------------------------------------------------------
1 | name('datapoint.index');
7 |
--------------------------------------------------------------------------------
/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | config.php
2 | routes.php
3 | schedule-*
4 | compiled.php
5 | services.json
6 | events.scanned.php
7 | routes.scanned.php
8 | down
9 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/b18d705f49d4cb87cb2bde363b3ca5bd2bbb5823.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Laravel Grafana
8 |
9 |
10 |
11 |
12 |
13 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | Laravel
73 |
74 |
75 |
85 |
86 |
87 | getContainer()->make(BladeUIKit\Components\Alerts\Alert::class, []); ?>
88 | withName('alert'); ?>
89 | shouldRender()): ?>
90 | startComponent($component->resolveView(), $component->data()); ?>
91 | withAttributes(['class' => 'alert alert-success']); ?>
92 |
93 |
94 |
95 |
96 | renderComponent(); ?>
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tests/Feature/HomePageTest.php:
--------------------------------------------------------------------------------
1 | get('/');
15 |
16 | $response->assertStatus(200);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import laravel from 'laravel-vite-plugin';
3 |
4 | export default defineConfig({
5 | plugins: [
6 | laravel({
7 | input: ['resources/css/app.css', 'resources/js/app.js'],
8 | refresh: true,
9 | }),
10 | ],
11 | });
12 |
--------------------------------------------------------------------------------