WitMovil.El Blog de un DevOps
WitMovil.

Explorando la automatización, la tecnología móvil y la ingeniería de software eficiente.

Sistemas Operativos
Explorar
TechCodeAutomation
Nosotros
Acerca deContactoDonar
Conectar
Nuntius GitHub LinkedIn

© 2026 WitMovil

BY NUNTIUS.DEV

PrivacidadTérminosAnti-Spam

Hecho con Next.js & PocketBase

Volver al inicio

Instala Ollama + FastAPI en EasyPanel + Docker: Guía Rápida

Jeyson Orozco
Escrito porJeyson Orozco
Ko-fi
28 de abril de 2022
General
Instala Ollama + FastAPI en EasyPanel + Docker: Guía Rápida

Instalar Ollama en EasyPanel puede parecer una tarea desalentadora, pero con esta guía rápida y sencilla, estarás listo para desplegar tu microservicio de generación de texto en poco tiempo. EasyPanel, una herramienta versátil para gestionar contenedores Docker, hace que el proceso sea eficiente y manejable incluso para aquellos que no son expertos en DevOps.



Paso 1: Preparar el Entorno

Primero, asegúrate de tener EasyPanel configurado correctamente en tu servidor. EasyPanel simplifica la gestión de contenedores Docker y proporciona una interfaz intuitiva para gestionar tus aplicaciones. Una vez instalado EasyPanel, sigue estos pasos para instalar Ollama.

Primero crea un proyecto luego crea un servicio.

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_6_1024x625_lfvxeoxhks.png" 
            alt="Paso 1" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 01 —
      </figcaption>
    </figure>

Coloca ahora App, coloca el nombre que quieras no puedes usar letras en mayúscula, y Create.

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_7_1024x568_74rj2vxtkv.png" 
            alt="Paso 2" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 02 —
      </figcaption>
    </figure>

Tabla de Contenido

Toggle
    • Pasos para implementar:
  • Este Dockerfile configurará el entorno necesario para correr tu aplicación FastAPI con IA
    • Consideraciones si llega haber un error
    • Dockerfile Ollama
    • Pasos para verificar

Pasos para implementar:

  1. Modificar el Dockerfile en EasyPanel:
    • Abre EasyPanel y navega a tu proyecto.
    • Accede a la sección donde puedes editar el Dockerfile.
    • Copia y pega el Dockerfile modificado arriba.
  2. Guardar y desplegar:
    • Guarda los cambios en tu Dockerfile Save.
    • Despliega tu contenedor utilizando la opción de “Deploy” o “Build”.
Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_1024x714_kese9k0t4y.png" 
            alt="Paso 3" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 03 —
      </figcaption>
    </figure>

Este Dockerfile configurará el entorno necesario para correr tu aplicación FastAPI con IA

Code
# Start with Ubuntu base image
FROM ubuntu:latest

# Install necessary packages
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    python3-venv \
    curl \
    wget \
    && rm -rf /var/lib/apt/lists/*

# Install Ollama
RUN curl https://ollama.com/install.sh | sh

# Set up a virtual environment
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# Install Python dependencies in the virtual environment
RUN pip install fastapi uvicorn requests

# Set working directory
WORKDIR /app

# Download the Python script from GitHub
RUN wget -O app.py https://raw.githubusercontent.com/nuntius-dev/nuntius-dev/main/app.py

# Expose Ollama port and FastAPI port
EXPOSE 11434 8000

# Create a startup script
RUN echo '#!/bin/bash\nollama serve &\nsleep 10\nollama pull phi\nuvicorn app:app --host 0.0.0.0 --port 8000' > /app/start.sh && \
    chmod +x /app/start.sh

# Set the startup script as the entry point
CMD ["/app/start.sh"]

Alerta:
Este Dockerfile configura un entorno Python con todas las bibliotecas necesarias para ejecutar Ollama. Asegúrate de que tu servidor tiene suficiente RAM y CPU para manejar la carga de trabajo de Ollama, ya que la generación de texto puede ser intensiva en recursos. Mínimo 10 gigas de RAM 2 CPUs, pero recomiendo 24 Gigas de RAM y 4 CPUs.

En Deployments luego View saldrá que está siendo la instalación.

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_1_1024x541_bvw39nzfyk.png" 
            alt="Paso 4" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 04 —
      </figcaption>
    </figure>

Luego saldrá de varios minutos done, 10 minutos con 7 RAM y 1 CPU

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_2_517fary1cv.png" 
            alt="Paso 5" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 05 —
      </figcaption>
    </figure>

Vemos en amarillo lo que está usando sin siquiera usarlo, y en RAM en rojo.
Parte derecha vamos a Domains / Edit. y cambiamos al puerto 8000, podemos incluir un dominio personalizado siempre y cuando coloquemos la ip de nuestro servidor en nuestro DNS del dominio, seleccionamos la opción Add Domain, es opcional.

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_3_1024x598_229wmhtlcp.png" 
            alt="Paso 6" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 06 —
      </figcaption>
    </figure>

Luego vamos al dominio y nos saldrá:

Code
{"message":"Bienvenido a la API ollama"}

Para mirar la forma de probar la IA vamos al dominioejemplo.host/docs ojo revisar si es tu dominio o el que te dieron gratis allí.

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_4_1024x665_ib04lvz56z.png" 
            alt="Paso 7" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 07 —
      </figcaption>
    </figure>

Luego de colocar hola, esta sería la salida:

Code
<figure class="my-12 group">
      <div class="relative rounded-2xl md:rounded-[2.5rem] overflow-hidden border border-white/10 shadow-2xl bg-[#0a0a0a]">
          <img 
            src="https://blogs-bd.witmovil.com/api/files/pbc_1125843985/v8xu0xsz977704u/image_5_1024x554_0uvi16wc6o.png" 
            alt="Paso 8" 
            class="w-full h-auto object-cover"
            loading="lazy"
          />
      </div>
      <figcaption class="text-center text-gray-400 text-[10px] mt-4 uppercase tracking-[0.3em] font-bold">
        — Captura de pantalla 08 —
      </figcaption>
    </figure>

Si tienes problemas. usa el chat de la aplicación y dile que necesitas un Agente. o usa el siguiente botón

Quiero instalar en mi VPS

Consideraciones si llega haber un error

El error NameError: name 'torch' is not defined indica que el módulo torch no está disponible en el entorno de ejecución cuando se intenta usar. Esto puede ser debido a un problema con la instalación o la configuración del entorno.

Primero, asegúrate de que torch se instala correctamente y está disponible en el entorno virtual. Aquí tienes un ejemplo de Dockerfile corregido que debería solucionar este problema:

Dockerfile Ollama

Code
# Start with Ubuntu base image
FROM ubuntu:latest

# Install necessary packages
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    python3-venv \
    curl \
    wget \
    && rm -rf /var/lib/apt/lists/*

# Set up a virtual environment
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# Install Python dependencies
RUN pip install --no-cache-dir fastapi uvicorn requests python-decouple pydantic langchain openai tabulate matplotlib pandas langchain-experimental einops accelerate transformers torch

# Set working directory
WORKDIR /app

# Descargar el archivo app.py desde GitHub
RUN wget -O app.py https://raw.githubusercontent.com/nuntius-dev/ollama/main/app.py

# Exponer el puerto que utilizará FastAPI
EXPOSE 80

# Comando para ejecutar la aplicación
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "80"]

Alerta:
Este Dockerfile configura un entorno Python con todas las bibliotecas necesarias para ejecutar Ollama. Asegúrate de que tu servidor tiene suficiente RAM y CPU para manejar la carga de trabajo de Ollama, ya que la generación de texto puede ser intensiva en recursos. Mínimo 10 gigas de RAM 2 CPUs, pero recomiendo 24 Gigas de RAM y 4 CPUs.

Asegúrate de que tu archivo app.py es correcto y no tiene ningún error. Para resolver el problema del torch, verifica que la instalación de torch se realiza correctamente y que no hay conflictos con otras librerías.

Pasos para verificar

  1. Comprueba la instalación de torch:
    • Ejecuta pip list en el contenedor para asegurarte de que torch está instalado. Puedes agregar un paso de verificación en el Dockerfile después de la instalación de las dependencias:
    RUN pip show torch
  2. Revisar el archivo app.py:
    • Asegúrate de que torch está importado correctamente en app.py:
    import torch
  3. Probar el contenedor:
    • Construye y ejecuta el contenedor.Si el error persiste, intenta correr el contenedor en modo interactivo para depurar:
    run -it --rm <image_name> /bin/bash
    • Una vez dentro del contenedor, puedes ejecutar los comandos manualmente para revisar si todo está instalado y configurado correctamente.

Estos pasos deberían ayudarte a resolver el problema con la importación de torch y asegurarte de que todo funciona correctamente en tu contenedor, puedes usar SSH o la consola de Docker para usar esos códigos, también contamos con el servicio instalación de aplicaciones, si tienes problemas. usa el chat de la aplicación y dile que necesitas un Agente.

Conclusión

Con estos sencillos pasos, has instalado Ollama en EasyPanel y estás listo para empezar a generar texto con tu nuevo microservicio. EasyPanel hace que la gestión de contenedores Docker sea accesible y eficiente, permitiéndote enfocarte en desarrollar y desplegar tus aplicaciones sin complicaciones.