This is a recipe for deploying the hyper Service Framework to Render
The hyper Service Framework api is built to be a consistent service boundary between your applications and the services tier that powers them, such that your apps and business logic do not become coupled or beholden to your services tier. This allows application devs to focus on business logic, and DevOps devs to focus on infra and network topology, all while discouraging vendor lock-in.
The hyper Service Framework itself is built such that it can be deployed to many different providers/platforms. hyper can even be self hosted on your own infrastructure or cloud.
If you're a small team, or would rather not manage infrastructure or dive into a Cloud Provider, you
might choose to use a PaaS instead. A popular option is Render which offers
near-turnkey hosting for containerized applications, as well as some managed service offerings.
This recipe uses Render's Infra as Code feature.
Using the render.yaml file, 5 docker services are provisioned:
- The hyper Service, using the RESTful app, so that you may consume your services over Http.
- MongoDB to power hyper
DataServices - Redis to power hyper
CacheandQueueServices - Elasticsearch to power hyper
SearchServices - MinIO to power hyper
StorageServices
Where needed a Render Disk is mounted on the service, for Persistent storage.
There is also a small middleware added to the hyper Server that enforces AuthN using an
Authorization Bearer JWT token in the authorization header.
MongoDB, Redis, and Elasticsearch are all deployed as Private Services only accessible from your other Render services, and not from the internet.
The hyper service is deployed as a public Web Service, so
that it can receive traffic from the internet.
If your application consuming
hyperis also deployed on Render, you could also change thehyperRender Blueprint to be deployed as a Render Private Service, so that it is only accessible from your other Render services.
The MinIO service is made public, so that it may receive requests to presigned url retrieved via
hyper Storage services.
You can also add the
MinIO Consoleas public web service to yourRender Blueprint!
Start by cloning the repo and connecting to your Render account. Render will start to deploy each of the services into your account.
Because the
hyperservice depends on the other services, more specifically the secret values generated by each of those services, Render will pause deploying thehyperservice until the others are deployed.
Once all the services are deployed, navigate to the hyper service's
Environment Variables, and obtain the
SUB and SECRET. You will use these to create and sign JWTs to consume your hyper services.
You can also use the
hyper-connectSDK to consume hyper, which creates and signs JWTs automatically for you.
Once you have your SUB and SECRET that are generated by Render on the hyper service and its
public Render url. You can use these as part of your connection string you pass to
hyper-connect:
import { connect } from 'hyper-connect';
const { data, cache, storage, search, queue } = connect(
`https://{SUB}:{SECRET}@{RENDER_HOST}/{DOMAIN}`,
);hyper Services are created on a hyper Server, within a hyper Domain.
A Domain is simply a logical grouping of hyper Services hosted on a hyper Server.
hyper Domains are commonly used to distinguish sets of hyper Services across applications ie. a
Foo App Domain and Bar App Domain.
Learn more here