firevel / firevel
The Serverless Laravel Framework for Google App Engine + Firestore.
Installs: 368
Dependents: 0
Suggesters: 0
Security: 0
Stars: 307
Watchers: 12
Forks: 11
Open Issues: 0
Type:project
Requires
- php: ^8.1
- firevel/firestore: ^1.0.5
- firevel/firestore-cache-driver: ^1.1.0
- firevel/firestore-session-driver: ^1.0.2
- firevel/generator: ^0.1.0
- guzzlehttp/guzzle: ^7.2
- laravel/framework: ^10.20
- laravel/tinker: ^2.8
- spatie/laravel-google-cloud-storage: ^2.2
Requires (Dev)
- composer/composer: ^2.1
- fakerphp/faker: ^1.9.1
- laravel/pint: ^1.0
- laravel/sail: ^1.18
- mockery/mockery: ^1.4.4
- nunomaduro/collision: ^7.0
- phpunit/phpunit: ^10.1
- spatie/laravel-ignition: ^2.0
This package is auto-updated.
Last update: 2024-04-16 15:10:17 UTC
README
About Firevel
Firevel is a modified, serverless version of Laravel 10 designed to work inside Google App Engine PHP 8.2 standard environment, together with Google Firestore as database and cache.
In addition to standard Laravel Framework benefits it offers:
- Simple, serverless setup.
- Downscaling to zero.
- Micro-service friendly design.
- Free tier eligibility.
- Capacity to deal with high loads.
Requirements
Before you start
- Make sure you
gcloud
is initialized usinggcloud init
command. - Make sure you created project at Google Cloud Platform Console and set it on your console using
gcloud config set project PROJECT_ID
. - Login to Google Console find Firesore section and make sure that your project is running on Native mode. If your project is already using Datastore mode you might need to create a new project.
Installation
-
Create a project in the Google Cloud Platform Console
-
Install and initialize (
gcloud init
) gcloud command-line tool -
Create firevel project with
composer create-project firevel/firevel
-
Generate your
app.yaml
file usingphp artisan firevel:generate app.yaml
-
Deploy project with
gcloud beta app deploy
Firevel does not require any credentials while running inside App Engine. If you like to run it locally you will also need to set GOOGLE_CLOUD_PROJECT
and GOOGLE_APPLICATION_CREDENTIALS
.env variables. You might also need to enable App Engine Admin API.
Local Development with Docker and Buildpacks
Building the Image
To replicate the production environment for local development, you can utilize Buildpacks. Use the pack command with specific environment variables:
pack build your_image_name --env=GOOGLE_COMPOSER_ARGS=--dev --builder=gcr.io/buildpacks/builder:v1
Once the image is built, it can be integrated with Docker, typically through a docker-compose.yaml
file.
Configuration
You can configure PHP extensions for development mode using the php.local.ini
file. This allows for customized behavior during local development.
Accessing the Container Environment
To execute PHP commands within the container, use the /cnb/lifecycle/launcher
. For instance:
/cnb/lifecycle/launcher php route:list
For those looking to utilize Composer within the container, it comes pre-installed. Access it with:
/cnb/lifecycle/launcher php vendor/bin/composer
Laravel Tinker
To run Laravel Tinker, execute the following command:
/cnb/lifecycle/launcher php artisan tinker
For MacBook users, ensure the TERM
variable is set correctly. As an example:
docker exec -e TERM=$TERM -it your_container_name /cnb/lifecycle/launcher php artisan tinker
Differences between Laravel and Firevel.
Firevel is a Laravel 10 after small updates and packages installation:
Usage
You can use Firevel in the same way you use Laravel. Be aware of Firebase limits and Google App Engine limits.
File Storage
By default Firevel running inside App Engine is using Google Cloud Storage file system, and {GOOGLE_CLOUD_PROJECT}.appspot.com/services/{GAE_SERVICE}/storage/
path.
Logging
If you are using app.yaml
generated by firevel:generate app
your logs going to be stored in Stackdriver.
Artisan
To run artisan commands inside serverless containers, install https://github.com/firevel/artisan.
Workers
If you are going to use serverless workers, install https://github.com/firevel/cloud-tasks-queue-driver.
Roadmap
- CI generator as separate package.
- Improved MySQL handling (socket connections + passwordless authentication).
More
- Serverless PHP on App Engine + Cloud Firestore with Firevel
- App Engine documentation
- How Requests are Routed
- Get to know Cloud Firestore
Credits
- Taylor Otwell - for building Laravel.
- SpringboardVR - for allowing this project to happen by providing initial production case.
- Google Cloud - for building great products.