Building a web app delivery tool. Need feedback
Tags: devops, webdev, configuration
Published: 2021-01-12 14:06:21

Hi everybody!

We're working on [Exogress](https://www.exogress.com) - a service that helps developers expose their web apps to the Internet with less complexity and operational costs. Let me share a little about it.

As a developer, you build a web app and want to make it available to people in your team or all around the globe. At the very least, it means dealing with the public/private IPs and load balancing. It may also require CDN, DDoS protection, IAP, and so on. All of this needs configuration effort, and the application delivery often ends up with a multi-layered setup as it grows.

Exogress simplifies things dramatically. Exposing your web apps is as easy as running a single command-line application with a simple yet powerful YAML config file.

You'll need to spawn Exogress client with your running backend (as a CLI app or, later, as a dependency for your framework), which will establish an on-demand secure direct tunnel with the edge gateways served by Exogress. It allows you to move load balancing functions out of your infrastructure, and, as a developer, you only need to run your code somewhere, and it simply works!

Exogress runs on your development machine, raspberry pi, or cloud server in the same way. Edge gateways act as IAP, Load Balancer, WAF, DDoS protection, covering most of the application delivery needs.

We're also addressing the complicated configuration, like multi-upstreams based on complex rules. Exogress natively supports micro-services: our config file (Exofile) is a YAML configuration that lives in your services' repositories. It makes config simple and very powerful at the same time.


Here is an example of a simple Exofile:

 ```
---
version: 1.0.0
revision: 1
name: config
mount-points:
  app:
    static:
      kind: static-dir
      priority: 5
      dir: ./public
			rescue:
        - catch status-code:404
          action: next-handler
    handlers:
      rails:
        kind: proxy
        upstream: rails
        priority: 10

upstreams:
  rails:
    port: 3000
    health-checks:
      alive:
        kind: liveness
        path: /health
        timeout: 5000ms
        period: 5s
```

Our goal is to build a single platform that covers all web application delivery needs. Exogress is a developer- and DevOps friendly next-generation web delivery platform. Here's the list of features we currently have:

- Automatic TLS certificates through Let's Encrypt;
- Subdomain in provided [exg.link](http://exg.link) zone or your own domains;
- Load Balancer with health checks;
- CDN with caching on the edge;
- Identity-aware proxy. Protect your web apps with external authentication. Currently, we support authentication through Google and GitHub oAuth2;
- Blob storages - currently S3 (and compatible) and GCS;
- Microservices friendly. Easily expose different microservices under the same domain based on your rules;
- ..and much more in the future

Exogress was created by and for developers and is open-source. You may find the source code in our GitHub account: [https://github.com/exogress/](https://github.com/exogress/). We rely mostly on rust programming language - one of the fastest and safest languages.

We are at the very beginning and looking for developers in the community who are keen to try it out and share feedback. [Please let us know](https://calendly.com/exogress-team/exogress-interview?month=2021-01) if you would like to hop on a short call and/or receive an invite. 

Developers who have microservices, multicloud, or multiple delivery services involved - you might like Exogress the most, so please reach out!