Tabla de Contenidos

Configurar un servidor con Ollama

Para configurar un servidor con ollama hay que seguir los siguientes pasos:

Zona horaria

Configurar la zona horaria

sudo timedatectl set-timezone Europe/Madrid

Tarjeta gráfica

	 
ubuntu-drivers devices	 
sudo apt install nvidia-driver-595-server-open	 
sudo reboot	 
nvidia-smi	 
sudo apt install nvtop	 
nvtop	 

CUDA

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt install cuda-toolkit-13-2

Ejecutar nvidia-smi y ver la versión máxima que soporta de CUCA. En este caso es CUDA 13.2

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.71.05              Driver Version: 595.71.05      CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4090        Off |   00000000:01:00.0 Off |                  Off |
|  0%   43C    P8              9W /  450W |       1MiB /  24564MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

nvcc --version

NVIDIA Container Toolkit

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' |   sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

docker run --rm --gpus all ubuntu nvidia-smi

Zeroconf

Para que el servidor linux publique su nombre DNS con mDNS (multicast DNS) y DNS-SD (Service Discovery)

sudo apt install avahi-daemon
sudo systemctl enable --now avahi-daemon

NGINX


sudo apt install nginx
sudo systemctl status nginx

# --- SERVICIO 1 ---
server {
    listen 80;
    server_name ollama.iabd2.cip.fpmislata.com;

    location / {
        proxy_pass http://127.0.0.1:11434;
                # Forzamos las cabeceras para que Ollama crea que la petición es local
        proxy_set_header Host "localhost";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # IMPORTANTE: A veces Ollama necesita que el Origin sea explícito
        proxy_hide_header 'Access-Control-Allow-Origin';
        add_header 'Access-Control-Allow-Origin' '*';
    }
}

# --- OTRO SERVICIO ---
server {
    listen 80;
    server_name OTROSERVICIO.iabd2.cip.fpmislata.com;

    location / {
        proxy_pass http://127.0.0.1:OTROPUERTO;
        include proxy_params;
    }
}

# --- SERVICIO POR DEFECTO (Opcional) ---
# Esto responde si alguien entra por IP o un dominio no configurado
server {
    listen 80 default_server;
    server_name _;
    return 444; # Cierra la conexión sin responder nada
}

Si quieres añadir otro servicio además de ollama, copia las líneas server y modifica el nombre de dominio y el puerto interno.

http {
    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;
    # server_tokens off;
    client_max_body_size 100M;
    ...
}

sudo ln -s /etc/nginx/sites-available/servicios.conf /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

sudo nginx -t

sudo systemctl reload nginx

Programas de seguridad

sudo apt install fail2ban

sudo apt update && sudo apt install unattended-upgrades update-notifier-common -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "06:00";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

sudo unattended-upgrades --dry-run --debug

Ollama

curl -fsSL https://ollama.com/install.sh | sh

sudo systemctl status ollama
curl http://127.0.0.1:11434

El instalador detecta la GPU NVIDIA automáticamente (por eso este paso va después de instalar los drivers). Para confirmar que Ollama usa la GPU, ejecuta nvtop mientras hay un modelo en marcha.

ollama pull llama3.1

ollama list
ollama run llama3.1 "Hola, ¿funcionas?"