====== 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?"