DevOps 2026-05-27·Ievgenii Svyryd

Oracle Cloud Free Tier: як я хостю продакшн вебзастосунки за $0/місяць (назавжди)

Рівень Always Free від Oracle Cloud дає вам VM з 1 ГБ RAM, 50 ГБ сховища та публічним IP - назавжди, без жодних трюків із кредитними картками. Ось точно як я його налаштував, підводні камені, які змарнують вам півдня, якщо ви про них не знатимете, і чому це краще за найдешевший інстанс AWS EC2.

Oracle Cloud Free Tier: як я хостю продакшн вебзастосунки за $0/місяць (назавжди)

Чому існує Oracle Cloud Free Tier (і чому він легітимний)

Дозвольте мені звернутися до слона в кімнаті: так, це справді безкоштовно. Назавжди. Не "безкоштовно на 12 місяців", як в AWS. Не "безкоштовно з $200 кредитів, що згорають", як в Azure. Тариф Oracle Always Free - це постійна виділена квота, яка не згорає, не оновлюється автоматично і не здивує вас рахунком.

Чому Oracle так робить? Тому що вони пізно ввійшли у хмарну гру, і їм потрібно, щоб розробники спробували їхню платформу. Їхня ставка полягає в тому, що якийсь відсоток масштабується до платних тарифів. Але навіть якщо ви ніколи не витратите ані копійки, ресурси Always Free залишаться вашими.

Ось що ви отримуєте:

  • 2 AMD Micro VM - по 1 OCPU, 1 ГБ RAM кожна (або 1 ARM VM з до 4 OCPU та 24 ГБ RAM на Ampere A1)
  • 200 ГБ блокового сховища сумарно на всі VM
  • 10 ТБ/місяць вихідного трафіку даних
  • Публічна адреса IPv4 у комплекті
  • 2 автономні бази даних (по 20 ГБ кожна)
  • 10 ГБ об'єктного сховища

Для особистого портфоліо, побічного проєкту, staging-середовища чи навіть продакшн-застосунку з низьким трафіком - цього більш ніж достатньо.

Крок 1: Створіть обліковий запис та VM

Зареєструйтеся на cloud.oracle.com. Вам знадобиться кредитна картка для підтвердження особи, але з вас нічого не спишуть, і ви можете залишатися на рівні Always Free необмежено довго.

Створіть обчислювальний інстанс:

  1. Перейдіть до Compute → Instances → Create Instance
  2. Виберіть Ubuntu 22.04 (або 24.04) як образ
  3. Оберіть форму VM.Standard.E2.1.Micro (доступна на Always Free) або VM.Standard.A1.Flex (Ampere ARM, до 4 OCPU безкоштовно)
  4. У розділі мережі переконайтеся, що позначено Assign a public IPv4 address
  5. Завантажте власний публічний SSH-ключ (докладніше про це нижче)
  6. Натисніть Create

Віртуальна машина буде готова приблизно за 60 секунд. Занотуйте публічну IP-адресу - це постійна адреса вашого сервера.

Крок 2: SSH-ключі — завантажте власний (це критично важливо)

Oracle дає вам можливість згенерувати пару SSH-ключів під час створення VM і завантажити приватний ключ. Не використовуйте цю опцію.

Чому? Три причини:

  1. Згенеровані в браузері ключі мають звичку ламатися. Багато користувачів повідомляли, що згенеровані Oracle SSH-ключі перестають працювати через деякий час - іноді після перезавантаження VM, іноді випадково. Коли ваш ключ перестане працювати, а послідовне з'єднання через консоль буде вашим єдиним запасним варіантом, ви пошкодуєте, що не використали власний ключ.
  2. Ви маєте володіти своїми ключами. Ваш приватний SSH-ключ повинен жити в ~/.ssh/ на вашій машині, згенерований вами, зі створеною вами резервною копією. Ключ, згенерований у браузері, завантажений один раз і збережений у теці Downloads, - це інцидент безпеки, що очікує свого часу.
  3. Інтеграція CI/CD. Якщо ви хочете, щоб GitHub Actions деплоїв на ваш сервер (а ви хочете), вам потрібно зберегти приватний ключ як GitHub secret. Початок з власного ключа робить це простим.

Згенеруйте пару ключів на своїй локальній машині, якщо у вас її ще немає:

# Generate an ED25519 key (modern, fast, secure)
ssh-keygen -t ed25519 -C "your-email@example.com"

# Or RSA 4096 if you need wider compatibility
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

# Copy the public key (paste this into Oracle's form)
cat ~/.ssh/id_ed25519.pub

Вставте вміст вашого файлу .pub у поле SSH key під час створення VM. Ось і все. Ваш ключ, ваш контроль, жодних несподіванок.

Крок 3: Відкрийте порти (частина, яку Oracle робить заплутаною)

Саме тут більшість людей застрягає. Ви зайдете на свою VM через SSH, встановите nginx і виявите, що порт 80 недосяжний із зовнішнього світу. Причина: у Oracle два фаєрволи, і вам потрібно відкрити обидва.

Фаєрвол 1: Oracle Cloud Security Lists (рівень VCN)

Це фаєрвол хмарного рівня. Перейдіть до:

  1. Networking → Virtual Cloud Networks → ваша VCN
  2. Security Lists → Default Security List
  3. Add Ingress Rules:
# Ingress rule for HTTP
Source CIDR:   0.0.0.0/0
IP Protocol:   TCP
Destination Port Range: 80

# Ingress rule for HTTPS
Source CIDR:   0.0.0.0/0
IP Protocol:   TCP
Destination Port Range: 443

Фаєрвол 2: iptables всередині ВМ

Ubuntu-образи від Oracle постачаються з правилами iptables, які блокують увесь вхідний трафік, окрім SSH. Навіть після відкриття хмарного списку безпеки ваш сервер відхилятиме HTTP-з'єднання, доки ви не відкриєте фаєрвол на рівні ОС:

# 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

Обидва фаєрволи мають бути відкриті. Це збиває з пантелику кожного першого разу. Якщо ваш сайт не завантажується, спершу перевірте хмарний список безпеки, а потім iptables.

Крок 4: Повне налаштування сервера (один скрипт)

Here is the bootstrap script I use. It installs Python, nginx, configures Gunicorn as a systemd service, and sets up nginx as a reverse proxy - all in one run:

#!/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)"

Крок 5: SSL з Let's Encrypt (безкоштовний HTTPS)

Щойно DNS вашого домену вказуватиме на публічну IP-адресу Oracle VM, додавання HTTPS займає дві команди:

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 модифікує ваш конфіг nginx, щоб слухати порт 443 із сертифікатом, і перенаправляє порт 80 на HTTPS. Безкоштовний SSL, автоматичне поновлення кожні 90 днів, нуль обслуговування.

Крок 6: CI/CD з GitHub Actions

Останній фрагмент: автоматизовані розгортання при кожному push до main. Додайте свій приватний SSH-ключ як секрет GitHub (DEPLOY_SSH_KEY), а потім створіть цей робочий процес:

# .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

Робите push у main, GitHub заходить по SSH у вашу Oracle VM, підтягує код, запускає міграції, збирає статичні файли і перезапускає Gunicorn. Повний CI/CD за $0.

Oracle Free Tier проти AWS EC2 t2.micro: реальне порівняння

AWS пропонує t2.micro у своєму безкоштовному рівні — але лише на 12 місяців. Після цього ви платите. Дозвольте мені чесно порівняти обидва варіанти:

Oracle Free Tier    AWS t2.micro
                        ────────────────    ────────────
Ціна після 1-го року    $0 (назавжди)       ~$8.50/місяць
vCPU                    1 OCPU              1 vCPU
RAM                     1 ГБ (або 24 ГБ ARM) 1 ГБ
Сховище                 50 ГБ boot + 150 ГБ 8 ГБ (30 ГБ безкоштовно)
Вихідний трафік         10 ТБ/місяць        100 ГБ/місяць (далі $0.09/ГБ)
Публічний IPv4          Включено            $3.75/місяць (з лютого 2024)
Always Free             Так                 Ні (лише 12 місяців)
Опція ARM (24 ГБ RAM)   Так (Ampere A1)     Ні (Graviton платний)

Цифри говорять самі за себе. Oracle дає вам більше сховища, у 100 разів більшу пропускну здатність, безкоштовну публічну IP-адресу, і вона ніколи не спливає. Безкоштовний рівень AWS і так був скупим, а відколи в лютому 2024 року вони почали брати $3.75/місяць за публічні IPv4-адреси, навіть зупинений інстанс EC2 коштує грошей.

Справжня родзинка - форм-фактор Ampere A1 ARM. На рівні Always Free ви можете виділити до 4 OCPU та 24 ГБ оперативної пам'яті. Це не машина для хобі - це повноцінний сервер, здатний одночасно запускати базу даних, застосунок Django та кеш Redis.

Підводні камені, про які ніхто не розповідає

Oracle Free Tier - чудовий, але має гострі кути:

  • Простоюючі інстанси забираються назад. Oracle залишає за собою право зупиняти Always Free інстанси, які "простоюють" (стабільно нижче 10% завантаження CPU та 10% використання пам'яті). Запуск легкого вебсервера зазвичай тримає вас вище порогу, але майте це на увазі.
  • Доступність обмежена. VM у Free Tier популярні. Якщо ваш регіон заповнений, ви не зможете створити новий інстанс. Спробуйте інші домени доступності або регіони. Дехто скриптує API створення, щоб повторювати спроби, доки не звільниться слот.
  • Згенеровані Oracle SSH-ключі ненадійні. Я вже казав це раніше і скажу ще раз: завантажуйте власний ключ.
  • Подвійний фаєрвол. Список безпеки хмари + iptables ОС. Відкрийте обидва, або витратите годину на з'ясування, чому nginx недоступний.
  • Немає надсилання електронної пошти. Oracle блокує вихідний SMTP (порт 25) у Free Tier. Використовуйте натомість сервіс транзакційної пошти на кшталт Mailgun, SendGrid або Resend.

Що я запускаю на своїй безкоштовній Oracle VM

Цей самий вебсайт - портфоліо і блог, які ви зараз читаєте - працює на VM Oracle Cloud Free Tier. Стек:

  • Django 5.x + Wagtail 6.x - CMS та прикладний рівень
  • Gunicorn з 2 воркерами, керований через systemd
  • Nginx як зворотний проксі з роздачею статичних файлів
  • SQLite для бази даних (цілком достатньо для персонального сайту)
  • Let's Encrypt для безкоштовного SSL
  • GitHub Actions для деплоїв без ручного втручання

Загальна місячна вартість: $0. Загальна річна вартість: $0. Єдиний платний компонент - це доменне ім'я.

Сайт завантажується швидко, витримує весь потрібний мені трафік і деплоїться автоматично, коли я пушу в main. Для портфоліо розробника, блогу, пет-проєкту чи стейджинг-середовища Oracle Cloud Free Tier - найкраща пропозиція у хмарних обчисленнях. Без зірочок.

Найдешевший сервер — той, що не коштує нічого. Найкращий сервер — той, який ви повністю контролюєте. Oracle Free Tier — це і те, і інше.

Зв'язатися →