{"id":18137718,"url":"https://github.com/j3rrryy/cloud_storage","last_synced_at":"2026-01-16T12:23:47.726Z","repository":{"id":260596713,"uuid":"881785626","full_name":"j3rrryy/cloud_storage","owner":"j3rrryy","description":"Cloud Storage app with microservice architecture. Written using Litestar and gRPC framework","archived":false,"fork":false,"pushed_at":"2026-01-14T17:20:53.000Z","size":5758,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-14T20:08:01.700Z","etag":null,"topics":["apache-kafka","cloud-storage","docker","grafana","grpc","litestar","loki","microservices","minio","nginx","postgresql","prometheus","promtail","redis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/j3rrryy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-01T08:16:51.000Z","updated_at":"2026-01-14T16:56:50.000Z","dependencies_parsed_at":"2024-11-01T09:27:52.826Z","dependency_job_id":"f7c3dcc3-616c-46f9-bbec-5b5eaa2b1a21","html_url":"https://github.com/j3rrryy/cloud_storage","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"ce14ffe35b69440478dd141d7066de238fd6ecb1"},"previous_names":["j3rrryy/cloud_storage"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/j3rrryy/cloud_storage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j3rrryy%2Fcloud_storage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j3rrryy%2Fcloud_storage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j3rrryy%2Fcloud_storage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j3rrryy%2Fcloud_storage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/j3rrryy","download_url":"https://codeload.github.com/j3rrryy/cloud_storage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j3rrryy%2Fcloud_storage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache-kafka","cloud-storage","docker","grafana","grpc","litestar","loki","microservices","minio","nginx","postgresql","prometheus","promtail","redis"],"created_at":"2024-11-01T15:06:10.477Z","updated_at":"2026-01-16T12:23:47.676Z","avatar_url":"https://github.com/j3rrryy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud Storage\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003ca href=\"https://github.com/j3rrryy/cloud_storage/actions/workflows/main.yml\"\u003e\r\n    \u003cimg src=\"https://github.com/j3rrryy/cloud_storage/actions/workflows/main.yml/badge.svg\" alt=\"СI/CD\"\u003e\r\n  \u003c/a\u003e\r\n  \u003ca href=\"https://codecov.io/gh/j3rrryy/cloud_storage\"\u003e\r\n    \u003cimg src=\"https://codecov.io/gh/j3rrryy/cloud_storage/graph/badge.svg?token=T84VVOKWC8\" alt=\"Codecov\"\u003e\r\n  \u003c/a\u003e\r\n  \u003ca href=\"https://www.python.org/downloads/release/python-3120/\"\u003e\r\n    \u003cimg src=\"https://img.shields.io/badge/Python-3.12-FFD64E.svg\" alt=\"Python 3.12\"\u003e\r\n  \u003c/a\u003e\r\n  \u003ca href=\"https://github.com/j3rrryy/cloud_storage/blob/main/LICENSE\"\u003e\r\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\"\u003e\r\n  \u003c/a\u003e\r\n  \u003ca href=\"https://github.com/astral-sh/ruff\"\u003e\r\n    \u003cimg src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\" alt=\"Ruff\"\u003e\r\n  \u003c/a\u003e\r\n  \u003ca href=\"https://github.com/astral-sh/uv\"\u003e\r\n    \u003cimg src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json\" alt=\"uv\"\u003e\r\n  \u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n## :book: Key features\r\n\r\n- Microservice architecture\r\n- gRPC between services\r\n- Fast serialization with MessagePack\r\n- Access and refresh JWT tokens\r\n- Active sessions control\r\n- Multipart file upload \u0026 download\r\n- Emails with new login info\r\n- Main DB - PostgreSQL\r\n- DB for cache - Redis\r\n- S3 for files and logs - MinIO\r\n- Message broker between Gateway and Mail service - Apache Kafka\r\n- Monitoring - Prometheus \u0026 Grafana\r\n- Log aggregation - Promtail \u0026 Loki \u0026 Grafana\r\n\r\n![Architecture](https://github.com/j3rrryy/cloud_storage/blob/main/images/architecture.webp?raw=true)\r\n\r\n\u003e [!NOTE]\r\n\u003e API located at `/api`\r\n\u003e\r\n\u003e Docs located at `/api/docs`, but Swagger does not support MessagePack, so use another tool to send requests with this content type\r\n\u003e\r\n\u003e Grafana located at `/admin/grafana`\r\n\r\n## :computer: Requirements\r\n\r\n- Docker\r\n\r\n## :hammer_and_wrench: Getting started\r\n\r\n- Copy `.env` file from `examples/dev/` to `dev/` folder and fill it in\r\n\r\n- **(For dev/prod)** Copy `redis.conf` file from `examples/` to `dev/` or `prod/` folder and fill it in\r\n\r\n- **(For prod)** Copy `.env` file from `examples/prod/` to `prod/` folder and fill it in\r\n\r\n- **(For prod)** Copy `nginx.conf` file from `examples/prod/` to `prod/` folder and fill it in\r\n\r\n- **(For prod)** Copy `docker-compose.cert.yml` file from `examples/prod/` to `prod/` folder and fill it in\r\n\r\n### :rocket: Start\r\n\r\n- Run the **dev ver.**\r\n\r\n  - Only API\r\n\r\n    ```shell\r\n    docker compose -f docker-compose.dev.yml --profile api up --build -d\r\n    ```\r\n\r\n  - API + monitoring\r\n\r\n    ```shell\r\n    docker compose -f docker-compose.dev.yml --profile all up --build -d\r\n    ```\r\n\r\n- Run the **prod ver.** and get a SSL certificate\r\n\r\n  - Create the directory on the server\r\n\r\n    ```shell\r\n    mkdir -p /cloud_storage/\r\n    ```\r\n\r\n  - Use SCP to copy the prod files to the server\r\n\r\n    ```shell\r\n    scp -r ./prod/* \u003cusername\u003e@\u003chost\u003e:/cloud_storage/\r\n    ```\r\n\r\n  - Run the deploy script\r\n\r\n    ```shell\r\n    bash deploy.sh\r\n    ```\r\n\r\n### :x: Stop\r\n\r\n```shell\r\ndocker compose -f docker-compose.\u003cdev/prod\u003e.yml stop\r\n```\r\n\r\n### :chart_with_upwards_trend: Load testing\r\n\r\n- Install Locust\r\n\r\n```shell\r\npip install locust\r\n```\r\n\r\n- Run the script\r\n\r\n```shell\r\nlocust --host localhost -f ./load_testing/load_test.py\r\n```\r\n\r\n- Open the [console](http://localhost:8089)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj3rrryy%2Fcloud_storage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fj3rrryy%2Fcloud_storage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj3rrryy%2Fcloud_storage/lists"}