
Como agregar tu propio service en ubuntu para ejecutar fastapi
Al desplegar una app en javascript tenemos recursos para hacer que esta se mantenga en ejecución en caso de que el servicio se reinicie, siendo esto lo primero a tomar en cuenta a la hora de desplegar la app o web ya que se deben ejecutar ciertos scripst par alevantar la app/entorno ect..
En este caso hablamos de ubutntu, python y fastapi del cual se debe tener en cuenta la misma acción, pero que tenemos disponible para este entorno? Es aquí cuando entra el Systemd de ubuntu con el cual podemos ejecutar acciones cada ves que inicie el sistema manteniendo el api disponible para los usuarios.
Systemd es un sistema de gestión de servicios y de arranque del sistema en Linux. Se encarga de iniciar y detener procesos, así como de gestionar dependencias y recursos del sistema. Utilizar Systemd para tu aplicación FastAPI te permitirá:
- - Iniciar automáticamente tu aplicación al arrancar el servidor.
- - Reiniciar automáticamente tu aplicación en caso de fallos.
- - Gestionar los logs de tu aplicación de forma centralizada.
Ahora que sabes las bondades de crear tu propio systemd explico los pasos para ejecutar fastapi.
Lo primero es crear un archivo.service, puedes usar nano o vim el que prefieras en la ruta /etc/systemd/system/mi_app.service con este código
[Unit]
Description=Mi aplicación FastAPI After=network.target
[Service]
User=tu_usuario # Reemplaza con tu nombre de usuario
WorkingDirectory=/ruta/a/tu/aplicacion # Reemplaza con la ruta a tu aplicación
ExecStart=/ruta/a/tu/entorno/bin/uvicorn main:app --host 0.0.0.0 --port 8000 # Reemplaza con el comando para iniciar tu aplicación
Restart = always
[Install]
WantedBy=multi-user.target
Explicación:
- - Description: Una descripción del servicio.
- - After: Indica que el servicio debe iniciar después de que la red esté activa.
- - User: El usuario con el que se ejecutará el servicio.
- - WorkingDirectory: El directorio de trabajo para el servicio.
- - ExecStart: El comando para iniciar la aplicación FastAPI. Asegúrate de incluir la ruta correcta a tu entorno virtual y al archivo main.py de tu aplicación.
- - Restart: Indica que el servicio debe reiniciarse automáticamente en caso de fallos.
- - WantedBy: Indica que el servicio debe iniciarse al arrancar el sistema.
Finalmente habilitar e iniciar el servicio.
sudo systemctl enable mi_app.service
sudo systemctl start mi_app.service
Con esto ubuntu se encargaría de ejecutar la app una vez salgas de ssh o falle el sistema.