Teknologiat

← Etusivu
Infrastruktuuri ja julkaisu

Pilvi, Docker ja DevOps — nopea ja luotettava julkaisu

Konteitamme kaikki sovellukset Dockerilla, orkestroimme ne Docker Composella (tai Kubernetesilla enterprise-projekteissa), määritämme Caddyn käänteiseksi välityspalvelimeksi automaattisella SSL:llä ja automatisoimme koko julkaisusyklin GitHub Actionsilla — commitista tuotantoon automaattisesti.

Konttien käyttö Dockerilla ja Docker Composella

Jokaisella palvelulla on oma monivaiheinen (multi-stage) Dockerfile: build-vaihe, joka asentaa riippuvuudet ja kääntää koodin, sekä minimaalinen lopullinen vaihe (distroless tai alpine), joka sisältää vain tarvittavat artefaktit. Tyypillinen Next.js-image jää alle 150 Mt:n, FastAPI-image alle 80 Mt:n. Imaget rakennetaan uudelleen jokaisen mergen yhteydessä main-haaraan ja merkitään semanttisesti (`v1.2.3` + `latest`).

Docker Compose määrittelee koko pinon: frontend, API, tietokanta, Redis, worker. Arkaluonteiset muuttujat (tietokannan salasana, API-avaimet, Stripe-salaisuus) ovat `.env`-tiedostossa, joka on suljettu pois gitistä — niitä ei koskaan kovakoodata imageen. Composen health checkit varmistavat, että riippuvuudet ovat valmiina ennen käynnistystä (tietokanta valmis → API käynnistyy → frontend käynnistyy).

  • Build-välimuisti `--mount=type=cache`-asetuksella riippuvuuksien asennukseen
  • Optimoitu kerrosjärjestys: vakaat riippuvuudet → lähdekoodi
  • Salaisuuksien hallinta Docker secretsillä tai HashiCorp Vaultilla enterprise-projekteissa
  • `restart: unless-stopped` + `docker compose up --no-deps` atomiseen julkaisuun

Caddy — moderni käänteinen välityspalvelin automaattisella SSL:llä

Caddy 2.8 hoitaa SSL/TLS:n automaattisesti ACME:n kautta (Let's Encrypt tai ZeroSSL) — ei vanhentuneita sertifikaatteja, ei manuaalista konfigurointia. HTTP/2 ja HTTP/3 (QUIC) ovat oletuksena käytössä. Tietoturvaotsikot (HSTS, X-Frame-Options, CSP) asetetaan globaalisti uudelleenkäytettävillä snippeteillä. Deklaratiivinen Caddyfile-konfiguraatio on vertailtavissa (diffable) ja versioitu gitissä.

Nopeusrajoitus (rate limiting), gzip/brotli-pakkaus ja jäsennelty JSON-lokitus otetaan käyttöön Caddyn natiiveilla direktiiveillä — ilman nginx-moduuleja tai monimutkaista Apache-konfigurointia. Pääsy arkaluonteisiin reitteihin (`/admin`, `.env`, `.git`) palauttaa 444 (ei vastausta), mikä on määritetty globaaliksi tietoturvasnippetiksi.

  • Vain TLS 1.3 nykyaikaisilla salausmenetelmillä (cipher suites)
  • On-demand TLS monivuokralaisille (multi-tenant) SaaS-ratkaisuille dynaamisilla aliverkkotunnuksilla
  • Katkoton uudelleenlataus — `caddy reload` ei katkaise aktiivisia yhteyksiä
  • Caddy-lokitus → Loki → Grafana — liikenneanalyysi ja poikkeamahälytykset

GitHub Actions CI/CD ja monitorointi

CI-putki ajetaan jokaisella PR:llä: lint, tyyppitarkistus, yksikkötestit, Docker-imagen build, haavoittuvuusskannaus (Trivy). Jos kaikki läpäistään, image työnnetään registryyn ja julkaisu staging-ympäristöön tapahtuu automaattisesti. Merge mainiin = automaattinen julkaisu tuotantoon julkaisun jälkeisellä healthcheckillä. Automaattinen palautus, jos healthcheck epäonnistuu 60 sekunnissa.

Monitorointi Grafanalla + Prometheuksella sovellusmetriikoille (viive, virheprosentti, jonon koko) ja Lokilla lokien aggregointiin. Hälytykset on määritetty Slackiin/sähköpostiin: virheprosentti >1 %, P95-viive >500 ms, levy >85 %. Ulkoinen käytettävyysseuranta Better Uptimella — julkinen SLA-kojelauta saatavilla pyynnöstä.

  • Trivy-haavoittuvuusskannaus imageille — esto Critical-tason CVE:illä
  • Dependabot + auto-merge patch-päivityksille (vihreä CI vaaditaan)
  • Tietokannan automaattinen varmuuskopiointi S3-yhteensopivaan tallennustilaan (öisin, säilytys 30 päivää)

Edut ja rajoitukset

Edut

  • Julkaisu käynnistää uuden version vanhan rinnalle, ja jos healthcheck epäonnistuu, palataan automaattisesti edelliseen.
  • Automaattinen SSL/TLS Caddyn kautta — ei manuaalisesti vanhentuneita sertifikaatteja.
  • Toistettava ympäristö: sama Docker-image kehityksessä, stagingissa ja tuotannossa.
  • Monitorointi ja hälytykset (Grafana, Loki) virheprosentille, viiveelle ja lokeille.

Rajoitukset

  • Docker Compose ei skaalaudu kuten Kubernetes monisolmuiseen enterprise-käyttöön.
  • Alkuperäinen CI/CD-käyttöönotto vaatii aikaa ja DevOps-osaamista.
  • Imaget ja lokit kuluttavat levytilaa — tarvitsevat säännöllistä siivousta.
  • Täysi monitorointi (Prometheus + Grafana) lisää ylläpidettäviä palveluita.

Lyhyt yhteenveto

Docker + Caddy + GitHub Actions on ihanteellinen yhdistelmä luotettavaan julkaisuun VPS-palvelimella tai muutamalla solmulla. Kymmenien solmujen ja aggressiivisen automaattisen skaalauksen tarpeisiin siirrytään Kubernetesiin.

Tekniset tiedot

OminaisuusRaja / kynnysTyypillinen käyttö
OrkestrointiDocker Compose, koko pinoYksi solmu; monisolmuinen vaatii Swarmin/K8s:nVPS, pienet ja keskisuuret projektit
Käänteinen välityspalvelinCaddy 2.8, HTTP/3, automaattinen SSLHyvin monimutkaiset säännöt vaativat laajan konfiguraationMonta verkkotunnusta, monivuokralaisuus
CI/CDGitHub Actions, automaattinen julkaisuCI-minuutit maksullisia ilmaistason jälkeenAutomaattinen commitista tuotantoon
Tyypillinen kustannusVPS alkaen ~5 €/kkMonitorointi + varmuuskopiointi lisäävät kustannuksiaYhdestä sivustosta usean brändin kokonaisuuteen

Docker Compose vs Kubernetes

KriteeriDocker ComposeKubernetes
Käyttöönoton monimutkaisuusPieniSuuri
Monisolmuinen skaalaus / automaattinen skaalausRajoitettu (yksi solmu)Erinomainen
SoveltuuVPS, pienet ja keskisuuret projektitSuuret laivastot, enterprise

Usein kysytyt kysymykset

Miksi Caddy eikä Nginx?

Caddy hoitaa SSL/TLS:n automaattisesti ACME:n kautta, ottaa HTTP/2:n ja HTTP/3:n käyttöön oletuksena ja sillä on lyhyt deklaratiivinen konfiguraatio. Nginx vaatii certbotin ja enemmän manuaalista konfigurointia samaan lopputulokseen.

Tarvitsenko Kubernetesin?

En useimmille sivustoille. Docker Compose VPS-palvelimella hoitaa yhden sivuston tai muutaman palvelun luotettavasti. Kubernetes tulee hyödylliseksi vasta kymmenien solmujen ja aggressiivisen automaattisen skaalauksen kanssa.

Miten julkaisu toimii?

GitHub Actions rakentaa uuden imagen, käynnistää sen vanhan rinnalle, ajaa healthcheckin ja vaihtaa sitten liikenteen. Jos healthcheck epäonnistuu 60 sekunnissa, edelliseen versioon palataan automaattisesti.

Mitä monitorointia suosittelette?

Grafana + Prometheus metriikoille (viive, virheprosentti) ja Loki aggregoiduille lokeille, hälytyksin Slackiin/sähköpostiin. Ulkoiseen käytettävyysseurantaan lisäämme erillisen palvelun, kuten Better Uptimen.

4b2b.net
Liiketoiminnan ekosysteemi
4conta.ro
Kirjanpito
4invoices.net
Laskutussovellus
4expenses.net
Kulunhallinta
4notify.net
Ilmoitukset
4hosting.net
Webhotelli
4database.net
Tietokannat
4buildsite.net
Kotisivukone
4myapp.net
Sovelluskehitin
4avatars.net
AI-avatarit
4chaty.net
AI-chatbot
4webagency.net
Ohjelmisto verkkotoimistoille
4softedu.net
Verkkosivut oppilaitoksille
4softcrm.net
CRM-alusta
4softerp.net
Toiminnanohjaus
4softhr.net
Henkilöstöhallinto
4mystaff.net
Henkilöstöportaali
4myprojects.net
Projektinhallinta
4mycontracts.net
Sopimukset
4docs.net
Dokumenttienhallinta
4appointments.net
Ajanvaraus
4marketingonline.net
Markkinointi
4insurance.net
Vakuutusohjelmisto
4property.net
Kiinteistönvälitys
4lawyers.net
Asianajotoimiston ohjelmisto
4mygarage.net
Autokorjaamo
4driving.net
Autokoulut
4fleet.net
Kalustonhallinta
4myevents.net
Tapahtumat
4therapy.net
Terapiavastaanotto
4clinics.net
Klinikat
4dental.net
Hammasklinikat
4restaurants.net
Ravintolat
4beautify.net
Kauneushoitola
4gym.net
Kuntosalit ja liikuntakeskukset
4guards.net
Vartiointiliikkeet
4softvet.net
Eläinlääkäriasemat
4softauto.net
Autoalan ohjelmisto
4construct.net
Rakennusliikkeet
4marketplace.net
Kauppapaikka
4shopy.net
Verkkokauppa
4pricing.net
Hintavertailu
4salefood.net
Ruoan verkkokauppa
4rentify.net
Vuokraus
4transports.net
Kuljetus
4agencytravel.net
Matkatoimisto
4hotel.net
Hotellijärjestelmä
4ong.net
Yhdistysten hallinta