Bienvenido a la guía de deploy de Sanitas, asegúrate de tener instalado Nix y haber habilitado los Flakes. Si eres la clase de persona que prefiere leer comandos de bash directamente puedes simplemente ver la Github Action de Deploy en su lugar.
Una vez tengas Nix instalado y configurado por favor ejecuta:
nix develop --impure
Este comando te instalará todas las dependencias del proyecto. Todos los demás pasos asumen que te encuentras dentro de la terminal que te crea Nix con el comando anterior. El siguiente paso es configurar la base de datos.
El primer paso para deployar Sanitas es tener la base de datos configurada y
abierta a conexiones. Por favor asegúrate de tenerla funcional y con su
Connection URL
lista. Un ejemplo de una connection URL es la siguiente:
postgresql://backend:backend@hostpc:6969/sanitas
El siguiente paso es configurar SAM.
Para este proyecto se utilizó el framework de open source SAM oficial de AWS.
Por favor sigue los pasos de la guía oficial de AWS
para configurar la cuenta. Ten en cuenta que no necesitas
instalar sam-cli
, puesto que Nix lo instala por tí!
Dependiendo de cómo se configuren las credenciales puedes o no tener que utilizar un IAM Role con una policy custom para subir el backend. En el CI/CD solamente le dimos los permisos que necesita SAM para crear los recursos dentro de la cuenta de AWS. La Policy que utilizamos es la siguiente:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:CreateInstanceProfile",
"iam:RemoveRoleFromInstanceProfile",
"iam:AddRoleToInstanceProfile",
"iam:PassRole",
"iam:CreateRole",
"iam:TagRole",
"iam:DeleteInstanceProfile",
"iam:UpdateRole",
"iam:UntagRole",
"iam:GetRole",
"iam:DeleteRole",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:DeleteRolePolicy",
"apigateway:*",
"s3:*",
"cloudformation:*",
"lambda:*",
"resource-groups:*",
"applicationinsights:*",
"cognito-idp:CreateUserPool",
"cognito-idp:CreateUserPoolClient",
"cognito-idp:CreateUserPoolDomain",
"cognito-idp:DeleteUserPool",
"cognito-idp:DeleteUserPoolClient",
"cognito-idp:DeleteUserPoolDomain",
"cognito-idp:UpdateUserPool",
"cognito-idp:UpdateUserPoolClient",
"cognito-idp:UpdateUserPoolDomain",
"cognito-idp:SetUserPoolMfaConfig",
"cognito-idp:*"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
]
}
Una vez configuradas las credenciales, se necesita "compilar" el backend. Para
realizar este paso entra a la carpeta de sanitas_backend
y ejecuta:
# Dentro de sanitas_backend
sam build --use-container
Una vez se haya compilado el backend, es momento de subirlo a tu cuenta! Ejecuta el siguiente comando reemplazando la string por la URL del paso anterior:
# Dentro de sanitas_backend
sam deploy --parameter-overrides PostgresURL="URL DE CONEXION DE LA DB"
Una vez haya terminado el deploy del backend, se necesitan extraer 4 valores del deploy para que funcione el backend. El primero es:
- La URL del backend sin protección: La puedes obtener del dashboard de AWS o puedes obtenerla usando el siguiente comando.
sam list stack-outputs --stack-name sanitas-backend --output json | jq .[1].OutputValue
- La URL del backend con protección: La puedes obtener del dashboard de AWS o puedes obtenerla usando el siguiente comando.
sam list stack-outputs --stack-name sanitas-backend --output json | jq .[0].OutputValue
- El Cognito Pool ID: La puedes obtener del dashboard de AWS o puedes obtenerla usando el siguiente comando.
sam list resources --stack-name sanitas-backend --output json | jq '.[] | select(.LogicalResourceId == "CognitoUserPool") | .PhysicalResourceId'
- El Cognito Client ID: La puedes obtener del dashboard de AWS o puedes obtenerla usando el siguiente comando.
sam list resources --stack-name sanitas-backend --output json | jq '.[] | select(.LogicalResourceId == "CognitoUserPoolClient") | .PhysicalResourceId'
El siguiente paso es deployear el frontend.
El fronend de sanitas es una SPA que usa Vite como su bundler. Simplemente
ejecuta el siguiente comando y sube la carpeta dist
resultante a donde
publiques tu aplicación:
yarn && BACKEND_URL="BACKEND URL" COGNITO_POOL_ID="COGNITO POOL ID" COGNITO_CLIENT_ID="COGNITO CLIENT ID" PROTECTED_URL="PROTECTED BACKEND URL" yarn build
Si el hosting en donde se publicará la aplicación tiene un path extra en la URL
después del .com, reemplaza el yarn build
de arriba por:
yarn build --base=/path/base/del/hosting