Para configurar un servidor con ollama hay que seguir los siguientes pasos:
Configurar la zona horaria
sudo timedatectl set-timezone Europe/Madrid
ubuntu-drivers devices sudo apt install nvidia-driver-595-server-open sudo reboot nvidia-smi sudo apt install nvtop nvtop
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
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 | +-----------------------------------------------------------------------------------------+
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
nvcc --version
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
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
sudo apt install nginx sudo systemctl status nginx
/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
}
server y modifica el nombre de dominio y el puerto interno.
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;
...
}
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
sudo apt install fail2ban
sudo apt update && sudo apt install unattended-upgrades update-notifier-common -y sudo dpkg-reconfigure --priority=low unattended-upgrades
/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";
sudo unattended-upgrades --dry-run --debug
curl -fsSL https://ollama.com/install.sh | sh
11434
sudo systemctl status ollama curl http://127.0.0.1:11434
nvtop mientras hay un modelo en marcha.
ollama pull llama3.1
ollama list ollama run llama3.1 "Hola, ¿funcionas?"