Este proyecto es un backend para una aplicación tipo blog
las tecnologias utilizadas son
- FastAPI
- Odmantic
- Minio (Servicio semejante a S3)
- Mongodb
- Oauth con Bearer + JWT
También utiliza Pillow para convertir automaticamente las imagenes de usuario a webp, lo cual permitirá mejor tiempo de respuesta para el usuario y menor consumo de banda ancha.
Para la base de datos se utilizó el ODM para facilitar su construcción y configuración, asignando los indices correspondientes y las restricciones mediante un endpoint /configure
Como politicas del bucket seria preferible que el usuario no tenga permisos para mover nada pero que si pueda obtener el recurso desde el bucket directamente dado que se tratan de imagenes de perfil y articulos que no son información sensible.
docker run -d -p 9000:9000 -p 9001:9001 --name minio -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=password123" -v /data_minio:/data minio/minio server /data --console-address ":9001"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::blog"
]
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::blog/*"
]
}
]
}
docker run -p27017:27017 --name blogdb mongo
Variables de entorno, ejemplo de .env
MONGO_URI='mongodb://localhost:27017'
ADMIN_PSSWD='12345'
S3ENDPOINT='http://localhost:9000'
S3USER='admin'
S3PASSWORD='password123'
USE_ARTICLE_S3="1"
Si USE_ARTICLE_S3
no existe utilizará la base de datos para guardar los articulos, mientras que si se pasa cualquier argumento generará un documento para el S3
Correr
fastapi run src/main.py
Docker
docker run -p 5000:8000 -e "MONGO_URI=url" -e "ADMIN_PSSWD=123456" -e "S3ENDPOINT=url" -e "S3USER=admin" -e "S3PASSWORD=password123" mongo-blog-backend