Pāriet uz saturu

Sīkdatņu iestatījumi

Izvēlieties, kāda veida sīkdatnes atļaujat. Savu izvēli varat jebkurā laikā mainīt sadaļā Sīkdatņu iestatījumi katras lapas apakšā. Privātuma politika

Nepieciešamās

Vienmēr ieslēgtas

Vajadzīgas, lai pieteiktos, saglabātu grozu un atcerētos Jūsu izvēles. Tās vienmēr ir ieslēgtas.

Kuras sīkdatnes?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsu sesija un pieteikšanās saglabāšana
  • weboke_basket: Jūsu grozs
  • wkBtwIncl: cenu rādīšana ar PVN vai bez PVN
  • wok_cookies: Jūsu sīkdatņu izvēle, 12 mēneši

Mēra, kura reklāma noved pie apmeklējuma vai pasūtījuma, lai mēs nemaksātu par reklāmām, kas neko nedod.

Kuras sīkdatnes?
  • Google Ads ar Google Tag Manager (_gcl_au, _gcl_aw), līdz 90 dienām
  • OpenAI Ads, reklāmas ChatGPT
  • wok_aff: caur kuru partneri nonācāt pie mums (partneru programma), 60 dienas

4,6

Valsts un valoda

Katrai valstij ir sava vietne ar attiecīgās valsts cenām un PVN.

Skatīt

Docker compose un ugunsmūris

9. modulis: Docker un docker compose · Lasīšanas laiks: 12 min.

Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet aprakstīt pakalpojumus compose failā, tos palaist, atjaunināt un apturēt, kā arī izskaidrot, kāpēc Docker publicētie porti apiet ufw un kā to novērst.

Pamatjēdzieni: compose.yaml, services, image, ports, volumes, environment, .env, restart, networks, depends_on, healthcheck, docker compose up -d, pull, logs, down, novecojis version:, Docker un ufw, DOCKER-USER, publicēšana uz 127.0.0.1, noslēpumi, docker.sock

Kāpēc compose?

Ar docker run (nodarbība 9.2) Jūs palaižat vienu konteineru ar garu opciju rindu. Īsta lietotne bieži sastāv no vairākiem konteineriem: programmas, datubāzes, reversā starpniekservera. Šīs rindas atcerēties un pēc restartēšanas vai atjauninājuma ierakstīt no jauna agri vai vēlu neizdosies.

Docker Compose apraksta visus lietotnes konteinerus vienā failā: compose.yaml. Šo failu Jūs ievietojat atsevišķā mapē, piemēram, /srv/status/compose.yaml, un visu pārvaldāt ar docker compose. Fails vienlaikus ir Jūsu dokumentācija: kas darbojas, kurš attēls (image), kuri porti, kur atrodas dati. Iekļaujiet šo mapi savā rezerves kopijā (nodarbība 8.1), un lietotni jaunā serverī varēsiet atjaunot dažās minūtēs.

Spraudnis saucas docker compose (ar atstarpi, 2. versija). Vecā atsevišķā programma docker-compose (ar defisi) ir aizstāta; to vēl var redzēt vecās pamācībās. Arī lauks version: "3.8" vecu failu sākumā ir novecojis: Compose vienmēr izmanto jaunāko shēmu un, sastopot version:, tikai parāda brīdinājumu.

Compose faila lasīšana

Piemērs ar programmu un PostgreSQL datubāzi:

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

Soli pa solim:

  • services: katrs pakalpojums kļūst par konteineru. Nosaukums (app, db) ir arī resursdatora nosaukums (hostname), pēc kura konteineri atrod viens otru. Compose izveido lietotnei atsevišķu tīklu, tāpēc app savienojas ar datubāzi adresē db:5432.
  • image: vienmēr ar versijas tagu (nodarbība 9.1).
  • restart: ko Docker dara, ja konteiners apstājas vai serveris tiek restartēts. unless-stopped to palaiž no jauna, izņemot gadījumu, kad Jūs to apturējāt apzināti. Bez restartēšanas politikas Jūsu lietotne pēc restartēšanas (nodarbība 4.2) neatsāks darbu.
  • ports: portu publicē tikai lietotne, un tikai uz 127.0.0.1. Datubāze nepublicē neko: lietotne to sasniedz caur iekšējo tīklu. Datubāze ar ports: - "5432:5432" ir viena no visbiežāk pieļautajām kļūdām (skatiet tālāk).
  • environment: programmas iestatījumi. Parole tajā nav ierakstīta burtiski, bet kā ${DB_PASSWORD}.
  • volumes: nosauktais sējums db-data saglabā datubāzi, kad konteiners tiek aizstāts.
  • depends_on ar healthcheck: lietotne startē tikai tad, kad datubāze ir patiešām gatava, nevis tikai palaista.

Noslēpumi .env failā

Compose nolasa tādus mainīgos kā ${DB_PASSWORD} no faila .env tajā pašā mapē:

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

Tādējādi parole neatrodas compose failā, kuru Jūs, iespējams, glabājat Git vai ievietojat forumā, lūdzot palīdzību. Pievienojiet .env failam .gitignore. Izveidojiet paroli ar paroļu pārvaldnieku vai ar openssl rand -base64 24.

Ikdienas lietošana

Visas komandas izpildiet mapē, kurā atrodas compose fails:

anna@web1:/srv/notities$ sudo docker compose config     # pārbaudīt failu, mainīgie aizpildīti
anna@web1:/srv/notities$ sudo docker compose up -d      # palaist visu (vai atjaunināt atbilstoši failam)
anna@web1:/srv/notities$ sudo docker compose ps         # statuss katram pakalpojumam
anna@web1:/srv/notities$ sudo docker compose logs -f app
anna@web1:/srv/notities$ sudo docker compose pull       # lejupielādēt jaunos attēlus
anna@web1:/srv/notities$ sudo docker compose up -d      # aizstāt konteinerus ar jaunajiem attēliem
anna@web1:/srv/notities$ sudo docker compose down       # apturēt un noņemt konteinerus

down Jūsu sējumus atstāj neskartus. down -v dzēš arī lietotnes sējumus, un līdz ar to Jūsu datubāzi. Ierakstiet to tikai tad, ja patiešām vēlaties sākt no jauna.

docker compose config ir nginx -t un sshd -t ekvivalents: tas parāda, kā Compose saprot Jūsu failu ar visiem aizpildītajiem mainīgajiem, pirms Jūs kaut ko palaižat. Uzmanieties, lai šo izvadi nekur neievietotu, jo tajā ir redzamas paroles.

Docker apiet ufw

Tagad svarīgākais šī moduļa drošības jautājums. Nodarbībā 5.2 Jūs iestatījāt ufw uz "aizliegt visu, izņemot SSH, 80 un 443". Varētu sagaidīt, ka konteiners ar ports: - "5432:5432" tad nav sasniedzams. Tā nav.

Docker dokumentācijā tas teikts tieši: Docker un ufw izmanto ugunsmūra noteikumus savstarpēji nesaderīgā veidā. Kad Jūs publicējat portu, Docker pats ievieto noteikumus kodola ugunsmūrī. Šie noteikumi novirza datplūsmu uz konteineru (adrešu translācija, DNAT), pirms tiek piemēroti ufw noteikumi. Tādējādi pakete apiet ufw. ufw status nerāda neko īpašu, kaut gan ports ir sasniedzams no visa interneta. Tas pats attiecas uz firewalld.

Turklāt Docker bez norādītas adreses publicē uz 0.0.0.0 un [::], tātad gan IPv4, gan IPv6 (nodarbība 9.1).

Trīs veidi, kā to izdarīt pareizi, no vienkāršākā līdz sarežģītākajam:

  1. Nepublicējiet neko, kam nav jābūt publiski pieejamam. Datubāzes, kešatmiņas un iekšējie pakalpojumi nesaņem ports:. Konteineri vienā compose lietotnē sasniedz viens otru caur iekšējo tīklu.
  2. Publicējiet uz loopback. "127.0.0.1:8081:8080". Tad tam var piekļūt tikai pats serveris, un priekšā Jūs novietojat reverso starpniekserveri (nginx vai Caddy, modulis 7), kas klausās portā 443. Docker to var iestatīt arī kā noklusējumu: dēmona iestatījums liek visiem publicētajiem portiem bez adreses nonākt uz 127.0.0.1.
  3. Noteikumi ķēdē DOCKER-USER. Docker izveido tukšu ķēdi DOCKER-USER, kas tiek apstrādāta pirms tā paša noteikumiem. Tur Jūs varat ievietot savus noteikumus, piemēram, "tikai šī IP adrese drīkst piekļūt publicētajiem portiem". Tas ir darbs pieredzējušiem lietotājiem ar iptables vai nftables, un tajā viegli kļūdīties. Lielākajai daļai mazu serveru pietiek ar 1. un 2. variantu.

Vienmēr pārbaudiet no ārpuses, kā nodarbībā 5.1: nc -vz -w 3 <ip> 5432 no sava klēpjdatora vai ar kursa pārbaudi uzdevumos Z5.1 un Z10.4.

Vēl divas lietas, ko nedarīt

  • Nemontējiet /var/run/docker.sock konteinerā, ja vien precīzi nezināt, kāpēc. Konteiners ar piekļuvi Docker ligzdai (socket) var pats palaist konteinerus, arī tādu, kam ir pieejams viss resursdatora disks (nodarbība 9.2). Daži palīgrīki (vadības paneļi, automātiskie atjauninātāji) to pieprasa; faktiski tas nozīmē dot šai programmai root tiesības.
  • Neizmantojiet privileged: true vai network_mode: host tikai tāpēc, ka tā teikts pamācībā. Abi lielā mērā noņem konteinera izolāciju. Izmantojiet tos tikai tad, ja izstrādātājs paskaidro, kāpēc tas ir nepieciešams.

Kopsavilkums

  • Compose fails (compose.yaml) apraksta visus lietotnes konteinerus; tas vienlaikus ir dokumentācija un jāiekļauj Jūsu rezerves kopijā.
  • Izmantojiet versiju tagus, restartēšanas politiku, nosauktus sējumus, healthcheck, kur iespējams, un noslēpumus failā .env ar tiesībām 600.
  • docker compose config, up -d, ps, logs, pull, down; down -v dzēš arī sējumus.
  • Publicētie porti apiet ufw un firewalld. Publicējiet tikai to, kam jābūt publiskam, pārējo uz 127.0.0.1 ar reverso starpniekserveri priekšā.
  • Nekādu docker.sock, privileged vai network_mode: host bez pamatota iemesla.

Tests (quiz)

1. ufw ir iestatīts uz "aizliegt visu, izņemot 22, 80 un 443". Jūsu compose failā datubāzei ir ports: - "5432:5432". Vai datubāze ir sasniedzama no interneta?



2. Kā konteiners app sasniedz datubāzi tajā pašā compose lietotnē, ja datubāze nepublicē nevienu portu?



3. Pēc servera restartēšanas Jūsu konteineri vairs nedarbojas. Kas, visticamāk, trūkst compose failā?



4. Kāda ir atšķirība starp docker compose down un docker compose down -v?



5. Vadības paneļa programma savā pamācībā pieprasa - /var/run/docker.sock:/var/run/docker.sock. Ko tas nozīmē drošībai?



Uzdevums

Uzdevums Z9.3: Compose faila pārbaude. Piemēra failā compose-nakijken.txt (kā teksta failā) ir neliela interneta veikala compose fails ar lietotni, datubāzi, kešatmiņu un pārvaldības rīku. Tajā ir sešas kļūdas, kas aplūkotas šajā nodarbībā vai nodarbībās 9.1 un 9.2. Katram numurētajam rindu blokam norādiet, vai tas ir pareizs vai kļūdains, un katrai kļūdai izvēlieties pareizo labojumu. Programma salīdzina ar fiksēto atslēgu. Ja Jums ir savs compose fails, pēc tam pārbaudiet to pēc tiem pašiem punktiem.

Uzdevums Z9.3: Compose faila pārbaude

Fails šim uzdevumam: compose-nakijken.txt





















To, ko ievadāt, un to, ko atrodam, mēs nesaglabājam. Jūsu pārlūkprogramma atceras Jūsu atbildes un to, vai esat izpildījuši uzdevumu. Ja esat pieteikušies, sadaļā Mani kursi saglabājam tikai to, ka uzdevums bija (gandrīz) pareizs; tur to varat arī dzēst.

Vairāk lasīt

Lūdzu, uzgaidiet…

Iestatiet savus domēnus

Katram domēnam norādiet vārdu serverus, piesaisti hostingam un to, kurš būs turētājs.

Ielādē Jūsu domēnus…