HE-Arc / webapp-server

Servers for the web application 2 course.
https://srvz-webapp.he-arc.ch/
BSD 3-Clause "New" or "Revised" License
8 stars 4 forks source link

docker swarm #38

Open greut opened 7 years ago

greut commented 7 years ago

Avec deux machines, le mieux est de se reposer sur docker swarm pour tout... ou presque.

Une fois les nœuds créé, il faut mettre tout le petit monde devant être géré par traefik dans un réseau ad hoc traefik-net. Un proposition est de créer le proxy traefik, puis les bases de données, puis chaque projet peut être une stack en lui-même. Il suffit de créer les bons réseaux et de connecter les bons tuyaux pour isoler les projets ou non, e.g. redis.

Traefik

proxy.yml

version: "3"

services:
  proxy:
    image: traefik
    hostname: proxy
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/etc/traefik/traefik.toml
      - proxy:/etc/traefik/acme
    command: -c /etc/traefik/traefik.toml --docker.domain=srvz-webapp2.he-arc.ch --docker.swarmmode
    deploy:
      labels:
        - "traefik.enable=false"
      placement:
        constraints: [node.role == manager]

volumes:
  proxy:

networks:
  default:
    external:
      name: traefik-net

traefik.toml

#debug = true
logLevel = "INFO"
defaultEntryPoints = ["http", "https"]

traefikLogsFile = "/proc/self/fd/1"
accessLogsFile = "/proc/self/fd/1"

[web]
address = ":8080"

[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true

[acme]
email = "yoan.blanc@he-arc.ch"
storage = "/etc/traefik/acme/acme.json"
acmeLogging = true
onDemand = true
onHostRule = true
entryPoint = "https"

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

MySQL + Postgres

databases.yml

version: '3'

services:
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - mysql:/var/lib/mysql
    deploy:
      labels:
        - "traefik.enable=false"

  postgres:
    image: postgres:9.6-alpine
    environment:
      - POSTGRES_PASSWORD=root
      - POSTGRES_DATA=/var/lib/postgresql/data/pgdata
    ports:
      - 3306:3306
    volumes:
      - postgres:/var/lib/postgresql/data
    deploy:
      labels:
        - traefik.enable=false

volumes:
  mysql:
  postgres:

networks:
  default:
    external:
      name: traefik-net

Test

admin.yml

version: '3'

services:
  admin:
    image: php:7.1-apache
    volumes:
      - admin:/var/www/html
    environment:
      - MYSQL_HOST=databases_mysql
      - POSTGRES_HOST=databases_postgres
    ports:
      - 5432:5432
    deploy:
      labels:
        - traefik.frontend.rule=Host:admin.srvz-webapp2.he-arc.ch
        - traefik.port=80

volumes:
  admin:

networks:
  default:
    external:
      name: traefik-net

Documentation

greut commented 7 years ago

version intémediaire: b63acb9c8b8a0052e4ec6d64518df20a759f3ea3