Browse Source

Upload files to 'adoc&html_files'

master
parent
commit
47fcd4a0dd
  1. 64
      adoc&html_files/DOC.adoc
  2. 57
      adoc&html_files/INSTALL.adoc
  3. 198
      adoc&html_files/README.adoc

64
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[]

57
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
----

198
adoc&html_files/README.adoc

@ -0,0 +1,198 @@
= README
Για να συνδεθούμε στην εικονική μηχανή τρέχουμε την εντολή.
[source, console]
----
ssh user@<ip>
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"
Loading…
Cancel
Save