====== 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 =====
* Instalar la tarjeta gráfica
ubuntu-drivers devices
sudo apt install nvidia-driver-595-server-open
sudo reboot
nvidia-smi
sudo apt install nvtop
nvtop
===== CUDA =====
* Instalar 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 |
+-----------------------------------------------------------------------------------------+
* El ''PATH''
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
* Comprobar que funciona:
nvcc --version
===== NVIDIA Container Toolkit =====
* Añadir la clave GPG y el repositorio
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
* Instalar el toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
* Configurar el runtime de Docker
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
* Verificar
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)
* Bonjour: Implementación de Apple
* Avahi: Implementación de Linux
sudo apt install avahi-daemon
sudo systemctl enable --now avahi-daemon
===== NGINX =====
* Instalar NGINX
sudo apt install nginx
sudo systemctl status nginx
* Crear el fichero ''/etc/nginx/sites-available/servicios.conf''
# --- 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.
* Modificar ''nginx.conf'' y añade la linea '' client_max_body_size 100M;'' es para permitir subir ficheros grandes.
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
client_max_body_size 100M;
...
}
* Finalizar la configuración
sudo ln -s /etc/nginx/sites-available/servicios.conf /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
* Comprobar si la instalación es correcta
sudo nginx -t
* Si es correcta, reiniciar NGINX
sudo systemctl reload nginx
===== Programas de seguridad =====
* Evitar ataques de fuerza bruta.
sudo apt install fail2ban
* Instalar automáticamente los parches de seguridad
sudo apt update && sudo apt install unattended-upgrades update-notifier-common -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
* En ''/etc/apt/apt.conf.d/50unattended-upgrades'' descomentar las siguiente líneas y dejarlas como se indica:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "06:00";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
* Comprobar si está bien configurado
sudo unattended-upgrades --dry-run --debug
===== Ollama =====
* Instalar Ollama
curl -fsSL https://ollama.com/install.sh | sh
* Comprobar que el servicio está activo y escuchando en el puerto ''11434''
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.
* Descargar (pull) un modelo
ollama pull llama3.1
* Comprobar los modelos descargados y probar uno
ollama list
ollama run llama3.1 "Hola, ¿funcionas?"