Mine sisu juurde

Küpsiste seaded

Vali iga liigi kohta, milliseid küpsiseid lubad. Oma valikut saad alati muuta iga lehe allosas oleva lingi „Küpsiste seaded“ kaudu. Privaatsuspoliitika

Vajalikud

Alati sees

Vajalikud sisselogimiseks, ostukorvi säilitamiseks ja sinu valikute meelespidamiseks. Need on alati sees.

Millised küpsised?
  • weboke_sessie, weboke_klant, weboke_remember: sinu seanss ja sisselogituks jäämine
  • weboke_basket: sinu ostukorv
  • wkBtwIncl: hindade näitamine koos käibemaksuga või ilma
  • wok_cookies: sinu küpsisevalik, 12 kuud

Mõõdab, milline reklaam viib külastuse või tellimuseni, et me ei maksaks reklaamide eest, mis midagi ei anna.

Millised küpsised?
  • Google Ads Google Tag Manageri kaudu (_gcl_au, _gcl_aw), kuni 90 päeva
  • OpenAI Ads, reklaamid ChatGPT-s
  • wok_aff: millise partneri kaudu meie juurde jõudsid (partnerprogramm), 60 päeva

4,6

Riik ja keel

Igal riigil on oma sait, selle riigi hindade ja käibemaksuga.

Vaata

Docker compose ja tulemüür

Moodul 9: Docker ja docker compose · Lugemisaeg: 12 minutit

Õpieesmärk: Pärast seda õppetundi oskad kirjeldada teenuseid compose-failis, neid käivitada, uuendada ja peatada ning selgitad, miks Dockeri avaldatud pordid lähevad ufw-st mööda ja kuidas seda vältida.

Põhimõisted: compose.yaml, services, image, ports, volumes, environment, .env, restart, networks, depends_on, healthcheck, docker compose up -d, pull, logs, down, aegunud version:, Docker ja ufw, DOCKER-USER, avaldamine aadressil 127.0.0.1, saladused, docker.sock

Miks compose?

Käsuga docker run (õppetund 9.2) käivitad ühe konteineri pika rea valikutega. Päris rakendus koosneb sageli mitmest konteinerist: programm, andmebaas, pöördproksi. Nende ridade meelespidamine ja pärast taaskäivitust või uuendust uuesti sisestamine läheb ühel hetkel viltu.

Docker Compose kirjeldab kõik rakenduse konteinerid ühes failis: compose.yaml. Paned selle faili eraldi kausta, näiteks /srv/status/compose.yaml, ja haldad kõike käsuga docker compose. Fail on ühtlasi sinu dokumentatsioon: mis töötab, milline image, millised pordid, kus andmed asuvad. Lisa see kaust oma varukoopiasse (õppetund 8.1) ja saad rakenduse uuel serveril mõne minutiga taastada.

Plugina nimi on docker compose (tühikuga, versioon 2). Vana eraldi programm docker-compose (sidekriipsuga) on asendatud; seda näed veel vanades juhendites. Ka vanade failide ülaosas olev väli version: "3.8" on aegunud: Compose kasutab alati uusimat skeemi ja annab version: puhul ainult hoiatuse.

Compose-faili lugemine

Näide programmi ja PostgreSQL-andmebaasiga:

# /srv/notities/compose.yaml
services:
  app:
    image: ghcr.io/example/notities:1.4
    restart: unless-stopped
    ports:
      - "127.0.0.1:8081:8080"
    environment:
      DB_HOST: db
      DB_USER: notities
      DB_PASSWORD: ${DB_PASSWORD}
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_USER: notities
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U notities"]
      interval: 10s
      retries: 5

volumes:
  db-data:

Samm-sammult:

  • services: igast teenusest saab konteiner. Nimi (app, db) on ühtlasi hostinimi, millega konteinerid üksteist leiavad. Compose loob rakendusele oma võrgu, seega app ühendub andmebaasiga aadressil db:5432.
  • image: alati versioonisildiga (õppetund 9.1).
  • restart: mida Docker teeb, kui konteiner peatub või server taaskäivitub. unless-stopped käivitab selle uuesti, välja arvatud juhul, kui sina selle teadlikult peatasid. Ilma taaskäivituspoliitikata ei tule su rakendus pärast taaskäivitust (õppetund 4.2) tagasi.
  • ports: ainult rakendus avaldab pordi ja ainult aadressil 127.0.0.1. Andmebaas ei avalda midagi: rakendus jõuab selleni sisevõrgu kaudu. Andmebaas seadistusega ports: - "5432:5432" on üks levinumaid vigu (vaata allpool).
  • environment: programmi seaded. Parool ei ole seal sõna-sõnalt kirjas, vaid kujul ${DB_PASSWORD}.
  • volumes: nimega köide db-data hoiab andmebaasi alles, kui konteiner asendatakse.
  • depends_on koos healthcheck'iga: rakendus käivitub alles siis, kui andmebaas on päriselt valmis, mitte lihtsalt käivitatud.

Saladused .env-failis

Compose loeb muutujaid nagu ${DB_PASSWORD} samas kaustas olevast failist .env:

# /srv/notities/.env
DB_PASSWORD=Kies-hier-een-lang-willekeurig-wachtwoord
anna@web1:/srv/notities$ sudo chmod 600 .env

Nii ei ole parool compose-failis, mida võib-olla hoiad Gitis või kleebid abi saamiseks foorumisse. Lisa .env faili .gitignore. Loo parool paroolihalduriga või käsuga openssl rand -base64 24.

Igapäevane kasutamine

Kõik käsud käivitad compose-failiga kaustas:

anna@web1:/srv/notities$ sudo docker compose config     # kontrolli faili, muutujad täidetud
anna@web1:/srv/notities$ sudo docker compose up -d      # käivita kõik (või uuenda faili järgi)
anna@web1:/srv/notities$ sudo docker compose ps         # olek teenuste kaupa
anna@web1:/srv/notities$ sudo docker compose logs -f app
anna@web1:/srv/notities$ sudo docker compose pull       # tõmba uued image'id
anna@web1:/srv/notities$ sudo docker compose up -d      # asenda konteinerid uute image'itega
anna@web1:/srv/notities$ sudo docker compose down       # peata ja eemalda konteinerid

down jätab köited alles. down -v kustutab ka rakenduse köited ja koos nendega su andmebaasi. Sisesta see ainult siis, kui tahad päriselt otsast alustada.

docker compose config on käskude nginx -t ja sshd -t vaste: see näitab enne käivitamist, kuidas Compose su faili mõistab, kõik muutujad sisse pandud. Ära kleebi seda väljundit kuhugi, sest paroolid on selles kirjas.

Docker läheb ufw-st mööda

Nüüd selle mooduli kõige olulisem turvapunkt. Õppetunnis 5.2 seadistasid ufw reeglile „keela kõik, välja arvatud SSH, 80 ja 443“. Võiks eeldada, et konteiner seadistusega ports: - "5432:5432" ei ole siis kättesaadav. See ei ole nii.

Dockeri dokumentatsioon ütleb seda otse: Docker ja ufw kasutavad tulemüürireegleid viisil, mis omavahel kokku ei sobi. Kui avaldad pordi, lisab Docker ise reeglid kerneli tulemüüri. Need reeglid suunavad liikluse konteinerisse (aadressiteisendus, DNAT) enne, kui ufw reegleid rakendatakse. Pakett läheb seega ufw-st mööda. ufw status ei näita midagi erilist, kuigi port on kogu internetist kättesaadav. Sama kehtib firewalld kohta.

Lisaks avaldab Docker ilma aadressita pordi aadressidel 0.0.0.0 ja [::], seega nii IPv4 kui ka IPv6 kaudu (õppetund 9.1).

Kolm viisi seda õigesti teha, lihtsast keerulisemani:

  1. Ära avalda midagi, mis ei pea avalik olema. Andmebaasid, vahemälud ja siseteenused ei saa ports:. Sama compose-rakenduse konteinerid jõuavad üksteiseni sisevõrgu kaudu.
  2. Avalda loopback-aadressil. "127.0.0.1:8081:8080". Siis pääseb sellele ligi ainult server ise ja selle ette paned pöördproksi (nginx või Caddy, moodul 7), mis kuulab porti 443. Dockerile saab selle ka vaikimisi seadeks teha: deemoni seade suunab kõik ilma aadressita avaldatud pordid aadressile 127.0.0.1.
  3. Reeglid ahelas DOCKER-USER. Docker loob tühja ahela DOCKER-USER, mida läbitakse enne tema enda reegleid. Sinna saad ise reegleid lisada, näiteks „ainult see IP-aadress tohib avaldatud portidele ligi“. See on edasijõudnute töö iptablesi või nftablesiga ja selles on lihtne eksida. Enamikule väikestele serveritele piisab variantidest 1 ja 2.

Kontrolli alati väljastpoolt, nagu õppetunnis 5.1: nc -vz -w 3 <ip> 5432 oma sülearvutist või kursuse kontrolliga ülesannetes Z5.1 ja Z10.4.

Veel kaks asja, mida sa ei tee

  • Ära ühenda konteinerisse /var/run/docker.sock, kui sa täpselt ei tea, miks. Konteiner, millel on ligipääs Dockeri soklile, saab ise konteinereid käivitada, ka sellise, millel on kogu hosti ketas (õppetund 9.2). Mõned abiprogrammid (juhtpaneelid, automaatsed uuendajad) küsivad seda; sisuliselt annad sellele programmile root-õigused.
  • Ära kasuta privileged: true ega network_mode: host ainult sellepärast, et juhend nii ütleb. Mõlemad eemaldavad suure osa konteineri isolatsioonist. Kasuta neid ainult siis, kui tegija selgitab, miks see vajalik on.

Kokkuvõte

  • Compose-fail (compose.yaml) kirjeldab kõik rakenduse konteinerid; see on ühtlasi dokumentatsioon ja kuulub su varukoopiasse.
  • Kasuta versioonisilte, taaskäivituspoliitikat, nimega köiteid, võimaluse korral healthchecki ning saladusi failis .env õigustega 600.
  • docker compose config, up -d, ps, logs, pull, down; down -v kustutab ka köited.
  • Avaldatud pordid lähevad ufw-st ja firewalld-st mööda. Avalda ainult see, mis peab avalik olema, ja muu aadressil 127.0.0.1, pöördproksi ees.
  • Ilma mõjuva põhjuseta ei mingit docker.sock'i, privileged ega network_mode: host.

Test (quiz)

1. ufw on seadistatud „keela kõik, välja arvatud 22, 80 ja 443“. Sinu compose-failis on andmebaasil ports: - "5432:5432". Kas andmebaas on internetist kättesaadav?



2. Kuidas jõuab konteiner app samas compose-rakenduses oleva andmebaasini, kui andmebaas porti ei avalda?



3. Pärast serveri taaskäivitust su konteinerid enam ei tööta. Mis compose-failist tõenäoliselt puudub?



4. Mis vahe on käskudel docker compose down ja docker compose down -v?



5. Juhtpaneeli programm küsib oma juhendis - /var/run/docker.sock:/var/run/docker.sock. Mida see turvalisuse jaoks tähendab?



Ülesanne

Ülesanne Z9.3: Compose-faili ülevaatamine. Näidisfailis compose-nakijken.txt on (tekstifailina) väikese veebipoe compose-fail, milles on rakendus, andmebaas, vahemälu ja haldustööriist. Selles on kuus viga, mida on käsitletud selles õppetunnis või õppetundides 9.1 ja 9.2. Märgi iga nummerdatud ridade ploki kohta, kas see on õige või vale, ja vali iga vea puhul õige parandus. Programm võrdleb vastuseid kindla võtmega. Kui sul on oma compose-fail, vaata see pärast samade punktide järgi läbi.

Ülesanne Z9.3: Compose-faili ülevaatamine

Selle ülesande fail: compose-nakijken.txt





















Seda, mida sisestad, ja mida leiame, me ei salvesta. Su brauser jätab meelde su vastused ja selle, kas sooritasid ülesande. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et sul oli ülesanne (peaaegu) õige; ka selle saad sealt kustutada.

Loe edasi

Hetk…

Seadista oma domeenid

Määra iga domeeni jaoks nimeserverid, seos sinu majutusega ja kes saab omanikuks.

Laadin sinu domeene…