Communication inter-conteneurs avec RabbitMQ et Node.js

Dans les architectures modernes orientées microservices, la communication entre services distribués devient un enjeu majeur. L’une des solutions les plus efficaces repose sur un système de messagerie asynchrone comme RabbitMQ. Cet article présente une démonstration simple d’une application Node.js utilisant RabbitMQ pour échanger des messages entre deux conteneurs Docker. Objectif Architecture du projet +—————+ +——————+ +—————-+| Producer | —-> | RabbitMQ | —-> | Consumer |+—————+ +——————+ +—————-+ | | | | Docker Compose | Réseau Docker | Contenu du fichier docker-compose.yml version: ‘3.8’services: rabbitmq: image: rabbitmq:3-management ports: – « 15672:15672 » – « 5672:5672 » networks: – rabbitmq-net environment: – RABBITMQ_DEFAULT_USER=guest – RABBITMQ_DEFAULT_PASS=guest privileged: true mem_limit: 256m restart: always node-app: build: context: ./node-app container_name: node-app networks: – rabbitmq-net environment: – RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672 depends_on: – rabbitmq restart: always node-consumer: build: context: ./node-consumer container_name: node-consumer networks: – rabbitmq-net environment: – RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672 depends_on: – rabbitmq restart: alwaysnetworks: rabbitmq-net: driver: bridge Structure des dossiers project-root/├── docker-compose.yml├── node-app/│ └── app.js│ └── package.json├── node-consumer/ └── consumer.js └── package.json Contenu de node-app/app.js (Producer) const amqp = require(‘amqplib’);const sendMessage = async () => { const queue = ‘tasks’; const message = ‘Hello from producer!’; try { const connection = await amqp.connect(process.env.RABBITMQ_URL); const channel = await connection.createChannel(); await channel.assertQueue(queue, { durable: true }); channel.sendToQueue(queue, Buffer.from(message)); console.log(`Message sent: ${message}`); setTimeout(() => { connection.close(); }, 500); } catch (err) { console.error(‘Error:’, err); }};sendMessage(); Contenu de node-consumer/consumer.js const amqp = require(‘amqplib’);const receiveMessage = async () => { const queue = ‘tasks’; try { const connection = await amqp.connect(process.env.RABBITMQ_URL); const channel = await connection.createChannel(); await channel.assertQueue(queue, { durable: true }); console.log(`Waiting for messages in queue: ${queue}`); channel.consume(queue, (msg) => { if (msg !== null) { console.log(`Received message: ${msg.content.toString()}`); channel.ack(msg); } }); } catch (err) { console.error(‘Error:’, err); }};receiveMessage(); Lancer le projet Dans le terminal, à la racine du projet : docker-compose up –build Ensuite : Résultat attendu Conclusion Ce mini-projet permet de découvrir concrètement comment RabbitMQ peut servir d’intermédiaire entre deux applications Node.js conteneurisées. Une base idéale pour explorer des architectures orientées messages dans des systèmes distribués !

Communication inter-conteneurs avec RabbitMQ et Node.js Lire la suite »

Installer WordPress en local sous Nginx et MySQL sur Ubuntu avec un script Shell

Introduction Dans cet article, nous allons voir comment installer et configurer un environnement WordPress en local sur Ubuntu en utilisant Nginx, MySQL et PHP. Pour simplifier le processus, nous allons automatiser l’installation avec un script Shell (bash). Prérequis Avant de commencer, assurez-vous d’avoir : Un système Ubuntu (20.04 ou plus récent) Un accès administrateur (sudo) curl et wget installés Un terminal ouvert Script Shell pour l’installation Créer le fichier install-wordpress.sh et metter le contenu ci-dessous #!/bin/bash # Mettre à jour le système sudo apt update && sudo apt upgrade -y # Installer les paquets nécessaires sudo apt install -y nginx mysql-server php-fpm php-mysql unzip wget # Télécharger WordPress cd /var/www/ sudo wget https://wordpress.org/latest.zip sudo unzip latest.zip sudo mv wordpress monsite.local sudo chown -R www-data:www-data monsite.local sudo chmod -R 755 monsite.local # Configurer MySQL sudo mysql -u root <<EOF CREATE DATABASE wordpress; CREATE USER ‘wpuser’@’localhost’ IDENTIFIED BY ‘motdepasse’; GRANT ALL PRIVILEGES ON wordpress.* TO ‘wpuser’@’localhost’; FLUSH PRIVILEGES; EOF # Configurer Nginx sudo tee /etc/nginx/sites-available/monsite.local <<EOF server { listen 80; server_name monsite.local; root /var/www/monsite.local; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } EOF # Activer la configuration et redémarrer Nginx sudo ln -s /etc/nginx/sites-available/monsite.local /etc/nginx/sites-enabled/ sudo systemctl restart nginx # Modifier le fichier hosts echo « 127.0.0.1 monsite.local » | sudo tee -a /etc/hosts # Installation terminée echo « Installation terminée. Vous pouvez accéder à votre site sur http://monsite.local » Exécution du script chmod +x install-wordpress.shsudo ./install-wordpress.sh Accès à WordPress Après l’exécution du script, ouvrez votre navigateur et allez sur http://monsite.local pour finaliser l’installation de WordPress via l’interface web.   Conclusion Ce script vous permet d’installer rapidement WordPress avec Nginx et MySQL sur Ubuntu. Vous pouvez l’améliorer en ajoutant des options interactives ou en utilisant Docker pour une meilleure gestion des dépendances.

Installer WordPress en local sous Nginx et MySQL sur Ubuntu avec un script Shell Lire la suite »