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
- 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.
- Karta płatnicza. Oracle pobiera i zwraca symboliczną kwotę weryfikacyjną. Karty prepaid i wirtualne bywają odrzucane.
- 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ę:
# 203.0.113.25 — zastąp adresem z pola Public IP addressssh ubuntu@203.0.113.25Firewall — 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”.
sudo iptables -L INPUT -n --line-numbersReguły dla portów 80 i 443 muszą stanąć przed regułą REJECT — w domyślnym obrazie jest to pozycja 6:
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPTsudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPTsudo iptables -I INPUT 6 -m state --state NEW -p udp --dport 443 -j ACCEPTsudo netfilter-persistent save
sudo iptables -L INPUT -n --line-numbersPodstawowe utwardzenie
sudo apt update && sudo apt full-upgrade -ysudo timedatectl set-timezone Europe/Warsaw
# Automatyczne poprawki bezpieczeństwa — w Ubuntu pakiet jest zainstalowany, upewnij się, że działasudo dpkg-reconfigure -f noninteractive unattended-upgradessystemctl 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ć:
#!/usr/bin/env bashset -euo pipefail
sudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOFTypes: debURIs: https://download.docker.com/linux/ubuntuSuites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")Components: stableArchitectures: $(dpkg --print-architecture)Signed-By: /etc/apt/keyrings/docker.ascEOF
sudo apt updatesudo 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" }}EOFsudo systemctl restart dockersudo usermod -aG docker ubuntuPorty 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.