High Level Architecture 🚀
Architecture (miro.com)
Architecture decision records] (ADR)
An architecture decision record (ADR) is a document that captures an important architecture decision made along with its context and consequences.
Services
| Service | Description | Language/Framework | Docs |
|---|---|---|---|
| landing | Welcome page | JS/JQuery | |
| docs | Example blog | Hugo | https://batazor.github.io/shortlink/ |
| next | UI service | JS/NextJS | docs |
| api | GateWay | Go | docs |
| link | Link service | Go | docs |
| newsletter | Newsletter service | Rust | |
| proxy | Proxy service for redirect to original URL | TypeScript | |
| bot | Telegram bot | JAVA | |
| billing | Billing service | Go | |
| logger | Logger service | Go | |
| metadata | Parser site by API | Go | |
| notify | Send notify to smtp, slack, telegram | Go | |
| shortctl | Shortlink CLI | Go | docs |
| csi | CSI example | Go | |
| ory/kratos | User management service | Go | docs |
| ory/hydra | OAuth 2.0 Provider | Go | docs |
| shortdb | Custom database | Go | docs |
Run
DETAILS
Require
Install GIT sub-repository
git submodule update --init --recursive
docker-compose
For run
make run
For down
make down
Kubernetes (1.19+)
For run
make minikube-up
make helm-shortlink-up
For down
make minikube-down
Skaffold (link)
For run
make skaffold-init
make skaffold-up
For down
make skaffold-down
Debug mode
make skaffold-debug
HTTP API
- Import Postman link for test HTTP API
- Swagger docs
Support HTTP REST API:
- HTTP (chi)
- gRPC-gateway
- GraphQL
- Optional
- go-kit
- CloudEvents
MQ
OpenTracing
Cloud-Native
- Development
- Skaffold
- Telepresence
- Logger
- Prometheus
- prometheus-operator
- notify: slack, email, telegram
- prometheus-operator
- HealthCheck
- Support K8S
- Helm Chart
- Minikube
- Backup/Restore (Velero)
- Custom CSI driver (fork csi-driver-host-pat)
- Istio
- MetalLB
- kyverno - Kubernetes Native Policy Management
- Storage
- rook-ceph
- ceph cluster (3 node)
- grafana dashboard
- prometheus metrics
- rook-ceph
Gateway
- Traefik
- Nginx
UI
ENV for UI
Use .env file in ui/[next/etc] directories for setting your UI
| Name | Default | Description |
|---|---|---|
| NODE_ENV | - | Select: production, development, etc... |
| SENTRY_DSN | - | Your sentry DSN |
UI Screenshot
Mobile
Hello Worldon flutter ;-)
Configuration
CoreDNS IP table
| Service | Ip address | Description |
|---|---|---|
| store | 10.5.0.100 | Main database (postgres/mongo/cassandra/redis) |
troubleshooting
Sometimes a container without a specified ip may occupy a binding
address of another service, which will result in Address already in use.
Ansible
DETAILS
Vagrant
cd ops/vagrant
vagrant up
cd ops/ansible
ansible-playbook playbooks/playbook.yml
DNS/HTTP
ui-next.shortlink.vagrant:8081



