Hay una oferta que suena demasiado buena para ser cierta: un VPS con 2 OCPU, 12 GB de RAM, 200 GB de disco y 10 TB de salida al mes por 0 €. No es una prueba de 30 días ni un cupón de bienvenida. Es el Always Free de Oracle Cloud, una capa gratuita que lleva años funcionando y que en 2026 sigue en pie, aunque con una letra pequeña que casi nadie explica: desde junio de 2026, la máquina es la mitad de grande que antes, y la capacidad no está garantizada.
Este artículo cuenta lo que necesitas para conseguirla, configurarla bien y usarla como servidor web, backend o frontend. Empieza por lo básico —qué es un VPS y qué regala Oracle exactamente—, sigue con el registro y la creación de la instancia paso a paso, y termina con el acceso por SSH, el cortafuegos, Docker, HTTPS, la gestión diaria y una lista de usos reales. Al final hay un ejemplo rápido y las fuentes oficiales.
Los datos están consultados el 23 de octubre de 2026. Oracle puede cambiar las condiciones; de hecho, ya lo hizo en junio. Antes de registrar nada, contrasta las cifras en la página oficial que enlazo al final.
La promesa y la letra pequeña. El Always Free no es un servidor dedicado ni un contrato de alojamiento. Es una máquina virtual en la región doméstica de tu cuenta, sin SLA, sin soporte técnico incluido y sujeta a límites de capacidad. Para un portfolio, una API, un entorno de pruebas o un proyecto personal, sobra. Para producción crítica, no.
Qué es un VPS y por qué Oracle te lo regala
Un VPS (Virtual Private Server) es una máquina virtual que corre en un centro de datos ajeno. Tiene su propio sistema operativo, su propia IP pública y su propio usuario root o sudo. Para ti se comporta como un ordenador encendido las 24 horas: instalas paquetes, levantas servicios, abres puertos, programas tareas y lo administras por SSH. La diferencia con un hosting compartido es que no compartes el sistema operativo con nadie; la diferencia con un PaaS es que tú eliges qué corre y cómo.
La comparación rápida:
| Aspecto | Hosting compartido | VPS | PaaS | Tu PC |
|---|---|---|---|---|
| Qué controlas | Archivos y base de datos | Sistema completo | Solo la aplicación | Todo |
| Root | No | Sí | No | Sí |
| IP pública y puertos | Limitados | Sí | Gestionados | Depende de tu red |
| Encendido 24/7 | Sí | Sí | Sí | No |
| Trabajo de administración | Bajo | Medio | Bajo | Alto |
| Coste típico | 3–10 €/mes | 5–20 €/mes | Variable | Electricidad |
| Este artículo | — | Oracle Always Free | — | — |
¿Por qué regala esto una empresa como Oracle? Porque le interesa que aprendas su nube, que pruebes sus servicios y que, si el proyecto crece, te quedes. Es una estrategia comercial clásica: la capa gratuita es la puerta de entrada a su plataforma. Eso no le quita valor a lo que recibes. Un VPS de 2 OCPU y 12 GB es más que suficiente para aprender Linux, publicar una web o mantener una API con su base de datos.
Lo que incluye el Always Free en 2026
Oracle Cloud Free Tier mezcla dos cosas que conviene no confundir:
- Free Trial: 300 $ de crédito durante 30 días para probar servicios de pago.
- Always Free: recursos gratuitos sin fecha de caducidad, sujetos a límites y capacidad.
Cuando el crédito se agota o pasan los 30 días, los recursos de pago se recuperan. Los recursos Always Free siguen ahí. La tarjeta que pides al registrarte sirve para verificar tu identidad; no se cobra nada mientras te mantengas dentro de los límites gratuitos. Puede aparecer una retención temporal del banco, que se libera en unos días.
| Recurso | Lo que incluye | Detalles |
|---|---|---|
| Ampere A1 (ARM) | 1.500 horas-OCPU y 9.000 horas-GB al mes | Equivale a 2 OCPU y 12 GB en una o dos VMs. 2 Gbps. |
| AMD Micro | 2 VMs VM.Standard.E2.1.Micro |
1/8 de OCPU y 1 GB cada una. Hasta 50 Mbps. |
| Bloque | 200 GB en total | Incluye volúmenes de arranque y de bloque. 5 copias de seguridad. |
| Object Storage | 20 GB | Estándar, acceso poco frecuente y archivo. 50.000 peticiones/mes. |
| Salida de red | 10 TB/mes | La entrada no se factura. |
| Balanceador | 1 flexible de 10 Mbps | Y 1 Network Load Balancer. |
| Red | 2 VCN | IPv4 e IPv6. |
| Bases de datos | 2 Autonomous Database | 1 OCPU y 20 GB cada una, 20 sesiones. |
| Correo | 3.000 correos/mes | Email Delivery; el puerto 25 saliente está bloqueado. |
| Observabilidad | Monitoring y Logging | 10 GB/mes de logs, 500 millones de puntos de ingesta. |

Hay una frase que se malinterpreta mucho: 12 GB es el total de la cuenta, no 12 GB por VM. Puedes montar una sola máquina de 2 OCPU y 12 GB o repartir la cuota en dos máquinas de 1 OCPU y 6 GB. Lo que no puedes es crear dos de 2/12: eso duplica el consumo y deja de ser gratis.
El cambio de 2026: de 4 OCPU y 24 GB a 2 OCPU y 12 GB
Durante años, la guía de moda decía “crea una instancia de 4 OCPU y 24 GB”. Era verdad hasta junio de 2026. Desde entonces, la asignación Always Free de Ampere A1 es de 1.500 horas-OCPU y 9.000 horas-GB al mes, equivalentes a 2 OCPU y 12 GB corriendo todo el mes. Oracle no hizo una campaña: actualizó la documentación y las instancias que siguieron en 4/24 quedaron fuera de la cuota. Ahora se recortan a 2/12 o generan consumo.
Las cuentas son sencillas. Un mes de 31 días tiene 744 horas:
- 2 OCPU × 744 h = 1.488 horas-OCPU. Cabe en las 1.500.
- 12 GB × 744 h = 8.928 horas-GB. Cabe en las 9.000.
- 4 OCPU × 744 h = 2.976 horas-OCPU. Casi el doble de lo gratuito.
Por eso la configuración correcta hoy es 2 OCPU y 12 GB, no 4/24. Si vienes de una guía antigua, entra en la instancia y baja la forma antes de que Oracle la apague. Si vas a crearla ahora, no arrastres la cifra vieja.
Lo que no cambia
La reducción afectó a la CPU y la RAM, pero el resto del paquete sigue siendo generoso:
- 200 GB de disco para el arranque y los volúmenes.
- 10 TB de salida al mes, suficiente para una web pequeña o mediana.
- 2 VMs AMD Micro de 1 GB, útiles como plan B o para un servicio ligero.
- 20 GB de Object Storage para copias de seguridad.
- Dos bases de datos autónomas de 20 GB.
No confundas “gratis” con “sin límites”. Si creas una instancia de 4/24, un volumen de 300 GB o una segunda VM de 2/12, estás fuera del Always Free. Oracle puede cobrarte el exceso o apagar lo que no cabe. Revisa siempre Limits, Quotas and Usage después de crear recursos.
La mejor configuración posible
Si el objetivo es un servidor web/backend con base de datos, la mejor configuración dentro del free tier es esta:
| Decisión | Valor recomendado | Por qué |
|---|---|---|
| Máquina | 1 VM | Menos overhead y más RAM disponible para una sola app. |
| Forma | VM.Standard.A1.Flex |
2 OCPU y 12 GB, dentro del Always Free. |
| Sistema | Ubuntu 24.04 LTS (aarch64) | Soporte largo, paquetes actuales y Docker sin sorpresas. |
| Disco | 200 GB de arranque | Aprovecha todo el bloque gratuito y evita quedarte sin espacio. |
| Red | IP pública + 2 Gbps | Suficiente para servir HTTP/HTTPS y SSH. |
| Región | La más cercana con capacidad | La región doméstica no se puede cambiar después. |
| Administración | SSH + Docker Compose | Reproducible, portable y fácil de copiar a otro servidor. |
Por qué una sola VM de 2/12
Repartir en dos de 1/6 suena a más aislamiento, pero también significa dos sistemas que actualizar, dos cortafuegos que revisar y menos margen para compilar o para una base de datos. Con 12 GB en una sola máquina puedes correr Caddy, una API, PostgreSQL, Redis y un par de servicios de monitorización sin ahogarte. Si tu prioridad es separar la base de datos de la aplicación, la opción de 2×1/6 es válida; solo ten claro que cada mitad tendrá 6 GB.
Por qué no 4/24
Porque ya no es gratis. El plan antiguo consumía el doble de la cuota actual. Oracle puede apagar la instancia o facturarte el exceso. No es una configuración “mejor”: es una configuración de otra época.
Alternativas si no hay capacidad
El error “Out of host capacity” es habitual, sobre todo en regiones muy pobladas. No significa que hayas hecho algo mal: Oracle no garantiza que haya hueco para formas Always Free en tu región. El orden de actuación es:
- Prueba otro dominio de disponibilidad (AD-1, AD-2, AD-3) en la misma región.
- Reintenta en horas valle; la capacidad se libera por momentos.
- Crea primero 1 OCPU / 6 GB y amplía a 2/12 si aparece hueco.
- Plan C: usa las dos AMD Micro de 1 GB para una web estática o un proxy.
Si después de varios intentos no aparece la forma grande, el free tier no te puede garantizar esa máquina. Puedes montar el proyecto en las AMD Micro (1 GB cada una) para una web estática, o esperar a que se libere capacidad. Lo que no hagas es crear una instancia de 4/24 “a ver si cuela”: eso ya no entra en la cuota.
La región doméstica se elige una vez
Al registrarte eliges la home region. Los recursos Always Free solo se pueden crear allí, y la región no se cambia después. Elige la más cercana a tus usuarios y con mejor latencia para ti: Madrid, Frankfurt, París o Marsella suelen ser buenas opciones desde España. Si eliges una región lejana, cada comando por SSH se nota.
Registro paso a paso
El alta es gratuita, pero tiene más fricción de la que parece. Necesitas un correo, un teléfono y una tarjeta de crédito o débito que funcione como crédito. No valen tarjetas virtuales, de un solo uso ni prepago.

- Entra en https://signup.cloud.oracle.com/ o en la página del Free Tier y pulsa “Start for free”.
- Elige país/territorio de facturación, nombre, apellidos y correo. Recibirás un código para verificar la dirección.
- Crea la contraseña y elige la home region. Este paso es el más importante: no se puede deshacer.
- Rellena la dirección y el teléfono. Deben coincidir con los datos bancarios.
- Añade la tarjeta. Oracle puede hacer una retención temporal para comprobar que está activa; no es un cargo.
- Activa la autenticación multifactor (MFA) cuando la consola te lo ofrezca.
Errores típicos y qué hacer:
- La tarjeta no pasa: revisa que la dirección coincida exactamente con la del banco; prueba otra tarjeta; desactiva VPN y bloqueadores.
- “No disponible en tu país”: elige una región adyacente o contacta con Oracle. La disponibilidad del Free Tier varía.
- Ya existe una cuenta: solo se permite una cuenta gratuita por persona. No intentes crear varias; Oracle puede suspenderlas.
- No llega el código: revisa spam y espera unos minutos. Si el correo es corporativo, prueba uno personal.
La tarjeta no es una suscripción. Oracle la usa para verificar identidad y cobrar solo si sales de los límites gratuitos o contratas recursos de pago. Si no quieres pagar nada, no crees recursos fuera de Always Free y revisa el consumo en Billing & Cost Management.
Crear la instancia paso a paso
Con la cuenta lista, entra en https://cloud.oracle.com/. Comprueba arriba a la derecha que estás en tu región doméstica. La consola cambia de aspecto cada pocos meses, pero el flujo es el mismo.
1. Abre el asistente
Menú de hamburguesa → Compute → Instances → Create instance. También puedes usar el atajo “Create a VM instance” de la pantalla de inicio.

2. Nombre, compartimento y colocación
- Name: algo reconocible, por ejemplo
web-01. - Compartment: el compartimento raíz o uno que hayas creado para el proyecto.
- Availability domain: elige uno. Si el que pruebas no tiene capacidad, vuelve aquí y cambia.
- Capacity type: deja On-demand.
3. Imagen: Ubuntu 24.04
Pulsa Change image, selecciona Ubuntu y elige Canonical Ubuntu 24.04 (o la versión LTS más reciente que ofrezca Oracle). Asegúrate de que la imagen es aarch64/ARM, no x86.

4. Forma: Ampere A1, 2 OCPU y 12 GB
Pulsa Change shape, elige la serie Ampere y la forma VM.Standard.A1.Flex. Mueve los controles hasta 2 OCPU y 12 GB. La consola debe mostrar la etiqueta Always Free Eligible y un coste estimado de 0.

Si la consola te deja poner 4 OCPU, no lo hagas. El control permite más de lo que cubre el free tier. La cifra que importa es la de la documentación: 2 OCPU y 12 GB. El estimador de costes a veces muestra un importe por el volumen de arranque; comprueba que el total de disco no supera los 200 GB.
5. Red
Lo más rápido es dejar que el asistente cree una VCN nueva con subred pública y que asigne una IP pública. Si ya tienes una VCN, selecciónala y asegúrate de que la subred es pública y tiene una Internet Gateway. Sin IP pública no podrás entrar por SSH ni servir HTTP.
6. Claves SSH
Elige Generate a key pair for me y descarga la clave privada. También puedes pegar tu clave pública si ya tienes una. La clave privada no se puede recuperar después; guárdala en ~/.ssh/ y no la subas a Git.

7. Volumen de arranque
Activa Specify a custom boot volume size y pon 200 GB. Es el máximo gratuito y te deja margen para Docker, imágenes, bases de datos y logs. Si prefieres separar datos, puedes crear 100 GB de arranque y 100 GB de bloque; para empezar, 200 GB de arranque es más simple. Deja el rendimiento en el valor por defecto.
8. Crear y comprobar
Pulsa Create. La instancia pasa por PROVISIONING hasta RUNNING. Cuando termine, copia la Public IP address y confirma que el usuario es ubuntu.

Si aparece “Out of host capacity”, vuelve a la sección de capacidad: cambia de AD, reintenta o baja a 1/6. No es un fallo de tu cuenta.
Primer acceso y configuración base
Abre una terminal en tu PC. En Windows 10/11, PowerShell ya incluye OpenSSH. En macOS y Linux, también.
ssh -i ~/.ssh/oracle_web ubuntu@TU_IP_PUBLICA
En Windows, la ruta suele ser C:\Users\TU_USUARIO\.ssh\oracle_web. Si OpenSSH se queja de permisos, restringe el archivo:
icacls.exe "$env:USERPROFILE\.ssh\oracle_web" /inheritance:r /grant:r "$env:USERNAME:R"
La primera vez te pedirá aceptar la huella del servidor. Escribe yes. Si todo va bien, verás el prompt de Ubuntu.
Un alias para no repetir la IP
Crea o edita ~/.ssh/config en tu PC:
Host oracle
HostName TU_IP_PUBLICA
User ubuntu
IdentityFile ~/.ssh/oracle_web
ServerAliveInterval 60
A partir de ahí, ssh oracle es todo lo que necesitas.
Puesta a punto
sudo apt update && sudo apt upgrade -y
sudo apt install -y fail2ban unattended-upgrades btop tmux git curl gnupg ca-certificates
sudo timedatectl set-timezone Europe/Madrid
sudo hostnamectl set-hostname web-01
Comprueba que estás en ARM y que ves los recursos esperados:
uname -m # aarch64
nproc # 2
free -h # ~12 GB
df -h / # ~200 GB
Endurecer SSH
Ubuntu ya viene con acceso por clave y sin contraseña de root, pero conviene fijarlo:
sudo tee /etc/ssh/sshd_config.d/99-hardening.conf >/dev/null <<'EOF'
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
EOF
sudo systemctl reload ssh
Activa fail2ban y las actualizaciones automáticas:
sudo systemctl enable --now fail2ban
sudo dpkg-reconfigure --priority=low unattended-upgrades
En el menú de unattended-upgrades, elige Yes. Si prefieres controlar tú las actualizaciones, salta este paso y revisa apt cada semana.
Swap opcional
Con 12 GB no es imprescindible, pero una swap de 2 GB evita que un pico de compilación o de base de datos mate procesos:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
El doble cortafuegos de Oracle
Aquí es donde más gente se atasca. Oracle tiene dos cortafuegos y hay que abrir el paso en los dos:
- Security List de la VCN (nivel de nube).
- iptables del sistema operativo (nivel de máquina).
Abrir solo uno es la causa número uno de “la web no carga”.
Security List
En la consola, entra en la instancia → Networking → enlace de la Subnet → pestaña Security → Default Security List. Añade reglas de entrada:
| Origen | Protocolo | Puerto | Para qué |
|---|---|---|---|
| Tu IP /32 | TCP | 22 | SSH (mejor que abrirlo a todo internet) |
| 0.0.0.0/0 | TCP | 80 | HTTP y validación del certificado |
| 0.0.0.0/0 | TCP | 443 | HTTPS |

No abras 3000, 5432 ni 6379. Esos puertos se quedan dentro de Docker o de la red privada.
iptables en Ubuntu
Las imágenes de Oracle traen reglas de iptables que bloquean el tráfico nuevo. Añade 80 y 443 antes de la regla de rechazo y guarda los cambios:
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
Verifica que están en la posición correcta:
sudo iptables -L INPUT -n --line-numbers
Si tu cadena INPUT tiene otra estructura, ajusta el número para que las reglas queden antes del REJECT final. No uses ufw a la vez: puede entrar en conflicto con las reglas de Oracle. Con Docker, el tráfico publicado pasa por NAT y puede no tocar INPUT; aun así, deja las dos capas bien configuradas para cuando ejecutes algo nativo.
Docker y Caddy
Docker te da un entorno reproducible; Caddy te da HTTPS automático con una configuración mínima. Instala Docker desde el repositorio oficial (soporta ARM64):
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
Cierra la sesión y vuelve a entrar (o ejecuta newgrp docker) para usar Docker sin sudo:
docker run --rm hello-world
docker compose version
El socket de Docker es root. Pertenecer al grupo docker equivale a tener privilegios de administrador. No añadas usuarios que no deban poder controlar el servidor.
El ejemplo práctico completo está al final, para que el núcleo de la entrada siga siendo el VPS y no un tutorial de una aplicación concreta.
Gestión desde el terminal
El día a día se resume en un puñado de comandos. Esta es la chuleta que de verdad se usa:
| Qué quieres | Comando |
|---|---|
| Conectarte | ssh oracle |
| Mantener sesiones vivas | tmux new -s ops · tmux a -t ops |
| Ver contenedores | docker compose ps |
| Ver logs en vivo | docker compose logs -f --tail=100 |
| Reiniciar un servicio | docker compose restart caddy |
| Actualizar y recrear | docker compose up -d --build |
| Consumo de recursos | docker stats · btop |
| Disco y memoria | df -h · free -h |
| Errores del sistema | journalctl -p 3 -xb |
| Actualizar Ubuntu | sudo apt update && sudo apt upgrade -y |
| Reiniciar | sudo reboot |
| Estado de fail2ban | sudo fail2ban-client status sshd |
| Puertos a la escucha | ss -tulpn |
| IP y ruta | curl -4 ifconfig.me · ip a |
Desplegar cambios
Si el proyecto vive en Git:
cd /opt/web
git pull
docker compose up -d --build
docker compose logs -f --tail=50
Si prefieres subir archivos desde tu PC:
rsync -avz --delete ./dist/ oracle:/opt/web/site/
Para trabajos largos, usa tmux: si se cae la conexión, el proceso sigue. Ctrl+b y luego d para desconectar; tmux a -t ops para volver.
Copias de seguridad
El free tier no incluye backups automáticos de tu aplicación. Ten siempre una copia fuera del VPS. Para un sitio estático:
mkdir -p ~/backups
tar -czf ~/backups/web-$(date +%F).tar.gz -C /opt web
Si tu stack incluye PostgreSQL:
docker compose exec -T db pg_dump -U app app | gzip > ~/backups/app-$(date +%F).sql.gz
Un cron diario que conserva siete días:
0 3 * * * tar -czf /home/ubuntu/backups/web-$(date +\%F).tar.gz -C /opt web && find /home/ubuntu/backups -name '*.tar.gz' -mtime +7 -delete
Descarga una copia a tu PC de vez en cuando:
scp oracle:~/backups/web-*.tar.gz ./
Y prueba la restauración. Un backup que nunca se ha restaurado no es un backup:
tar -xzf web-2026-10-23.tar.gz -C /tmp/restore
Monitorización y coste
- Disponibilidad: un monitor externo que haga ping a
https://tu-dominio.comcada minuto. Si no responde, aviso. - Recursos:
btop,docker statsy los gráficos de OCI Monitoring. - Coste: en Billing & Cost Management → Cost Analysis, comprueba que el uso es 0. En Limits, Quotas and Usage, confirma que sigues en 2 OCPU, 12 GB y 200 GB.
- Alerta: crea un presupuesto de 1 $ con aviso al 1 %. No es para pagar: es para enterarte si algo se sale de la cuota.
Qué puedes montar con 2 OCPU y 12 GB
Este es el punto fuerte del free tier: no es un juguete. Con 2 OCPU ARM y 12 GB puedes mantener un stack real. Esta es mi tabla de encaje:
| Uso | Encaje | Notas |
|---|---|---|
| Blog o portfolio (Astro, Hugo, Next static) | Excelente | Caddy sirve los archivos; sobra máquina. |
| Next.js / Nuxt / SvelteKit SSR | Muy bueno | 2 vCPU van bien para tráfico bajo/medio. |
| API REST o GraphQL (Node, Go, Python, PHP) | Excelente | Ideal para backend + Postgres. |
| PostgreSQL / MySQL / Redis | Bueno | 12 GB dan margen; no expongas los puertos. |
| n8n, Gitea, Vaultwarden, Uptime Kuma | Muy bueno | Varios contenedores ligeros conviven sin problema. |
| Runner de CI | Bueno | Para jobs ligeros; compila en ARM. |
| VPN WireGuard | Excelente | Consumo mínimo y muy útil. |
| Servidor de Minecraft | Limitado | 2–5 jugadores; necesita una build compatible con ARM. |
| Jellyfin | Limitado | Direct play sí; transcodificación no. |
| Ollama / modelos locales | Justo | Modelos pequeños en CPU; no esperes velocidad. |
| Servidor de correo | No | El puerto 25 está bloqueado por defecto. |
| Windows | No | La forma A1 es ARM y no soporta Windows. |
| Producción crítica | No | Sin SLA, sin alta disponibilidad y con capacidad no garantizada. |
Perfiles concretos
- Freelance o estudio: portfolio estático, formulario de contacto, blog y un pequeño CMS. Caddy + un contenedor y listo.
- Desarrollador backend: API + PostgreSQL + Redis + un entorno de staging. Aquí los 12 GB se agradecen.
- Self-hosting: Vaultwarden, Gitea, Uptime Kuma, n8n, un proxy inverso y backups. Es el uso más habitual de este free tier.
- Aprendizaje: Linux, SSH, systemd, Docker, redes y TLS sin pagar un curso de cloud. Si vienes de cero, empieza por Git: el historial que salva y por El equipo de desarrollo en 2026.
Lo que no haría: montar la web principal de un negocio con clientes sin backups, sin monitorización y sin plan B. El free tier es estupendo para empezar; si el proyecto empieza a importar, necesitas algo con SLA.
Ejemplo rápido: una web con HTTPS
No hace falta montar una aplicación entera para comprobar que el servidor funciona. Este ejemplo publica una página estática con Caddy en Docker, con certificado automático. Son tres archivos y un comando.
Crea el directorio y los archivos:
sudo mkdir -p /opt/web/site
sudo chown -R $USER:$USER /opt/web
cd /opt/web
Guarda cada uno de los tres bloques siguientes en su archivo (compose.yaml, Caddyfile y site/index.html).
compose.yaml:
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./site:/srv:ro
- caddy_data:/data
- caddy_config:/config
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
caddy_data:
caddy_config:
Caddyfile (cambia el dominio):
tu-dominio.com {
encode zstd gzip
root * /srv
file_server
}
site/index.html:
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi VPS gratis</title>
</head>
<body>
<h1>Funciona.</h1>
<p>Servido desde Oracle Cloud Always Free con Caddy y HTTPS.</p>
</body>
</html>
Apunta un registro A de tu dominio a la IP pública del VPS. Cuando propague:
docker compose up -d
docker compose logs -f caddy
En cuanto el DNS apunte y los puertos estén abiertos, Caddy pide el certificado y empieza a servir. Comprueba:
curl -I https://tu-dominio.com
Para una API, cambia el Caddyfile por:
tu-dominio.com {
reverse_proxy app:3000
}
y añade el servicio app a Compose. El puerto 3000 se queda dentro de la red de Docker; el único que mira a internet es Caddy. Si algo falla, revisa en este orden: DNS, Security List, iptables y logs de Caddy.
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
Out of host capacity |
No hay hueco para A1 en tu AD | Cambia de AD, reintenta o baja a 1/6. |
SSH: Connection timed out |
Security List sin el 22 o instancia parada | Revisa la regla de entrada y el estado RUNNING. |
SSH: Permission denied (publickey) |
Usuario, clave o permisos incorrectos | Usa ubuntu, la clave privada correcta y chmod 600. |
| La web no carga por IP | Falta el puerto 80/443 en Security List o en iptables |
Abre las dos capas y comprueba con curl -I localhost. |
| Caddy no obtiene certificado | DNS mal apuntado o puertos cerrados | Espera la propagación; revisa 80/443 y el log de Caddy. |
502 Bad Gateway |
La app no escucha o el nombre del servicio no resuelve | docker compose logs app; usa app:3000, no localhost. |
permission denied al usar Docker |
El usuario no está en el grupo docker |
sudo usermod -aG docker $USER y vuelve a entrar. |
| Disco lleno | Imágenes y logs acumulados | docker system df, docker image prune, rota logs. |
| La instancia se apagó sola | Política de inactividad o cambio de cuota | Revisa el correo de Oracle; reactívala o recrea. |
| Cargos inesperados | Recurso fuera de Always Free | Revisa Limits, Quotas and Usage y elimina el exceso. |
Límites, riesgos y letra pequeña
El precio es imbatible, pero no es un servidor mágico. Esto es lo que debes saber antes de confiarle un proyecto:
- Capacidad no garantizada. El error de capacidad es real y puede impedirte crear la máquina que quieres. No hay SLA de aprovisionamiento.
- Reclamación por inactividad. Oracle puede recuperar instancias Always Free que, durante 7 días, tengan el percentil 95 de CPU por debajo del 20 %, la red por debajo del 20 % y, en las formas A1, la memoria por debajo del 20 %. Una web con poco tráfico puede entrar en ese perfil. Mantén el servidor con uso real, monitorización y backups; si lo pierdes, poder recrearlo rápido es la diferencia entre una molestia y un desastre.
- Sin SLA ni soporte. Para cuentas solo Always Free, el soporte es comunitario. No hay garantía de disponibilidad.
- Una cuenta por persona. Crear varias cuentas gratuitas está prohibido y puede acabar en suspensión.
- Cuenta inactiva. Una cuenta sin actividad durante 30 días puede considerarse abandonada.
- Datos sin backups. Oracle no hace copias de tu aplicación. Los 5 backups de volumen no sustituyen un
pg_dumpfuera del servidor. - ARM no es x86. Algunas imágenes de Docker, binarios propietarios y dependencias nativas no tienen build para
aarch64. Comprueba el soporte antes de elegir el stack. - Un solo servidor. No hay alta disponibilidad. Si la instancia cae, el servicio cae.
- 10 TB de salida. Es mucho, pero si sirves vídeo o descargas grandes, se puede agotar. A partir de ahí, se factura.
- La cuota puede cambiar. En 2026 pasó: 4/24 se convirtió en 2/12. No construyas un modelo de negocio que dependa de que el free tier no cambie.
La regla de oro: trata el VPS como algo reemplazable. Ten el código en Git, la configuración en un repositorio, los datos en backups fuera de Oracle y un README con los pasos para recrearlo. Si mañana desaparece, lo levantas en una hora.
Checklist final
- La home region es la correcta; no se puede cambiar después.
- La instancia es
VM.Standard.A1.Flexcon 2 OCPU y 12 GB, y muestra Always Free Eligible. - La imagen es Ubuntu 24.04 aarch64 y el disco de arranque es de 200 GB.
- La clave privada SSH está guardada y tiene permisos restrictivos.
- La Security List permite 22, 80 y 443; el 22 está limitado a tu IP si es posible.
-
iptablestiene las reglas de 80/443 antes delREJECTy se han guardado connetfilter-persistent. -
fail2bany las actualizaciones automáticas están activos. - Docker funciona sin
sudoy Caddy sirve HTTPS con un dominio real. - Hay una copia de seguridad fuera del VPS y has probado a restaurarla.
- En Limits, Quotas and Usage sigues dentro de 2 OCPU, 12 GB y 200 GB.
Conclusión
El Always Free de Oracle sigue siendo, en 2026, una de las mejores formas de tener un servidor real por 0 €: 2 OCPU, 12 GB de RAM, 200 GB de disco, 10 TB de salida y una IP pública. Con eso se monta un portfolio, una API, un PostgreSQL, un n8n, un Gitea o un laboratorio de Linux sin pagar hosting.
La letra pequeña no está en el precio, está en la disponibilidad: la cuota se redujo a la mitad en junio, la capacidad no está garantizada y Oracle puede reclamar instancias inactivas. Si lo asumes y montas backups, el free tier es difícil de superar. Si necesitas garantías, SLA o recursos dedicados, este no es tu producto.
Mi recomendación concreta: una VM de 2 OCPU y 12 GB, Ubuntu 24.04, 200 GB, Caddy y Docker, con los puertos 22/80/443 abiertos y una copia de seguridad fuera del servidor. Con esa base, cualquier proyecto web que quepa en 12 GB cabe aquí.
Fuentes oficiales
Datos consultados el 23 de octubre de 2026. Oracle puede actualizar límites y condiciones; verifica siempre antes de registrar o dimensionar.
- Oracle Cloud Free Tier
- Preguntas frecuentes del Free Tier
- Always Free Resources (documentación)
- Oracle Cloud Infrastructure Free Tier (documentación)
- Registro en Oracle Cloud
- Consola de Oracle Cloud
- Formas de computación (Compute Shapes)
- Crear una instancia
- Security Lists
- Block Volume
- Object Storage
- Regiones de Oracle Cloud
- Ampere A1 Compute
- Presupuestos y alertas de coste