Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

logo

description

usage

🟩 Getting Started

MicroAPI is fully separates API in Async mode based on Microservices

For CRUD operations is used Customer - Product - Price - Order model

The Customer buys a Product with a different Price and receives an Order
The Price is calculated including taxes/discounts depending on the type of customer/

Each part is work like Microservice
The Microservice runs in separate Docker container

Microservice has its own Database
Database can be switch from Postgres to MongoDB or other

Requirements

FastAPIDockerPostgresNginx

Installing

Clone the project

git clone git@github.com:zakharb/microapi.git
cd microapi

Start docker-compose

docker-compose up -d

animated

🟩 Usage

Customers

Get, put, update, delete Customers via API Customers

animated

Products

Get, put, update, delete Products via API Products

Prices

Get Prices via API Prices

Orders

Get Orders via API Orders

🟩 Configuration

To solve problem with performance each Service run in container
Uvicorn work as ASGI server and connect to one piece with Nginx
Main configuration is docker-compose.yml

  • every service located in separate directory name-service
  • use Dockerfile to change docker installation settings
  • folder app contain FastAPI application
  • all services connected to one piece in docker-compose.yml
  • example of service + DB containers (change --workers XX to increase multiprocessing)

Examples

Customer service

 customer_service:
build: ./customer-service
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
#command: gunicorn main:app --workers 4 --worker-class --host 0.0.0.0 --port 8000
volumes:
- ./customer-service/:/app/
ports:
- 8001:8000
environment:
- DATABASE_URI=postgresql://customer_db_username:customer_db_password@customer_db/customer_db_dev
depends_on:
- customer_db
logging:
driver: none customer_db:
image: postgres:latest
volumes:
- postgres_data_customer:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=customer_db_username
- POSTGRES_PASSWORD=customer_db_password
- POSTGRES_DB=customer_db_dev
logging:
driver: none 

🟩 Client

There is client for work with Microservices
Microapiclient is used for generating data and testing

It is located in folder client

Install

cd client
python3 -m venv venv
source venv/bin/activate python -m pip install -e .

Run

cd client
source venv/bin/activate python -m microapiclient
__ __ _ _____ _____ _______ (__)_(__) (_) _ (_____) (_____)(_______)
(_) (_) (_) _ ___ (_)__ ___ (_)___(_)(_)__(_) (_) (_) (_) (_)(_) _(___)(____)(___) (_______)(_____) (_) (_) (_)(_)(_)___ (_) (_)_(_)(_) (_)(_) __(_)__ (_) (_)(_) (____)(_) (___) (_) (_)(_) (_______)
usage: __main__.py [-h]
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
...
positional arguments:
{getcustomer,postcustomer,getproduct,postproduct,getprice,postorder,postorders,generateorder}
getcustomer Get customer from DB
postcustomer Post new customer into DB
getproduct Get product by name from DB
postproduct Post new product into DB
getprice Get price_net and price_gross
postorder Post order into DB
postorders Bulk write orders into DB
generateorder Generate order into CSV file
optional arguments:
-h, --help show this help message and exit

Examples

  • Generate Customers
python -m microapiclient postcustomer --customer-count 50
  • Generate Products
python -m microapiclient postproduct --product-count 50
  • Generate Orders to file
python -m microapiclient generateorder --order-count 1000 --task-count 32
  • Bulk write Orders from file to DB
python -m microapiclient postorders --order-file orders.csv --task-count 32
  • View logs in client.log
cat client.log | more

🟩 Deployment

Edit Dockerfile for each Microservice and deploy container

🟩 Versioning

Using SemVer for versioning. For the versions available, see the tags on this repository.

🟩 Authors

  • Zakhar Bengart - Initial work - Ze

See also the list of contributors who participated in this project.

🟩 License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation - see the LICENSE file for details

About

Micro Services with FastAPI and Docker

Topics

Resources

Stars

11 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages