Oracle Cloud Free Tier : comment j'héberge des applications web en production pour 0 $/mois (à vie)
Le niveau Always Free d'Oracle Cloud vous offre une VM avec 1 Go de RAM, 50 Go de stockage et une IP publique - de façon permanente, sans astuce de carte bancaire. Voici exactement comment je l'ai configurée, les pièges qui vous feront perdre votre après-midi si vous ne les connaissez pas, et pourquoi elle surpasse l'instance AWS EC2 la moins chère.
Pourquoi le palier gratuit d'Oracle Cloud existe (et pourquoi il est légitime)
Abordons l'éléphant dans la pièce : oui, c'est réellement gratuit. Pour toujours. Pas « gratuit pendant 12 mois » comme AWS. Pas « gratuit avec 200 $ de crédits qui expirent » comme Azure. Le palier Always Free d'Oracle est une allocation permanente qui n'expire pas, ne se met pas à niveau automatiquement, et ne vous surprend pas avec une facture.
Pourquoi Oracle fait-il cela ? Parce qu'ils sont arrivés en retard dans la course au cloud et ont besoin que les développeurs essaient leur plateforme. Leur pari est qu'un certain pourcentage passera aux paliers payants. Mais même si vous ne dépensez jamais un centime, les ressources Always Free restent les vôtres.
Voici ce que vous obtenez :
- 2 VM AMD Micro - 1 OCPU, 1 Go de RAM chacune (ou 1 VM ARM avec jusqu'à 4 OCPU et 24 Go de RAM sur Ampere A1)
- 200 Go de stockage par blocs au total réparti sur toutes les VM
- 10 To/mois de transfert de données sortant
- Adresse IPv4 publique incluse
- 2 bases de données autonomes (20 Go chacune)
- 10 Go de stockage objet
Pour un portfolio personnel, un projet personnel, un environnement de staging, ou même une application de production à faible trafic - c'est largement suffisant.
Étape 1 : Créez votre compte et votre VM
Inscrivez-vous sur cloud.oracle.com. Vous aurez besoin d'une carte de crédit pour la vérification d'identité, mais vous ne serez pas facturé, et vous pouvez rester indéfiniment sur le palier Always Free.
Créez une instance de calcul :
- Allez dans Compute → Instances → Create Instance
- Choisissez Ubuntu 22.04 (ou 24.04) comme image
- Sélectionnez la forme VM.Standard.E2.1.Micro (éligible Always Free) ou la VM.Standard.A1.Flex (Ampere ARM, jusqu'à 4 OCPU gratuits)
- Dans la section réseau, assurez-vous que Assign a public IPv4 address est coché
- Téléversez votre propre clé publique SSH (plus de détails ci-dessous)
- Cliquez sur Create
La VM sera prête en une soixantaine de secondes. Notez l'IP publique - c'est l'adresse permanente de votre serveur.
Étape 2 : Clés SSH - Importez les vôtres (c'est essentiel)
Oracle vous offre la possibilité de générer une paire de clés SSH lors de la création de la VM et de télécharger la clé privée. N'utilisez pas cette option.
Pourquoi ? Trois raisons :
- Les clés générées par le navigateur ont tendance à casser. Plusieurs utilisateurs ont signalé que les clés SSH générées par Oracle cessent de fonctionner au bout d'un certain temps - parfois après un redémarrage de la VM, parfois de façon aléatoire. Quand votre clé cesse de fonctionner et que la connexion série via la console est votre seul recours, vous regretterez de ne pas avoir utilisé votre propre clé.
- Vous devriez posséder vos clés. Votre clé privée SSH devrait résider dans
~/.ssh/sur votre machine, générée par vous, sauvegardée par vous. Une clé qui a été générée dans un navigateur, téléchargée une fois et enregistrée dans votre dossier Téléchargements est un incident de sécurité en puissance. - Intégration CI/CD. Si vous voulez que GitHub Actions déploie sur votre serveur (et c'est le cas), vous devez stocker la clé privée en tant que secret GitHub. Partir de votre propre clé rend cela simple.
Générez une paire de clés sur votre machine locale si vous n'en avez pas déjà une :
# Génère une clé ED25519 (moderne, rapide, sécurisée)
ssh-keygen -t ed25519 -C "your-email@example.com"
# Ou RSA 4096 si vous avez besoin d'une compatibilité plus large
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
# Copie la clé publique (à coller dans le formulaire d'Oracle)
cat ~/.ssh/id_ed25519.pub
Collez le contenu de votre fichier .pub dans le champ de clé SSH lors de la création de la VM. C'est tout. Votre clé, votre contrôle, aucune surprise.
Étape 3 : Ouvrez les ports (la partie qu'Oracle rend confuse)
C'est là que la plupart des gens se retrouvent bloqués. Vous allez vous connecter en SSH à votre VM, installer nginx, et découvrir que le port 80 est inaccessible depuis l'extérieur. La raison : Oracle possède deux pare-feux, et vous devez ouvrir les deux.
Pare-feu 1 : les listes de sécurité Oracle Cloud (niveau VCN)
C'est le pare-feu au niveau du cloud. Rendez-vous dans :
- Networking → Virtual Cloud Networks → votre VCN
- Security Lists → la liste de sécurité par défaut (Default Security List)
- Add Ingress Rules :
# Règle d'entrée (ingress) pour HTTP
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Destination Port Range: 80
# Règle d'entrée (ingress) pour HTTPS
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Destination Port Range: 443
Pare-feu 2 : iptables à l'intérieur de la VM
Les images Ubuntu d'Oracle sont livrées avec des règles iptables qui bloquent tout le trafic entrant à l'exception de SSH. Même après avoir ouvert la security list du cloud, votre serveur rejettera les connexions HTTP tant que vous n'aurez pas ouvert le pare-feu au niveau de l'OS :
# Open port 80 (HTTP) and 443 (HTTPS)
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
# Save rules so they persist across reboots
sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save
Les deux pare-feu doivent être ouverts. Cela piège tout le monde la première fois. Si votre site ne se charge pas, vérifiez d'abord la security list du cloud, puis iptables.
Étape 4 : La configuration complète du serveur (un seul script)
Voici le script de bootstrap que j'utilise. Il installe Python, nginx, configure Gunicorn comme service systemd, et met en place nginx comme reverse proxy - le tout en une seule exécution :
#!/usr/bin/env bash
set -euo pipefail
# Install Python 3.12
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt-get update -qq
sudo apt-get install -y python3.12 python3.12-venv \
python3.12-dev build-essential nginx
# Open firewall
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save
# Clone your project
APP_DIR="$HOME/myapp"
git clone git@github.com:you/your-repo.git "$APP_DIR"
# Create virtualenv and install dependencies
python3.12 -m venv "$APP_DIR/.venv"
"$APP_DIR/.venv/bin/pip" install -r "$APP_DIR/requirements.txt"
# Create a systemd service for Gunicorn
sudo tee /etc/systemd/system/myapp.service > /dev/null <<EOF
[Unit]
Description=My App (Gunicorn)
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=$APP_DIR
EnvironmentFile=$APP_DIR/.env
ExecStart=$APP_DIR/.venv/bin/gunicorn myapp.wsgi:application \\
--workers 2 --bind unix:/run/myapp.sock
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# Configure nginx reverse proxy
sudo tee /etc/nginx/sites-available/myapp > /dev/null <<EOF
server {
listen 80;
server_name _;
client_max_body_size 20M;
location /static/ {
alias $APP_DIR/staticfiles/;
expires 30d;
}
location / {
proxy_pass http://unix:/run/myapp.sock;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF
sudo ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
# Enable and start
sudo systemctl enable myapp && sudo systemctl start myapp
echo "Done. Visit http://$(curl -s ifconfig.me)"
Étape 5 : SSL avec Let's Encrypt (HTTPS gratuit)
Une fois que le DNS de votre domaine pointe vers l'IP publique de la VM Oracle, ajouter HTTPS ne prend que deux commandes :
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
# Auto-renewal is set up automatically via systemd timer
# Verify with:
sudo certbot renew --dry-run
Certbot modifie votre configuration nginx pour écouter sur le port 443 avec le certificat et redirige le port 80 vers HTTPS. SSL gratuit, renouvelé automatiquement tous les 90 jours, zéro maintenance.
Étape 6 : CI/CD avec GitHub Actions
La dernière pièce : des déploiements automatisés à chaque push sur main. Ajoutez votre clé privée SSH comme secret GitHub (DEPLOY_SSH_KEY), puis créez ce workflow :
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: your-server-ip
username: ubuntu
key: ${{ secrets.DEPLOY_SSH_KEY }}
script: |
cd ~/myapp
git pull origin main
bash scripts/deploy.sh
Poussez sur main, GitHub se connecte en SSH à votre VM Oracle, récupère le code, exécute les migrations, collecte les fichiers statiques et redémarre Gunicorn. Un CI/CD complet pour 0 $.
Oracle Free Tier vs AWS EC2 t2.micro : la vraie comparaison
AWS propose une t2.micro dans son offre gratuite - mais seulement pendant 12 mois. Après cela, vous payez. Permettez-moi de comparer les deux honnêtement :
Oracle Free Tier AWS t2.micro
──────────────── ────────────
Prix après an 1 0 $ (à vie) ~8,50 $/mois
vCPU 1 OCPU 1 vCPU
RAM 1 Go (ou 24 Go ARM) 1 Go
Stockage 50 Go boot + 150 Go 8 Go (30 Go gratuits)
Trafic sortant 10 To/mois 100 Go/mois (puis 0,09 $/Go)
IPv4 publique Incluse 3,75 $/mois (depuis fév. 2024)
Always Free Oui Non (12 mois seulement)
Option ARM (24 Go RAM) Oui (Ampere A1) Non (Graviton est payant)
Les chiffres parlent d'eux-mêmes. Oracle vous offre plus de stockage, 100 fois la bande passante, une adresse IP publique gratuite, et cela n'expire jamais. Le free tier d'AWS était déjà avare, et depuis qu'ils facturent 3,75 $/mois pour les adresses IPv4 publiques en février 2024, faire tourner ne serait-ce qu'une instance EC2 arrêtée coûte de l'argent.
Le shape Ampere A1 ARM est le véritable atout. Vous pouvez allouer jusqu'à 4 OCPU et 24 Go de RAM sur le tier Always Free. Ce n'est pas une machine de loisir - c'est un serveur légitime capable de faire tourner simultanément une base de données, une application Django et un cache Redis.
Les pièges dont personne ne parle
Le Free Tier d'Oracle est excellent, mais il a des angles vifs :
- Les instances inactives sont récupérées. Oracle se réserve le droit d'arrêter les instances Always Free qui sont « inactives » (constamment sous 10 % d'utilisation CPU et 10 % d'utilisation mémoire). Faire tourner un serveur web léger vous maintient généralement au-dessus du seuil, mais soyez-en conscient.
- La disponibilité est limitée. Les VM du Free Tier sont populaires. Si votre région est saturée, vous ne pouvez pas créer de nouvelle instance. Essayez d'autres domaines de disponibilité ou d'autres régions. Certaines personnes scriptent l'API de création pour réessayer jusqu'à ce qu'un créneau se libère.
- Les clés SSH générées par Oracle ne sont pas fiables. Je l'ai déjà dit, je le répète : uploadez votre propre clé.
- Le double pare-feu. Liste de sécurité cloud + iptables de l'OS. Ouvrez les deux, ou passez une heure à déboguer pourquoi nginx est injoignable.
- Pas d'envoi d'e-mails. Oracle bloque le SMTP sortant (port 25) sur le Free Tier. Utilisez plutôt un service d'e-mails transactionnels comme Mailgun, SendGrid ou Resend.
Ce que je fais tourner sur ma VM Oracle gratuite
Ce site web même - le portfolio et le blog que vous êtes en train de lire - tourne sur une VM du niveau gratuit d'Oracle Cloud (Free Tier). La stack :
- Django 5.x + Wagtail 6.x - le CMS et la couche applicative
- Gunicorn avec 2 workers, géré par systemd
- Nginx comme reverse proxy assurant le service des fichiers statiques
- SQLite pour la base de données (parfaitement adapté à un site personnel)
- Let's Encrypt pour le SSL gratuit
- GitHub Actions pour des déploiements sans intervention
Coût mensuel total : 0 $. Coût annuel total : 0 $. Le seul composant payant est le nom de domaine.
Le site se charge rapidement, encaisse tout le trafic dont j'ai besoin et se déploie automatiquement lorsque je pousse sur main. Pour un portfolio de développeur, un blog, un projet parallèle ou un environnement de staging, le niveau gratuit d'Oracle Cloud est la meilleure affaire du cloud computing. Sans astérisque.
Le serveur le moins cher est celui qui ne coûte rien. Le meilleur serveur est celui que vous contrôlez entièrement. Oracle Free Tier est les deux à la fois.