Pereiti prie turinio

Slapukų nustatymai

Pasirinkite, kokių rūšių slapukus leidžiate. Pasirinkimą bet kada galite pakeisti per „Slapukų nustatymai“ kiekvieno puslapio apačioje. Privatumo pareiškimas

Būtinieji

Visada įjungti

Reikalingi prisijungti, išsaugoti krepšelį ir įsiminti Jūsų pasirinkimus. Jie visada įjungti.

Kokie slapukai?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsų sesija ir prisijungimo išlaikymas
  • weboke_basket: Jūsų krepšelis
  • wkBtwIncl: kainų rodymas su PVM arba be PVM
  • wok_cookies: Jūsų slapukų pasirinkimas, 12 mėnesių

Matuoja, kuri reklama atveda prie apsilankymo ar užsakymo, kad nemokėtume už neveiksmingas reklamas.

Kokie slapukai?
  • Google Ads per Google Tag Manager (_gcl_au, _gcl_aw), iki 90 dienų
  • OpenAI Ads, reklamos ChatGPT
  • wok_aff: per kurį partnerį atėjote pas mus (partnerių programa), 60 dienų

4,6

Šalis ir kalba

Kiekviena šalis turi savo svetainę su tos šalies kainomis ir PVM.

Peržiūrėti

Docker compose ir užkarda

9 modulis: Docker ir docker compose · Skaitymo laikas: 12 min.

Mokymosi tikslas: Po šios pamokos galėsite aprašyti paslaugas compose faile, jas paleisti, atnaujinti ir sustabdyti, ir paaiškinsite, kodėl Docker paskelbti prievadai apeina ufw ir kaip to išvengti.

Pagrindinės sąvokos: compose.yaml, services, image, ports, volumes, environment, .env, restart, networks, depends_on, healthcheck, docker compose up -d, pull, logs, down, nebenaudojamas version:, Docker ir ufw, DOCKER-USER, skelbimas per 127.0.0.1, slaptieji duomenys, docker.sock

Kodėl compose?

Su docker run (pamoka 9.2) paleidžiate vieną konteinerį su ilga parinkčių eilute. Tikra programa dažnai susideda iš kelių konteinerių: programos, duomenų bazės, atvirkštinio tarpinio serverio (reverse proxy). Prisiminti tas eilutes ir po perkrovimo ar atnaujinimo jas vėl įvesti ranka anksčiau ar vėliau nepavyks.

Docker Compose aprašo visus programos konteinerius viename faile: compose.yaml. Šį failą laikote atskirame kataloge, pavyzdžiui, /srv/status/compose.yaml, ir viską valdote su docker compose. Failas kartu yra ir Jūsų dokumentacija: kas veikia, koks atvaizdas (image), kokie prievadai, kur saugomi duomenys. Įtraukite šį katalogą į atsarginę kopiją (pamoka 8.1), ir programą naujame serveryje galėsite atkurti per kelias minutes.

Įskiepis vadinasi docker compose (su tarpu, 2 versija). Senoji atskira programa docker-compose (su brūkšneliu) yra pakeista; ją dar matysite senuose vadovuose. Taip pat nebenaudojamas laukas version: "3.8" senų failų viršuje: Compose visada naudoja naujausią schemą, o radęs version: tik parodo įspėjimą.

Kaip skaityti compose failą

Pavyzdys su programa ir PostgreSQL duomenų baze:

# /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:

Žingsnis po žingsnio:

  • services: kiekviena paslauga tampa konteineriu. Pavadinimas (app, db) kartu yra ir mazgo vardas (hostname), pagal kurį konteineriai randa vienas kitą. Compose programai sukuria atskirą tinklą, todėl app jungiasi prie duomenų bazės adresu db:5432.
  • image: visada su versijos žyma (pamoka 9.1).
  • restart: ką Docker daro, kai konteineris sustoja arba serveris perkraunamas. unless-stopped jį vėl paleidžia, nebent Jūs jį sustabdėte sąmoningai. Be restart taisyklės Jūsų programa po perkrovimo (pamoka 4.2) nebepasileis.
  • ports: prievadą skelbia tik programa ir tik per 127.0.0.1. Duomenų bazė nieko neskelbia: programa ją pasiekia per vidinį tinklą. Duomenų bazė su ports: - "5432:5432" yra viena dažniausių klaidų (žr. toliau).
  • environment: programos nustatymai. Slaptažodis čia neįrašytas tiesiogiai, o nurodytas kaip ${DB_PASSWORD}.
  • volumes: pavadintas tomas db-data išsaugo duomenų bazę, kai konteineris pakeičiamas.
  • depends_on su healthcheck: programa pasileidžia tik tada, kai duomenų bazė iš tiesų parengta, o ne vien paleista.

Slaptieji duomenys .env faile

Compose tokius kintamuosius kaip ${DB_PASSWORD} nuskaito iš failo .env tame pačiame kataloge:

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

Taip slaptažodis nepatenka į compose failą, kurį galbūt laikote Git saugykloje arba įklijuojate forume, prašydami pagalbos. Įrašykite .env į .gitignore. Slaptažodį sukurkite slaptažodžių tvarkykle arba su openssl rand -base64 24.

Kasdienis naudojimas

Visas komandas vykdote kataloge, kuriame yra compose failas:

anna@web1:/srv/notities$ sudo docker compose config     # patikrinti failą su įrašytais kintamaisiais
anna@web1:/srv/notities$ sudo docker compose up -d      # paleisti viską (arba atnaujinti pagal failą)
anna@web1:/srv/notities$ sudo docker compose ps         # kiekvienos paslaugos būsena
anna@web1:/srv/notities$ sudo docker compose logs -f app
anna@web1:/srv/notities$ sudo docker compose pull       # atsisiųsti naujus atvaizdus
anna@web1:/srv/notities$ sudo docker compose up -d      # pakeisti konteinerius naujais atvaizdais
anna@web1:/srv/notities$ sudo docker compose down       # sustabdyti ir pašalinti konteinerius

down tomų nepaliečia. down -v ištrina ir programos tomus, o kartu ir Jūsų duomenų bazę. Įveskite tai tik tada, kai tikrai norite pradėti iš naujo.

docker compose config atitinka nginx -t ir sshd -t: ji parodo, kaip Compose supranta Jūsų failą su įrašytomis visų kintamųjų reikšmėmis, dar prieš ką nors paleidžiant. Atkreipkite dėmesį, kad šios išvesties niekur neįklijuotumėte, nes joje yra slaptažodžiai.

Docker apeina ufw

Dabar svarbiausias šio modulio saugumo klausimas. Pamokoje 5.2 nustatėte ufw taip: „viską atmesti, išskyrus SSH, 80 ir 443“. Galėtumėte tikėtis, kad konteineris su ports: - "5432:5432" tada bus nepasiekiamas. Taip nėra.

Docker dokumentacijoje tai pasakyta tiesiai: Docker ir ufw naudoja užkardos taisykles tarpusavyje nesuderinamu būdu. Kai paskelbiate prievadą, Docker pats įrašo taisykles į branduolio užkardą. Tos taisyklės nukreipia srautą į konteinerį (adresų transliacija, DNAT) dar prieš pritaikant ufw taisykles. Taigi paketas apeina ufw. ufw status nerodo nieko ypatingo, nors prievadas pasiekiamas iš viso interneto. Tas pats galioja ir firewalld.

Be to, jei adresas nenurodytas, Docker skelbia per 0.0.0.0 ir [::], t. y. ir per IPv4, ir per IPv6 (pamoka 9.1).

Trys būdai tai padaryti teisingai, nuo paprasčiausio iki sudėtingiausio:

  1. Neskelbkite nieko, kas neturi būti vieša. Duomenų bazėms, podėliams (cache) ir vidinėms paslaugoms ports: nenurodoma. Tos pačios compose programos konteineriai vienas kitą pasiekia per vidinį tinklą.
  2. Skelbkite per loopback. "127.0.0.1:8081:8080". Tada prieigą turi tik pats serveris, o priekyje pastatote atvirkštinį tarpinį serverį (nginx arba Caddy, modulis 7), kuris klauso 443 prievado. Docker tai galima nustatyti ir kaip numatytąjį elgesį: daemon nustatymas nukreipia visus be adreso paskelbtus prievadus į 127.0.0.1.
  3. Taisyklės DOCKER-USER grandinėje. Docker sukuria tuščią grandinę DOCKER-USER, kuri tikrinama prieš jo paties taisykles. Ten galite įrašyti savo taisykles, pavyzdžiui, „į paskelbtus prievadus gali jungtis tik šis IP adresas“. Tai pažengusiųjų darbas su iptables arba nftables, ir čia lengva suklysti. Daugumai mažų serverių pakanka 1 ir 2 būdų.

Visada tikrinkite iš išorės, kaip pamokoje 5.1: nc -vz -w 3 <ip> 5432 iš savo nešiojamojo kompiuterio arba kurso patikra užduotyse Z5.1 ir Z10.4.

Dar du dalykai, kurių nedarykite

  • Nemontuokite /var/run/docker.sock į konteinerį, nebent tiksliai žinote kodėl. Konteineris, turintis prieigą prie Docker lizdo (socket), gali pats paleisti konteinerius, taip pat ir tokį, kuris mato visą pagrindinio serverio diską (pamoka 9.2). Kai kurios pagalbinės programos (valdymo skydeliai, automatiniai atnaujintojai) to prašo; iš esmės tai reiškia, kad tai programai suteikiate root teises.
  • Nenaudokite privileged: true ar network_mode: host vien todėl, kad taip parašyta vadove. Abi parinktys didele dalimi panaikina konteinerio izoliaciją. Naudokite tik tada, kai kūrėjas paaiškina, kodėl to reikia.

Santrauka

  • Compose failas (compose.yaml) aprašo visus programos konteinerius; jis kartu yra dokumentacija ir turi patekti į atsarginę kopiją.
  • Naudokite versijų žymas, restart taisyklę, pavadintus tomus, healthcheck, kur įmanoma, o slaptuosius duomenis laikykite .env faile su 600 teisėmis.
  • docker compose config, up -d, ps, logs, pull, down; down -v ištrina ir tomus.
  • Paskelbti prievadai apeina ufw ir firewalld. Skelbkite tik tai, kas turi būti vieša, o visa kita per 127.0.0.1 su atvirkštiniu tarpiniu serveriu priekyje.
  • Jokio docker.sock, privileged ar network_mode: host be svarios priežasties.

Testas (quiz)

1. ufw nustatyta „viską atmesti, išskyrus 22, 80 ir 443“. Jūsų compose faile prie duomenų bazės nurodyta ports: - "5432:5432". Ar duomenų bazė pasiekiama iš interneto?



2. Kaip konteineris app pasiekia duomenų bazę toje pačioje compose programoje, jei duomenų bazė neskelbia prievado?



3. Po serverio perkrovimo Jūsų konteineriai nebeveikia. Ko greičiausiai trūksta compose faile?



4. Kuo skiriasi docker compose down ir docker compose down -v?



5. Valdymo skydelio programos vadove prašoma - /var/run/docker.sock:/var/run/docker.sock. Ką tai reiškia saugumui?



Užduotis

Užduotis Z9.3: Compose failo patikrinimas. Pavyzdiniame faile compose-nakijken.txt (kaip tekstiniame faile) pateiktas nedidelės internetinės parduotuvės compose failas su programa, duomenų baze, podėliu ir administravimo įrankiu. Jame yra šešios klaidos, aptartos šioje pamokoje arba pamokose 9.1 ir 9.2. Prie kiekvieno sunumeruoto eilučių bloko nurodykite, ar jis teisingas, ar klaidingas, o prie kiekvienos klaidos pasirinkite tinkamą pataisymą. Programa palygina atsakymus su nustatytu raktu. Jei turite savo compose failą, po to patikrinkite jį pagal tuos pačius punktus.

Užduotis Z9.3: Compose failo patikrinimas

Failas šiai užduočiai: compose-nakijken.txt





















Ko, ką įvedate ir ką randame, nesaugome. Jūsų naršyklė atsimena Jūsų atsakymus ir tai, ar užduotį atlikote. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotis buvo atlikta (ar beveik atlikta); ten tai galite ir pašalinti.

Skaitykite daugiau

Akimirką…

Nustatykite domenus

Kiekvienam domenui nustatykite vardų serverius, susiejimą su talpinimu ir tai, kas taps valdytoju.

Įkeliami Jūsų domenai…