Skip to content
Snippets Groups Projects
Commit cc3fc9d5 authored by Pierre Michiels's avatar Pierre Michiels
Browse files

13.11.20 21:20

parent ee1bf9a3
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ Utiliser le compilateur pour compiler le fichier puis après avoir crée le bina
on supprime les fichiers du compilateur.
Après quelques heures de recherche, j'ai abandonné l'utilisation de python pour réduire la tailel de l'image en essayant d'avoir une image qui ne contient que les fichiers nécessaires à l'exécution sans avoir de compilateur.
Après quelques heures de recherche, j'ai abandonné l'utilisation de python pour réduire la taille de l'image en essayant d'avoir une image qui ne contient que les fichiers nécessaires à l'exécution sans avoir de compilateur.
Le problème est que Python est configuré pour se compiler et s'exécuter avec la même commande => "python" ou "python3".
Dès lors les fichiers nécessaire pour pouvoir exécuter la commande "python" ou "python3" ne peuvent être enlevés.
D'autre part, il m'est impossible d'exécuter un fichier python compilé (.pyc) avec un interpreteur "sh" ou "bash".
......@@ -127,7 +127,7 @@ paquets pour faire du loadbalencing: nginx et caddy
J'utilise nginx:
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
L'architecture sera la suivante:
L'architecture sera la suivante (depreceted, voir "Modification d'architecture):
j'ai 4 workers (serveurs noeuds) sur openstack. Ceux-ci seront dirigés par un reverse-proxy qui est mon PC Ubuntu 20 Virtuel.
Pour installer le reverse proxy et donc le paquet nginx, j'ai suivi ce tuto:
......@@ -163,3 +163,20 @@ Un nouveau fichier serveur_go_different_hostname_for_ip.yml est utilisé pour pr
Commande pour exécuter le playbook ansible en prennant en compte des hostname différents pour chaque worker:
#ansible-playbook -i hosts.yml serveur_go_different_hostname_for_ip.yml --extra-vars "@workers_hostname.json" --private-key ssh-private-key.txt
Modification d'architecture:
Sur les 4 workers, l'une d'entre elles sera un worker et aussi le reverse-proxy.
(172.28.100.90)
Dockeriser nginx:
Après avoir créée l'image pour nginx, je l'a teste sur ma mach. virt. avec les commandes
#docker build -t nginx_reverse_proxy_img .
#docker run --rm -ti -p 9080:9090 nginx_reverse_proxy_img
url: 127.0.0.1:9080
Après, je met en place cette image et container via ansible sur la machine (172.28.100.90).
Par soucis de configuration, j'ai abandonné les modifications dans nginx.conf pour avoir un fichier propre pour mon reverse_proxy: reverse_proxy.conf
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY reverse_proxy.conf /etc/nginx/conf.d/default.conf
\ No newline at end of file
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
#reverse_proxy
upstream group1{
server 172.28.100.90:8000;
server 172.28.100.51:8000;
server 172.28.100.111:8000;
server 172.28.100.72:8000;
}
server {
listen 9090;
location / {
proxy_pass http://group1;
}
}
\ No newline at end of file
---
- name: Install go_server
- name: Install go_server and nginx reverse_rpoxy
hosts: all
become: true
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- name: copy go_server files
#copy directory part
- name: copy go_server files for every worker
copy:
src: "/home/pierre/Bureau/DAC/dac-tp/TP5_06.11.20/ansible/Gofiles"
#src: "/home/pierre/Bureau/DAC/dac-tp/TP5_06.11.20/ansible/Gofiles"
src: "/home/pierre/Bureau/DAC/dac-tp/TP5_06.11.20/ansible/nginx_loadbalencing/worker_go_server_files"
dest: "/root/"
ignore_errors: yes
- name: copy reverse_proxy_nginx files for worker1
copy:
src: "/home/pierre/Bureau/DAC/dac-tp/TP5_06.11.20/ansible/nginx_loadbalencing/reverse_proxy_nginx"
dest: "/root/"
ignore_errors: yes
when:
- ansible_default_ipv4.address == "172.28.100.90"
#remove containers and images part
# supprimer le container et l'image si ils existent déjà
- name: stop and remove contgo_server
docker_container:
name: contgo_server
state: absent
- name: stop and remove go_serverimg
- name: stop and remove contnginx_reverse_proxy
docker_container:
name: contnginx_reverse_proxy
state: absent
when:
- ansible_default_ipv4.address == "172.28.100.90"
- name: stop and remove go_serverimg on every worker
docker_image:
name: go_serverimg
state: absent
force_absent: yes
- name: stop and remove nginx_reverse_proxy_img
docker_image:
name: nginx_reverse_proxy_img
state: absent
force_absent: yes
when:
- ansible_default_ipv4.address == "172.28.100.90"
- name: build go_serverimg image
#build images part
- name: build go_serverimg image on every worker
docker_image:
build:
path: /root/Gofiles
path: /root/worker_go_server_files
name: go_serverimg
- name: build nginx_reverse_proxy_img image on worker1
docker_image:
build:
path: /root/reverse_proxy_nginx
name: nginx_reverse_proxy_img
when:
- ansible_default_ipv4.address == "172.28.100.90"
#build containers part
- name: build contgo_server container for worker1 (172.28.100.90)
docker_container:
name: contgo_server
......@@ -83,3 +119,16 @@
HOSTNAME: "{{ worker4Hostname }}"
when:
- ansible_default_ipv4.address == "172.28.100.72"
- name: build contnginx_reverse_proxy container for worker1 (172.28.100.90)
docker_container:
name: contnginx_reverse_proxy
image: nginx_reverse_proxy_img
ports:
- "9090:9090"
state: started
when:
- ansible_default_ipv4.address == "172.28.100.90"
\ No newline at end of file
FROM golang:alpine AS builder
COPY main.go /app/
WORKDIR /app
RUN CGO_ENABLED=0 go build -ldflags="-w -s" main.go
FROM scratch AS runner
COPY --from=builder /app/main /app/main
ENTRYPOINT ["/app/main"]
\ No newline at end of file
package main
import(
"fmt"
"net/http"
"os"
)
func main(){
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
r.Header.Set("Content-type", "text/html")
fmt.Fprintf(w, "<h1>Hello hostname: %s</h1>", os.Getenv("HOSTNAME"))
})
http.ListenAndServe(":80", nil)
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment