Oracle Cloud Always Free — darmowy serwer Ubuntu na stałe

Darmowy VPS na zawsze w Oracle Cloud Free Tier: rejestracja bez pułapek, maszyna ARM z Ubuntu 24.04, firewall w dwóch warstwach i Docker.

Oracle Cloud Infrastructure (OCI) ma najhojniejszy darmowy plan wśród dużych chmur. Zasoby oznaczone jako Always Free nie wygasają po okresie próbnym — to nie jest 30-dniowy trial, tylko stały przydział. W tym artykule postawisz na nim serwer Ubuntu, który w następnej części uruchomi Uptime Kumę.

Oracle Cloud Free Tier — co jest za darmo

W ramach Always Free dostajesz m.in.:

  • Ampere A1 (ARM64) — łącznie 4 OCPU i 24 GB RAM do podziału na maksymalnie 4 maszyny.
  • 2× VM.Standard.E2.1.Micro (x86) — po 1/8 OCPU i 1 GB RAM.
  • 200 GB block storage łącznie (dyski rozruchowe wliczają się do limitu).
  • 10 TB transferu wychodzącego miesięcznie.

Do monitoringu w zupełności wystarczy maszyna A1 z 1 OCPU i 6 GB RAM. Resztę limitu zostawiasz na inne projekty.

Rejestracja: trzy decyzje, których nie cofniesz

  1. Region macierzysty (home region). Zasoby Always Free działają tylko w regionie wybranym przy rejestracji i nie da się go później zmienić. Wybierz najbliższy (np. Frankfurt albo Amsterdam). Popularne regiony miewają okresowe braki maszyn A1 — komunikat Out of capacity przy tworzeniu instancji oznacza, że trzeba spróbować ponownie później.
  2. Karta płatnicza. Oracle pobiera i zwraca symboliczną kwotę weryfikacyjną. Karty prepaid i wirtualne bywają odrzucane.
  3. Dane zgodne z kartą. Adres i imię muszą pasować do danych karty, inaczej weryfikacja się nie powiedzie. Nieudane próby mogą zablokować rejestrację na danych osobowych na dłużej.

Tworzenie maszyny wirtualnej

Compute → Instances → Create instance:

Ustawienie Wartość
Name monitor
Image Canonical Ubuntu 24.04 (wersja aarch64 wybierze się sama przy shape ARM)
Shape VM.Standard.A1.Flex, 1 OCPU, 6 GB RAM
Networking Create new virtual cloud network i public subnet, Assign a public IPv4 address zaznaczone
SSH keys Wklej zawartość swojego ~/.ssh/id_ed25519.pub
Boot volume 50 GB (domyślnie), wliczane do limitu 200 GB

Po minucie instancja ma status Running, a na jej stronie widzisz Public IP address. Zaloguj się:

Okno terminala
# 203.0.113.25 — zastąp adresem z pola Public IP address
ssh ubuntu@203.0.113.25

Firewall — warstwa pierwsza: Security List

Ruch do maszyny w OCI przechodzi przez dwa niezależne firewalle i oba muszą go przepuścić. Pierwszy to reguły sieci VCN w panelu.

Networking → Virtual cloud networks → (Twoja VCN) → Security → Default Security List → Add Ingress Rules:

Source CIDR Protocol Destination port Po co
0.0.0.0/0 TCP 80 Certyfikat Let’s Encrypt (HTTP-01) i przekierowanie na HTTPS
0.0.0.0/0 TCP 443 Panel Uptime Kumy i endpoint heartbeatu
0.0.0.0/0 UDP 443 HTTP/3 (opcjonalnie)

Reguła dla SSH (TCP 22) jest domyślnie otwarta dla całego internetu. Jeśli masz stały adres w domu, zawęź ją do tego adresu (/32).

Firewall — warstwa druga: iptables w Ubuntu

Obrazy Ubuntu przygotowane przez Oracle mają restrykcyjne reguły iptables zapisane w /etc/iptables/rules.v4. Przepuszczają tylko SSH, a cała reszta trafia na regułę REJECT. To najczęstszy powód, dla którego „port jest otwarty w panelu, a nic nie działa”.

Okno terminala
sudo iptables -L INPUT -n --line-numbers

Reguły dla portów 80 i 443 muszą stanąć przed regułą REJECT — w domyślnym obrazie jest to pozycja 6:

Otwarcie portów 80 i 443
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 iptables -I INPUT 6 -m state --state NEW -p udp --dport 443 -j ACCEPT
sudo netfilter-persistent save
sudo iptables -L INPUT -n --line-numbers

Podstawowe utwardzenie

Przygotowanie systemu
sudo apt update && sudo apt full-upgrade -y
sudo timedatectl set-timezone Europe/Warsaw
# Automatyczne poprawki bezpieczeństwa — w Ubuntu pakiet jest zainstalowany, upewnij się, że działa
sudo dpkg-reconfigure -f noninteractive unattended-upgrades
systemctl status unattended-upgrades --no-pager
# SSH tylko z kluczem — na obrazach OCI to ustawienie domyślne, sprawdź:
sudo sshd -T | grep -E '^(passwordauthentication|permitrootlogin)'

Oczekiwany wynik ostatniego polecenia: passwordauthentication no i permitrootlogin without-password (albo no).

Docker

Instalacja jest taka sama jak w maszynie z Dockerem w homelabie, ale z repozytorium dla Ubuntu. Docker publikuje pakiety na ARM64, więc nic nie trzeba kompilować:

install-docker-ubuntu.sh
#!/usr/bin/env bash
set -euo pipefail
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"log-driver": "local",
"log-opts": { "max-size": "20m", "max-file": "5" }
}
EOF
sudo systemctl restart docker
sudo usermod -aG docker ubuntu

Porty publikowane przez Dockera przechodzą przez łańcuch FORWARD, w którym Docker wstawia własne reguły przed domyślnym REJECT. Reguły INPUT z poprzedniej sekcji dotyczą usług nasłuchujących bezpośrednio na hoście, a przepuszczenie ruchu w Security List jest potrzebne zawsze.

Rekord DNS

W panelu DNS swojej domeny dodaj rekord:

Typ Nazwa Wartość Proxy
A status publiczny IP maszyny OCI wyłączone (DNS only)

Proxy Cloudflare wyłączamy celowo. Monitoring ma działać także wtedy, gdy problem leży po stronie Cloudflare, a certyfikat wystawi bezpośrednio Caddy.

Publiczny adres przypisany przy tworzeniu instancji (ephemeral) nie zmienia się przy restartach. Znika dopiero po usunięciu instancji albo odłączeniu adresu.

Serwer jest gotowy. W części 2 uruchomisz na nim Uptime Kumę z HTTPS i skonfigurujesz alerty na Telegramie.