{"id":26871730,"url":"https://github.com/eocode/rider-app","last_synced_at":"2025-05-07T07:08:01.716Z","repository":{"id":39840492,"uuid":"254674848","full_name":"eocode/Rider-App","owner":"eocode","description":"Django rider-app (Uber clone API) using Docker, Caddy, Python3, Django / DRF / Flower / Celery, PostgreSQL Redis","archived":false,"fork":false,"pushed_at":"2022-09-13T23:03:58.000Z","size":2037,"stargazers_count":16,"open_issues_count":6,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-03-08T06:53:22.401Z","etag":null,"topics":["12-factor","django","docker","drf","project","python","software-engineering","stack"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"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/eocode.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}},"created_at":"2020-04-10T15:52:39.000Z","updated_at":"2022-11-14T09:07:13.000Z","dependencies_parsed_at":"2022-08-27T17:21:53.188Z","dependency_job_id":null,"html_url":"https://github.com/eocode/Rider-App","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eocode%2FRider-App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eocode%2FRider-App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eocode%2FRider-App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eocode%2FRider-App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eocode","download_url":"https://codeload.github.com/eocode/Rider-App/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246432781,"owners_count":20776461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["12-factor","django","docker","drf","project","python","software-engineering","stack"],"created_at":"2025-03-31T07:30:34.278Z","updated_at":"2025-03-31T07:31:16.178Z","avatar_url":"https://github.com/eocode.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# :car: Rider app\u003c!-- omit in toc --\u003e\n\nApp rider with Django REST Framework\n\n## Tabla de Contenido\u003c!-- omit in toc --\u003e\n- [Features](#features)\n- [Stack](#stack)\n- [Preview](#preview)\n  - [Admin app](#admin-app)\n  - [Postman API](#postman-api)\n  - [Rest manager](#rest-manager)\n  - [Program async Tasks with Flower for Celery](#program-async-tasks-with-flower-for-celery)\n  - [Testing](#testing)\n- [Build docker image](#build-docker-image)\n- [Run the stack](#run-the-stack)\n- [Django](#django)\n- [Static files](#static-files)\n- [Admin](#admin)\n- [E-Mail](#e-mail)\n- [Redis](#redis)\n- [Flower](#flower)\n- [AWS](#aws)\n- [PostgreSQL](#postgresql)\n- [supervisor](#supervisor)\n\n\u003chr/\u003e\n\nSee Django notes for this project  [here](/Docs/README.md)\n\n# Features\n* Create and admin circles\n* Who offers the ride?\n* In than circle is the offer?\n* Departure place\n* Closing hour\n* Arrival place\n* Check In\n* Available seats\n* Extra comments\n* Save passengers in circles\n* Active and deactive ride\n* Ratings\n\n# Stack\n* Caddy - HTTPS Server write in Go\n* Python 3\n* Django / DRF / Flower / Celery\n* PostgreSQL\n* Redis - Cache Instance\n* Docker\n\n# Preview\n\n## Admin app\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/1.png\"\u003e\n\u003c/div\u003e\n\n## Postman API\nSee collection for postman in root directory `CRide.postman_collection.json`\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/postman.png\"\u003e\n\u003c/div\u003e\n\n## Rest manager\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/RestManager.png\"\u003e\n\u003c/div\u003e\n\n## Program async Tasks with Flower for Celery\n\nFor configure and access see localhost:5555 and set the user:password in `.envs.local.django`\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/flower.png\"\u003e\n\u003c/div\u003e\n\n## Testing\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/testing.png\"\u003e\n\u003c/div\u003e\n\n\n# Build docker image\nDocker build the next images\n\n* cride_local_flower \n* cride_local_celerybeat\n* cride_local_celeryworker\n* cride_local_django\n* cride_production_postgres\n* python\n* postgress\n\n# Run the stack\n\nRun server\n\n```bash\nexport COMPOSE_FILE=local.yml # Linux\nset COMPOSE_FILE=local.yml # Windows\ndocker-compose build\ndocker-compose up\n```\n\nOpen the Django project\n`http://localhost:8000`\n`http://localhost:8000/admin/`\n\nFor validate that run services see\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/docker.png\"\u003e\n\u003c/div\u003e\n\nCommon comands for docker\n```bash\nexport COMPOSE_FILE=local.yml # Linux\nset COMPOSE_FILE=local.yml # Windows\ndocker-compose build\ndocker-compose up\ndocker-compose ps\ndocker-compose down\n```\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/running.png\"\u003e\n\u003c/div\u003e\n\nAdmin commands\n``docker-compose run --rm django COMMAND``\n\n\nEnable debugger\n```shell\ndocker-compose up\ndocker-compose ps\ndocker rm -f \u003cID\u003e\n\ndocker-compose run --rm --service-ports django\ndocker rm -f djangoavanzado_django_1```\n\nRemove volume database\n```bash\ndocker-compose ps\ndocker-compose down\ndocker volume ls\ndocker volume rm djangoavanzado_local_postgres_data\ndocker-compose up\n```\n\nRun migrations\n```shell\ndocker-compose run --rm django python manage.py makemigrations\ndocker-compose run --rm django python manage.py migrate\n```\n\nApp commands\n\n```shell\ndocker-compose run --rm django python manage.py createsuperuser\ndocker-compose run --rm django python manage.py shell_plus\n```\n\nImport data\n```shell\ndocker-compose run --rm django python manage.py shell_plus\n\nfrom import_circles import import_data\nimport_data('data.csv')\n```\n\nHttpie\n```shell\npip install httpie\nhttp google.com\nhttp localhost:8000/circles/ -v\nhttp localhost:8000/circles/ -b\n```\n\nRebuild image when change dependences\n\n```bash\ndocker-compose down\ndocker-compose build\ndocker-compose up\ndocker rm -f djangoavanzado_django_1\ndocker-compose run --rm  --service-ports django\n```\n\nTest API\n\n```shell\nhttp localhost:8000/users/signup/ email=demo@mail.com first_name=demo last_name=user password=calc12345pT password_confirmation=qwertyuiop12345 phone_number=5434234234 username=dem\n\nhttp localhost:8000/users/verify/ token=\"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoidG9rZW5tYWlsIiwiZXhwIjoxNTg3NjU4OTExLCJ0eXBlIjoiZW1haWxfY29uZmlybWF0aW9uIn0.1jzvbYb8itHVWX-bMQ2M0e3y_FbLJhJ0DjGiORFNUTM\"\n\nhttp localhost:8000/users/login/ email=demo@mail.com password=calc12345pT -b\n\nhttp localhost:8000/circles/ \"Authorization: Token 9bbbc8f0b35a679240315c1c2f4d366a89070625\" -v\nhttp localhost:8000/circles/create/ name=Manzana slug_name=manzana -b\n```\n\nClean the project\n\n```bash\ndocker-compose run --rm django flake8\n```\n\nRun project test\n\n```bash\ndocker-compose run --rm django pytest\n```\n\n# Deploy on AWS\n\n* Create an Ubuntu instance on EC2\n* Create IAM Role and apply AWS Service-\u003eEC2-\u003eAmazonS3FullAccess **This has more restrictive**\n* Open HTTP/HTTPS/SSH **(Restringe by IP)**\n* Configure DNS\n* Save the key access for SSH\n\nWith ssh or Putty on windows connect to instance\n\nUpdate S.O\n\n```bash\nsudo apt-get update\nsudo apt-get upgade\n```\n\n* Install Docker in S.O\n\nhttps://docs.docker.com/engine/install/ubuntu/\n\n* Install Docker compose\n\nhttps://docs.docker.com/compose/install/\n\n* Install git and clone the repo\n\n* Configure production credentials on `.envs.production` and make 3 files\n* Configure AWS Bucket on S3\n  * Create a bucket **comparte-ride** with basic config\n\nAdd a bucket politic https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html\n```json\n{\n   \"Id\": \"Policy1548096183802\",\n   \"Version\": \"2012-10-17\",\n   \"Statement\": [\n     {\n       \"Sid\": \"Stmt1548096182270\",\n       \"Action\": [\n         \"s3:GetObject\"\n       ],\n       \"Effect\": \"Allow\",\n       \"Resource\": \"arn:aws:s3:::BUCKET-NAME/*\",\n       \"Principal\": \"*\"\n     }\n   ]\n }\n```\n\n* Domain Namecheap\nAdd next 2 registers type address:\n\nA | www | IP\nA | @ | IP\n\nConsider Cloudflare and AWS Route 53.\n\n\u003e The values ​​for production must be different\n\n.django\n```.django\n# Django\nDJANGO_SETTINGS_MODULE=config.settings.production\nDJANGO_DEBUG=False\nDJANGO_SECRET_KEY=SECURE_SECRET_KEY\n\n# Static files\nDJANGO_AWS_STORAGE_BUCKET_NAME=S3_BUCKET_NAME\n\n# Admin\nDJANGO_ADMIN_URL=SECURE_ADMIN_URL/\n\n# E-Mail\nMAILGUN_API_KEY=SECRET_KEY\nMAILGUN_DOMAIN=SECRET_KEY\n\n# Redis\nREDIS_URL=redis://redis:6379/0\n\n# Flower\nCELERY_FLOWER_USER=SECURE_USER\nCELERY_FLOWER_PASSWORD=SECURE_PASSWORD\n\n# AWS\nDJANGO_AWS_STORAGE_BUCKET_NAME=comparteride\n```\n\n.postgres\n```bash\n# PostgreSQL\nPOSTGRES_HOST=postgres\nPOSTGRES_PORT=5432\nPOSTGRES_DB=cride\nPOSTGRES_USER=SECURE_USER\nPOSTGRES_PASSWORD=SECURE_PASSWORD\n```\n\nSee info in: https://caddyserver.com/docs/caddyfile\n.caddy\n```bash\nDOMAIN_NAME=comparteride.com\n```\n\n* Execute commands\n\n```bash\nmkdir cride/static\nsudo docker-compose -f production.yml build\nsudo docker-compose -f production.yml up\nsudo docker-compose -f production.yml run --rm django python manage.py\nsudo docker-compose -f production.yml run --rm django python manage.py migrate\nsudo docker-compose -f production.yml run --rm django python manage.py createsuperuser\n\n# supervisor\nsudo su\napt-get install supervisor\nservice supervisor restart\ncd /etc/supervisor/conf.d\nls\nvim cride.conf\n```\n\ncride.conf\n```conf\n[program:cride]\ncommand=docker-compose -f production.yml up\ndirectory=/home/ubuntu/cride\nredirect_stderr=true\nautostart=true\nautorestart=true\npriority=10\n```\n\nCommands\n```bash\nsupervisorctl reread\nsupervisorctl update\nsupervisorctl start cride\nsupervisorctl status cride\ndocker ps\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feocode%2Frider-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feocode%2Frider-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feocode%2Frider-app/lists"}