Docker za Web in Mail strežbo

Že dalj časa sem želel naredit / postavit Linux strežnik z Dockerjem in v njem poganjat Docker kontejnerje za strežbo spletnih strani in za strežbo elektronske pošte. Pri tem imam na strežniku dodeljen samo en javen IP naslov, tako da je nujna uporaba enega od proxy pass strežnikov. Seveda ker naj bi bil strežnik moderno zasnovan, je prav tako nujna uporaba SSL certifikatov za spletne in poštne storitve. Po večih poskusih z različnimi distribucijami Linuxa, z različnimi tipi proxy pas strežnikov in razčičnimi tipi poštnih strežnikov, je padla odločitev, da bom uporabil sledeče produkte:
  • za Linux distribucijo, sem uporabil zadnjo različico Ubuntu LTS, katero sem primerno zaščitil 
    • s požarno pregrado UFW
    • paketi Fail2ban in DenyHost
    • Psad za intrusion detection in analizo dnevniških datotek
    • ter Lynis za pregled pomanjkljivost in analizo celotnega sistema (tu bi omenil, da uporabljam Lynis Enterprise)
  • za proxy pass strežnik, je prvotna izbira bila na strani Nginxa v kontejnerju
    • ampak ker sem želel avtomatiko pri ustvarjanju novih hostov je idealna rešitev bila Traefik, kjer sem dodal še podporo za Let’s Encrypt SSL certifikate
  • za poštni sistem pa prav tako v enem stacku – v kontejnerju uporabljam kombinacijo
    • Postfix
    • Dovecot
    • Rspamd
    • PostfixAdmin
    • in RainLoop za spletno pregledovanje elektronske pošte
  • za samo administracijo sistema uporabljam Portainer, ko je kaj potrebno hitro poklikat, oz. CLI za zahtevnejša opravila.
To je grobo opisana postavitev osnovnega sistema, na katerem nato enostavno “deployam” recimo WordPress kontejner s pomočjo composerja, kjer je nuja dodati par vrstic, za uporabo Traefika in avtomatizacijo proxy pass zahtev. Primer docker compose datoteke z Traefikom za WordPress in Adminer za management MySQL baze podatov je tak:

version: “3”
networks:
  proxy:
    external: true
  internal:
    external: false
services:
  blog:
    image: wordpress:4.7.5-apache
    environment:
      WORDPRESS_DB_PASSWORD:
    labels:
      – traefik.backend=blog
      – traefik.frontend.rule=Host:www.enadomena.com
      – traefik.docker.network=proxy
      – traefik.port=80
    networks:
      – internal
      – proxy
    depends_on:
      – mysql
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD:
    networks:
      – internal
    labels:
      – traefik.enable=false
  adminer:
    image: adminer:4.3.1-standalone
    labels:
      – traefik.backend=adminer
      – traefik.frontend.rule=Host:db-admin.enadomena.com
      – traefik.docker.network=wpprod_proxy
      – traefik.port=8080
    networks:
      – internal
      – proxy
    depends_on:
      – mysql 

Pomembne so vrstice, ki se pričnejo z “traefik.”, s temi povemo proxy pass strežniku, da jih avtomatično doda v strežbo. Seveda je potrebno prav tako ustrezno zaščititi bloge, spletne servise in spletno strežbo, zato v labels sekcijo dodamo še recimo zapise kot so: 

labels:
      – traefik.backend=Nginx-Pro
      – traefik.frontend.rule=Host:www.enadomena.com,enadomena.com
      – traefik.docker.network=proxy
      – traefik.port=80
      – traefik.frontend.entryPoints=http,https
      – traefik.frontend.headers.SSLRedirect=true
      – traefik.frontend.headers.STSSeconds=315360000
      – traefik.frontend.headers.STSIncludeSubdomains=true
      – traefik.frontend.headers.STSPreload=true
      – traefik.frontend.headers.frameDeny=true
      – traefik.frontend.headers.browserXSSFilter=true

to je pač neka osnova, na kateri pričnemo gradit. Upam, da sem komu dal kako idejo, kako kaj naredit, v kolikor ima kdo idejo, kako še kaj dopolnit, jo naj zapiše v komentarje.

Dodaj odgovor

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja