Για να συνδεθούμε στην εικονική μηχανή τρέχουμε την εντολή.

ssh user@<ip>
password: ****
P4ViujF
Caution
Πρέπει να είστε συνδεδεμένοι στο VPN - Πανεπιστημίου Δυτικής Αττικής

Τεχνολογίες

Για την υλοποίηση της εργασίας χρησιμοποιήθηκε η τεχνολογία Docker το οποίο εικονικοποιεί σε επίπεδο λειτουργικού συστήματος.

sudo apt-get update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
Tip
Για να ελέγξουμε ότι η υπηρεσία του Docker λειτουργεί εκτελούμε την εντολή
docker --version

Εκτέλεση Εργασίας

Αρχικά, δημιουργούμε το δικό μας image για τον nginx ανάλογα με τις ανάγκες της υπηρεσίας μας.

Το αποθηκεύουμε σε ένα αρχείο ονομάζοντας το Dockerfile

Επόμενο βήμα είναι η εκτέλεση της παρακάτω εντολής για τη δημιουργία του image

docker build -f Dockerfile -t anginx .
Note

Οptions:

  • -f προσδιορίζει το αρχείο για το build

  • -t tag (το όνομα του image)

  • "." είναι το current directory

Όλα τα services τα οποία θα τρέξουν στην εργασία μας βρίσκονται στο αρχείο docker-compose.yml

Αναλυτικά:

Nginx

nginx:
    image: anginx #image from docker building my Dockerfile (docker build -f Dockerfile -t anginx .)  // (1)
    container_name: production_nginx // (2)
    volumes:  // (3)
      - /home/user/docker/nginx.conf:/etc/nginx/conf.d/default.conf
      - /home/user/docker/cert.pem:/etc/nginx/public.crt
      - /home/user/docker/key.pem:/etc/nginx/private.key
    ports: // (4)
      - 9080:80
      - 9443:443
    networks: // (5)
      - main_net

MariaDB

mariadb:
    image: mariadb // (1)
    container_name: mariadb // (2)
    volumes:  // (3)
      - db_data:/var/lib/mysql
    environment: // (8)
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
    networks: // (5)
      - main_net

WordPress

wordpress:
    image: wordpress:latest // (1)
    container_name: wordpress // (2)
    restart: always
    deploy: #create replicas with specific resources // (6)
      mode: replicated
      replicas: 2
#      max_replicas_per_node: 1
      resources:
        limits: #max resources
          cpus: '0.50'
          memory: 50M
        reservations: #default resources
          cpus: '0.25'
          memory: 20M
    ports: // (4)
      - 80:80
    volumes:  // (3)
      - wp-app:/var/www/html
    environment: // (8)
      WORDPRESS_DB_HOST: mariadb:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: wordpress
    networks: // (5)
      - main_net
    depends_on:  // (7)
      - mariadb

PHPMyAdmin

phpmyadmin:
    image: phpmyadmin/phpmyadmin // (1)
    container_name: phpmyadmin // (2)
    deploy: // (6)
      mode: replicated
      replicas: 2
#      max_replicas_per_node: 1
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
    environment: // (8)
      PMA_HOST: mariadb
      MYSQL_ROOT_PASSWORD: wordpress
      PMA_PORT: 3306
    ports: // (4)
      - 8080:80
    networks: // (5)
      - main_net

Minio

minio1:
    image: minio/minio:RELEASE.2020-04-10T03-34-42Z // (1)
    hostname: minio1
    volumes:  // (3)
      - minio1-data:/export
    ports: // (4)
      - "9001:9000"
    networks: // (5)
      - minio_distributed
    deploy: // (6)
      restart_policy:
        delay: 10s
        max_attempts: 10
        window: 60s
      placement:
        constraints:
          - node.labels.minio1==true
    command: server http://minio{1...4}/export
    environment: // (8)
       MINIO_ACCESS_KEY: AKIAIOSFODNN7EXAMPLE
       MINIO_SECRET_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    # secrets:
      # - secret_key
      # - access_key
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

Configuration Options:

  1. image: Το image file από το οποίο θα τρέξει το service

  2. container_name: Είναι το όνομα του service

  3. volumes: "Mount host paths or named volumes from our VM to the service"

  4. ports: Είναι τα ports τα οποία κάνουμε expose "στον έξω" κόσμο

  5. networks: Είναι το εικονικό δίκτυο στο οποίο θα τρέξει το service

  6. deploy: Κάνουμε specify τα resources και τον αριθμό των replicas που θα τρέξουν

  7. depends_on: "Express dependency between services"

  8. environment: "Add environment variables"