Skip to main content

ansible-mongodb-config

Ansible Playbooks pour Nginx et MongoDB Configuration

Dans ce billet de blog, Nous créerons trois serveurs: l'un sera le Master et les deux autres seront l'esclave ou le serveur distant. et puis nous allons installer Nginx et MongoDB

Introduction

Ansible est un moteur d'automatisation open source qui vous permet d'automatiser diverses tâches informatiques, y compris le provisionnement du serveur, la gestion de la configuration, le déploiement des applications, et plus encore.

Des œuvres possibles en exécutant de petits scripts modulaires appelés « Playbooks », écrit au format YAML, pour définir l'état souhaité des serveurs et des services.

Installation et déploiement d'applications Nginx sur plusieurs serveurs à l'aide d'Ansible et Jenkins.

  1. Installez Ansible uniquement sur le nœud Ansible Master.
# Installation of python 
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.11
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1

# Install Ansible
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt update
  1. Maintenant, vous pouvez vérifier la version d'Ansible en utilisant la commande suivante:
ansible --version
  1. Après installation. Maintenant, nous devons faire la connectivité entre le maître Ansible et les machines à distance.

Maintenant, vous devez suivre le processus ci-dessous pour établir la connexion entre les serveurs.

Utiliser la commande ci-dessus sur tous les serveurs

ssh-keygen -t C "master server"

Dans le noeud maître, vous devez aller au répertoire spécifique et copier la clé du maître et le coller dans les noeuds travailleurs comme indiqué ci-dessous.

cd ~/.ssh/ 
cat cat id_rsa.pub

Après avoir copié la clé ci-dessus, vous devez la coller sur les serveurs distants comme indiqué dans le processus ci-dessous.

cd ~/.ssh/ 
sudo nano authorized_keys

Maintenant, vous devez coller dans le serveur distant la clé que vous avez copiée à partir du processus ci-dessus. Après avoir effectué le processus, vous serez en mesure d'accéder au serveur sans le mot de passe comme indiqué dans l'image ci-dessous.

Install Jenkins dans le serveur master.

Installer le serveur Jenkins dans le maître Ansible. En utilisant ces commandes, vous pourrez accéder au serveur Jenkins.

# Installing the Jenkins Server. 
sudo apt update
sudo apt install default-jdk -y
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install jenkins -y

# Installation of Git
sudo apt install git

Pour le mot de passe Jenkins, écrivez la commande ci-dessous sur Master Server

sudo cat /var/lib/jenkins/secrets/initialAdminPassword 

Après l'installation de Jenkins. Maintenant, nous devons intégrer Jenkins avec Ansible. Pour cela, nous devons suivre le processus ci-dessous. Tout d'abord, nous devons installer les plugins qui sont nécessaires pour que les livres de jeu Ansible s'exécutent et exécutent en arrière-plan.

Ensuite, nous devons aller à la section Gérer Jenkins ET AUX Tools. Dans cette section Outils, si vous faites défiler un peu vers le bas. L'outil Ansible sera disponible en ce sens que nous devons culser le chemin du serveur maître Ansible. Maintenant, nous devons configurer les livres de jeu et les pipelines pour faire fonctionner les livres de jeu via Jenkins CI/CD.

Inventory hosts

Maintenant, allez à Master Server et créez un repertoire puis créer des hôtes de noms de fichiers.

[my-servers]
ovh ansible_host=172.31.90.233
azure ansible_host=172.31.80.105

[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_user=ubuntu

Maintenant, créez le nom de fichier playbook web-nginx.yml et collez le code ci-dessous.

sudo nano playbook-web-nginx.yml

Collez ce code:

- name: Configure nginx web server
hosts: my-servers
become: true
become_user: root
become_method: sudo
tasks:
- name: update apt
apt:
update_cache: yes
- name: Install nginx
apt:
name: nginx
state: latest
- name: Start Nginx
service:
name: nginx
state: started
enabled: yes
- name: Deploy web app
copy:
src: index.html
dest: /var/www/html/

Maintenant, créer le nom de fichier index.html et coller sous le code

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Week 6</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Pacifico&display=swap');

body {
margin: 0;
box-sizing: border-box;
}

.container {
line-height: 150%;
}

.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px;
background-color: #e9e9e9;
}

.header h1 {
color: #222222;
font-size: 30px;
font-family: 'Pacifico', cursive;
}

.header .social a {
padding: 0 5px;
color: #222222;
}

.left {
float: left;
width: 180px;
margin: 0;
padding: 1em;
}

.content {
margin-left: 190px;
border-left: 1px solid #d4d4d4;
padding: 1em;
overflow: hidden;
}

ul {
list-style-type: none;
margin: 0;
padding: 0;
font-family: sans-serif;
}

li a {
display: block;
color: #000;
padding: 8px 16px;
text-decoration: none;
}

li a.active {
background-color: #84e4e2;
color: white;
}

li a:hover:not(.active) {
background-color: #29292a;
color: white;
}

table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
margin: 30px 0;
}

td,
th {
border: 1px solid #dddddd;
padding: 8px;
}

tr:nth-child(1) {
background-color: #84e4e2;
color: white;
}

tr td i.fas {
display: block;
font-size: 35px;
text-align: center;
}

.footer {
padding: 55px 20px;
background-color: #2e3550;
color: white;
text-align: center;
}
</style>
</head>

<body>
<div class="container">
<header >
<h1>Harshal Jethwa</h1>

</header>
<aside class="left">

<ul>
<li><a class="active" href="#home">Home</a></li>

</ul>
<br><br>
<p>"Do something important in life. I convert green grass to code."<br>- Harshal </p>
</aside>
<div class="content">
<h2>About </h2>
<p>write ansible playbooks to install nginx and
host an application on multiple servers,
application deployment.
Write Ansible roles to provision a
production-ready MongoDB cluster
Use CICD Pipeline to execute the playbooks
Security and best practices should be kept
in mind</p>
<hr><br>
</div>
</body>
</html>

Maintenant, créez Jenkinsfile et collez le code ci-dessous

sudo touch Jenkinsfile
sudo nano Jenkinsfile
pipeline {
agent any
stages {
stage('SCM Checkout') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[url: 'https://github.com/HARSHALJETHWA19/ansible-project.git']]]) }
}
stage('Execute Ansible') {
steps {
ansiblePlaybook credentialsId: 'ansible', disableHostKeyChecking: true, installation: 'ansible-copsc', inventory: 'hosts', playbook: 'web-nginx.yml' }
}
}
}

Le pipeline qui est fourni est un pipeline de Jenkins, qui est un ensemble d'étapes qui peuvent être utilisées pour automatiser la construction, le test et le déploiement du logiciel.

NOTE : Poussez tout votre code ci-dessus au gitlab

Allez à Jenkins Credentials and The ansible ID est les détails de la clé pem qui sera créée lorsque nous essayons d'accéder aux serveurs. Ensuite, nous devons affecter l'ID et l'utiliser dans le pipeline. et de même pour votre GITLAB.

Attribuer le nom pour le pipeline, puis procéder avec les étapes ci-dessous comme indiqué dans l'image ci-dessous.

Cliquez sur la sauvegarde et construisez le pipeline comme indiqué dans l'image ci-dessous. Il s'agissait de la production de la console qui était indiquée ci-dessous.

Vérifier que nginx est bien démarrer sur les différent serveurs

sudo systemctl status nginx