Installation de Ansible et Semaphore sur Ubuntu 16.04

1/52/53/54/55/5 (5 votes, moyenne: 3,60 sur 5)
Loading...
I

Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.


Bonjour,

Aujourd’hui on va voir comment installer Ansible et Semaphore sur Ubuntu 16.04.

On verra également comment faire un reverse proxy Nginx + SSL pour l’interface Semaphore.

Je ferrais peut-être d’autres articles sur Ansible mais, peut-être pas sur Semaphore, l’application s’installant par défaut dans le /tmp/ (ouais, un répertoire volatile qui s’efface à chaque reboot), la documentation étant misérable (je reviendrais dessus) et le bordel ne tournant même pas sous forme de service …

Ansible est un utilitaire de gestion de configuration et d’automatisation de déploiement et Semaphore est une interface web pour gérer Ansible (pour faire court).

 

Installation de Ansible et Semaphore :

Installation du serveur Ansible :

Dans un premier temps, on va ajouter le dépôt de Ansible pour récupérer les paquets à jour :

apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update

 

Ensuite, vous pourrez installer Ansible avec la commande suivante :

apt-get install ansible

 

Créez ensuite vos groupes d’hôtes dans Ansible en les répertoriant par rôles :

echo "" > /etc/ansible/hosts
nano /etc/ansible/hosts

 

Par exemple, pour moi :

[ansible]
ansible.1806.abyssproject.xyz

[web]
web-01.1806.abyssproject.xyz
web-02.1806.abyssproject.xyz

[db]
db-01.1806.abyssproject.xyz

 

Configuration des clients :

Je vais configurer les clients pour que l’on puisse y accéder sans mot de passe avec un échange de clef ssh.

Sur tous les serveurs :

Installez sudo et créez un utilisateur nommé ansible :

apt-get install sudo
adduser ansible
mkdir /home/ansible/.ssh && chown ansible:ansible /home/ansible/.ssh

 

Sur le serveur ansible :

Connectez-vous avez l’utilisateur ansible et créez une clef SSH RSA de 4096 bits :

su ansible
cd /home/ansible/
ssh-keygen -b 4096

 

Maintenant, déployez la sur tous vos serveurs :

cat .ssh/id_rsa.pub | ssh ansible@serveurdistant 'cat >> .ssh/authorized_keys'

Sur tous les serveurs :

Supprimez le mot de passe de l’utilisateur ansible

passwd -dl ansible

 

Éditez le fichier des sudoers :

visudo

 

Ajoutez la ligne suivante à la fin du fichier et sauvegardez :

ansible ALL=(ALL) NOPASSWD: ALL

Sur le serveur ansible :

Installez tous les dépendances nécessaires sur votre infrastructure avec la commande suivante qui utilisera toutes les entrées de votre fichier hosts :

ansible all -s -m raw -a "apt-get install -y python python-simplejson"

 

Maintenant, vous pourrez utiliser le module Shell par exemple pour lancer diverses commandes :

ansible all -s -m shell -a 'apt-get install haveged -y'

 

Installation de Semaphore :

Donc là, on va commencer par ce qui me dérange d’entrée de jeu chez Semaphore.

La documentation officielle vous fait utiliser une image docker de MySQL que vous ne mettrez surement jamais à jour par la suite.

C’est une connerie monumentale (l’expression est juste dans cette situation) car vous introduisez ce qui sera une faille de sécurité énorme dans votre infrastructure dès que le prochain CVE sur MySQL tombera.

Rien de grave, c’est juste le serveur qui est censé gérer TOUTE votre infrastructure …

 

DONC, le peu qu’il y’a a faire on va le faire à la main, comme des grands, surtout que ce n’est pas bien compliqué et comme ça vous pourrez mettre à jour le reste de votre serveur avec.

Retournez sur l’utilisateur root et installez MariaDB et GIT avec la commande suivante :

apt-get install mariadb-server git -y

 

Créez un utilisateur admin qui remplacera l’utilisateur root (qui demande maintenant une auth par plugin et non plus par mot de passe sur Ubuntu …) :

mysql -uroot
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;

 

Ensuite, téléchargez Semaphore et lancez l’installateur :

curl -L https://github.com/ansible-semaphore/semaphore/releases/download/v2.0.2/semaphore_linux_amd64 > /usr/bin/semaphore
chmod +x /usr/bin/semaphore
semaphore -setup

 

Suivez bien les étapes comme ci-dessous :

Hello! You will now be guided through a setup to:

1. Set up configuration for a MySQL/MariaDB database
2. Set up a path for your playbooks (auto-created)
3. Run database Migrations
4. Set up initial semaphore user & password

> DB Hostname (default 127.0.0.1:3306): <- Enter
> DB User (default root): admin  <- Admin
> DB Password: password  <- Mot de passe MariaDB
> DB Name (default semaphore):   <- Enter
> Playbook path: /home/ansible/ <- Répertoire home de l’utilisateur Ansible

Generated configuration:
{
« mysql »: {
« host »: « 127.0.0.1:3306 »,
« user »: « admin »,
« pass »: « password »,
« name »: « semaphore »
},
« port »: «  »,
« bugsnag_key »: «  »,
« tmp_path »: « /home/ansible »,
« cookie_hash »: « t6PRn4/gaBgoxAYmh25Rif4Qg2B3j4dboT/yxIGJ3rE= »,
« cookie_encryption »: « i2LMSIEDAwJK2rNZdKGywQdKV64elIgU+hzrTiO/EHs= »
}

> Is this correct? (yes/no): yes  <- Yes
Running: mkdir -p /home/ansible..
Configuration written to /home/ansible/semaphore_config.json..
Pinging database..

Running DB Migrations..
Creating migrations table
Executing migration v0.0.0 (at 2016-06-18 10:58:56.3581791 -0400 EDT)…
[11/11]
Executing migration v1.0.0 (at 2016-06-18 10:58:56.54882068 -0400 EDT)…
[7/7]
Executing migration v1.1.0 (at 2016-06-18 10:58:56.697986359 -0400 EDT)…
[1/1]
Executing migration v1.2.0 (at 2016-06-18 10:58:56.724855006 -0400 EDT)…
[1/1]
Executing migration v1.3.0 (at 2016-06-18 10:58:56.74131827 -0400 EDT)…
[3/3]
Executing migration v1.4.0 (at 2016-06-18 10:58:56.794569991 -0400 EDT)…
[2/2]
Executing migration v1.5.0 (at 2016-06-18 10:58:56.8286019 -0400 EDT)…
[1/1]
Executing migration v0.1.0 (at 2016-06-18 10:58:56.844417962 -0400 EDT)…
[6/6]
> Username: nicolas  <- Nom d’utilisateur
> Email: nicolas@abyssproject.net  <- Email
> Your name: nicolas  <- Ton petit nom
> Password: password  <- Un mot de passe badass

You are all setup nicolas!
Re-launch this program pointing to the configuration file

./semaphore -config /home/ansible/semaphore_config.json

To run as daemon:

nohup ./semaphore -config /home/ansible/semaphore_config.json &

You can login with nicolas@abyssproject.net or nicolas.

 

Lancez la commande suivante pour lancer Semaphore :

nohup semaphore -config /home/ansible/semaphore_config.json &

 

Mise en place du reverse proxy Nginx :

Installez nginx avec la commande suivante :

apt-get install nginx -y

 

Virez toutes les configurations par défaut possibles :

rm /etc/nginx/sites-available/default && rm /etc/nginx/sites-enabled/default && rm /etc/nginx/conf.d/default

 

Créez votre vhost pour Semaphore :

nano /etc/nginx/sites-enabled/semaphore.vhost

 

Et remplissez-le avec ceci (en modifiant le server_name pour mettre votre domaine) :

server {
        listen 80;
        server_name ansible.1806.abyssproject.xyz;

        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass         http://127.0.0.1:3000;
        }

        #Renouvellement automatique pour le certificat Let's Encrypt
        location /.well-known/acme-challenge {
                alias /var/www/.well-known/acme-challenge/;
        }

}

 

Créez le dossier et redémarrez Nginx :

mkdir /var/www/ && mkdir /var/www/.well-know && service nginx restart

 

Mise en place du certificat Let’s Encrypt :

Maintenant, on va installer un certificat Let’s Encrypt qui marchera avec Nginx.

Lancez d’abord les commandes suivantes pour créer les paramètres DH et récupérer la configuration Nginx correcte :

cd /etc/ssl/certs && openssl dhparam -out dhparam.pem 4096
cd /etc/nginx/
rm nginx.conf
wget https://abyssproject.net/wp-content/uploads/2016/01/nginx.conf_.txt
mv nginx.conf_.txt nginx.conf
service nginx reload

 

Ensuite, installez Let’s Encrypt avec les commandes suivantes :

cd /etc
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

 

Créez ensuite un fichier de configuration pour le renouvellement de votre certificat SSL, par exemple pour moi :

mkdir /etc/letsencrypt/configs && nano /etc/letsencrypt/configs/ansible.1806.abyssproject.xyz.conf

 

Ensuite, créez le fichier de configuration :

domains = ansible.1806.abyssproject.xyz
rsa-key-size = 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = nicolas@abyssproject.net
text = True
authenticator = webroot
webroot-path = /var/www/

 

Et lancez les commandes suivantes pour créer le certificat en adaptant à votre configuration, il suffira de relancer ces commandes pour renouveler le certificat :

cd /etc/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/ansible.1806.abyssproject.xyz.conf certonly

 

Vous devriez avoir un message similaire si la création de certificat réussie :

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/ansible.1806.abyssproject.xyz/fullchain.pem.
Your cert will expire on 2016-09-16. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

 

Éditez votre vhost nginx pour rajouter les informations nécessaires :

server {
        listen 80;
        listen 443 ssl;

        ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
        ssl_certificate /etc/letsencrypt/live/ansible.1806.abyssproject.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ansible.1806.abyssproject.xyz/privkey.pem;

        server_name ansible.1806.abyssproject.xyz;

        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass         http://127.0.0.1:3000;
        }

        location /.well-known/acme-challenge {
                alias /var/www/.well-known/acme-challenge/;
        }

}

 

Et voila :

semaphore

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

Subscribe
Notify of
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

2 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
silco
silco
6 années plus tôt

Salut, maintenant que AWX (ansible workers) est sortie en Opensource; comptes tu remplacer sémaphore par celui-ci ?