memorysafety / river

This repository is the home of the River reverse proxy application, based on the pingora library from Cloudflare.
https://www.memorysafety.org/initiative/reverse-proxy/
Apache License 2.0
1.72k stars 101 forks source link

(Pre-)RFC: `river` Application Distribution #15

Closed jamesmunns closed 5 months ago

jamesmunns commented 6 months ago

Open Question: How do we build, release, and package river?

We will need to figure out how we make release builds of river, and how to make them available to early users. This may not necessarily be the "permanent" option - that will require collaboration with distribution packagers, etc.

For now, prebuilt binaries available on GitHub are likely reasonable for demonstration, and building from source with cargo install --locked is also reasonable.

I do also intend to investigate and likely use cargo-dist to power this initial release process.

I am open to suggestions or thoughts here, this is me generally signalling intent towards initial distribution plans.

mcpherrinm commented 6 months ago

A “plain” binary and a docker image would be a good set of artifacts. Both can be built and hosted on GitHub as part of making a release with a GitHub action.

jamesmunns commented 6 months ago

@mcpherrinm yep! cargo-dist automates and generates these workflows automatically, which is my interest in it. It also creates installer scripts (if people feel like curlbashing).

A dockerfile is a good shout too!

highb commented 6 months ago

Beyond the application itself, I'm sure the community will want a Helm chart, or Kustomize manifests to use once the container is created. I certainly will!

elhackeado commented 6 months ago

@jamesmunns to answer this question

Open Question: How do we build, release, and package river?

We need to look how the application will be run/consumed by the end user. Two of the most important ways that I can think of running an application are through:

  1. Binary
  2. Container Image

As long as we are able to distribute river in binary format supporting popular OS: linux, macOS(intel/apple silicon) and windows, we should be good.

These binaries can be used as building block to build & distribute container images, helm charts or k8s manifests for river at later point in time.

Now to answer your question, cargo-dist looks a good option as in its readme tag line, it says "cargo-dist distributes your binaries", and that's all we need right now. We can also keep a stretch goal of distributing a minimal alpine based container image for river along with binary.

lperdereau commented 6 months ago

I agree on the delivery of binaries on the Github registry and a docker image, with the aim later to propose a deployment on Kubernetes platforms.

bengaywins commented 5 months ago

A huge vote here for Kustomize manifests with sane defaults on a prepackaged deploy. This allows for one to then use Kustomize very easily in their necessary setup (along with all that Kustomize brings to the table). Helm charts add a ton of complexity that is hard to troubleshoot whether it is Helm doing something badly with terrible error processing (ugh been there too much) or if it's related to the manifest itself or some value in your values.yaml.

Further, Kubernetes is declarative, and so is Kustomize. Keeping within the same methodology is always a good thing imo.

cxw620 commented 5 months ago

What about publishing official pre-built package for most-used linux distros, Debian as an example, so that users can install river with apt install river like we install nginx with apt install nginx?

jamesmunns commented 5 months ago

@cxw620 That's definitely the long term plan, and certainly before any 1.0 release of River.

This issue is tracking "what do we do for the first few weeks + months of working on River"?

jamesmunns commented 5 months ago

Initial release completed: https://github.com/memorysafety/river/releases/tag/v0.2.0, closing.