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

Deploying to non-AWS platform? #64

Open
mbrowne opened this issue May 27, 2024 · 15 comments
Open

Deploying to non-AWS platform? #64

mbrowne opened this issue May 27, 2024 · 15 comments
Assignees

Comments

@mbrowne
Copy link

mbrowne commented May 27, 2024

Hi, what considerations should I be aware of if I want to deploy an Enhance app to another platform like Cloudflare Workers or Google Cloud? It seems like in theory, the output should just be JS functions that can run anywhere, but I didn't see anything in the docs talking about building/deploying without Architect.

@brianleroux
Copy link
Contributor

Hey @mbrowne we are focused on AWS, which is a pretty good default fwiw, but would absolutely welcome a PR that opens up support for deploying to other cloud vendors. We started with AWS because it was the only story for serverless for a long time and remains the market leader for those technologies which we depend on.

I like the theory of going multi cloud but less confident about the practice. As you mentioned, Enhance is built on https://arc.codes which deploys using infra-as-code (IaC) solution called CloudFormation to Lambda running Node. Cloudflare workers aren't Node (tho they often claim compatibility the truth is less simple) and don't have a very good IaC story. GCP does support Node but last I checked they also do not have a very good IaC story. I know both CF and GCP can work with Terraform but with the recent licensing uncertainty I do not think its a very good choice for IaC personally.

Anyhow, open to working with you to find a solution for other clouds. Or, if you interested, I'd also be happy to get you setup on AWS.

@brianleroux brianleroux self-assigned this May 27, 2024
@mbrowne
Copy link
Author

mbrowne commented May 27, 2024

Thanks for the explanation. I was wondering if maybe there was some more platform-agnostic code behind the scenes that I could self-deploy, with the end result being something like Remix that can be deployed on any kind of cloud function or even a Docker container (although serverless is preferable). Having the deployment process officially supported by Enhance tooling is less important.

At this point we are only in the evaluation stage, and this would be for one of our apps. It's discrete enough from our other apps that in theory we could use AWS for this one even though the rest of our infrastructure is in Google Cloud and Cloudflare. So if we decide to go with Enhance, maybe we'll just do that. But it does seem like it might be a shame for this framework to remain locked in to one vendor...that might be more of an issue for others than it is for my company (and even for us, we'd have to make sure that the ingress/egress costs for making this app's data available to the rest of our stack would make sense for us).

@brianleroux
Copy link
Contributor

So the scope of Remix is pretty limited, GET and POST requests. There's a lot more to 'fullstack' than HTTP.

Architect can do a whole lot more and by virtue of that so can Enhance. Web sockets. Scheduled functions. Queues. Events. Built-in database (DynamoDB). All deployed w deterministic IaC.

If we limited the scope to GET/POST over HTTP then building something that can go to other vendors is pretty simple! But you'll run into issues pretty quickly with such a limited architecture. Not sure what the best path forward would be but personally think the 'cloud agnostic' marketing is glossing over a lot of essential complexity. People like to talk about lock-in but I don't think you can avoid it truly. You have to pick and choose your battles with vendors you can trust. After the news of the past few weeks I personally wouldn't trust GCP or CF. Not to say AWS doesn't have issues but I feel its a way more mature, stable and transparent organization.

@macdonst
Copy link
Contributor

That being said you could always call the @enhance/ssr package directly from a JS environment of your choice. You will lose out on the file based routing and API paths. Those are things you'd have to code up yourself.

@mbrowne
Copy link
Author

mbrowne commented May 27, 2024

@brianleroux you make a lot of good points about the general goals of the framework, which I didn't fully realize. It might help if I explain more about the use case...this is for a relatively simple blog-like site with thousands of articles that needs to load extremely fast and handle occasional spikes of high traffic. (The site is currently running on WordPress and the JS it's using should really be rewritten.) So I doubt it will need anything more than GET/POST. I'm still not sure if Enhance is the best fit - it's cool that it has all those additional features though :)

@macdonst I might try that out, thanks. Since we're already using Remix for our other apps, I wonder if there might be an opportunity to use remix resource routes in combination with @enhance/ssr. If anything fruitful comes out of that idea, I'll post about it here.

@macdonst
Copy link
Contributor

@mbrowne interesting use case. I'd love to jump on a call with you to discuss it in more detail. We run our blog on Enhance (obviously) so we know it works well for blog type sites. I've been playing around with WP more lately so it would be cool if we could find a path for this to work for you.

@mbrowne
Copy link
Author

mbrowne commented May 28, 2024

@macdonst Thanks, I might not have time for a call until next week, but I joined the discord (username mbrowne).

@mbrowne
Copy link
Author

mbrowne commented Jul 19, 2024

It looks like rendering enhance components using remix would be doable... I'm sure that the client-side part of the web components implementation is where things would get more complicated (setting up the compilation process for that), but for server-side rendering it was pretty straightforward.

Here's a POC:
https://github.com/mbrowne/remix-enhance-experiment

See http://localhost:3000/blog

@brianleroux
Copy link
Contributor

fun stuff. @mbrowne what does this buy you that the regular path with Enhance doesn't have ?

@mbrowne
Copy link
Author

mbrowne commented Jul 22, 2024

@brianleroux Just the ability to deploy it anywhere and not only with AWS. The rest of our apps are all running in kubernetes in Google Cloud, and we're probably going to move out main frontend to Cloudflare workers. So AWS doesn't fit into our stack as easily, and would come with more network overhead.

Remix apps can be deployed as Cloudflare workers or Docker containers or several other things

@brianleroux
Copy link
Contributor

ok, cool, so…if your app only does GET/POST I think its a pretty small lift to get regular Enhance working on Docker (and probably CF Workers tho we have less desire to support them). bonus: no build step.

is that something you'd use ?

@mbrowne
Copy link
Author

mbrowne commented Jul 22, 2024

is that something you'd use ?

In theory, yes. We are wrapping up our project just doing everything in Wordpress right now, so for the moment my POC is an experiment to hopefully come back to in the future for a performance boost. But I imagine that others would find this useful as well, for similar blog-type sites that don't need more than GET/POST.

@brianleroux
Copy link
Contributor

cool, here's an example dockerizing enhance https://github.com/brianleroux/enhance-example-docker

will chat w the team about adding to the docs

@mbrowne
Copy link
Author

mbrowne commented Jul 22, 2024

So simple! Thanks. I didn't realize it would be ok to use the enhance dev command to run an app in production.

@brianleroux
Copy link
Contributor

Yeah it's just a bare bones Node server so it's fine as long as you stick to http stuff

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

No branches or pull requests

3 participants