Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Built with Bref #267

Open
mnapoli opened this issue Mar 14, 2019 · 30 comments
Open

Built with Bref #267

mnapoli opened this issue Mar 14, 2019 · 30 comments

Comments

@mnapoli
Copy link
Member

mnapoli commented Mar 14, 2019

I would like to create a page that references applications or websites built with Bref.

In the meantime let's collect here links and descriptions of those applications. Feel free to post a comment, your application doesn't have to be a public website, it can also be anything not visible on the internet.

Here is my (public) list for now:

@mnapoli
Copy link
Member Author

mnapoli commented Mar 18, 2019

@atrope
Copy link
Contributor

atrope commented Mar 20, 2019

Https://www.suamusica.com.br (website built with phalcon uses alb to lambda)
Suamusica private APIs to our apps (cacheable and world-wide deployed with Cloudfront caching the public responses close to the user)

@nealio82
Copy link
Contributor

https://kittyquotes.net (someday there'll be a PHP / serverless tutorial on github to accompany this site)

@mnapoli
Copy link
Member Author

mnapoli commented Mar 22, 2019

@atrope that's really interesting. Did you build a PHP layer yourself or are you using the Bref layers? If you have any numbers to share (either here or via a blog post) I'm sure many people would be interested to learn more :)

@atrope
Copy link
Contributor

atrope commented Mar 22, 2019

@mnapoli first we built ourselves our layer, and then we migrated to bref.
With bref we changed the PHP dockerfile so we could build some custom extensions with custom support (redis with igbinary, phalcon, imagick etc) and change some code (ALB Support and other issues).

The Performance with bref is 30% better than it was with our runtime(also was FPM based).

I Will write a blog post sometime but just for now here are some numbers:

Roughly 40M requests daily
In Peak, we have 2.5k concurrent lambdas
In API our average duration is 90ms
In Portal(Website) is 130ms

This of course when it goes to lambda and is not cached in CF.

  • Some changes(challenges) we had to do coming from nginx is for example when a route is not found, it must check in lambda's public directory and do a file_get_contents of it and set appropriate headers(ads.txt, manifest.json examples).

  • Most of our work was facilitated because we were already in containers thus we had(almost, just the ones cited above) no local assets files(a must in lambda).

  • We created an integrated Slack bot that deploys our lambdas (minifying js/css and uploading to s3) in less than 30s using a BASH Layer - https://github.com/gkrizek/bash-lambda-layer - we deploy any branch to a new lambda and we have a complete new development env in some seconds each time we want to test any branch. When we deploy branch master, it updates our prod code. That's also great when something is not good we can revert our code for any commit we want in seconds.

  • Setting the right alarms are also a must for this kind of scale, because some extra miliseconds could cost us double the money, so alarms must be finely tuned.

  • Changing from ECS to Lambda gave us a roughly 25% economy in EC2 not even taking into account TCO and worldwide Infinitely scale/descale lambda+CF gives us, and not even needing to think of EC2 Reservations and hidden costs(storage, data transfer..).

I do plan to write a detailed blog post as soon as i have some free time but if anyone want to know something specific can shoot me a message :)

@mnapoli
Copy link
Member Author

mnapoli commented Mar 22, 2019

@atrope this is amazing! Thanks for sharing.

BTW ALB is definitely on my TODO list, I'm working on a project to try it out and document it (it just takes some time to go through everything).

@yousafs
Copy link

yousafs commented Mar 26, 2019

@mnapoli first we built ourselves our layer, and then we migrated to bref.
With bref we changed the PHP dockerfile so we could build some custom extensions with custom support (redis with igbinary, phalcon, imagick etc) and change some code (ALB Support and other issues).

I do plan to write a detailed blog post as soon as i have some free time but if anyone want to know something specific can shoot me a message :)

@atrope That is fantastic work!! I have been trying to get Imagemagick & Imagick installed using the same method but my PHP Dockerfile is not right and although I have installed the delegates for decoding I always get an error 'no decode delegate for this image format `PNG'. If you could publish yours (or the sections for adding these) it would be amazing!

@atrope
Copy link
Contributor

atrope commented Mar 26, 2019

@yousafs
Of course i can send you :)

In php.Dockerfile:

RUN LD_LIBRARY_PATH= yum install -y ImageMagick-devel
RUN pecl install imagick

and then rebuild, Simple as that.

@yousafs
Copy link

yousafs commented Mar 26, 2019

@atrope
Thank you! That is much simpler than my version - clearly I am not worthy :)
I will give it a try ...

@mnapoli
Copy link
Member Author

mnapoli commented Jun 12, 2019

Here is a new website shared in the Slack channel:

We launched a Project with bref on Lambda last week.

Setup is

  • Domain DNS is at Route53
  • All Requests go through Cloudfront /static -> S3 everything else through API Gateway to Lambda (No caching there currently)
  • Lambda is in a VPC with a Aurora and an Elasticache (tbh. I think I'm going to cut the Elasticache and move the sessions stuff to Auroa)
  • It's an Laravel App with Nova and some Jobs
  • Assets are synced while deloying via a Gitlabrunner + Cloudfront Cache is invalidated at that point
  • Entire Cloudfront Setup is in Cloudformation

Pain Points:

  • I needed the Requested Hostname at my Lambda Function to determine the Language (Tenant) of the Page so a Lambda@Edge Function is running on every request that maps my Host to (yeah that's not really nice I know but I havn't found an alternative with Cloudfront)
  • Setting Up VPC with Cloudformation is a pain so i did it manually

Url: https://radiome.de/ https://radiome.at/ https://radiome.fr/

@nealio82
Copy link
Contributor

nealio82 commented Jun 22, 2019

at https://mybuilder.com we're using Bref to generate reports in PDF format.

Using the fpm layer we have a single api endpoint which accepts a request payload containing an HTML string and a destination of where to upload the generated report. The endpoint does auth and validation, then pushes a notification through SNS.

A 2nd lambda function defined in the same template.yml using the base php layer (along with our own wkhtmltopdf layer which we created) converts the HTML string into PDF, before uploading it to the destination specified in the original payload.

We chose to launch this on lambda because we expect there to be spikes of usage throughout the day, and probably zero instantiations overnight, so fast scaling up-and-down was a key consideration.

We created our own wkhtmltopdf layer because:

  1. there is no 'currrent' generic Linux binary any more (this is covered in the wkhtmltopdf FAQ)
  2. there are 3rd party pre-compiled generic Linux binaries available, but they're also out-of-date, and we didn't want to have to trust random people over the internet not to include anything nefarious
  3. we didn't want to use the vendor-specific binaries because that would have involved spinning up an EC2 box, which is an expensive way of just providing a PDF conversion service
  4. we looked at puppeteer, but one of our teams had already used wkhtmltopdf so we wanted to carry on with what they'd already tried / learned
  5. we also felt the performance of wkhtmltopdf would be better than running headless Chrome in Lambda using puppeteer
  6. we felt this would be a great chance to learn about creating layers and compiling software in Lambda

@ondrejmirtes
Copy link
Contributor

https://phpstan.org - running PHPStan inside a Bref project 😊

@vincentcau
Copy link

and a new one https://www.chouchouhotel.com/ 😊

@mnapoli
Copy link
Member Author

mnapoli commented Dec 19, 2019

Nice!

@WyriHaximus
Copy link

The static map image service for https://wyrimaps.net/ is now powered by Bref. Even though it isn't a full website, and only outputs images like https://st0.cf.wyrimaps.wyri.haxim.us/wow_battle_for_azeroth/4/512/256/[email protected] using bref was a no-brainer. Creating those images is CPU heavy so my VPS' CPU got saturated quickly. With bref it will scale to infinity 🎉.

@RikudouSage
Copy link
Contributor

https://pornhub-meme-generator.com

  • uses Symfony
  • the Symfony cache is pregenerated during deploy and stored inside the standard project var directory (there's nothing that should ever need to be regenerated during runtime)
  • uses S3 bucket for the static assets
  • the assets S3 bucket is behind CloudFront with custom domain name
  • uses S3 bucket for the generated images
  • the uploaded images are downloded using presigned S3 URLs
  • every part of this except custom domains mapping is deployed using CloudFormation, e.g. all is defined inside the serverless.yml file and deployed automatically using Gitlab CI

The deploy process:

  • install npm and composer dependencies
  • build static assets
  • upload them to S3 assets bucket
  • modify the serverless file to include environment variables from the CI environment (currently only APP_ENV and APP_SECRET)
  • warmup the cache
  • deploy using serverless
  • create invalidation on assets CloudFront

@crisdiehard
Copy link

Considering all the key points listed by @RikudouSage, the funny thing is not that the site is a pornhub meme generator. The funny thing is that a blog post explaining all steps to deploy a pornhub meme generator using Bref would be absolutely valuable.

@RikudouSage
Copy link
Contributor

@crisdiehard Well, I could create such post using less controversial meme generator. Don't know where I would post it, though.

@Nemo64
Copy link
Contributor

Nemo64 commented Aug 13, 2020

Not a public site but I build a demo symfony mulipage application as reference:
https://github.com/Nemo64/serverless-symfony

Documentation on how to test and deploy it is in the readme.

The main highlight is probably the database handling. I uses custom CloudFormation resources to create users and databases (within a shared database server) and even do schema migrations.
But it is also a working example of hosting assets and the app under the same domain behind CloudFront.
And it has working caching and logging.

Not all features are tested in production environments yet.

@shouze
Copy link
Contributor

shouze commented Aug 22, 2020

Hi there, we're currently building a new Hotel Brand. I can't communicate a lot on it at the moment as the launch is in more than a year. We've never experienced λ in php before.

We've switched from ECS to Lambda about 10 days ago to give it a try.
It's not so bad, our λ (workers & REST API) are in a VPC (with a NAT GW) and they connect to:

  • 3rd party APIs (HTTPS)
  • AWS Services like DynamoDB, Cognito, SES, SSM, ...

This app is based on Symfony framework with Api Platform. Both ar pretty big but with the ad-hoc process we're able to generate a less than 5M zip artifact to deploy. We've tried opcache.preload and some bref layer's optimizations too. We've found nothing big.

Everything works pretty well. The api is consumed by a customer frontend app (react nextjs) and with SWR (Stale While Revalidate) trick on frontend side we forget that sometimes API request can be a bit slow.

This was some work to make the migration but as we manage AWS with IaaC (thanks to terraform) the process was under control.
What we appreciate:

  • Fine grained permission model.
  • Billing: cheaper at the moment and we also have the feeling to be part of a sustainable initiative

About cold starts, this is mostly OK, we will wait 2020 re:Invent announcements, we expect following things:

  • Millisecond billing!
  • Improvements on provisionned concurrency

@mnapoli mnapoli pinned this issue Nov 30, 2020
@umihico
Copy link

umihico commented Feb 24, 2021

I just built a demo Laravel page on AWS Lambda with Docker container image using Bref. I'd like to introduce my README here because I couldn't find a document about this type of deployment yet.

https://github.com/umihico/laravel-lambda-docker-bref

@Manuelacosta98
Copy link

Manuelacosta98 commented Aug 12, 2021

Hi https://www.alana.jobs/ not the landing that is made with Webflow, the actual web and mobile app api is build from the ground up with bref, we start with bref v0.5 , so we went early.

Is a employee management tool with everything you need from user panel, to realtime dashboards to see if your employees are late to work or on a break, is also a time checking app with face recognition, and has a buildin checklist feature to manage inspections, also has a pre calculate monthly payment system in Mexico and Colombia, also has a module that lets you plan employees schedules and leaves for childbirth, sick and other types of leaves.

Was a lot of fun, we integrate https://sentry.io/ for logs and debugging at the time that was a real trouble, been a contributer of @mnapoli since then, this year I am going for my aws solutions architect associate, this proyect and reactPHP made me passionate about php.

@chekalsky
Copy link

Hey, backend of https://neural.love works with bref too.

Our fastest handler is only 40ms in average.

@GMBN
Copy link

GMBN commented Dec 29, 2021

Hello! https://coingoback.com/ is built with Bref and Laravel.
Coingoback is a cryptocurrency wallet with benefits, e-commerce cash backs, crypto-games play-to-earn, crypto subscription with credit-card etc.

@kevincerro
Copy link
Contributor

kevincerro commented Jan 13, 2023

Here is my list:

Captura de pantalla 2023-01-13 a las 17 50 08

Captura de pantalla 2023-01-13 a las 17 50 47

@mnapoli
Copy link
Member Author

mnapoli commented Mar 28, 2023

@atrope it's been years now, but I wonder if you have any updates for us 😛

Is the website still running with Bref? Still the same traffic?

@RikudouSage
Copy link
Contributor

RikudouSage commented Apr 29, 2023

Integration between Slack and OpenAI / ChatGPT: https://github.com/RikudouSage/SlackChatGPT

It does support deploying via docker everywhere, but it's made with bref / serverless in mind and is the default (and also the way I use it).

Edit: I also finally got to try Symfony messenger using bref.

@atrope
Copy link
Contributor

atrope commented Aug 31, 2023

Hey @mnapoli long time :)

We are still running our API and Website with a Modified version of Bref.

Now with the end of support of Amazon Linux 1 i am working to migrate to the newer bref layers (fpm 8.2)

The website I Already managed to migrate and the API i should finnish by the end of next week and then we can check performance (4 years without changing the bref version).

@atrope
Copy link
Contributor

atrope commented Jan 29, 2024

Hey @mnapoli we finished the migration and now we are fully using php-fpm from bref 8.2 version layer 31 (#1528).

Before the migration we were running on avg ~100ms After migrating we are running at ~70ms that is awesome and that means 30% cheaper. This is Powering our API with more than 1B requests/mo

@beeradmoore
Copy link

@mnapoli , may want to remove prettyci.com, looks like domain is expired and now for sale.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests