📝 Add README.md
This commit is contained in:
parent
7f8506e6ea
commit
734d1e2c35
105
README.md
Normal file
105
README.md
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
# HyperNet.Nexus
|
||||||
|
|
||||||
|
Nexus is the core component of HyperNet,
|
||||||
|
which managed the resources allocation (such as the database allocate and more)
|
||||||
|
and the service gateway.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Gateway
|
||||||
|
|
||||||
|
Gateway is one of the core features in Nexus, every HyperNet services will establish a connection to the Nexus
|
||||||
|
when they start. And it is required, if Nexus is died or it did not connected it successfully, the service will exit.
|
||||||
|
|
||||||
|
During the registration, the service will provide follow details:
|
||||||
|
|
||||||
|
1. An unique service ID - `id`
|
||||||
|
2. The human readable name of the service - `label`
|
||||||
|
3. The code for accessing the service - `type`
|
||||||
|
4. The grpc outbound address of the service - `grpc_addr`
|
||||||
|
5. The http outbound address of the service - `http_addr`
|
||||||
|
|
||||||
|
There is two kind of the gateway, the grpc one and the http one.
|
||||||
|
|
||||||
|
When the user requested the `/cgi/<type>`, the request was forwarded to the `http_addr`
|
||||||
|
of the service with load balancer included.
|
||||||
|
|
||||||
|
And when the internal service call `GetServiceGrpcConn(type)`, the Nexus will run a health check to ensure the
|
||||||
|
target service is alive and respond with a `grpc_addr`, the rest of the connection will be handled by the SDK.
|
||||||
|
It is also load balancer included.
|
||||||
|
|
||||||
|
### Allocation
|
||||||
|
|
||||||
|
The allocation is the additional service which make our developer experience better.
|
||||||
|
For simple, the allocation is basically a improved version of the shared configuration.
|
||||||
|
With some part of the configuration will be re-configured according to the service's demand.
|
||||||
|
|
||||||
|
Like the database allocation, service request with the database name they want,
|
||||||
|
and the Nexus will respond a configured connection string to the service, then the SDK will handle
|
||||||
|
the establishment of the connection.
|
||||||
|
|
||||||
|
At the same time, the allocated database will be added into the watchtower for auto maintenance
|
||||||
|
(auto remove the soft-deleted records, backup and more).
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
All the request forwarded by the Nexus will handle the authorization automatically.
|
||||||
|
The Authorization header field will be replaced by the internal one with full user data.
|
||||||
|
|
||||||
|
To implement the authorization, you must have at least one [Passport](https://github.com/Solsynth/HyperNet.Passport) instance alive.
|
||||||
|
|
||||||
|
For further usage, checkout the `hypernet/nexus/pkg/nex/sec` package.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To run the Nexus, you need to have an etcd server and a nats server running.
|
||||||
|
The best way to run the Nexus is using docker compose. Here is an example with the required dependencies added
|
||||||
|
and health check configured:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
nexus:
|
||||||
|
image: xsheep2010/nexus:nightly
|
||||||
|
network_mode: "host"
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- nats
|
||||||
|
- etcd
|
||||||
|
volumes:
|
||||||
|
- "/srv/hypernet/nexus.settings.toml:/settings.toml"
|
||||||
|
- "/srv/hypernet/keys:/keys"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-z", "localhost", "7001"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 15s
|
||||||
|
|
||||||
|
nats:
|
||||||
|
image: nats:latest
|
||||||
|
network_mode: "host"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
etcd:
|
||||||
|
image: bitnami/etcd:latest
|
||||||
|
network_mode: "host"
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- ALLOW_NONE_AUTHENTICATION=yes
|
||||||
|
```
|
||||||
|
|
||||||
|
To add more services, you can according follow example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
passport:
|
||||||
|
image: xsheep2010/passport:nightly
|
||||||
|
network_mode: "host"
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
nexus:
|
||||||
|
condition: service_healthy
|
||||||
|
volumes:
|
||||||
|
- "/srv/hypernet/passport.settings.toml:/settings.toml"
|
||||||
|
- "/srv/hypernet/keys:/keys"
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user