-
Notifications
You must be signed in to change notification settings - Fork 59
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
v7.0 rewrite checklist #311
Comments
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as resolved.
This comment was marked as resolved.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
Hi @yamalight! I'm really sad to see "Drop docker-compose support." on the list. This is basically how 90% of my exoframe deployments are done. I really love this feature and it would be really sad to see it go, as I'll have to either keep using the old version or create a fork. At this point I'd be willing to even contribute a small amount of cash to support for docker-compose, or help by contributing to maintaining that feature myself. I've previously contributed a PR related to this feature, and as you can see I've been using exoframe for over 5 years now. I really don't mind the fact that I need to specify labels manually, in fact, I prefer it, because it gives me more flexibility as to how the deployments should be routed via traefik. I really hope you reconsider. Let me know if you'd like to know more about how my use cases. Using exoframe over the years has been fantastic! |
@niieani I still think it's one of the worst ways to deploy things via exoframe - you make your server tear-down, re-build and re-start all containers defined in the compose file on every deployment. it's incredibly wasteful in all sorts of ways. vast majority of the time you want to update just one (app) container, and keep all the others unchanged (database, message queue, etc). this is the main reason I think "exoframe way" (tm) is just a better approach. here's an example. Imagine you have following compose file: version: '3.6'
services:
postgres:
image: postgres:15
ports:
- 5432:5432
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: postgrespassword
redis:
image: redis:7
ports:
- '6379:6379'
app:
build: .
ports:
- 8080:8080
depends_on:
- postgres
- redis
environment:
DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres
REDIS_HOST: redis
volumes:
db_data: This work perfectly fine for local testing / dev, but deploying it via exoframe 6 will tear-down and re-start postgres and redis every time you deploy. Why waste that time? Here's how you would deploy it using exoframe configs: {
"name": "my-postgres",
"domain": false,
"image": "postgres:15",
"volumes": ["db_data:/var/lib/postgresql/data"],
"hostname": "mypostgres",
"env": {
"POSTGRES_PASSWORD": "postgrespassword"
}
} Next, you define exoframe config for redis: {
"name": "my-redis",
"domain": false,
"image": "redis:7",
"hostname": "myredis"
} And finally, you define config for your app: {
"name": "my-app",
"domain": "my-app.com",
"env": {
"DATABASE_URL": "postgres://postgres:postgrespassword@postgres:5432/postgres",
"REDIS_HOST": "askaredis"
}
} That's it, that's all the work it takes and you do it once. I think it's a fairly simple procedure that does make deployments a lot faster / simpler. I was also thinking about a possibility of writing a CLI script that would auto-convert compose files into sub-deployments like this. Would love to know your thoughts on this - is that easy enough? Would you still want compose? |
This is an issue to track overall progress on v7.0 rewrite.
Plan is to rewrite / update code to use latest libs (not just versions) and ES modules (ES modules are not ready yet, dropping them?).
Additionally, I'm planning to implement
exoframe-client
library that provides simple API for interacting with server (would allow to create new client, e.g. dashboard as some people wanted).All work is done on v7-rewrite branch.
Packages:
Planned major changes:
Reasoning: yarn v1 is deprecated and v2 is too different from v1. npm v7 now does most of things yarn v1 did.
Reasoning: swarm is deprecated. There are no other plugins and doesn't seem like they'd be useful 🤔
Reasoning: support for it adds complexity, almost nobody uses swarm (k8s is a better solution for that problem), exoframe doesn't work well in those scenarios as a whole.
Reasoning: compose-based deployments don't work well with exoframe (users has to manually add traefik labels, etc), which causes a lot of issues. there's also an issue with tearing down and rebuilding / restarting all services when you only want to update one. IMO the best way would be to deprecate it and describe how to deploy multi-service projects using plain exoframe configs.
exoframe-faas
support.Reasoning: it's half-baked, rarely used but adds quite a bit of overhead to the server. Would be better to provide a guide to extra-slim docker containers (not quite FaaS, but should close enough for this project scope)
Reasoning: it's hard to maintain / fix all of them with time (I kinda ended up abandoning most of them), so it's better to just have a few simple examples.
Things to address in code / deps:
Replace @zeit/ncc with @vercel/ncc. New ncc version doesn't work well, removed, will publish exoframe-server as-is.Try using new @vercel/ncc-> doesn't work since some deps are still CJS and exoframe-server is ESM. Mixing those two doesn't work well when bundling code 😑Planned issues:
Removal of multiple deployments (Allow multiple IDS to be removed #291)(after some more thinking - bad idea, disregarding)ToDos:
Things to document:
Breaking changes (to keep track of them somehow):
Any feedback welcome.
The text was updated successfully, but these errors were encountered: