Skip to content
Snippets Groups Projects
Commit 0832ec1e authored by Nitorglycerine's avatar Nitorglycerine
Browse files

ajout du projet

parents
Branches
No related tags found
1 merge request!1ajout du projet
#+title: SAE4.B.01
#+author: Simon Bocquet
#+property: header-args :tangle script.sh
* Sommaire :toc:
- [[#utilisation][Utilisation]]
- [[#quelques-variables-pour-nous-aider][Quelques variables pour nous aider]]
- [[#création-des-machines-virtuelles][Création des machines virtuelles]]
- [[#création--démarrage][Création & démarrage]]
- [[#configuration-ssh][Configuration ssh]]
- [[#configuration-des-ip-static][Configuration des ip static]]
- [[#configuration-du-proxy][Configuration du proxy]]
- [[#configuration-du-serveur-ntp][Configuration du serveur NTP]]
- [[#configuration-des-noms-dhôtes][Configuration des noms d'hôtes]]
- [[#mise-à-jour-des-machines][Mise à jour des machines]]
- [[#installation-de-paquets-additionnels][Installation de paquets additionnels]]
- [[#installation-postgresql][Installation PostgreSQL]]
- [[#docker][Docker]]
- [[#rsync][Rsync]]
- [[#back-to-the-user][Back to the user]]
- [[#script-dajout-dun-nouveau-client][Script d'ajout d'un nouveau client]]
- [[#demandes-configurations][Demandes configurations]]
- [[#postgres][Postgres]]
- [[#odoo][Odoo]]
- [[#installation-de-traefik][Installation de Traefik]]
- [[#sauvegardes-régulières][Sauvegardes régulières]]
- [[#ssh-saves-vers-bdd][SSH saves vers bdd]]
- [[#copie-des-cronjobs-et-lancement-des-cronjobs][Copie des Cronjobs et lancement des cronjobs\]]
* Utilisation
Pour lancer l'infrastructure éxécutez le fichier =script.sh= puis suivez les
instructions.
Pour ajouter un client, éxécutez le fichier =create/new-user.sh= puis suivez les
instructions.
Pour effacer entièrement l'infrastructure, lancez le fichier =cleanup.sh=.
* Quelques variables pour nous aider
#+BEGIN_SRC shell :shebang "#/bin/bash"
config_ssh="ssh-conf"
config_interface="vm-conf/interface-conf"
config_ntp="vm-conf/ntp"
config_proxy="vm-conf/proxy"
#+END_SRC
* Création des machines virtuelles
** Création & démarrage
Depuis la machine de virtualisation, on va créer 4 machines virtuelles :
- ~odoo~ pour le serveur odoo
- ~bdd~ pour la base de données PostgreSQL
- ~saves~ pour les sauvegardes
#+BEGIN_SRC shell
echo "Création de odoo"
vmiut make odoo 1> /dev/null
echo "Création de bdd"
vmiut make bdd 1> /dev/null
echo "Création de saves"
vmiut make saves 1> /dev/null
echo "Démarrage de odoo"
vmiut start odoo 1> /dev/null
echo "Démarrage de bdd"
vmiut start bdd 1> /dev/null
echo "Démarrage de saves"
vmiut start saves 1> /dev/null
#+END_SRC
** Configuration ssh
*** Génération d'une clé ssh
On génère une clé ssh utilisé juste pour cette SAE.
#+begin_src shell
mkdir .ssh
ssh-keygen -f .ssh/identity
echo "Host *
IdentityFile .ssh/identity" > $config_ssh
#+end_src
*** Récupération des addresses ip
On récupére les addresses ip grâce à la commande ~vmiut info <nom_vm>~.
#+BEGIN_SRC shell
echo "Récupération des ips"
while ! [[ -n $odoo && -n $bdd && -n $saves ]]
do
odoo=$(vmiut info odoo | tail -n1 | cut -d '=' -f 2)
bdd=$(vmiut info bdd | tail -n1 | cut -d '=' -f 2)
saves=$(vmiut info saves | tail -n1 | cut -d '=' -f 2)
done
#+END_SRC
*** Rajout des ip dans le fichier de configuration ssh
Ajout des informations des machines virtuelles dans le fichier de configuration
ssh pour pouvoir se connecter plus facilement au machines virtuelles.
#+BEGIN_SRC shell
echo "Ajout de bdd dans le fichier de configuration ssh"
echo "Host bdd
HostName $bdd
User user" >> $config_ssh
echo "Ajout de saves dans le fichier de configuration ssh"
echo "Host saves
HostName $saves
User user" >> $config_ssh
echo "Ajout de odoo dans le fichier de configuration ssh"
echo "Host odoo
HostName $odoo
User user" >> $config_ssh
#+END_SRC
*** Copie de notre agent sur les machines
On ajoute notre clé ssh sur toutes les machines.
#+BEGIN_SRC shell
echo Copie de la clé ssh sur les machines virtuelles
id-ssh() {
echo Copie sur $1
ssh-copy-id -F $config_ssh $1
}
id-ssh "odoo"
id-ssh "bdd"
id-ssh "saves"
#+END_SRC
*** Copie de l'id pour se connecter en root
On copie l'id root pour pouvoir se connecter directement en root , pour ne pas
perdre de temps a se connecter en ssh, puis se conencter en root.
Ce changement sera inversé plus tard (sauf sur la machine =odoo= car =Docker=
n'est pas installé en mode rootless).
#+BEGIN_SRC shell
rootssh()
{
echo "Mot de passe root de "$1" = 'root'"
ssh -t -F $config_ssh $1 su root -c "cp\ -r\ /home/user/.ssh\ /root/.ssh"
}
rootssh "odoo"
rootssh "bdd"
rootssh "saves"
echo "Modification du fichier "$config_ssh
sed -Ei "s/user/root/g" $config_ssh
#+END_SRC
*** Pour un peu plus de sécurité
Pour un peu plus de sécurité, on change le mot de passe root sur les machines
virtuelles, on interdit la connexion en ssh avec un mot de passe et on change le
port ssh.
#+begin_src shell
ch-root-passwd() {
echo "Changez le mot de passe root de $1"
ssh -t -F $config_ssh $1 passwd
}
ch-root-passwd "odoo"
ch-root-passwd "bdd"
ch-root-passwd "saves"
prohibit-password() {
ssh -t -F $config_ssh $1 "sed -Ei \"s/#PermitRootLogin/PermitRootLogin/g\" /etc/ssh/sshd_config"
}
prohibit-password "odoo"
prohibit-password "bdd"
prohibit-password "saves"
change-port() {
ssh -F $config_ssh $1 "sed -Ei \"s/#Port 22/Port 42069\"/g /etc/ssh/sshd_config"
ssh -F $config_ssh $1 "systemctl restart sshd"
}
change-port "odoo"
change-port "bdd"
change-port "saves"
sed -i "2s/^/ Port 42069\n/g" $config_ssh
#+end_src
** Configuration des ip static
#+BEGIN_SRC shell
ipstatic () {
echo "Configuration du Serveur NTP sur " $1
scp -F $config_ssh $config_interface $1:/etc/network/interfaces.d/enp0s3
ssh -F $config_ssh $1 'head -n8 /etc/network/interfaces > /etc/network/interfaces'
ssh -F $config_ssh $1 sed -Ei 's/ADDRESS/$odoo/g' /etc/network/interfaces.d/enp0s3
}
ipstatic "odoo"
ipstatic "bdd"
ipstatic "saves"
#+END_SRC
** Configuration du proxy
on ajoute le [[file:vm-conf/proxy][proxy]] dans le fichier =/etc/environment= de chaque machine.
#+begin_src shell
echo "Configuration du proxy"
proxy() {
scp -F $config_ssh $config_proxy $1:/etc/environment
}
proxy "odoo"
proxy "bdd"
proxy "saves"
#+end_src
** Configuration du serveur NTP
on configure le serveur ntp des machine afin qu'elles soient toutes syncronisées
sur le [[file:vm-conf/ntp][serveur ntp de l'université]], renseigné dans le fichier ntp.
#+begin_src shell
ntp() {
echo "Configuration du serveur NTP sur " $1
ssh -F $config_ssh $1 systemctl stop systemd-timesyncd.service
scp -F $config_ssh $config_ntp $1:/etc/systemd/timesyncd.conf
ssh -F $config_ssh $1 systemctl start systemd-timesyncd.service
}
ntp "odoo"
ntp "bdd"
ntp "saves"
#+end_src
** Configuration des noms d'hôtes
#+begin_src shell
echo "Configuration des noms d'hôtes"
host() {
ssh -F $config_ssh $1 "echo \"# Nom d'hôtes des autres machines virutelle\" >> /etc/hosts"
if [[ $1 != "odoo" ]]
then
ssh -F $config_ssh $1 "echo \"$odoo odoo\" >> /etc/hosts"
fi
if [[ $1 != "bdd" ]]
then
ssh -F $config_ssh $1 "echo \"$bdd bdd\" >> /etc/hosts"
fi
if [[ $1 != "saves" ]]
then
ssh -F $config_ssh $1 "echo \"$saves saves\" >> /etc/hosts"
fi
ssh -F $config_ssh $1 "sed -Ei \"s/debian/$1/g\" /etc/hosts"
ssh -F $config_ssh $1 "hostname $1"
}
host "odoo"
host "bdd"
host "saves"
#+end_src
** Mise à jour des machines
#+begin_src shell
echo "Mise à jour des machines"
maj() {
ssh -t -F $config_ssh $1 'apt-get update && apt-get -y upgrade'
}
maj "odoo"
maj "bdd"
maj "saves"
#+end_src
* Installation de paquets additionnels
** Installation PostgreSQL
On installe postgresql grâce au paquet =postgresql= de debian.
On modifie le fichier de configuration =pg_hba.conf= pour autoriser les connections venant du réseau =192.168.194.0/24= à accèder à la base de données.
On modifie le fichier de configuration =postgresql.conf= pour préciser l'addresse qui écoute pour les connections.
#+begin_src shell
ssh -t -F $config_ssh bdd "apt-get install postgresql -y"
ssh -F $config_ssh bdd "echo \"host all all 192.168.194.0/24 md5\" >> /etc/postgresql/13/main/pg_hba.conf"
ssh -F $config_ssh bdd "sed -Ei \"s/#listen_addresses = 'localhost'/listen_addresses = 'localhost,$bdd'/g\" /etc/postgresql/13/main/postgresql.conf"
ssh -F $config_ssh bdd "systemctl restart postgresql"
#+end_src
*** Création d'un admin
Afin de ne pas utiliser l'utilisateur =postgres= et pour faciliter les cronjobs,
on créer un administrateur nommé =padmin= avec un mot de passe définie par
l'utilisateur.
#+begin_src shell
echo "Création d'un admin Postgres "
read -p "Entrez un mot de passe : " -s psqlpasswd
sed -E "s/PASSWD/$psqlpasswd/g" psql/createadmin.sql > psql/admin.sql
scp -F $config_ssh psql/admin.sql bdd:/root/admin.sql
rm -f psql/admin.sql
ssh -F $config_ssh bdd "chmod o+x /root && chmod o+rx /root/admin.sql"
ssh -F $config_ssh bdd "su - postgres -c \"psql -f /root/admin.sql\""
ssh -F $config_ssh bdd "chmod o-x /root && rm /root/admin.sql"
ssh -F $config_ssh bdd "echo localhost:5432:postgres:padmin:$psqlpasswd > /home/user/.pgpass"
ssh -F $config_ssh bdd "chown user /home/user/.pgpass"
ssh -F $config_ssh bdd "chmod 0600 /home/user/.pgpass"
#+end_src
** Docker
Téléchargement et éxécution du [[https://get.docker.com/][script d'installation officiel Docker]].
Configuration de Docker à l'aide des fichiers [[file:/docker/proxy-docker.conf][proxy-docker.conf]] et [[file:docker/daemon.json][daemon.json]] dans le dossier docker.
- [[file:docker/proxy-docker.conf][proxy-docker.conf]] sert à configurer le proxy pour que docker puisse télécharger les images.
- [[file:docker/daemon.json][daemon.json]] sert à configurer le daemon docker.
#+BEGIN_SRC shell
installdocker() {
echo "Installation de Docker sur la machine " $1
ssh -t -F $config_ssh $1 "wget -O - https://get.docker.com/ | sh"
echo "Configuration de docker"
ssh -F $config_ssh $1 "mkdir -p /etc/systemd/system/docker.service.d"
scp -F $config_ssh docker/proxy-docker.conf $1:/etc/systemd/system/docker.service.d
scp -F $config_ssh docker/daemon.json $1:/etc/docker/daemon.json
ssh -F $config_ssh $1 systemctl daemon-reload
ssh -F $config_ssh $1 systemctl restart docker
ssh -F $config_ssh $1 "docker network create traefik_net"
}
installdocker "odoo"
#+END_SRC
** Rsync
On installe =rsync= pour pouvoir faire des sauvegardes souvent.
Voir le [[file:cron/README.org][README]] concernant les cronjobs.
#+begin_src shell
installrsync() {
echo "Installation de Rsync sur la machine $1"
ssh -F $config_ssh $1 "apt-get install rsync -y"
}
installrsync "saves"
installrsync "bdd"
#+end_src
* Back to the user
Comme on a plus besoin des droits superutilisateurs, on va continuer le reste en tant que =user=.
Sauf sur la machine =odoo=, pour l'instant on va éviter l'installation docker en mode rootless, y'a beaucoup d'étapes.
#+begin_src shell
norootlogin() {
ssh -t -F $config_ssh $1 "sed -Ei \"s/prohibit-password/no/g\" /etc/ssh/sshd_config"
}
norootlogin "odoo"
norootlogin "bdd"
norootlogin "saves"
sed -Ei "s/root/user/g" $config_ssh
sed -Ei "12s/user/root/g" $config_ssh
#+end_src
* Script d'ajout d'un nouveau client
:PROPERTIES:
:header-args: :tangle create/new-client.sh
:END:
** Demandes configurations
On demande les spécifications pour ajouter un client.
#+begin_src shell :shebang "#/bin/bash"
bdd=$(vmiut info bdd | tail -n1 | cut -d '=' -f 2)
[ $# -eq 0 ] && echo "Indiquez le fichier de configuration ssh" && exit 1
! [ -f $1 ] && echo "Le fichier n'existe pas" && exit 1
ssh_config=$1
read -p "Choix du port pour odoo (port 8069 par défaut) : " portodoo
[ -z $portodoo ] && portodoo=8069
read -p "Nom odoo (client1 est le nom par défaut) : " name
[ -z $name ] && name="client1"
read -p "Mot de passe odoo : " -s password
retrypassword() {
echo "Le mot de passe ne peut pas être vide"
read -p "Entrez un nouveau mot de passe : " -s password
}
while [ -z $password ] ; do retrypassword ; done
#+end_src
** Postgres
Modifications du fichier =odoo-client.sql= pour créer un nouvel utilisateur postgres et une nouvell base pour cet utilisateur.
#+begin_src shell
echo "Création du l'utilisateur et de la base de données $name"
mkdir -p $name/psql
sed -E "s/NAME/$name/g" psql/createuser.sql > $name/psql/odoo-$name.sql
sed -Ei "s/USERPASSWD/$password/g" $name/psql/odoo-$name.sql
scp -r -F $1 $name/psql bdd:~/$name
read -p "Entrez le mot de passe amdin : " -s padmin
ssh -F $1 bdd "echo localhost:5432:db_$name:padmin:$padmin >> ~/.pgpass"
ssh -t -F $1 bdd "psql -f ~/$name/odoo-$name.sql -h localhost -U padmin -d postgres"
#+end_src
** Odoo
Configuration d'une instance Odoo. On modifie le fichier template [[file:odoo/odoo.conf][odoo.conf]].
#+begin_src shell
echo "Création du fichier de configuration Odoo"
mkdir $name/odoo
mkdir -p $name/odoo/config
sed -E "s/POSTGRES/$bdd/g" odoo/odoo.conf > $name/odoo/config/odoo.conf
sed -Ei "s/USER/$name/g" $name/odoo/config/odoo.conf
sed -Ei "s/USRPASSWD/$password/g" $name/odoo/config/odoo.conf
sed -Ei "s/PORTODOO/$portodoo/g" $name/odoo/config/odoo.conf
sed -Ei "s/DBNAME/db_$name/g" $name/odoo/config/odoo.conf
#+end_src
Modification du [[file:odoo/docker-compose.yml][docker-compose]] template et lancement du service.
#+begin_src shell
echo "Création du service odoo pour $name"
sed -E "s/PORT/$portodoo/g" odoo/docker-compose.yml > $name/odoo/docker-compose.yml
sed -Ei "s/NAME/$name/g" $name/odoo/docker-compose.yml
sed -Ei "s/VIRT/$(hostname)/g" $name/odoo/docker-compose.yml
echo $bdd:5432:db_$name:$name:$password > $name/odoo/pg_pass
scp -F $1 -r $name/odoo odoo:~/$name
ssh -F $1 odoo "cd $name && docker compose up -d"
#+end_src
* Installation de Traefik
Installation de Traefik à partir du [[file:traefik/docker-compose.yml][docker-compose]] et on Forward les ports
=9090= et =9091= vers les ports =8080= et =8081= pour qu'on puisse accèder au
instances Odoo et au tableau de bord de Treafik.
#+begin_src shell
echo "Installation de Traefik"
scp -r -F $config_ssh traefik odoo:~/
ssh -F $config_ssh odoo "cd traefik && docker compose up -d"
echo "modification du fichier de configuration ssh"
cat >> $config_ssh << EOF
LocalForward :9090 localhost:8080
LocalForward :9091 localhost:8081
EOF
#+end_src
* Sauvegardes régulières
Pour faire des sauvegardes règulières on utilise =rsync=.
** SSH saves vers bdd
Pour pouvoir utiliser rsync dans un cronjob, il faut que la machine de
sauvegardes puisse se connecter en ssh sur la machine de base de données sans
avoir à rentrer de mot de passe. On génère donc une clé ssh et on la copie sur
la machine bdd.
#+begin_src shell
echo "Config SSH de saves"
ssh -F $config_ssh saves "mkdir .ssh"
ssh -F $config_ssh saves "ssh-keygen -f ~/.ssh/id_rsa -P ''"
ssh -t -F $config_ssh saves "ssh-copy-id -p 42069 user@bdd"
#+end_src
** Copie des Cronjobs et lancement des cronjobs\
On copie les [[file:cron/README.org][cronjobs]] sur les machines bdd et saves.
#+begin_src shell
scp -F $config_ssh cron/bdd bdd:~/cron
scp -F $config_ssh cron/dump.sh bdd:~/dump.sh
scp -F $config_ssh cron/saves saves:~/cron
ssh -F $config_ssh bdd "mkdir ~/dumps"
ssh -F $config_ssh bdd "crontab ~/cron"
ssh -F $config_ssh saves "crontab ~/cron"
#+end_src
#!/bin/bash
echo "Stop odoo"
vmiut stop odoo
echo "stop saves"
vmiut stop saves
echo "stop bdd"
vmiut stop bdd
echo "Supression de odoo"
vmiut rm odoo
echo "Supression de bdd"
vmiut rm bdd
echo "Supression de saves"
vmiut rm saves
echo "Supression du fichier de configuration ssh"
rm -f ssh-conf
rm -rf .ssh
#/bin/bash
bdd=$(vmiut info bdd | tail -n1 | cut -d '=' -f 2)
[ $# -eq 0 ] && echo "Indiquez le fichier de configuration ssh" && exit 1
! [ -f $1 ] && echo "Le fichier n'existe pas" && exit 1
ssh_config=$1
read -p "Choix du port pour odoo (port 8069 par défaut) : " portodoo
[ -z $portodoo ] && portodoo=8069
read -p "Nom odoo (client1 est le nom par défaut) : " name
[ -z $name ] && name="client1"
read -p "Mot de passe odoo : " -s password
retrypassword() {
echo "Le mot de passe ne peut pas être vide"
read -p "Entrez un nouveau mot de passe : " -s password
}
while [ -z $password ] ; do retrypassword ; done
echo "Création du l'utilisateur et de la base de données $name"
mkdir -p $name/psql
sed -E "s/NAME/$name/g" psql/createuser.sql > $name/psql/odoo-$name.sql
sed -Ei "s/USERPASSWD/$password/g" $name/psql/odoo-$name.sql
scp -r -F $1 $name/psql bdd:~/$name
read -p "Entrez le mot de passe amdin : " -s padmin
ssh -F $1 bdd "echo localhost:5432:db_$name:padmin:$padmin >> ~/.pgpass"
ssh -t -F $1 bdd "psql -f ~/$name/odoo-$name.sql -h localhost -U padmin -d postgres"
echo "Création du fichier de configuration Odoo"
mkdir $name/odoo
mkdir -p $name/odoo/config
sed -E "s/POSTGRES/$bdd/g" odoo/odoo.conf > $name/odoo/config/odoo.conf
sed -Ei "s/USER/$name/g" $name/odoo/config/odoo.conf
sed -Ei "s/USRPASSWD/$password/g" $name/odoo/config/odoo.conf
sed -Ei "s/PORTODOO/$portodoo/g" $name/odoo/config/odoo.conf
sed -Ei "s/DBNAME/db_$name/g" $name/odoo/config/odoo.conf
echo "Création du service odoo pour $name"
sed -E "s/PORT/$portodoo/g" odoo/docker-compose.yml > $name/odoo/docker-compose.yml
sed -Ei "s/NAME/$name/g" $name/odoo/docker-compose.yml
sed -Ei "s/VIRT/$(hostname)/g" $name/odoo/docker-compose.yml
echo $bdd:5432:db_$name:$name:$password > $name/odoo/pg_pass
scp -F $1 -r $name/odoo odoo:~/$name
ssh -F $1 odoo "cd $name && docker compose up -d"
#+title: Cronjobs
#+author: Simon Bocquet
* Sommaire :toc:
- [[#il-y-a-quoi-ici-][Il y a quoi ici ?]]
- [[#bdd][BDD]]
- [[#saves][Saves]]
* Il y a quoi ici ?
Ici il y a les cronjobs qui vont être éxécutés tout les dimanche à ~2h30.
* BDD
#+begin_src text :tangle bdd
25 2 * * sun sh /home/user/dump.sh
#+end_src
#+begin_src shell :tangle dump.sh
for db in $(cat /home/user/.pgpass | cut -d ':' -f 3)
do
pg_dump $db -U padmin -h localhost -f ~/dumps/$db.dump
done
#+end_src
* Saves
#+begin_src text :tangle saves
30 2 * * sun rsync -az -e "ssh -p 42069" user@bdd:~/dumps ~/
#+end_src
25 2 * * sun sh /home/user/dump.sh
for db in $(cat /home/user/.pgpass | cut -d ':' -f 3)
do
pg_dump $db -U padmin -h localhost -f ~/dumps/$db.dump
done
30 2 * * sun rsync -az -e "ssh -p 42069" user@bdd:~/dumps ~/
{
"registry-mirrors": ["http://172.18.48.9:5000"],
"default-address-pools":
[
{"base":"172.20.0.0/16","size":24}
]
}
[Service]
Environment="HTTP_PROXY=http://cache.univ-lille.fr:3128"
Environment="HTTPS_PROXY=http://cache.univ-lille.fr:3128"
Environment="NO_PROXY=localhost,192.168.194.0/24,172.18.48.0/22"
services:
change-volume-owner:
image: odoo:14.0
user: root
volumes:
- ./odoo-data:/var/lib/odoo
command: chown -R odoo:odoo /var/lib/odoo
web:
image: odoo:14.0
ports:
- "PORT:8069"
volumes:
- ./odoo-data:/var/lib/odoo
- ./config:/etc/odoo
environment:
- PASSWORD_FILE=/run/secrets/postgresql_password
networks:
- traefik_net
secrets:
- postgresql_password
labels:
- "traefik.http.routers.NAME.rule=Host(`NAME.VIRT.iutinfo.fr`)"
#- "traefik.http.services.NAME.loadbalancer.server.port=PORT"
depends_on:
change-volume-owner:
condition: service_completed_successfully
entrypoint: odoo -c /etc/odoo/odoo.conf -i base
secrets:
postgresql_password:
file: pg_pass
networks:
traefik_net:
external: true
[options]
# Database Connection
db_host = POSTGRES
db_port = 5432
db_user = USER
db_name = DBNAME
db_password = USRPASSWD
# Service Settings
admin_passwd = admin
wmlrpc_port = PORTODOO
CREATE USER padmin WITH PASSWORD 'PASSWD';
ALTER USER padmin SUPERUSER;
CREATE USER NAME WITH PASSWORD 'USERPASSWD';
CREATE DATABASE db_NAME WITH OWNER=NAME;
GRANT ALL PRIVILEGES ON DATABASE db_NAME TO NAME;
script.sh 0 → 100644
#/bin/bash
config_ssh="ssh-conf"
config_interface="vm-conf/interface-conf"
config_ntp="vm-conf/ntp"
config_proxy="vm-conf/proxy"
echo "Création de odoo"
vmiut make odoo 1> /dev/null
echo "Création de bdd"
vmiut make bdd 1> /dev/null
echo "Création de saves"
vmiut make saves 1> /dev/null
echo "Démarrage de odoo"
vmiut start odoo 1> /dev/null
echo "Démarrage de bdd"
vmiut start bdd 1> /dev/null
echo "Démarrage de saves"
vmiut start saves 1> /dev/null
mkdir .ssh
ssh-keygen -f .ssh/identity
echo "Host *
IdentityFile .ssh/identity" > $config_ssh
echo "Récupération des ips"
while ! [[ -n $odoo && -n $bdd && -n $saves ]]
do
odoo=$(vmiut info odoo | tail -n1 | cut -d '=' -f 2)
bdd=$(vmiut info bdd | tail -n1 | cut -d '=' -f 2)
saves=$(vmiut info saves | tail -n1 | cut -d '=' -f 2)
done
echo "Ajout de bdd dans le fichier de configuration ssh"
echo "Host bdd
HostName $bdd
User user" >> $config_ssh
echo "Ajout de saves dans le fichier de configuration ssh"
echo "Host saves
HostName $saves
User user" >> $config_ssh
echo "Ajout de odoo dans le fichier de configuration ssh"
echo "Host odoo
HostName $odoo
User user" >> $config_ssh
echo Copie de la clé ssh sur les machines virtuelles
id-ssh() {
echo Copie sur $1
ssh-copy-id -F $config_ssh $1
}
id-ssh "odoo"
id-ssh "bdd"
id-ssh "saves"
rootssh()
{
echo "Mot de passe root de "$1" = 'root'"
ssh -t -F $config_ssh $1 su root -c "cp\ -r\ /home/user/.ssh\ /root/.ssh"
}
rootssh "odoo"
rootssh "bdd"
rootssh "saves"
echo "Modification du fichier "$config_ssh
sed -Ei "s/user/root/g" $config_ssh
ch-root-passwd() {
echo "Changez le mot de passe root de $1"
ssh -t -F $config_ssh $1 passwd
}
ch-root-passwd "odoo"
ch-root-passwd "bdd"
ch-root-passwd "saves"
prohibit-password() {
ssh -t -F $config_ssh $1 "sed -Ei \"s/#PermitRootLogin/PermitRootLogin/g\" /etc/ssh/sshd_config"
}
prohibit-password "odoo"
prohibit-password "bdd"
prohibit-password "saves"
change-port() {
ssh -F $config_ssh $1 "sed -Ei \"s/#Port 22/Port 42069\"/g /etc/ssh/sshd_config"
ssh -F $config_ssh $1 "systemctl restart sshd"
}
change-port "odoo"
change-port "bdd"
change-port "saves"
sed -i "2s/^/ Port 42069\n/g" $config_ssh
ipstatic () {
echo "Configuration du Serveur NTP sur " $1
scp -F $config_ssh $config_interface $1:/etc/network/interfaces.d/enp0s3
ssh -F $config_ssh $1 'head -n8 /etc/network/interfaces > /etc/network/interfaces'
ssh -F $config_ssh $1 sed -Ei 's/ADDRESS/$odoo/g' /etc/network/interfaces.d/enp0s3
}
ipstatic "odoo"
ipstatic "bdd"
ipstatic "saves"
echo "Configuration du proxy"
proxy() {
scp -F $config_ssh $config_proxy $1:/etc/environment
}
proxy "odoo"
proxy "bdd"
proxy "saves"
ntp() {
echo "Configuration du serveur NTP sur " $1
ssh -F $config_ssh $1 systemctl stop systemd-timesyncd.service
scp -F $config_ssh $config_ntp $1:/etc/systemd/timesyncd.conf
ssh -F $config_ssh $1 systemctl start systemd-timesyncd.service
}
ntp "odoo"
ntp "bdd"
ntp "saves"
echo "Configuration des noms d'hôtes"
host() {
ssh -F $config_ssh $1 "echo \"# Nom d'hôtes des autres machines virutelle\" >> /etc/hosts"
if [[ $1 != "odoo" ]]
then
ssh -F $config_ssh $1 "echo \"$odoo odoo\" >> /etc/hosts"
fi
if [[ $1 != "bdd" ]]
then
ssh -F $config_ssh $1 "echo \"$bdd bdd\" >> /etc/hosts"
fi
if [[ $1 != "saves" ]]
then
ssh -F $config_ssh $1 "echo \"$saves saves\" >> /etc/hosts"
fi
ssh -F $config_ssh $1 "sed -Ei \"s/debian/$1/g\" /etc/hosts"
ssh -F $config_ssh $1 "hostname $1"
}
host "odoo"
host "bdd"
host "saves"
echo "Mise à jour des machines"
maj() {
ssh -t -F $config_ssh $1 'apt-get update && apt-get -y upgrade'
}
maj "odoo"
maj "bdd"
maj "saves"
ssh -t -F $config_ssh bdd "apt-get install postgresql -y"
ssh -F $config_ssh bdd "echo \"host all all 192.168.194.0/24 md5\" >> /etc/postgresql/13/main/pg_hba.conf"
ssh -F $config_ssh bdd "sed -Ei \"s/#listen_addresses = 'localhost'/listen_addresses = 'localhost,$bdd'/g\" /etc/postgresql/13/main/postgresql.conf"
ssh -F $config_ssh bdd "systemctl restart postgresql"
echo "Création d'un admin Postgres "
read -p "Entrez un mot de passe : " -s psqlpasswd
sed -E "s/PASSWD/$psqlpasswd/g" psql/createadmin.sql > psql/admin.sql
scp -F $config_ssh psql/admin.sql bdd:/root/admin.sql
rm -f psql/admin.sql
ssh -F $config_ssh bdd "chmod o+x /root && chmod o+rx /root/admin.sql"
ssh -F $config_ssh bdd "su - postgres -c \"psql -f /root/admin.sql\""
ssh -F $config_ssh bdd "chmod o-x /root && rm /root/admin.sql"
ssh -F $config_ssh bdd "echo localhost:5432:postgres:padmin:$psqlpasswd > /home/user/.pgpass"
ssh -F $config_ssh bdd "chown user /home/user/.pgpass"
ssh -F $config_ssh bdd "chmod 0600 /home/user/.pgpass"
installdocker() {
echo "Installation de Docker sur la machine " $1
ssh -t -F $config_ssh $1 "wget -O - https://get.docker.com/ | sh"
echo "Configuration de docker"
ssh -F $config_ssh $1 "mkdir -p /etc/systemd/system/docker.service.d"
scp -F $config_ssh docker/proxy-docker.conf $1:/etc/systemd/system/docker.service.d
scp -F $config_ssh docker/daemon.json $1:/etc/docker/daemon.json
ssh -F $config_ssh $1 systemctl daemon-reload
ssh -F $config_ssh $1 systemctl restart docker
ssh -F $config_ssh $1 "docker network create traefik_net"
}
installdocker "odoo"
installrsync() {
echo "Installation de Rsync sur la machine $1"
ssh -F $config_ssh $1 "apt-get install rsync -y"
}
installrsync "saves"
installrsync "bdd"
norootlogin() {
ssh -t -F $config_ssh $1 "sed -Ei \"s/prohibit-password/no/g\" /etc/ssh/sshd_config"
}
norootlogin "odoo"
norootlogin "bdd"
norootlogin "saves"
sed -Ei "s/root/user/g" $config_ssh
sed -Ei "12s/user/root/g" $config_ssh
echo "Installation de Traefik"
scp -r -F $config_ssh traefik odoo:~/
ssh -F $config_ssh odoo "cd traefik && docker compose up -d"
echo "modification du fichier de configuration ssh"
cat >> $config_ssh << EOF
LocalForward :9090 localhost:8080
LocalForward :9091 localhost:8081
EOF
echo "Config SSH de saves"
ssh -F $config_ssh saves "mkdir .ssh"
ssh -F $config_ssh saves "ssh-keygen -f ~/.ssh/id_rsa -P ''"
ssh -t -F $config_ssh saves "ssh-copy-id -p 42069 user@bdd"
scp -F $config_ssh cron/bdd bdd:~/cron
scp -F $config_ssh cron/dump.sh bdd:~/dump.sh
scp -F $config_ssh cron/saves saves:~/cron
ssh -F $config_ssh bdd "mkdir ~/dumps"
ssh -F $config_ssh bdd "crontab ~/cron"
ssh -F $config_ssh saves "crontab ~/cron"
services:
traefik:
image: "traefik:latest"
container_name: "traefik"
command: --api.insecure=true --providers.docker
ports:
- "8081:80"
- "8080:8080"
networks:
- traefik_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
traefik_net:
external: true
auto enp0s3
iface enp0s3 inet static
address ADDRESS
gateway 192.168.194.2
NTP=ntp.univ-lille.fr
HTTP_PROXY=http://cache.univ-lille.fr:3128
HTTPS_PROXY=http://cache.univ-lille.fr:3128
http_proxy=http://cache.univ-lille.fr:3128
https_proxy=http://cache.univ-lille.fr:3128
NO_PROXY=localhost,192.168.194.0/24,172.18.48.0/22
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment