Compare commits
30 Commits
testing
...
dcd2414ea0
| Author | SHA1 | Date | |
|---|---|---|---|
| dcd2414ea0 | |||
| 4f1d72ff4d | |||
| dae298bd00 | |||
| 37da42027b | |||
| 27b00cd822 | |||
| 7a4ebf2f6f | |||
| b3b7fd6b5b | |||
| 276d17e51d | |||
| a4668a74b8 | |||
| 9f4f6694d2 | |||
| c5c10ff8fd | |||
| 255d874a22 | |||
| fca1257d62 | |||
| 5cee3b46db | |||
| a6dbe760e2 | |||
| df63f90152 | |||
| 759da872ef | |||
| 65307e2e27 | |||
| f3dc764748 | |||
| 671afb470a | |||
| 832d59cedc | |||
| 87e0c1ad1d | |||
| 0938338b99 | |||
| fa62c0b817 | |||
| 6848b55101 | |||
|
|
a856f24132 | ||
|
|
35dd2d38bf | ||
|
|
0173d65f9b | ||
| b9b8a57a5b | |||
| e3173eaecb |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,3 @@
|
||||
.idea/
|
||||
|
||||
#*.local.yml
|
||||
deploy/certs/
|
||||
|
||||
1
CREDITS.md
Normal file
1
CREDITS.md
Normal file
@@ -0,0 +1 @@
|
||||
# Libraries or any other code used in this project:
|
||||
10
Makefile
10
Makefile
@@ -1,7 +1,13 @@
|
||||
DEPLOY_DIR := ./deploy
|
||||
|
||||
init:
|
||||
- sh ${DEPLOY_DIR}/scripts/init-k8s.sh
|
||||
|
||||
up:
|
||||
- sh ${DEPLOY_DIR}/start-stack.sh
|
||||
- sh ${DEPLOY_DIR}/scripts/start-k8s.sh
|
||||
|
||||
down:
|
||||
- docker stack rm egommerce
|
||||
- sh ${DEPLOY_DIR}/scripts/stop-k8s.sh
|
||||
|
||||
certs:
|
||||
- bash ${DEPLOY_DIR}/scripts/gen-certs.sh
|
||||
|
||||
16
README.md
16
README.md
@@ -1,9 +1,15 @@
|
||||
# Egommerce docker stack
|
||||
# Egommerce K8S stack
|
||||
|
||||
## RUNNING
|
||||
### Generate Certificates by running:
|
||||
```make certs```
|
||||
|
||||
# $ sh deploy/start-stack.sh
|
||||
### Init stack (K8S Dependencies and secrets)
|
||||
```make init```
|
||||
|
||||
## MAINTENANCE
|
||||
### Start
|
||||
|
||||
### If certificate doesn't work try to copy contents of the key file at the end of the cert file.
|
||||
```make up```
|
||||
|
||||
### Shutdown
|
||||
|
||||
```make down```
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
API_GATEWAY_PORT=48443
|
||||
API_GATEWAY_UI_PORT=48444
|
||||
API_REGISTRY_UI_PORT=48445
|
||||
API_EVENTBUS_UI_PORT=48446
|
||||
4
deploy/certs/.gitignore
vendored
4
deploy/certs/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
||||
@@ -1,7 +1,7 @@
|
||||
CREATE TABLE IF NOT EXISTS basket.basket
|
||||
(
|
||||
id uuid NOT NULL DEFAULT gen_random_uuid(),
|
||||
state character varying NOT NULL DEFAULT 'new',
|
||||
"state" character varying NOT NULL DEFAULT 'new',
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id)
|
||||
@@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS basket.basket_item
|
||||
basket_id uuid NOT NULL,
|
||||
product_id integer NOT NULL,
|
||||
quantity integer NOT NULL DEFAULT 1,
|
||||
price double precision NOT NULL DEFAULT 0.00;
|
||||
price double precision NOT NULL DEFAULT 0.00,
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id)
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
ALTER TABLE IF EXISTS basket.basket_item
|
||||
DROP COLUMN price;
|
||||
@@ -1,2 +0,0 @@
|
||||
ALTER TABLE IF EXISTS basket.basket_item
|
||||
ADD COLUMN price double precision NOT NULL DEFAULT 0.00;
|
||||
@@ -1,16 +1,12 @@
|
||||
CREATE TABLE catalog.product
|
||||
(
|
||||
id integer NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||||
pid character varying NOT NULL,
|
||||
name character varying NOT NULL,
|
||||
id uuid NOT NULL DEFAULT uuid_generate_v4(),
|
||||
"name" character varying NOT NULL,
|
||||
slug character varying NOT NULL,
|
||||
price double precision NOT NULL,
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
ALTER TABLE IF EXISTS catalog.product
|
||||
OWNER to postgres;
|
||||
|
||||
COMMENT ON COLUMN catalog.product.pid
|
||||
IS 'Unique product ID. EAN, UPC etc...';
|
||||
ALTER TABLE IF EXISTS catalog.product OWNER to egommerce;
|
||||
|
||||
@@ -1,12 +1,58 @@
|
||||
CREATE TABLE IF NOT EXISTS identity.users
|
||||
(
|
||||
id uuid NOT NULL DEFAULT gen_random_uuid(),
|
||||
id uuid NOT NULL DEFAULT uuid_generate_v4(),
|
||||
username character varying NOT NULL,
|
||||
"password" character varying NOT NULL,
|
||||
email character varying NOT NULL,
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (email),
|
||||
UNIQUE (username)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS identity.roles
|
||||
(
|
||||
id uuid NOT NULL DEFAULT uuid_generate_v4(),
|
||||
name character varying(100) COLLATE pg_catalog."default" NOT NULL,
|
||||
display_name character varying(200) COLLATE pg_catalog."default" NOT NULL,
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
ALTER TABLE IF EXISTS identity.users
|
||||
OWNER to postgres;
|
||||
CREATE TABLE IF NOT EXISTS identity.users_roles
|
||||
(
|
||||
id uuid NOT NULL DEFAULT uuid_generate_v4(),
|
||||
user_id uuid NOT NULL,
|
||||
role_id uuid NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (user_id)
|
||||
REFERENCES identity.users (id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION
|
||||
ON DELETE NO ACTION
|
||||
NOT VALID,
|
||||
FOREIGN KEY (role_id)
|
||||
REFERENCES identity.roles (id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION
|
||||
ON DELETE NO ACTION
|
||||
NOT VALID
|
||||
UNIQUE (user_id, role_id)
|
||||
);
|
||||
|
||||
CREATE TABLE identity.url_access
|
||||
(
|
||||
id uuid NOT NULL DEFAULT uuid_generate_v4(),
|
||||
roles json NOT NULL,
|
||||
url character varying(255) NOT NULL,
|
||||
method character varying(10) NOT NULL,
|
||||
service character varying(100) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (url, method, service)
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE IF EXISTS identity.users OWNER to egommerce;
|
||||
ALTER TABLE IF EXISTS identity.roles OWNER to egommerce;
|
||||
ALTER TABLE IF EXISTS identity.users_roles OWNER to egommerce;
|
||||
ALTER TABLE IF EXISTS identity.url_access OWNER to egommerce;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
CREATE USER egommerce;
|
||||
CREATE DATABASE egommerce;
|
||||
|
||||
GRANT ALL PRIVILEGES ON DATABASE egommerce TO egommerce;
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
|
||||
CREATE SCHEMA "identity" AUTHORIZATION egommerce;
|
||||
CREATE SCHEMA catalog AUTHORIZATION egommerce;
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
DROP TABLE IF EXISTS ordering.order_item;
|
||||
DROP TABLE IF EXISTS ordering."order";
|
||||
DROP TABLE IF EXISTS "ordering".order_item;
|
||||
DROP TABLE IF EXISTS "ordering"."order";
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
CREATE TABLE IF NOT EXISTS ordering."order"
|
||||
CREATE TABLE IF NOT EXISTS "ordering"."order"
|
||||
(
|
||||
id uuid NOT NULL DEFAULT gen_random_uuid(),
|
||||
state character varying NOT NULL DEFAULT 'new',
|
||||
"state" character varying NOT NULL DEFAULT 'new',
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ordering.order_item
|
||||
CREATE TABLE IF NOT EXISTS "ordering".order_item
|
||||
(
|
||||
id uuid NOT NULL DEFAULT gen_random_uuid(),
|
||||
order_id uuid NOT NULL,
|
||||
product_id integer NOT NULL,
|
||||
quantity integer NOT NULL DEFAULT 1,
|
||||
price double precision NOT NULL DEFAULT 0.00;
|
||||
price double precision NOT NULL DEFAULT 0.00,
|
||||
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
||||
updated_at timestamp without time zone,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
ALTER TABLE IF EXISTS ordering.order_item
|
||||
ALTER TABLE IF EXISTS "ordering".order_item
|
||||
ADD CONSTRAINT order_item_order_fkey FOREIGN KEY (order_id)
|
||||
REFERENCES "ordering"."order" (id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION
|
||||
|
||||
@@ -1,166 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
api-gateway:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=egommerce.local
|
||||
# - APP_PORT=48443
|
||||
ports:
|
||||
- target: 443
|
||||
published: 48443
|
||||
mode: host
|
||||
- target: 8080
|
||||
published: 48444
|
||||
mode: host
|
||||
# - 48443:443
|
||||
# - 48444:8080
|
||||
# - 5672:5672
|
||||
|
||||
api-registry:
|
||||
command: ["-ui-content-path=/registry"]
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=registry.egommerce.local
|
||||
# - APP_PORT=48445
|
||||
ports:
|
||||
- target: 8500
|
||||
published: 48445
|
||||
mode: host
|
||||
# - 48445:8500
|
||||
# - 8600:8600/udp
|
||||
|
||||
api-eventbus:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=eventbus.egommerce.local
|
||||
# - APP_PORT=48446
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.tcp.routers.eventbus.rule=HostSNI(`*`)
|
||||
- traefik.tcp.routers.eventbus.entrypoints=rabbitmq
|
||||
- traefik.tcp.routers.eventbus.service=eventbus
|
||||
- traefik.tcp.services.eventbus.loadbalancer.server.port=5672
|
||||
ports:
|
||||
- 48446:8084
|
||||
- 15672:15672
|
||||
|
||||
api-cache:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=redis.egommerce.local
|
||||
command: ["redis-server", "/etc/redis.conf", "--requirepass", "12345678"]
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
api-logger:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=logger.egommerce.local
|
||||
ports:
|
||||
- 24224:24224
|
||||
|
||||
# api-prometheus:
|
||||
# environment:
|
||||
# - APP_DOMAIN=prometheus.egommerce.local
|
||||
# ports:
|
||||
# - 9090:9090
|
||||
|
||||
# api-grafana:
|
||||
# environment:
|
||||
# - APP_DOMAIN=grafana.egommerce.local
|
||||
# ports:
|
||||
# - 3000:3000
|
||||
|
||||
postgres-db:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=postgres.egommerce.local
|
||||
ports:
|
||||
- 5432:5432
|
||||
|
||||
mongo-db:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=mongo.egommerce.local
|
||||
ports:
|
||||
- 27017:27017
|
||||
|
||||
identity-svc:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=identity.api.egommerce.local
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
ports:
|
||||
- 8080:80
|
||||
|
||||
basket-svc:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=basket.api.egommerce.local
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
ports:
|
||||
- 8001:80
|
||||
|
||||
catalog-svc:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=catalog.api.egommerce.local
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
ports:
|
||||
- 8002:80
|
||||
|
||||
order-svc:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=order.api.egommerce.local
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
ports:
|
||||
- 8003:80
|
||||
|
||||
pricing-svc:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- APP_DOMAIN=pricing.api.egommerce.local
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
ports:
|
||||
- 8004:80
|
||||
|
||||
# Workers (EventBus)
|
||||
basket-worker:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
|
||||
catalog-worker:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
|
||||
pricing-worker:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
|
||||
order-worker:
|
||||
env_file: .env.local
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
@@ -1,140 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
api-gateway:
|
||||
image: git.pbiernat.dev/egommerce/api-gateway:dev
|
||||
environment:
|
||||
- APP_DOMAIN=api-gateway
|
||||
volumes:
|
||||
- ./certs/api-gateway:/etc/traefik/certs
|
||||
|
||||
api-registry:
|
||||
image: git.pbiernat.dev/egommerce/api-registry:dev
|
||||
environment:
|
||||
- APP_DOMAIN=api-registry
|
||||
- CONSUL_HTTP_TOKEN=devop
|
||||
volumes:
|
||||
- ./certs/api-registry:/consul/data/certs
|
||||
|
||||
api-eventbus:
|
||||
image: git.pbiernat.dev/egommerce/api-eventbus:dev
|
||||
environment:
|
||||
- APP_DOMAIN=api-eventbus
|
||||
# - RABBITMQ_NODENAME=api-eventbus
|
||||
# - RABBITMQ_USE_LONGNAME=true
|
||||
# - RABBITMQ_DEFAULT_USER = admin
|
||||
# - RABBITMQ_DEFAULT_PASS = passw123
|
||||
|
||||
api-cache:
|
||||
image: git.pbiernat.dev/egommerce/api-cache:dev
|
||||
environment:
|
||||
- PASSWORD=12345678
|
||||
|
||||
api-logger:
|
||||
image: git.pbiernat.dev/egommerce/api-logger:dev
|
||||
environment:
|
||||
- APP_DOMAIN=api-logger
|
||||
|
||||
#api-prometheus:
|
||||
# image: prom/prometheus:latest # FIXME: create private image(prod/dev)...
|
||||
# environment:
|
||||
# - APP_DOMAIN=prometheus.keshop.bieda.it
|
||||
|
||||
#api-grafana:
|
||||
# image: grafana/grafana-oss:latest # FIXME: create private image(prod/dev)...
|
||||
# environment:
|
||||
# - APP_DOMAIN=grafana.keshop.bieda.it
|
||||
|
||||
postgres-db:
|
||||
environment:
|
||||
- APP_DOMAIN=postgres-db
|
||||
- POSTGRES_PASSWORD=12345678
|
||||
|
||||
mongo-db:
|
||||
environment:
|
||||
- APP_DOMAIN=mongo-db
|
||||
- MONGO_INITDB_ROOT_PASSWORD=12345678
|
||||
|
||||
# API micro-services
|
||||
identity-svc:
|
||||
image: git.pbiernat.dev/egommerce/identity-svc:dev
|
||||
environment:
|
||||
- APP_DOMAIN=identity-svc
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
volumes:
|
||||
- ./certs/api-gateway:/certs
|
||||
|
||||
basket-svc:
|
||||
image: git.pbiernat.dev/egommerce/basket-svc:dev
|
||||
environment:
|
||||
- APP_DOMAIN=basket-svc
|
||||
- AUTH_HANDLER_URL=http://identity-svc/api/v1/traefik
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
volumes:
|
||||
- ./certs/api-gateway:/certs
|
||||
|
||||
catalog-svc:
|
||||
image: git.pbiernat.dev/egommerce/catalog-svc:dev
|
||||
environment:
|
||||
- APP_DOMAIN=catalog-svc
|
||||
- AUTH_HANDLER_URL=http://identity-svc/api/v1/traefik
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
volumes:
|
||||
- ./certs/api-gateway:/certs
|
||||
|
||||
pricing-svc:
|
||||
image: git.pbiernat.dev/egommerce/pricing-svc:dev
|
||||
environment:
|
||||
- APP_DOMAIN=pricing-svc
|
||||
- AUTH_HANDLER_URL=http://identity-svc/api/v1/traefik
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
volumes:
|
||||
- ./certs/api-gateway:/certs
|
||||
|
||||
order-svc:
|
||||
image: git.pbiernat.dev/egommerce/order-svc:dev
|
||||
environment:
|
||||
- APP_DOMAIN=order-svc
|
||||
- AUTH_HANDLER_URL=http://identity-svc/api/v1/traefik
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
volumes:
|
||||
- ./certs/api-gateway:/certs
|
||||
|
||||
# Workers (Eventbus)
|
||||
basket-worker:
|
||||
image: git.pbiernat.dev/egommerce/basket-worker:dev
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
|
||||
catalog-worker:
|
||||
image: git.pbiernat.dev/egommerce/catalog-worker:dev
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
|
||||
pricing-worker:
|
||||
image: git.pbiernat.dev/egommerce/pricing-worker:dev
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
|
||||
order-worker:
|
||||
image: git.pbiernat.dev/egommerce/order-worker:dev
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:12345678@postgres-db:5432/egommerce
|
||||
- MONGODB_URL=mongodb://mongodb:12345678@mongo-db:27017
|
||||
- EVENTBUS_URL=amqp://guest:guest@api-eventbus:5672
|
||||
@@ -1,392 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
api-gateway:
|
||||
image: git.pbiernat.dev/egommerce/api-gateway:latest
|
||||
# command:
|
||||
# - '--providers.consulcatalog.refreshinterval=5s'
|
||||
# FIXME ^^ only on config option: static/env/cli must be selected
|
||||
environment:
|
||||
- APP_NAME=api-gateway
|
||||
- APP_DOMAIN
|
||||
- API_REGISTRY_REFRESH_INTERVAL=5s
|
||||
volumes:
|
||||
- ./certs/api-gateway:/etc/traefik/certs
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
networks:
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-logger-network
|
||||
|
||||
api-registry:
|
||||
image: git.pbiernat.dev/egommerce/api-registry:latest
|
||||
environment:
|
||||
- APP_NAME=api-registry
|
||||
- APP_DOMAIN
|
||||
- CONSUL_HTTP_TOKEN=VeryS3cr3tTok3N
|
||||
volumes:
|
||||
- registry_data:/consul/data
|
||||
- ./certs/api-registry:/consul/data/certs
|
||||
networks:
|
||||
- api-registry-network
|
||||
- api-logger-network
|
||||
|
||||
api-eventbus:
|
||||
image: git.pbiernat.dev/egommerce/api-eventbus:latest
|
||||
environment:
|
||||
# - RABBITMQ_NODENAME=api-eventbus
|
||||
- RABBITMQ_ERLANG_COOKIE=rabbitmq
|
||||
- APP_NAME=api-eventbus
|
||||
- APP_DOMAIN
|
||||
volumes:
|
||||
- eventbus_data:/var/lib/rabbitmq
|
||||
- eventbus_logs:/var/log/rabbitmq
|
||||
networks:
|
||||
- api-gateway-network
|
||||
- api-eventbus-network
|
||||
- api-registry-network
|
||||
- api-logger-network
|
||||
|
||||
api-cache:
|
||||
image: git.pbiernat.dev/egommerce/api-cache:latest
|
||||
environment:
|
||||
- APP_NAME=api-cache
|
||||
networks:
|
||||
- api-cache-network
|
||||
- api-logger-network
|
||||
|
||||
api-logger:
|
||||
image: git.pbiernat.dev/egommerce/api-logger:latest
|
||||
environment:
|
||||
- APP_NAME=api-logger
|
||||
- APP_DOMAIN
|
||||
networks:
|
||||
- api-logger-network
|
||||
|
||||
#api-prometheus:
|
||||
# image: prom/prometheus:latest # FIXME: create private image(prod/dev)...
|
||||
# user: root
|
||||
# environment:
|
||||
# - APP_NAME=api-prometheus
|
||||
# - APP_DOMAIN
|
||||
# volumes:
|
||||
# - ./etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
# - /var/run/docker.sock:/var/run/docker.sock
|
||||
# networks:
|
||||
# - api-prometheus-network
|
||||
#- api-grafana-network
|
||||
# - api-gateway-network
|
||||
# - api-registry-network
|
||||
# - api-eventbus-network
|
||||
# - api-cache-network
|
||||
# - api-logger-network
|
||||
# - basket-svc-network
|
||||
# - basket-worker-network
|
||||
# - catalog-svc-network
|
||||
# - catalog-worker-network
|
||||
# - identity-svc-network
|
||||
# - order-svc-network
|
||||
# - order-worker-network
|
||||
# - pricing-svc-network
|
||||
# - pricing-worker-network
|
||||
|
||||
#api-grafana:
|
||||
# image: grafana/grafana-oss:latest # FIXME: create private image(prod/dev)...
|
||||
# environment:
|
||||
# - APP_NAME=api-grafana
|
||||
# - APP_DOMAIN
|
||||
# volumes:
|
||||
# - grafana-db:/var/lib/grafana
|
||||
# networks:
|
||||
# - api-grafana-network
|
||||
|
||||
postgres-db:
|
||||
image: postgres:14.1-alpine
|
||||
environment:
|
||||
- APP_NAME=postgres-db
|
||||
- APP_DOMAIN
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
- ./db_migrations/init/:/docker-entrypoint-initdb.d/
|
||||
networks:
|
||||
- postgres-db-network
|
||||
- api-logger-network
|
||||
|
||||
mongo-db:
|
||||
image: mongo:5.0.14
|
||||
environment:
|
||||
- APP_NAME=mongo-db
|
||||
- APP_DOMAIN
|
||||
- MONGO_INITDB_ROOT_USERNAME=mongodb
|
||||
- MONGO_INITDB_ROOT_PASSWORD
|
||||
volumes:
|
||||
- mongodb_data:/data/db
|
||||
networks:
|
||||
- mongodb-db-network
|
||||
- api-logger-network
|
||||
|
||||
# API micro-services
|
||||
identity-svc:
|
||||
image: git.pbiernat.dev/egommerce/identity-svc:latest
|
||||
environment:
|
||||
- APP_NAME=identity-svc
|
||||
- APP_PATH_PREFIX=/identity
|
||||
- APP_DOMAIN
|
||||
- APP_KV_NAMESPACE
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
volumes:
|
||||
- ./db_migrations/identity-svc:/migrations
|
||||
networks:
|
||||
- identity-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
basket-svc:
|
||||
image: git.pbiernat.dev/egommerce/basket-svc:latest
|
||||
environment:
|
||||
- APP_NAME=basket-svc
|
||||
- APP_PATH_PREFIX=/basket
|
||||
- APP_DOMAIN
|
||||
- APP_KV_NAMESPACE
|
||||
- AUTH_HANDLER_URL
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
volumes:
|
||||
- ./db_migrations/basket-svc:/migrations
|
||||
networks:
|
||||
- basket-svc-network
|
||||
# - order-svc-network
|
||||
# - pricing-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
catalog-svc:
|
||||
image: git.pbiernat.dev/egommerce/catalog-svc:latest
|
||||
environment:
|
||||
- APP_NAME=catalog-svc
|
||||
- APP_PATH_PREFIX=/catalog
|
||||
- APP_DOMAIN
|
||||
- APP_KV_NAMESPACE
|
||||
- AUTH_HANDLER_URL
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
volumes:
|
||||
- ./db_migrations/catalog-svc:/migrations
|
||||
networks:
|
||||
- catalog-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
pricing-svc:
|
||||
image: git.pbiernat.dev/egommerce/pricing-svc:latest
|
||||
environment:
|
||||
- APP_NAME=pricing-svc
|
||||
- APP_PATH_PREFIX=/pricing
|
||||
- APP_DOMAIN
|
||||
- APP_KV_NAMESPACE
|
||||
- AUTH_HANDLER_URL
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
volumes:
|
||||
- ./db_migrations/pricing-svc:/migrations
|
||||
networks:
|
||||
- pricing-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
order-svc:
|
||||
image: git.pbiernat.dev/egommerce/order-svc:latest
|
||||
environment:
|
||||
- APP_NAME=order-svc
|
||||
- APP_PATH_PREFIX=/order
|
||||
- APP_DOMAIN
|
||||
- APP_KV_NAMESPACE
|
||||
- AUTH_HANDLER_URL
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
volumes:
|
||||
- ./db_migrations/order-svc:/migrations
|
||||
networks:
|
||||
- order-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
# Workers (Eventbus)
|
||||
basket-worker:
|
||||
image: git.pbiernat.dev/egommerce/basket-worker:latest
|
||||
environment:
|
||||
- APP_NAME=basket-worker
|
||||
- APP_KV_NAMESPACE
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
networks:
|
||||
- basket-worker-network
|
||||
- pricing-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
catalog-worker:
|
||||
image: git.pbiernat.dev/egommerce/catalog-worker:latest
|
||||
environment:
|
||||
- APP_NAME=catalog-worker
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
networks:
|
||||
- catalog-worker-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
pricing-worker:
|
||||
image: git.pbiernat.dev/egommerce/pricing-worker:latest
|
||||
environment:
|
||||
- APP_NAME=pricing-worker
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
networks:
|
||||
- pricing-worker-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
order-worker:
|
||||
image: git.pbiernat.dev/egommerce/order-worker:latest
|
||||
environment:
|
||||
- APP_NAME=order-worker
|
||||
- DATABASE_URL
|
||||
- MONGODB_URL
|
||||
- EVENTBUS_URL
|
||||
networks:
|
||||
- order-worker-network
|
||||
- basket-svc-network
|
||||
- api-gateway-network
|
||||
- api-registry-network
|
||||
- api-eventbus-network
|
||||
- api-logger-network
|
||||
- postgres-db-network
|
||||
- mongodb-db-network
|
||||
|
||||
volumes:
|
||||
postgres_data: ~
|
||||
mongodb_data: ~
|
||||
registry_data: ~
|
||||
eventbus_data: ~
|
||||
eventbus_logs: ~
|
||||
#grafana-db: ~
|
||||
|
||||
networks:
|
||||
# Infrastructure networks
|
||||
api-gateway-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
api-registry-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
api-eventbus-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
api-cache-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
api-logger-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
api-prometheus-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
#api-grafana-network:
|
||||
# driver: overlay
|
||||
# internal: true
|
||||
|
||||
postgres-db-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
mongodb-db-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
# Micro-services networks
|
||||
identity-svc-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
basket-svc-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
catalog-svc-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
pricing-svc-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
order-svc-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
# Workers networks
|
||||
basket-worker-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
catalog-worker-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
pricing-worker-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
|
||||
order-worker-network:
|
||||
driver: overlay
|
||||
#internal: true
|
||||
@@ -1,82 +0,0 @@
|
||||
global:
|
||||
scrape_interval: 10s
|
||||
evaluation_interval: 10s
|
||||
|
||||
# rule_files:
|
||||
# - "first.rules"
|
||||
# - "second.rules"
|
||||
|
||||
scrape_configs:
|
||||
- job_name: prometheus
|
||||
static_configs:
|
||||
- targets: ['localhost:9090']
|
||||
|
||||
- job_name: docker
|
||||
dockerswarm_sd_configs:
|
||||
- host: unix:///var/run/docker.sock
|
||||
role: tasks
|
||||
relabel_configs:
|
||||
- source_labels: [__meta_dockerswarm_service_name, __address__]
|
||||
regex: egommerce_(api-eventbus|api-gateway);(.*):(.*)
|
||||
action: replace
|
||||
replacement: '$2:8084'
|
||||
target_label: __address__
|
||||
# - source_labels: [__meta_dockerswarm_service_name, __address__]
|
||||
# regex: egommerce_api-gateway;(.*):(.*)
|
||||
# action: replace
|
||||
# replacement: '$1:8084'
|
||||
# target_label: __address__
|
||||
# Only keep containers that should be running.
|
||||
- source_labels: [__meta_dockerswarm_service_label_com_docker_stack_namespace]
|
||||
regex: egommerce
|
||||
action: keep
|
||||
- source_labels: [__meta_dockerswarm_task_desired_state]
|
||||
regex: running
|
||||
action: keep
|
||||
# - source_labels: [__meta_dockerswarm_network_name]
|
||||
# regex: ingress
|
||||
# action: keep
|
||||
- source_labels: [__meta_dockerswarm_service_name]
|
||||
action: replace
|
||||
replacement: '$1'
|
||||
target_label: instance
|
||||
# - source_labels: [__meta_dockerswarm_task_desired_state]
|
||||
# regex: running
|
||||
# action: keep
|
||||
|
||||
|
||||
# - job_name: consul
|
||||
# consul_sd_configs:
|
||||
# - server: api-registry:8500
|
||||
# services:
|
||||
# - consul
|
||||
# - basket-server
|
||||
# - catalog-server
|
||||
# - identity-svc
|
||||
# - order-svc
|
||||
# - pricing-svc
|
||||
# - consul
|
||||
|
||||
# - job_name: rabbitmq
|
||||
# consul_sd_configs:
|
||||
# - server: api-registry:8500
|
||||
# services:
|
||||
# - api-eventbus
|
||||
# relabel_configs:
|
||||
# - source_labels: ['__meta_consul_service_address']
|
||||
# replacement: '$1:8084'
|
||||
# target_label: __address__
|
||||
# - source_labels: ['__meta_consul_service_port']
|
||||
# replacement: '8084'
|
||||
# target_label: __meta_consul_service_port
|
||||
|
||||
# - job_name: 'api-gateway'
|
||||
# static_configs:
|
||||
# - targets: ['api-gateway:8084']
|
||||
# - job_name: 'api-eventbus'
|
||||
# static_configs:
|
||||
# - targets: ['api-eventbus:8084']
|
||||
|
||||
# - job_name: 'catalog-svc'
|
||||
# static_configs:
|
||||
# - targets: ['catalog-svc:8084']
|
||||
106
deploy/k8s/api-cache.yml
Normal file
106
deploy/k8s/api-cache.yml
Normal file
@@ -0,0 +1,106 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: api-cache-pv
|
||||
namespace: egommerce
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: api-cache-pv
|
||||
hostPath:
|
||||
path: "/home/keedosn/.egommerce/redis" # Ensure this path exists on the node
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: api-cache-pvc
|
||||
namespace: egommerce
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
storageClassName: api-cache-pv
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: api-cache
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-cache
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: api-cache
|
||||
ports:
|
||||
- port: 6379
|
||||
nodePort: 31300
|
||||
# ---
|
||||
# apiVersion: v1
|
||||
# kind: Service
|
||||
# metadata:
|
||||
# name: api-cache-metrics
|
||||
# namespace: egommerce
|
||||
# labels:
|
||||
# app: api-cache
|
||||
# spec:
|
||||
# type: NodePort
|
||||
# selector:
|
||||
# app: api-cache
|
||||
# ports:
|
||||
# - port: 9121
|
||||
# nodePort: 31301
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-cache
|
||||
namespace: egommerce
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-cache
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-cache
|
||||
spec:
|
||||
containers:
|
||||
- name: api-cache
|
||||
image: git.ego.freeddns.org/egommerce/api-cache:dev
|
||||
imagePullPolicy: Always
|
||||
command: [
|
||||
"redis-server"
|
||||
]
|
||||
args: [
|
||||
"/etc/redis.conf"
|
||||
]
|
||||
env:
|
||||
- name: APP_NAME
|
||||
value: api-cache
|
||||
- name: REDIS_PASSWORD
|
||||
value: "12345678"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: 512M
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
volumeMounts:
|
||||
- name: api-cache-data
|
||||
mountPath: /data
|
||||
- name: api-cache-metrics
|
||||
image: oliver006/redis_exporter:latest
|
||||
args:
|
||||
- --redis.addr=redis://api-cache:6379
|
||||
ports:
|
||||
- containerPort: 9121
|
||||
volumes:
|
||||
- name: api-cache-data
|
||||
persistentVolumeClaim:
|
||||
claimName: api-cache-pvc
|
||||
70
deploy/k8s/api-eventbus.yml
Normal file
70
deploy/k8s/api-eventbus.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: api-eventbus
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-eventbus
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: api-eventbus
|
||||
ports:
|
||||
- name: api-eventbus
|
||||
protocol: TCP
|
||||
port: 5672
|
||||
nodePort: 31200
|
||||
- name: api-eventbus-mngmnt
|
||||
protocol: TCP
|
||||
port: 15672
|
||||
nodePort: 31299
|
||||
# - name: api-eventbus-metrics
|
||||
# protocol: TCP
|
||||
# port: 15692
|
||||
# nodePort: 31201
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-eventbus
|
||||
namespace: egommerce
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-eventbus
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-eventbus
|
||||
spec:
|
||||
containers:
|
||||
- name: api-eventbus
|
||||
image: git.ego.freeddns.org/egommerce/api-eventbus:dev
|
||||
imagePullPolicy: Always
|
||||
command: [
|
||||
"rabbitmq-server"
|
||||
]
|
||||
env:
|
||||
- name: APP_NAME
|
||||
value: api-eventbus
|
||||
- name: RABBITMQ_ERLANG_COOKIE
|
||||
value: rabbitmq
|
||||
volumeMounts:
|
||||
- name: eventbus-data
|
||||
mountPath: /var/lib/rabbitmq
|
||||
- name: eventbus-logs
|
||||
mountPath: /var/log/rabbitmq
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: 1G
|
||||
ports:
|
||||
- containerPort: 5672
|
||||
- containerPort: 15672
|
||||
- containerPort: 15692
|
||||
volumes:
|
||||
- name: eventbus-data
|
||||
emptyDir:
|
||||
- name: eventbus-logs
|
||||
emptyDir:
|
||||
122
deploy/k8s/api-gateway.yml
Normal file
122
deploy/k8s/api-gateway.yml
Normal file
@@ -0,0 +1,122 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: api-gateway
|
||||
namespace: egommerce
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
- name: api-gateway-https
|
||||
port: 8443
|
||||
nodePort: 31800
|
||||
- name: api-gateway-stats
|
||||
port: 1024
|
||||
nodePort: 31899
|
||||
selector:
|
||||
app: api-gateway
|
||||
---
|
||||
kind: IngressClass
|
||||
apiVersion: networking.k8s.io/v1
|
||||
metadata:
|
||||
name: haproxy
|
||||
namespace: egommerce
|
||||
spec:
|
||||
controller: haproxy.org/ingress-controller/haproxy
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: api-gateway
|
||||
namespace: egommerce
|
||||
annotations:
|
||||
haproxy.org/server-ssl: "true"
|
||||
haproxy.org/server-ca: "egommerce/ca-root"
|
||||
haproxy.org/path-rewrite: |
|
||||
/api/identity/(.*) /\1
|
||||
/api/catalog/(.*) /\1
|
||||
spec:
|
||||
ingressClassName: haproxy
|
||||
tls:
|
||||
- secretName: api-gateway-cert
|
||||
hosts:
|
||||
- egommerce.io # CHANGE TO PROD DOMAIN
|
||||
rules:
|
||||
- host: egommerce.io # CHANGE TO PROD DOMAIN
|
||||
http:
|
||||
paths:
|
||||
- path: /api/identity
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: identity-svc
|
||||
port:
|
||||
number: 443
|
||||
- path: /api/catalog
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: catalog-svc
|
||||
port:
|
||||
number: 443
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-gateway
|
||||
namespace: egommerce
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-gateway
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-gateway
|
||||
spec:
|
||||
restartPolicy: Always
|
||||
containers:
|
||||
- name: api-gateway
|
||||
image: git.ego.freeddns.org/egommerce/api-gateway:dev
|
||||
imagePullPolicy: Always
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 256Mi
|
||||
ports:
|
||||
- containerPort: 8443
|
||||
args:
|
||||
- --publish-service=egommerce/api-gateway
|
||||
- --ingress.class=haproxy
|
||||
- --https-bind-port=8443
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
apiVersion: v1
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
apiVersion: v1
|
||||
fieldPath: metadata.namespace
|
||||
- name: POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
apiVersion: v1
|
||||
fieldPath: status.podIP
|
||||
securityContext:
|
||||
capabilities:
|
||||
add:
|
||||
- NET_BIND_SERVICE
|
||||
drop:
|
||||
- ALL
|
||||
# runAsUser: 1000
|
||||
# runAsGroup: 1000
|
||||
# runAsNonRoot: true
|
||||
# allowPrivilegeEscalation: false
|
||||
# seccompProfile:
|
||||
# type: RuntimeDefault
|
||||
432
deploy/k8s/api-logger.yml
Normal file
432
deploy/k8s/api-logger.yml
Normal file
@@ -0,0 +1,432 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: api-logger-loki
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-loki
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: api-logger-loki
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 3100
|
||||
nodePort: 31401
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-logger-loki
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-loki
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-logger-loki
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-logger-loki
|
||||
spec:
|
||||
containers:
|
||||
- name: api-logger-loki
|
||||
image: git.ego.freeddns.org/egommerce/api-logger-loki:dev
|
||||
imagePullPolicy: Always
|
||||
args:
|
||||
- "-config.file=/etc/loki/loki.yaml"
|
||||
ports:
|
||||
- containerPort: 3100
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: api-logger-promtail-ac
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-promtail-ac
|
||||
annotations: {}
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: api-logger-promtail
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-promtail
|
||||
spec:
|
||||
revisionHistoryLimit: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-logger-promtail
|
||||
# updateStrategy:
|
||||
# type: RollingUpdate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-logger-promtail
|
||||
annotations:
|
||||
prometheus.io/port: http-metrics
|
||||
prometheus.io/scrape: "true"
|
||||
spec:
|
||||
serviceAccountName: api-logger-promtail-ac
|
||||
automountServiceAccountToken: true
|
||||
containers:
|
||||
- name: api-logger-promtail
|
||||
image: git.ego.freeddns.org/egommerce/api-logger-promtail:dev
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: HOSTNAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: GOMAXPROCS
|
||||
valueFrom:
|
||||
resourceFieldRef:
|
||||
divisor: '1'
|
||||
resource: limits.cpu
|
||||
- name: GOMEMLIMIT
|
||||
valueFrom:
|
||||
resourceFieldRef:
|
||||
divisor: '1'
|
||||
resource: limits.memory
|
||||
ports:
|
||||
- name: promtail-http
|
||||
containerPort: 3101
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /ready
|
||||
port: promtail-http
|
||||
initialDelaySeconds: 45
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /ready
|
||||
port: promtail-http
|
||||
initialDelaySeconds: 45
|
||||
volumeMounts:
|
||||
# - name: api-logger-promtail-config
|
||||
# mountPath: /etc/promtail
|
||||
- name: api-logger-promtail-run
|
||||
mountPath: /run/promtail
|
||||
- name: api-logger-promtail-varlog
|
||||
mountPath: /var/log
|
||||
readOnly: true
|
||||
- name: api-logger-promtail-docker
|
||||
mountPath: /var/lib/docker/containers
|
||||
readOnly: true
|
||||
- name: api-logger-promtail-tmp
|
||||
mountPath: /tmp
|
||||
subPath: tmp
|
||||
readOnly: false
|
||||
securityContext:
|
||||
privileged: true
|
||||
readOnlyRootFilesystem: true
|
||||
runAsUser: 0
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
terminationGracePeriodSeconds: 60
|
||||
volumes:
|
||||
- name: api-logger-promtail-run
|
||||
hostPath:
|
||||
path: /run/promtail
|
||||
- name: api-logger-promtail-varlog
|
||||
hostPath:
|
||||
path: /var/log
|
||||
- name: api-logger-promtail-docker
|
||||
hostPath:
|
||||
path: /var/lib/docker/containers
|
||||
- name: api-logger-promtail-tmp
|
||||
emptyDir:
|
||||
sizeLimit: 1Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: api-logger-prometheus-pv
|
||||
namespace: egommerce
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: api-logger-prometheus-pv
|
||||
hostPath:
|
||||
path: "/home/keedosn/.egommerce/prometheus" # Ensure this path exists on the node
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: api-logger-prometheus-pvc
|
||||
namespace: egommerce
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
storageClassName: api-logger-prometheus-pv
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: api-logger-prometheus
|
||||
namespace: egommerce
|
||||
labels:
|
||||
name: api-logger-prometheus
|
||||
annotations: {}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: api-logger-prometheus
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-prometheus
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: api-logger-prometheus
|
||||
ports:
|
||||
- name: api-logger-prometheus
|
||||
protocol: TCP
|
||||
port: 9090
|
||||
nodePort: 31402
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-logger-prometheus
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-prometheus
|
||||
spec:
|
||||
# revisionHistoryLimit: 1
|
||||
# replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-logger-prometheus
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-logger-prometheus
|
||||
annotations:
|
||||
prometheus.io/scrape: "true"
|
||||
prometheus.io/port: prometheus-http
|
||||
spec:
|
||||
serviceAccountName: api-logger-prometheus
|
||||
automountServiceAccountToken: true
|
||||
securityContext:
|
||||
runAsGroup: 10001
|
||||
runAsUser: 10001
|
||||
runAsNonRoot: true
|
||||
containers:
|
||||
- name: api-logger-prometheus
|
||||
image: git.ego.freeddns.org/egommerce/api-logger-prometheus:dev
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: GOMAXPROCS
|
||||
valueFrom:
|
||||
resourceFieldRef:
|
||||
divisor: '1'
|
||||
resource: limits.cpu
|
||||
- name: GOMEMLIMIT
|
||||
valueFrom:
|
||||
resourceFieldRef:
|
||||
divisor: '1'
|
||||
resource: limits.memory
|
||||
args:
|
||||
# - '--storage.tsdb.retention.time=15d'
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus/data/'
|
||||
# - '--web.console.libraries=/etc/prometheus/console_libraries'
|
||||
# - '--web.console.templates=/etc/prometheus/consoles'
|
||||
# - '--enable-feature=concurrent-rule-eval,promql-experimental-functions,exemplar-storage,promql-per-step-stats,native-histograms'
|
||||
# - '--web.enable-remote-write-receiver'
|
||||
# - '--web.enable-otlp-receiver'
|
||||
# - '--web.enable-lifecycle'
|
||||
- '--log.level=info'
|
||||
# - '--log.format=json'
|
||||
ports:
|
||||
- name: prometheus-http
|
||||
containerPort: 9090
|
||||
# livenessProbe:
|
||||
# httpGet:
|
||||
# path: /-/healthy
|
||||
# port: prometheus-http
|
||||
# readinessProbe:
|
||||
# httpGet:
|
||||
# path: /-/ready
|
||||
# port: prometheus-http
|
||||
resources:
|
||||
limits:
|
||||
cpu: 150m
|
||||
memory: 894Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
volumeMounts:
|
||||
# - name: config-volume
|
||||
# mountPath: /etc/prometheus
|
||||
# - name: config-volume
|
||||
# mountPath: /etc/config/alerting_rules.yml
|
||||
# subPath: alerting_rules.yml
|
||||
- name: api-logger-prometheus-storage
|
||||
mountPath: /prometheus/data
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
privileged: false
|
||||
readOnlyRootFilesystem: false #true DEFAULT !!!
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
volumes:
|
||||
- name: api-logger-prometheus-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: api-logger-prometheus-pvc
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: api-logger-grafana
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-grafana
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: api-logger-grafana
|
||||
ports:
|
||||
- name: api-logger-grafana-api
|
||||
protocol: TCP
|
||||
port: 3000
|
||||
nodePort: 31400
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: api-logger-grafana-pv
|
||||
namespace: egommerce
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: api-logger-grafana-pv
|
||||
hostPath:
|
||||
path: "/home/keedosn/.egommerce/grafana" # Ensure this path exists on the node
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: api-logger-grafana-pvc
|
||||
namespace: egommerce
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
storageClassName: api-logger-grafana-pv
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-logger-grafana
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: api-logger-grafana
|
||||
spec:
|
||||
revisionHistoryLimit: 1
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-logger-grafana
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-logger-grafana
|
||||
annotations:
|
||||
prometheus.io/scrape: "true"
|
||||
prometheus.io/port: "3000"
|
||||
filter.by.port.name: "true"
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
runAsGroup: 65534
|
||||
runAsUser: 65534
|
||||
initContainers:
|
||||
- name: curl
|
||||
image: curlimages/curl:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- /bin/sh
|
||||
args:
|
||||
- -c
|
||||
- |
|
||||
which curl
|
||||
volumeMounts:
|
||||
- name: api-logger-grafana-storage
|
||||
mountPath: /var/lib/grafana
|
||||
subPath: grafana
|
||||
containers:
|
||||
- name: api-logger-grafana
|
||||
image: git.ego.freeddns.org/egommerce/api-logger-grafana:dev
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: GOMAXPROCS
|
||||
valueFrom:
|
||||
resourceFieldRef:
|
||||
divisor: '1'
|
||||
resource: limits.cpu
|
||||
- name: GOMEMLIMIT
|
||||
valueFrom:
|
||||
resourceFieldRef:
|
||||
divisor: '1'
|
||||
resource: limits.memory
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 768Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 512Mi
|
||||
volumeMounts:
|
||||
- name: api-logger-grafana-storage
|
||||
mountPath: /var/lib/grafana
|
||||
subPath: grafana
|
||||
- name: api-logger-grafana-storage
|
||||
mountPath: /var/lib/grafana/dashboards
|
||||
subPath: dashboards
|
||||
- name: api-logger-grafana-storage
|
||||
mountPath: /tmp
|
||||
subPath: tmp
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
privileged: false
|
||||
readOnlyRootFilesystem: true
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
volumes:
|
||||
- name: api-logger-grafana-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: api-logger-grafana-pvc
|
||||
134
deploy/k8s/catalog-svc.yml
Normal file
134
deploy/k8s/catalog-svc.yml
Normal file
@@ -0,0 +1,134 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: catalog-svc
|
||||
namespace: egommerce
|
||||
annotations:
|
||||
haproxy.org/check: "true"
|
||||
# haproxy.org/server-ca: "egommerce/ca-root"
|
||||
labels:
|
||||
app: catalog-svc
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: catalog-svc
|
||||
ports:
|
||||
- name: catalog-svc
|
||||
port: 443
|
||||
nodePort: 31820
|
||||
# - name: catalog-svc-metrics
|
||||
# port: 9090
|
||||
# nodePort: 31811
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: catalog-svc
|
||||
namespace: egommerce
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxSurge: 1 # Number of extra pods that can be created during update
|
||||
maxUnavailable: 1 # Max number of pods that can be unavailable during update
|
||||
selector:
|
||||
matchLabels:
|
||||
app: catalog-svc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: catalog-svc
|
||||
spec:
|
||||
# initContainers:
|
||||
# - name: catalog-svc-init
|
||||
# image: busybox:1.28
|
||||
# command: [
|
||||
# 'sh',
|
||||
# '-c',
|
||||
# '/bin/migrate'
|
||||
# ]
|
||||
containers:
|
||||
- name: catalog-svc
|
||||
image: git.ego.freeddns.org/egommerce/catalog-svc:dev
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: APP_NAME
|
||||
value: catalog-svc
|
||||
- name: APP_DOMAIN
|
||||
value: catalog-svc.egommerce.local
|
||||
- name: APP_PATH_PREFIX
|
||||
value: /catalog
|
||||
- name: API_EVENTBUS_URL
|
||||
value: amqp://guest:guest@api-eventbus:5672
|
||||
- name: API_MONGODB_URL
|
||||
value: mongodb://mongodb:12345678@mongo-db:27017
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
scheme: HTTPS
|
||||
port: catalog-svc
|
||||
path: /health
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
failureThreshold: 1
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
scheme: HTTPS
|
||||
port: catalog-svc
|
||||
path: /health
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
failureThreshold: 1
|
||||
volumeMounts:
|
||||
- name: catalog-cert
|
||||
mountPath: /certs/catalog-svc.crt
|
||||
readOnly: true
|
||||
- name: catalog-key
|
||||
mountPath: /certs/catalog-svc.key
|
||||
readOnly: true
|
||||
- name: catalog-migrations
|
||||
mountPath: /migrations
|
||||
readOnly: true
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 256Mi
|
||||
ports:
|
||||
- name: catalog-svc
|
||||
containerPort: 443
|
||||
# - name: catalog-svc-metrics
|
||||
# image: prom/prometheus-exporter:latest
|
||||
# ports:
|
||||
# - containerPort: 9090
|
||||
# args:
|
||||
# - --web.listen-address=:9090
|
||||
# - --web.telemetry-path=/metrics
|
||||
- name: identity-scheduler # Scheduler Container
|
||||
image: git.ego.freeddns.org/egommerce/identity-svc:dev
|
||||
imagePullPolicy: Always
|
||||
command: [
|
||||
"/usr/local/bin/scheduler"
|
||||
]
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 256Mi
|
||||
volumes:
|
||||
- name: catalog-cert
|
||||
hostPath:
|
||||
path: /egommerce/stack/deploy/certs/catalog-svc/catalog-svc.crt
|
||||
type: File
|
||||
- name: catalog-key
|
||||
hostPath:
|
||||
path: /egommerce/stack/deploy/certs/catalog-svc/catalog-svc.key
|
||||
type: File
|
||||
- name: catalog-migrations
|
||||
hostPath:
|
||||
path: /egommerce/stack/deploy/db_migrations/catalog-svc
|
||||
type: Directory
|
||||
119
deploy/k8s/db-postgres.yml
Normal file
119
deploy/k8s/db-postgres.yml
Normal file
@@ -0,0 +1,119 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: db-postgres-pv
|
||||
namespace: egommerce
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: db-postgres-pv
|
||||
hostPath:
|
||||
path: "/home/keedosn/.egommerce/postgres" # Ensure this path exists on the node
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: db-postgres-pvc
|
||||
namespace: egommerce
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
storageClassName: db-postgres-pv
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: db-postgres
|
||||
namespace: egommerce
|
||||
labels:
|
||||
app: db-postgres
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: db-postgres
|
||||
ports:
|
||||
- name: db-postgres
|
||||
protocol: TCP
|
||||
port: 5432
|
||||
nodePort: 31500
|
||||
# ---
|
||||
# apiVersion: v1
|
||||
# kind: Service
|
||||
# metadata:
|
||||
# name: db-postgres-metrics
|
||||
# namespace: egommerce
|
||||
# labels:
|
||||
# app: db-postgres
|
||||
# spec:
|
||||
# type: NodePort
|
||||
# selector:
|
||||
# app: db-postgres
|
||||
# ports:
|
||||
# - name: db-postgres
|
||||
# protocol: TCP
|
||||
# port: 9187
|
||||
# nodePort: 31501
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: db-postgres
|
||||
namespace: egommerce
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: db-postgres
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: db-postgres
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: 70 # postgres user
|
||||
fsGroup: 70 # postgres user
|
||||
# remember to change perms and owner of ~/.egommerce/postgres directory
|
||||
containers:
|
||||
- name: db-postgres
|
||||
image: git.ego.freeddns.org/egommerce/db-postgres:dev
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: APP_NAME
|
||||
value: db-postgres
|
||||
- name: APP_DOMAIN
|
||||
value: db-postgres.egommerce.local
|
||||
- name: POSTGRES_USER
|
||||
value: egommerce
|
||||
- name: POSTGRES_DB
|
||||
value: egommerce
|
||||
- name: POSTGRES_PASSWORD
|
||||
# value: H5Gd7^37*Hka*a72
|
||||
value: "12345678"
|
||||
- name: PGDATA
|
||||
value: /var/lib/postgresql/data
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: 512M
|
||||
ports:
|
||||
- containerPort: 5432
|
||||
volumeMounts:
|
||||
- name: db-postgres-data
|
||||
mountPath: /var/lib/postgresql/data
|
||||
# subPath: data
|
||||
- name: db-postgres-metrics
|
||||
image: prometheuscommunity/postgres-exporter:latest
|
||||
ports:
|
||||
- containerPort: 9187
|
||||
env:
|
||||
- name: DATA_SOURCE_NAME
|
||||
value: "postgresql://postgres:12345678@db-postgres:5432/egommerce" #?sslmode=disable
|
||||
volumes:
|
||||
- name: db-postgres-data
|
||||
persistentVolumeClaim:
|
||||
claimName: db-postgres-pvc
|
||||
134
deploy/k8s/identity-svc.yml
Normal file
134
deploy/k8s/identity-svc.yml
Normal file
@@ -0,0 +1,134 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: identity-svc
|
||||
namespace: egommerce
|
||||
annotations:
|
||||
haproxy.org/check: "true"
|
||||
# haproxy.org/server-ca: "egommerce/ca-root"
|
||||
labels:
|
||||
app: identity-svc
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: identity-svc
|
||||
ports:
|
||||
- name: identity-svc
|
||||
port: 443
|
||||
nodePort: 31810
|
||||
# - name: identity-svc-metrics
|
||||
# port: 9090
|
||||
# nodePort: 31811
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: identity-svc
|
||||
namespace: egommerce
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxSurge: 1 # Number of extra pods that can be created during update
|
||||
maxUnavailable: 1 # Max number of pods that can be unavailable during update
|
||||
selector:
|
||||
matchLabels:
|
||||
app: identity-svc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: identity-svc
|
||||
spec:
|
||||
# initContainers:
|
||||
# - name: identity-svc-init
|
||||
# image: busybox:1.28
|
||||
# command: [
|
||||
# 'sh',
|
||||
# '-c',
|
||||
# '/bin/migrate'
|
||||
# ]
|
||||
containers:
|
||||
- name: identity-svc
|
||||
image: git.ego.freeddns.org/egommerce/identity-svc:dev
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: APP_NAME
|
||||
value: identity-svc
|
||||
- name: APP_DOMAIN
|
||||
value: identity-svc.egommerce.local
|
||||
- name: APP_PATH_PREFIX
|
||||
value: /identity
|
||||
- name: API_EVENTBUS_URL
|
||||
value: amqp://guest:guest@api-eventbus:5672
|
||||
- name: API_MONGODB_URL
|
||||
value: mongodb://mongodb:12345678@mongo-db:27017
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
scheme: HTTPS
|
||||
port: identity-svc
|
||||
path: /health
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
failureThreshold: 1
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
scheme: HTTPS
|
||||
port: identity-svc
|
||||
path: /health
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
failureThreshold: 1
|
||||
volumeMounts:
|
||||
- name: identity-cert
|
||||
mountPath: /certs/identity-svc.crt
|
||||
readOnly: true
|
||||
- name: identity-key
|
||||
mountPath: /certs/identity-svc.key
|
||||
readOnly: true
|
||||
- name: identity-migrations
|
||||
mountPath: /migrations
|
||||
readOnly: true
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 256Mi
|
||||
ports:
|
||||
- name: identity-svc
|
||||
containerPort: 443
|
||||
# - name: identity-svc-metrics
|
||||
# image: prom/prometheus-exporter:latest
|
||||
# ports:
|
||||
# - containerPort: 9090
|
||||
# args:
|
||||
# - --web.listen-address=:9090
|
||||
# - --web.telemetry-path=/metrics
|
||||
- name: identity-chronos # Scheduler Container
|
||||
image: git.ego.freeddns.org/egommerce/identity-svc:dev
|
||||
imagePullPolicy: Always
|
||||
command: [
|
||||
"/usr/local/bin/chronos"
|
||||
]
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 256Mi
|
||||
volumes:
|
||||
- name: identity-cert
|
||||
hostPath:
|
||||
path: /egommerce/stack/deploy/certs/identity-svc/identity-svc.crt
|
||||
type: File
|
||||
- name: identity-key
|
||||
hostPath:
|
||||
path: /egommerce/stack/deploy/certs/identity-svc/identity-svc.key
|
||||
type: File
|
||||
- name: identity-migrations
|
||||
hostPath:
|
||||
path: /egommerce/stack/deploy/db_migrations/identity-svc
|
||||
type: Directory
|
||||
6
deploy/k8s/namespace.yml
Normal file
6
deploy/k8s/namespace.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
kind: Namespace
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: egommerce
|
||||
labels:
|
||||
name: egommerce
|
||||
8
deploy/k8s/secret.yml
Normal file
8
deploy/k8s/secret.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: regcred
|
||||
namespace: egommerce
|
||||
data:
|
||||
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSJnaXQuZWdvLmNsb3VkbnMuYmUiOiB7CgkJCSJhdXRoIjogImEyVmxaRzl6YmpwWGIyeHVaVFZQY0hKdlozSmhiVzkzWVc1cFpVQT0iCgkJfSwKCQkiaHR0cHM6Ly9pbmRleC5kb2NrZXIuaW8vdjEvIjogewoJCQkiYXV0aCI6ICJhMlZsWkc5emJqcGtiMk5yWlhKdmQyVTFiMkp5WVhwNSIKCQl9Cgl9Cn0=
|
||||
type: kubernetes.io/dockerconfigjson
|
||||
@@ -1,60 +0,0 @@
|
||||
# #!/bin/sh
|
||||
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./cert/identity-svc-server.key -out ./cert/identity-svc-server.cert \
|
||||
-addext "subjectAltName = DNS:identity-svc"
|
||||
# ^^ GENERATE CERT FOR BACKEND SERVICE (on client side - in traefik - we dont need DNS domain... for now...)
|
||||
|
||||
|
||||
# if [ -z "$SERVICE" ]; then echo "set SERVICE var"; exit 1; fi
|
||||
# if [ -z "$CA_ROOT" ]; then echo "set CA_ROOT var"; exit 1; fi
|
||||
# if [ -z "$DOMAIN" ]; then echo "set DOMAIN var"; exit 1; fi
|
||||
|
||||
# PASSWORD=V3ryS3cr3tP4ssw0rd
|
||||
|
||||
# # sample for registry server (with api-gateway-svc as a client) but using FDN...
|
||||
# # keytool -genkey -alias api-registry-svc -dname cn=$DOMAIN -validity 365 -keystore tmp/api-registry-svc.p12 -keyalg RSA -keysize 2048 -storepass $PASSWORD -ext "SAN:c=DNS:registry.egommerce.local,IP:127.0.0.1"
|
||||
# # keytool -genkey -alias myClientCertificate -dname cn=$DOMAIN -validity 365 -keystore tmp/myClientCertificate.p12 -keyalg RSA -keysize 2048 -storepass $PASSWORD -ext "SAN:c=DNS:registry.egommerce.local,IP:127.0.0.1"
|
||||
|
||||
# # keytool -export -alias myClientCertificate -file tmp/myClientCertificate.crt -keystore tmp/myClientCertificate.p12 -storepass $PASSWORD
|
||||
# # keytool -export -alias api-registry-svc -file tmp/api-registry-svc.crt -keystore tmp/api-registry-svc.p12 -storepass $PASSWORD
|
||||
|
||||
# # keytool -import -alias myClientCertificate -file tmp/myClientCertificate.crt -keystore tmp/api-registry-svc.p12 -storepass $PASSWORD # aka myCertificate.p12
|
||||
|
||||
# # echo "Done."
|
||||
# # exit 0
|
||||
|
||||
# if [ -d "$SERVICE" ]; then
|
||||
# echo "$SERVICE directory exists... Quitting."
|
||||
# exit 1;
|
||||
# fi
|
||||
|
||||
# if [ ! -f "$SERVICE" ]; then
|
||||
# mkdir -p $SERVICE
|
||||
# fi
|
||||
|
||||
# echo "===================================================================="
|
||||
# echo "Fake third-party chain generated. Now generating keystore.p12 ..."
|
||||
# echo "===================================================================="
|
||||
|
||||
# # generate private keys (for server)
|
||||
# keytool -genkeypair -alias $SERVICE -dname cn=$DOMAIN -validity 365 -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -keypass $PASSWORD -storepass $PASSWORD
|
||||
|
||||
# # generate a certificate for server signed by ca (root -> ca -> server)
|
||||
# keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -certreq -alias $SERVICE \
|
||||
# | keytool -storetype PKCS12 -keystore "$CA_ROOT/ca.p12" -storepass $PASSWORD -gencert -alias ca -ext ku:c=dig,keyEnc -ext "SAN:c=DNS:$DOMAIN,IP:127.0.0.1" -ext eku=sa,ca -rfc > "$SERVICE/$SERVICE.pem"
|
||||
|
||||
# # import server cert chain into ${SERVICE}.p12
|
||||
# keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -importcert -trustcacerts -noprompt -alias root -file "$CA_ROOT/root.pem"
|
||||
# keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -importcert -alias ca -file "$CA_ROOT/ca.pem"
|
||||
# keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -importcert -alias $SERVICE -file "$SERVICE/$SERVICE.pem"
|
||||
|
||||
|
||||
# # DEPRECATED - duplicated above section...
|
||||
# # echo "================================================="
|
||||
# # echo "Keystore generated. Now generating truststore ..."
|
||||
# # echo "================================================="
|
||||
|
||||
# # import server cert chain into my-truststore.p12
|
||||
# # keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -importcert -trustcacerts -noprompt -alias root -file "$CA_ROOT/root.pem"
|
||||
# # keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -importcert -alias ca -file "$CA_ROOT/ca.pem"
|
||||
# # keytool -storetype PKCS12 -keystore "$SERVICE/keystore.p12" -storepass $PASSWORD -importcert -alias $SERVICE -file "$SERVICE/$SERVICE.pem"
|
||||
@@ -1,120 +0,0 @@
|
||||
upstream egommerce-api-gw {
|
||||
server 127.0.0.1:48443;
|
||||
}
|
||||
|
||||
upstream egommerce-api-gw-dashboard {
|
||||
server 127.0.0.1:48444;
|
||||
}
|
||||
|
||||
upstream egommerce-api-registry-ui {
|
||||
server 127.0.0.1:48445;
|
||||
}
|
||||
|
||||
upstream egommerce-api-eventbus-mngmt {
|
||||
server 127.0.0.1:48446;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
ssl_certificate /etc/letsencrypt/live/admin.egommerce.pbiernat.dev/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/admin.egommerce.pbiernat.dev/privkey.pem;
|
||||
|
||||
server_name admin.egommerce.pbiernat.dev;
|
||||
|
||||
# Traefik redirects
|
||||
location /dashboard {
|
||||
if ($http_referer ~ (/gateway)) {
|
||||
proxy_pass http://egommerce-api-gw-dashboard;
|
||||
}
|
||||
}
|
||||
location /api {
|
||||
if ($http_referer ~ (/gateway)) {
|
||||
proxy_pass http://egommerce-api-gw-dashboard;
|
||||
}
|
||||
}
|
||||
|
||||
location /gateway/ {
|
||||
proxy_pass http://egommerce-api-gw-dashboard/dashboard/;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
}
|
||||
|
||||
# Consul redirects
|
||||
location /ui {
|
||||
if ($http_referer ~ (/registry)) {
|
||||
proxy_pass http://egommerce-api-registry-ui;
|
||||
}
|
||||
}
|
||||
|
||||
location /v1 {
|
||||
if ($http_referer ~ (/registry)) {
|
||||
proxy_pass http://egommerce-api-registry-ui;
|
||||
}
|
||||
}
|
||||
|
||||
location /registry {
|
||||
proxy_pass http://egommerce-api-registry-ui;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
}
|
||||
|
||||
|
||||
# RabbitMQ Mngmt redirects
|
||||
location /eventbus {
|
||||
return 302 /eventbus/;
|
||||
}
|
||||
location ~* /eventbus/api/(.*?)/(.*) {
|
||||
proxy_pass http://egommerce-api-eventbus-mngmt/api/$1/%2F/$2?$query_string;
|
||||
proxy_buffering off;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
location ~* /eventbus/(.*) {
|
||||
rewrite ^/eventbus/(.*)$ /$1 break;
|
||||
proxy_pass http://egommerce-api-eventbus-mngmt;
|
||||
proxy_buffering off;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
error_log /var/log/nginx/admin-egommerce.pbiernat.dev-error.log;
|
||||
access_log /var/log/nginx/admin-egommerce.pbiernat.dev-access.log combined;
|
||||
}
|
||||
|
||||
#server {
|
||||
# listen 443 ssl;
|
||||
# ssl_certificate /etc/letsencrypt/live/egommerce.pbiernat.dev/fullchain.pem;
|
||||
# ssl_certificate_key /etc/letsencrypt/live/egommerce.pbiernat.dev/privkey.pem;
|
||||
#
|
||||
# server_name egommerce.pbiernat.dev;
|
||||
#
|
||||
# # Pass all requests to the API Gateway
|
||||
# location / {
|
||||
# proxy_pass https://egommerce-api-gw;
|
||||
# proxy_http_version 1.1;
|
||||
# proxy_pass_header Server;
|
||||
# proxy_set_header Host $host;
|
||||
# proxy_set_header X-Real-IP $remote_addr;
|
||||
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# proxy_set_header X-Forwarded-Proto $scheme;
|
||||
# client_max_body_size 0;
|
||||
# }
|
||||
#
|
||||
# error_log /var/log/nginx/egommerce.pbiernat.dev-error.log;
|
||||
# access_log /var/log/nginx/egommerce.pbiernat.dev-access.log combined;
|
||||
#}
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
upstream egommerce-api-gw {
|
||||
server 127.0.0.1:48443;
|
||||
}
|
||||
|
||||
upstream egommerce-api-gw-dashboard {
|
||||
server 127.0.0.1:48444;
|
||||
}
|
||||
|
||||
upstream egommerce-api-registry-ui {
|
||||
server 127.0.0.1:48445;
|
||||
}
|
||||
|
||||
upstream egommerce-api-eventbus-mngmt {
|
||||
server 127.0.0.1:48446;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
ssl_certificate /home/keedosn/workspace/golang/src/git.pbiernat.dev/egommerce/stack/deploy/certs/api-gateway/localhost.cert;
|
||||
ssl_certificate_key /home/keedosn/workspace/golang/src/git.pbiernat.dev/egommerce/stack/deploy/certs/api-gateway/localhost.key;
|
||||
|
||||
server_name egommerce.local;
|
||||
|
||||
# Traefik redirects
|
||||
location /dashboard {
|
||||
if ($http_referer ~ (/gateway)) {
|
||||
proxy_pass http://egommerce-api-gw-dashboard;
|
||||
}
|
||||
}
|
||||
location /api {
|
||||
if ($http_referer ~ (/gateway)) {
|
||||
proxy_pass http://egommerce-api-gw-dashboard;
|
||||
}
|
||||
}
|
||||
|
||||
location /gateway/ {
|
||||
proxy_pass http://egommerce-api-gw-dashboard/dashboard/;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
}
|
||||
|
||||
# Consul redirects
|
||||
location /ui {
|
||||
if ($http_referer ~ (/registry)) {
|
||||
proxy_pass http://egommerce-api-registry-ui;
|
||||
}
|
||||
}
|
||||
|
||||
location /v1 {
|
||||
if ($http_referer ~ (/registry)) {
|
||||
proxy_pass http://egommerce-api-registry-ui;
|
||||
}
|
||||
}
|
||||
|
||||
location /registry {
|
||||
proxy_pass http://egommerce-api-registry-ui;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
}
|
||||
|
||||
|
||||
# RabbitMQ Mngmt redirects
|
||||
location /eventbus {
|
||||
return 302 /eventbus/;
|
||||
}
|
||||
location ~* /eventbus/api/(.*?)/(.*) {
|
||||
proxy_pass http://egommerce-api-eventbus-mngmt/api/$1/%2F/$2?$query_string;
|
||||
proxy_buffering off;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
location ~* /eventbus/(.*) {
|
||||
rewrite ^/eventbus/(.*)$ /$1 break;
|
||||
proxy_pass http://egommerce-api-eventbus-mngmt;
|
||||
proxy_buffering off;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# Pass all requests to the API Gateway
|
||||
location / {
|
||||
proxy_pass https://egommerce-api-gw;
|
||||
proxy_http_version 1.1;
|
||||
proxy_pass_header Server;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
}
|
||||
|
||||
error_log /var/log/nginx/egommerce.local-error.log;
|
||||
access_log /var/log/nginx/egommerce.local-access.log combined;
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
|
||||
187
deploy/scripts/gen-certs.sh
Executable file
187
deploy/scripts/gen-certs.sh
Executable file
@@ -0,0 +1,187 @@
|
||||
#!/bin/bash
|
||||
|
||||
export DEPLOY_DIR="./deploy"
|
||||
export CERTS_DIR="${DEPLOY_DIR}/certs/"
|
||||
|
||||
export GATEWAY_CN="egommerce.io,gateway.egommerce.local,api-gatway"
|
||||
export GATEWAY_SAN="DNS:egommerce.io,DNS:gateway.egommerce.local,DNS:api-gateway,IP:127.0.0.1"
|
||||
export EVENTBUS_CN="esb.egommerce.local,api-eventbus"
|
||||
export EVENTBUS_SAN="DNS:esb.egommerce.local,DNS:api-eventbus,IP:127.0.0.1"
|
||||
export CACHE_CN="cache.egommerce.local,api-cache"
|
||||
export CACHE_SAN="DNS:cache.egommerce.local,DNS:api-cache,IP:127.0.0.1"
|
||||
export LOGGER_CN="logger.egommerce.local,api-logger"
|
||||
export LOGGER_SAN="DNS:logger.egommerce.local,DNS:api-logger,IP:127.0.0.1"
|
||||
# export PROMETHEUS_CN="prometheus.egommerce.local,api-prometheus"
|
||||
# export PROMETHEUS_SAN="DNS:prometheus.egommerce.local,DNS:api-prometheus,IP:127.0.0.1"
|
||||
# export GRAFANA_CN="grafana.egommerce.local,api-grafana"
|
||||
# export GRAFANA_SAN="DNS:grafana.egommerce.local,DNS:api-grafana,IP:127.0.0.1"
|
||||
export POSTGRES_CN="db-postgres.egommerce.local,db-postgres"
|
||||
export POSTGRES_SAN="DNS:db-postgres.egommerce.local,DNS:db-postgres,IP:127.0.0.1"
|
||||
# export MONGO_CN="mongo.db.egommerce.local,db-mongo"
|
||||
# export MONGO_SAN="DNS:mongo.db.egommerce.local,DNS:db-mongo,IP:127.0.0.1"
|
||||
export IDENTITY_CN="identity-svc.egommerce.local"
|
||||
export IDENTITY_SAN="DNS:identity-svc.egommerce.local,IP:127.0.0.1"
|
||||
export CATALOG_CN="catalog-svc.egommerce.local,catalog-svc"
|
||||
export CATALOG_SAN="DNS:catalog-svc.egommerce.local,DNS:catalog-svc,IP:127.0.0.1"
|
||||
export BASKET_CN="basket-svc.egommerce.local,basket-svc"
|
||||
export BASKET_SAN="DNS:basket-svc.egommerce.local,DNS:basket-svc,IP:127.0.0.1"
|
||||
export ORDER_CN="order-svc.egommerce.local,order-svc"
|
||||
export ORDER_SAN="DNS:order-svc.egommerce.local,DNS:order-svc,IP:127.0.0.1"
|
||||
export PRICING_CN="DNS:pricing-svc.egommerce.local,DNS:pricing-svc"
|
||||
export PRICING_SAN="DNS:pricing-svc.egommerce.local,DNS:pricing-svc,IP:127.0.0.1"
|
||||
|
||||
# Create required directories
|
||||
mkdir -p \
|
||||
${CERTS_DIR} \
|
||||
${CERTS_DIR}ca-root \
|
||||
${CERTS_DIR}api-gateway \
|
||||
${CERTS_DIR}api-eventbus \
|
||||
${CERTS_DIR}api-cache \
|
||||
${CERTS_DIR}api-logger \
|
||||
${CERTS_DIR}db-postgres \
|
||||
${CERTS_DIR}identity-svc \
|
||||
${CERTS_DIR}basket-svc \
|
||||
${CERTS_DIR}catalog-svc \
|
||||
${CERTS_DIR}order-svc \
|
||||
${CERTS_DIR}pricing-svc
|
||||
|
||||
# Generate Root CA cert
|
||||
openssl req -newkey rsa:2048 -nodes -x509 -days 1024 \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/OU=DevOps Team/CN=Egommerce CA" \
|
||||
-keyout ${CERTS_DIR}ca-root/ca-root.key -out ${CERTS_DIR}ca-root/ca-root.crt >/dev/null
|
||||
|
||||
# Create fullchain pem file
|
||||
cat ${CERTS_DIR}ca-root/ca-root.key ${CERTS_DIR}ca-root/ca-root.crt > ${CERTS_DIR}ca-root/ca-root.pem
|
||||
|
||||
|
||||
# Generate Gateway cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$GATEWAY_CN" \
|
||||
-keyout ${CERTS_DIR}api-gateway/api-gateway.key \
|
||||
-out ${CERTS_DIR}api-gateway/api-gateway.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}api-gateway/api-gateway.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${GATEWAY_SAN}")) \
|
||||
-out ${CERTS_DIR}api-gateway/api-gateway.crt >/dev/null
|
||||
|
||||
# Create fullchain pem file
|
||||
cat ${CERTS_DIR}api-gateway/api-gateway.key ${CERTS_DIR}api-gateway/api-gateway.crt > ${CERTS_DIR}api-gateway/api-gateway.pem
|
||||
|
||||
|
||||
# Generate Eventbus cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$EVENTBUS_CN" \
|
||||
-keyout ${CERTS_DIR}api-eventbus/api-eventbus.key \
|
||||
-out ${CERTS_DIR}api-eventbus/api-eventbus.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}api-eventbus/api-eventbus.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${EVENTBUS_SAN}")) \
|
||||
-out ${CERTS_DIR}api-eventbus/api-eventbus.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Cache cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$CACHE_CN" \
|
||||
-keyout ${CERTS_DIR}api-cache/api-cache.key \
|
||||
-out ${CERTS_DIR}api-cache/api-cache.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}api-cache/api-cache.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${CACHE_SAN}")) \
|
||||
-out ${CERTS_DIR}api-cache/api-cache.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Logger cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$LOGGER_CN" \
|
||||
-keyout ${CERTS_DIR}api-logger/api-logger.key \
|
||||
-out ${CERTS_DIR}api-logger/api-logger.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}api-logger/api-logger.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${LOGGER_SAN}")) \
|
||||
-out ${CERTS_DIR}api-logger/api-logger.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Postgres cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$POSTGRES_CN" \
|
||||
-keyout ${CERTS_DIR}db-postgres/db-postgres.key \
|
||||
-out ${CERTS_DIR}db-postgres/db-postgres.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}db-postgres/db-postgres.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${POSTGRES_SAN}")) \
|
||||
-out ${CERTS_DIR}db-postgres/db-postgres.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Identity cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$IDENTITY_CN" \
|
||||
-keyout ${CERTS_DIR}identity-svc/identity-svc.key \
|
||||
-out ${CERTS_DIR}identity-svc/identity-svc.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}identity-svc/identity-svc.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${IDENTITY_SAN}")) \
|
||||
-out ${CERTS_DIR}identity-svc/identity-svc.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Basket cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$BASKET_CN" \
|
||||
-keyout ${CERTS_DIR}basket-svc/basket-svc.key \
|
||||
-out ${CERTS_DIR}basket-svc/basket-svc.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}basket-svc/basket-svc.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${BASKET_SAN}")) \
|
||||
-out ${CERTS_DIR}basket-svc/basket-svc.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Catalog cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$CATALOG_CN" \
|
||||
-keyout ${CERTS_DIR}catalog-svc/catalog-svc.key \
|
||||
-out ${CERTS_DIR}catalog-svc/catalog-svc.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}catalog-svc/catalog-svc.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${CATALOG_SAN}")) \
|
||||
-out ${CERTS_DIR}catalog-svc/catalog-svc.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Order cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$ORDER_CN" \
|
||||
-keyout ${CERTS_DIR}order-svc/order-svc.key \
|
||||
-out ${CERTS_DIR}order-svc/order-svc.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}order-svc/order-svc.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${ORDER_SAN}")) \
|
||||
-out ${CERTS_DIR}order-svc/order-svc.crt >/dev/null
|
||||
|
||||
|
||||
# Generate Pricing cert
|
||||
openssl req -newkey rsa:2048 -nodes \
|
||||
-subj "/C=PL/ST=Silesia/L=Gliwice/O=Egommerce.dev/CN=$PRICING_CN" \
|
||||
-keyout ${CERTS_DIR}pricing-svc/pricing-svc.key \
|
||||
-out ${CERTS_DIR}pricing-svc/pricing-svc.csr >/dev/null
|
||||
|
||||
openssl x509 -req -days 365 \
|
||||
-in ${CERTS_DIR}pricing-svc/pricing-svc.csr -CA ${CERTS_DIR}ca-root/ca-root.crt \
|
||||
-CAkey ${CERTS_DIR}ca-root/ca-root.key -set_serial 01 \
|
||||
-extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=${PRICING_SAN}")) \
|
||||
-out ${CERTS_DIR}pricing-svc/pricing-svc.crt >/dev/null
|
||||
21
deploy/scripts/init-k8s.sh
Normal file
21
deploy/scripts/init-k8s.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
|
||||
alias kubectl="microk8s kubectl" # MicroK8S fix
|
||||
|
||||
# Install plugins
|
||||
microk8s enable dns
|
||||
# microk8s enable ingress
|
||||
# microk8s enable storage
|
||||
# microk8s enable helm3
|
||||
# microk8s enable metallb:10.64.0.100-10.64.0.200
|
||||
|
||||
# API Gateway CRDs
|
||||
# kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/latest/download/standard-install.yaml
|
||||
# kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/webhook-install.yaml
|
||||
|
||||
# Create ca root tls secret
|
||||
kubectl create secret tls ca-root --cert=deploy/certs/ca-root/ca-root.crt --key=deploy/certs/ca-root/ca-root.key -n egommerce
|
||||
# kubectl annotate secret ca-root haproxy.org/server-ca="egommerce/ca-root" -n egommerce
|
||||
|
||||
# Create api-gateway tls secret
|
||||
kubectl create secret tls api-gateway-cert --cert=deploy/certs/api-gateway/api-gateway.crt --key=deploy/certs/api-gateway/api-gateway.key -n egommerce
|
||||
21
deploy/scripts/start-k8s.sh
Normal file
21
deploy/scripts/start-k8s.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
# RUN IT FORM THE REPO ROOT DIR
|
||||
|
||||
alias kubectl="microk8s kubectl" # MicroK8S fix
|
||||
|
||||
echo "Starting egommerce k8s stack..."
|
||||
|
||||
kubectl apply -f deploy/k8s/namespace.yml
|
||||
kubectl apply -f deploy/k8s/secret.yml
|
||||
|
||||
kubectl apply -f deploy/k8s/api-gateway.yml
|
||||
kubectl apply -f deploy/k8s/api-eventbus.yml
|
||||
kubectl apply -f deploy/k8s/api-cache.yml
|
||||
kubectl apply -f deploy/k8s/api-logger.yml
|
||||
kubectl apply -f deploy/k8s/db-postgres.yml
|
||||
# kubectl apply -f deploy/k8s/db-mongo.yml
|
||||
|
||||
kubectl apply -f deploy/k8s/identity-svc.yml
|
||||
kubectl apply -f deploy/k8s/catalog-svc.yml
|
||||
|
||||
echo "Done."
|
||||
21
deploy/scripts/stop-k8s.sh
Normal file
21
deploy/scripts/stop-k8s.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
# RUN IT FORM THE REPO ROOT DIR
|
||||
|
||||
alias kubectl="microk8s kubectl" # MicroK8S fix
|
||||
|
||||
echo "Stopping egommerce k8s stack..."
|
||||
|
||||
kubectl delete -f deploy/k8s/identity-svc.yml
|
||||
kubectl delete -f deploy/k8s/catalog-svc.yml
|
||||
|
||||
# kubectl delete -f deploy/k8s/db-mongo.yml
|
||||
kubectl delete -f deploy/k8s/db-postgres.yml
|
||||
kubectl delete -f deploy/k8s/api-logger.yml
|
||||
kubectl delete -f deploy/k8s/api-cache.yml
|
||||
kubectl delete -f deploy/k8s/api-eventbus.yml
|
||||
kubectl delete -f deploy/k8s/api-gateway.yml
|
||||
|
||||
kubectl delete -f deploy/k8s/secret.yml
|
||||
# kubectl delete -f deploy/k8s/namespace.yml
|
||||
|
||||
echo "Done."
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
# RUN IT FORM THE REPO ROOT DIR
|
||||
|
||||
echo "Starting egommerce stack..."
|
||||
docker stack deploy --with-registry-auth \
|
||||
--compose-file deploy/egommerce-stack.yml \
|
||||
--compose-file deploy/egommerce-stack.dev.yml \
|
||||
--compose-file deploy/egommerce-stack.dev.local.yml \
|
||||
egommerce
|
||||
|
||||
echo "Done."
|
||||
140
grafana-dashboards/api-cache-logs.json
Normal file
140
grafana-dashboards/api-cache-logs.json
Normal file
@@ -0,0 +1,140 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": {
|
||||
"type": "grafana",
|
||||
"uid": "-- Grafana --"
|
||||
},
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": 2267340490403840,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"custom": {
|
||||
"align": "auto",
|
||||
"cellOptions": {
|
||||
"type": "auto"
|
||||
},
|
||||
"footer": {
|
||||
"reducers": []
|
||||
},
|
||||
"hideFrom": {
|
||||
"viz": false
|
||||
},
|
||||
"inspect": false
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Time"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 153
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Line"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 986
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 16,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"options": {
|
||||
"cellHeight": "sm",
|
||||
"showHeader": true,
|
||||
"sortBy": [
|
||||
{
|
||||
"desc": false,
|
||||
"displayName": "tsNs"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pluginVersion": "12.2.0",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"direction": "backward",
|
||||
"editorMode": "builder",
|
||||
"expr": "{app=\"api-cache\"} |= ``",
|
||||
"queryType": "range",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "API Cache Logs",
|
||||
"type": "table"
|
||||
}
|
||||
],
|
||||
"preload": false,
|
||||
"refresh": "5s",
|
||||
"schemaVersion": 42,
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-5m",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "browser",
|
||||
"title": "API Cache Logs",
|
||||
"uid": "ad7sctw",
|
||||
"version": 3
|
||||
}
|
||||
1083
grafana-dashboards/api-cache-monitoring.json
Normal file
1083
grafana-dashboards/api-cache-monitoring.json
Normal file
File diff suppressed because it is too large
Load Diff
152
grafana-dashboards/api-eventbus-logs.json
Normal file
152
grafana-dashboards/api-eventbus-logs.json
Normal file
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": {
|
||||
"type": "grafana",
|
||||
"uid": "-- Grafana --"
|
||||
},
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": 2231809731538944,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"custom": {
|
||||
"align": "auto",
|
||||
"cellOptions": {
|
||||
"type": "auto"
|
||||
},
|
||||
"footer": {
|
||||
"reducers": []
|
||||
},
|
||||
"hideFrom": {
|
||||
"viz": false
|
||||
},
|
||||
"inspect": false
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Time"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 188
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "labels"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Line"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 1045
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 9,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"options": {
|
||||
"cellHeight": "sm",
|
||||
"showHeader": true,
|
||||
"sortBy": [
|
||||
{
|
||||
"desc": true,
|
||||
"displayName": "Time"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pluginVersion": "12.2.0",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"direction": "backward",
|
||||
"editorMode": "builder",
|
||||
"expr": "{app=\"api-eventbus\"} |= ``",
|
||||
"queryType": "range",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "API Eventbus Logs",
|
||||
"type": "table"
|
||||
}
|
||||
],
|
||||
"preload": false,
|
||||
"refresh": "5s",
|
||||
"schemaVersion": 42,
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-5m",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "browser",
|
||||
"title": "API Eventbus Logs",
|
||||
"uid": "addld9d",
|
||||
"version": 2
|
||||
}
|
||||
8423
grafana-dashboards/api-eventbus-monitoring.json
Normal file
8423
grafana-dashboards/api-eventbus-monitoring.json
Normal file
File diff suppressed because it is too large
Load Diff
140
grafana-dashboards/api-gateway-logs.json
Normal file
140
grafana-dashboards/api-gateway-logs.json
Normal file
@@ -0,0 +1,140 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": {
|
||||
"type": "grafana",
|
||||
"uid": "-- Grafana --"
|
||||
},
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": 2292411350208512,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"custom": {
|
||||
"align": "auto",
|
||||
"cellOptions": {
|
||||
"type": "auto"
|
||||
},
|
||||
"footer": {
|
||||
"reducers": []
|
||||
},
|
||||
"hideFrom": {
|
||||
"viz": false
|
||||
},
|
||||
"inspect": false
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Time"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 155
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Line"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 990
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 15,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"options": {
|
||||
"cellHeight": "sm",
|
||||
"showHeader": true,
|
||||
"sortBy": [
|
||||
{
|
||||
"desc": true,
|
||||
"displayName": "Time"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pluginVersion": "12.2.0",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"direction": "backward",
|
||||
"editorMode": "builder",
|
||||
"expr": "{app=\"api-gateway\"} |= ``",
|
||||
"queryType": "range",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "API Gateway Logs",
|
||||
"type": "table"
|
||||
}
|
||||
],
|
||||
"preload": false,
|
||||
"refresh": "5s",
|
||||
"schemaVersion": 42,
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-5m",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "browser",
|
||||
"title": "API Gateway Logs",
|
||||
"uid": "adct2hs",
|
||||
"version": 4
|
||||
}
|
||||
1120
grafana-dashboards/go-processes-monitoring.json
Normal file
1120
grafana-dashboards/go-processes-monitoring.json
Normal file
File diff suppressed because it is too large
Load Diff
11548
grafana-dashboards/haproxy-monitoring.json
Normal file
11548
grafana-dashboards/haproxy-monitoring.json
Normal file
File diff suppressed because it is too large
Load Diff
140
grafana-dashboards/identity-svc-logs.json
Normal file
140
grafana-dashboards/identity-svc-logs.json
Normal file
@@ -0,0 +1,140 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": {
|
||||
"type": "grafana",
|
||||
"uid": "-- Grafana --"
|
||||
},
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": 2293973304823808,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"custom": {
|
||||
"align": "auto",
|
||||
"cellOptions": {
|
||||
"type": "auto"
|
||||
},
|
||||
"footer": {
|
||||
"reducers": []
|
||||
},
|
||||
"hideFrom": {
|
||||
"viz": false
|
||||
},
|
||||
"inspect": false
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Time"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 151
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Line"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "custom.width",
|
||||
"value": 992
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 15,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"options": {
|
||||
"cellHeight": "sm",
|
||||
"showHeader": true,
|
||||
"sortBy": [
|
||||
{
|
||||
"desc": true,
|
||||
"displayName": "Time"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pluginVersion": "12.2.0",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "loki",
|
||||
"uid": "P8E80F9AEF21F6940"
|
||||
},
|
||||
"direction": "backward",
|
||||
"editorMode": "builder",
|
||||
"expr": "{app=\"identity-svc\"} |= ``",
|
||||
"queryType": "range",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "Identity SVC Logs",
|
||||
"type": "table"
|
||||
}
|
||||
],
|
||||
"preload": false,
|
||||
"refresh": "5s",
|
||||
"schemaVersion": 42,
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-5m",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "browser",
|
||||
"title": "Identity SVC Logs",
|
||||
"uid": "adck5c7",
|
||||
"version": 3
|
||||
}
|
||||
Reference in New Issue
Block a user