diff --git a/adoc&html_files/DOC.adoc b/adoc&html_files/DOC.adoc new file mode 100644 index 0000000..ed381d7 --- /dev/null +++ b/adoc&html_files/DOC.adoc @@ -0,0 +1,64 @@ += DOC + +Αφού έχουμε εγκαταστήσει τα απαραίτητα προγράμματα δημιουργούμε το Makefile το οποίο θα περιέχει τις εντολές δημιουργίας του image καθώς και το deploy του docker-compose στο swarm. + +To Makefile περιέχει τις εντολές: +[source, sh] +---- +echo -e "\e[31mBuilding our nginx image!" +sleep 2 +echo -e "\e[39m" +docker build -f Dockerfile -t anginx . +echo -e "\e[31mDeploying service" +sleep 2 +echo -e "\e[39m" +docker stack deploy -c docker-compose.yml wordpress +---- + +Στη συνέχεια εκτελούμε την εντολή [underline]#chmod +x Makefile# ώστε να δώσουμε τα απραίτητα δικαιώματα στο αρχείο. + +Για να το εκτελέσουμε τρέχουμε το ./Makefile + +[TIP] +O manager ελέγχει ότι όλες οι υπηρεσίες τρέχουν σωστά με την εντολή [underline]#docker service ls# + +== Testing +=== WordPress +:nofooter: +Προκειμένου να δούμε real-time τα αποτελέσματα του WordPress, βάζουμε στον browser μια από τις ακόλουθες IPv4: + +*83.212.77.39* + +*83.212.77.27* + +*83.212.77.24* + +*83.212.77.25* + +image::https://i.imgur.com/ecBF9WN.png[] + +=== PHPMyAdmin +Προκειμένου να δούμε real-time τα αποτελέσματα του PHPMyAdmin, βάζουμε στον browser μια από τις ακόλουθες IPv4: + +*83.212.77.39:8080* + +*83.212.77.27:8080* + +*83.212.77.24:8080* + +*83.212.77.25:8080* + +image::https://i.imgur.com/BG2Vxt9.png[] + +=== Minio +Προκειμένου να δούμε real-time τα αποτελέσματα του Minio, βάζουμε στον browser μια από τις ακόλουθες IPv4: + +*83.212.77.39:9001-9004* + +*83.212.77.27:9001-9004* + +*83.212.77.24:9001-9004* + +*83.212.77.25:9001-9004* + +image::https://i.imgur.com/Kaz7KTR.png[] \ No newline at end of file diff --git a/adoc&html_files/INSTALL.adoc b/adoc&html_files/INSTALL.adoc new file mode 100644 index 0000000..efd6dc0 --- /dev/null +++ b/adoc&html_files/INSTALL.adoc @@ -0,0 +1,57 @@ += INSTALL + +Για την εκτέλεση της εργαστηριακής άσκησης χρησιμοποιήσαμε τις υπηρεσίες του https://cyclades.okeanos-knossos.grnet.gr[~okeanos] + +Πιο συγκεκριμένα, χρησιμοποιήσαμε ένα VM με τα ακόλουθα χαρακτηριστικά + +image::https://i.imgur.com/GwwJuvU.png[] +image::https://i.imgur.com/MH8dQzS.png[] + +___ + + +== Docker Swarm Initialization +:nofooter: +Προκειμένου να δημιουργήσουμε το σμήνος (swarm) ο manager έτρεξε την εντολή + +[source, console] +---- +docker swarm init --advertise-addr 83.212.77.39 +---- + +Οι workers για να συνδεθούν στο _swarm_ (σμήνος) πρέπει να εκτελέσουν +[source, console] +---- +docker swarm join --token SWMTKN-1-433emh74ij7y4loql5z5js9t7ptxkfdgwwsdzq18p3ag7uxswt-9ah0x5cwf6xnl1djgyet0x si 83.212.77.39:2377 +---- + +[TIP] +Για να εμφανιστεί το join token ο manager τρέχει την εντολή + +[source, console] +---- +docker swarm join-token worker +---- + +== Working Directory + +Στη συνέχεια δημιουργούμε το working directory μας με την εντολή + +[source, console] +---- +mkdir docker +---- + +[TIP] +Αν κάνουμε _pwd_ θα δούμε ότι βρισκόμαστε στο directory /home/user/docker + +Όλοι οι χρήστες θα πρέπει να έχουν στον συγκεκριμένο φάκελο τα αρχεία nginx.conf & cert.pem & key.pem + +---- +|_ home + |_ user + |_ docker + |_ nginx.conf + |_ cert.pem + |_ key.pem +---- \ No newline at end of file diff --git a/adoc&html_files/README.adoc b/adoc&html_files/README.adoc new file mode 100644 index 0000000..dc418b3 --- /dev/null +++ b/adoc&html_files/README.adoc @@ -0,0 +1,198 @@ += README + +Για να συνδεθούμε στην εικονική μηχανή τρέχουμε την εντολή. + +[source, console] +---- +ssh user@ +password: **** +---- + +image::https://i.imgur.com/P4ViujF.png[] + +[CAUTION] +Πρέπει να είστε συνδεδεμένοι στο https://wiki.noc.uniwa.gr/doku.php?id=vpn_service_openvpn[VPN - Πανεπιστημίου Δυτικής Αττικής] + +== Τεχνολογίες + +Για την υλοποίηση της εργασίας χρησιμοποιήθηκε η τεχνολογία *Docker* το οποίο εικονικοποιεί σε επίπεδο λειτουργικού συστήματος. + +[source, console] +---- +sudo apt-get update +sudo apt install docker.io +sudo systemctl start docker +sudo systemctl enable docker +---- + +[TIP] +Για να ελέγξουμε ότι η υπηρεσία του *Docker* λειτουργεί εκτελούμε την εντολή + +[source, console] +---- +docker --version +---- + +== Εκτέλεση Εργασίας + +Αρχικά, δημιουργούμε το δικό μας image για τον *nginx* ανάλογα με τις ανάγκες της υπηρεσίας μας. + +Το αποθηκεύουμε σε ένα αρχείο ονομάζοντας το [underline]#Dockerfile# + +Επόμενο βήμα είναι η εκτέλεση της παρακάτω εντολής για τη δημιουργία του image + +[source, console] +---- +docker build -f Dockerfile -t anginx . +---- + +[NOTE] +==== +Οptions: + +* -f προσδιορίζει το αρχείο για το build +* -t tag (το όνομα του image) +* "." είναι το current directory +==== + +Όλα τα services τα οποία θα τρέξουν στην εργασία μας βρίσκονται στο αρχείο [underline]#docker-compose.yml# + +Αναλυτικά: + +=== Nginx + +[source, yml] +---- +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 +[source, yml] +---- +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 +[source, yml] +---- +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 +[source, yml] +---- +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 +[source, yml] +---- +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: +:nofooter: +<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" \ No newline at end of file