Od git push do prod w 90 sekund
Konkretny pipeline: SSH key → Terraform → GitHub Actions → deploy. Pięć komend, gotowe. Bez Dockera, bez K8s, bez Helma.
Standardowa droga „od commita do produkcji" w Big Tech world to:
- ~15 min CI/CD pipeline
- ~5 min container build
- ~3 min image push do rejestru
- ~10 min Kubernetes rolling update
Razem 30+ minut. Dla solo-deva z aplikacją Node/Python/Go to często overkill. Można szybciej.
Setup raz, używaj zawsze
1. Wygeneruj klucz SSH (10 sekund)
ssh-keygen -t ed25519 -f ~/.ssh/simplecloud -N ""
2. Postaw VM-kę przez Terraform (40 sekund)
Stwórz main.tf:
terraform {
required_providers {
poland-whitesky-cloud = {
source = "poland-whitesky-cloud/poland-whitesky-cloud"
}
}
}
provider "poland-whitesky-cloud" {
client_jwt = var.jwt
}
resource "poland-whitesky-cloud_cloudspace" "main" {
name = "prod"
customer_id = var.customer_id
location = "pl-war-dc01-002"
external_network_id = 1
}
resource "poland-whitesky-cloud_machine" "app" {
name = "app1"
cloudspace_id = poland-whitesky-cloud_cloudspace.main.id
vcpus = 2
memory = 4096
disk_size = 30
image_id = 11 # Ubuntu Server 24.04
user_data = templatefile("cloud-init.yaml", {
pubkey = file("~/.ssh/simplecloud.pub")
})
}
resource "poland-whitesky-cloud_port_forwarding" "ssh" {
cloudspace_id = poland-whitesky-cloud_cloudspace.main.id
vm_id = poland-whitesky-cloud_machine.app.id
public_port = 22
local_port = 22
protocol = "tcp"
}
resource "poland-whitesky-cloud_port_forwarding" "https" {
cloudspace_id = poland-whitesky-cloud_cloudspace.main.id
vm_id = poland-whitesky-cloud_machine.app.id
public_port = 443
local_port = 443
protocol = "tcp"
}
output "public_ip" {
value = poland-whitesky-cloud_cloudspace.main.external_network_ip
}
I cloud-init.yaml:
#cloud-config
users:
- name: deploy
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh-authorized-keys:
- ${pubkey}
package_update: true
packages:
- nginx
- git
- nodejs
- npm
runcmd:
- mkdir -p /var/www/app && chown deploy:deploy /var/www/app
- systemctl enable --now nginx
terraform init && terraform apply — czterdzieści sekund i masz VM-kę z gotowym stackiem, kluczem SSH i otwartymi portami.
3. Dodaj GitHub Actions deploy (10 sekund)
W repo aplikacji stwórz .github/workflows/deploy.yml:
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSH_HOST }}
username: deploy
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/app
git pull
npm ci --production
sudo systemctl restart app
W GitHub repo Settings → Secrets dodaj:
SSH_HOST= Twój public IP (zterraform output public_ip)SSH_KEY= zawartość~/.ssh/simplecloud(private key)
4. Pierwszy deploy (30 sekund)
ssh -i ~/.ssh/simplecloud deploy@$(terraform output -raw public_ip) \
'git clone https://github.com/you/repo /var/www/app && cd /var/www/app && npm ci'
5. Loop: git push (90 sekund e2e)
Od teraz każdy git push origin main triggeruje workflow → deploy w 60-90 sekund.
Co dostałeś
- Repeatable infra — cały stack w
main.tf, w gicie, łatwo replikowalny - Disposable —
terraform destroy→ wszystko znika, brak ghost VM-ek - Auditable — GitHub Actions logi pokazują kto i kiedy deployował
- Rollback —
git revert+ push → workflow odpali poprzednią wersję
Pro tip. Rozdziel terraform.tfstate od repo aplikacji — trzymaj infra w osobnym repo (np. my-infra). Wtedy app deploy nie wpływa na infra state, a każda zmiana w infrastrukturze idzie przez osobny PR z terraform plan w komentarzu.
Kiedy ten setup pęka
- Multi-region — trzeba dodać load balancera (też w Terraform —
poland-whitesky-cloud_loadbalancer) - Zero-downtime deploy — trzeba blue-green (uruchom drugą VM, przełącz portforward)
- Stateful — dorzuć drugą VM-kę dla DB albo użyj snapshots
- Skala 1k+ rps — czas na K8s, ale wtedy już zasłużyłeś
Dla 95% MVP scenariuszy ten setup wystarczy do pierwszego klienta enterprise.
SimpleCloud sign-off
terraform apply, git push, curl healthcheck. To wszystko, czego potrzebujesz na MVP. SimpleCloud daje API + Terraform + 14 zł/mc startowo. Hourly billing = wyłącz na noc, wpłać 60% mniej.