Rundeck est un ordonnanceur centralisé open source (licence Apache) écrit en Java.
Depuis l’interface de Rundeck, il est possible de gérer les différents travaux (commandes ou scripts) à exécuter sur les serveurs distants.
Fonctionnalités :
Rundeck peut être intégré aux autres outils de gestion de configuration comme Puppet, Ansible et d’intégration continue comme Jenkins, etc.
La connexion avec les hôtes clients est gérée en SSH.
Documentation : docs.rundeck.com/docs/
Plugins Rundeck : github.com/rundeck
Rundeck API : docs.rundeck.com/docs/api/rundeck-api.html
Pour l'installation avec docker, il faut au préalable avoir installé docker et docker-compose sur votre serveur.
Vous retrouvez la procédure pour l'installer ici.
Crée un dossier apps à la racine de votre serveur :
mkdir apps
Puis rendez vous dans celui-ci, créez un dossier rundeck.
cd /apps/
mkdir rundeck
Une fois cela fais, créer un fichier docker-compose.yml avec le contenu suivant :
nano docker-compose.yml
version: "3.8"
services:
rundeck-server:
image: rundeck/rundeck:4.2.1
restart: always
container_name: rundeck-server
ports:
- "80:4440"
depends_on:
- rundeck-db
environment:
- UID=1000
- GID=1000
- RUNDECK_GRAILS_URL=http://$URL
- RUNDECK_SERVER_FORWARDED=true # Mettre si vous utilisez un reverse proxy
- RUNDECK_DATABASE_DRIVER=org.mariadb.jdbc.Driver
- RUNDECK_DATABASE_USERNAME=$DB_USER
- RUNDECK_DATABASE_PASSWORD=$DB_PASSWORD
- RUNDECK_DATABASE_URL=jdbc:mysql://rundeck-db/rundeck?autoReconnect=true&useSSL=false
volumes:
- /apps/rundeck-server/server/addons:/home/rundeck/server/addons
- /apps/rundeck-server/server/ssh:/home/rundeck/.ssh
networks:
- rundeck-network
healthcheck:
test: curl --fail http://localhost:4440 || exit 1
interval: 1m
timeout: 30s
retries: 3
rundeck-db:
image: mariadb:10.6.7
container_name: rundeck-db
volumes:
- /apps/rundeck-server/db:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MARIADB_DATABASE: rundeck
MARIADB_USER: $DB_USER
MARIADB_PASSWORD: $DB_PASSWORD
restart: always
networks:
- rundeck-network
networks:
rundeck-network:
Bien faire attention au paramètre RUNDECK_GRAILS_URL=http://$URL, car ici vous devez renseigner l'adresse ou l'ip par laquelle vous allez essayer de vous connecter à rundeck. Si vous certififier le cite par exemple passer le http en https.
Le mot de passe par deféaut est admin/admin
L'installation se fera sur une Almalinux 8 (RHEL 8).
Mettez à jour votre serveur :
dnf update -y
Nous allons d'abord ajouter le dépôt officiel de MariaDB, que l'on peut retouver ici
touch /etc/yum.repos.d/mariadb.repo
Puis ajouter la configuration fourni par MariaDB
nano /etc/yum.repos.d/mariadb.repo
# MariaDB 10.6 CentOS repository list - created 2022-05-17 12:39 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.xtom.nl/mariadb/yum/10.6/centos8-amd64
module_hotfixes=1
gpgkey=https://mirrors.xtom.nl/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
Mettez à jour vos dépôts :
dnf update -y
Ensuite on installer MariaDB-Server :
dnf install MariaDB-server -y
Démarrez les processus de MariaDB et faites-les démarrer au démarrage du système.
sudo systemctl enable mariadb
sudo systemctl restart mariadb
Attention, si votre base de donnée doit etre accessible depuis un autre serveur.
Il vous faudra ouvrir le port 3306.
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
mysql_secure_installation
Le mot de passe de l’utilisateur root est demandé. Il ne s’agit pas ici du mot de passe de l’utilisateur root sur la machine elle-même mais de l’utilisateur SQL (base de données). A ce stade, aucun mot de passe ne lui a été configuré, c’est donc ce que nous allons faire. Appuyez simplement sur Entrée.
A la question suivante, tapez la lettre Y pour répondre Yes et appuyez sur Entrée.
A la question suivante, on vous demande justement si vous voulez attribuer un mot de passe au compte root. Tapez la lettre Y pour répondre Yes et appuyez sur Entrée.
Saisissez 2 fois le mot de passe que vous voulez donner au compte SQL root.
Attention, aucun symbole ne va s’afficher pendant la saisie, soyez vigilant à votre frappe !
Vous pourrez par la suite répondre Yes à toutes les autres questions posées.
Maintenant que l’accès aux bases de données est sécurisé, nous allons pouvoir nous y connecter avec le compte root et le mot de passe que nous venons de lui définir :
mysql -u root -p
mysql> create database rundeck character set utf8 collate utf8_bin;
mysql> create user rundeck_user@'localhost' identified by 'password';
mysql> grant all privileges on rundeck.* to rundeck_user@'localhost';
mysql> quit;
Pensez à changer le mot de passe
password
!
Si vous installez votre base de donnée sur un autre serveur, changez la valeur localhost en "%".
Maintenant utilisez le script fournit par rundeck pour ajouter les repository de Rundeck.
curl https://raw.githubusercontent.com/rundeck/packaging/main/scripts/rpm-setup.sh 2> /dev/null | sudo bash -s rundeck
Installez Rundeck.
dnf install rundeck -y
Installez Java 8.
dnf install java-1.8.0-openjdk -y
Nous allons configurer Rundeck pour utiliser la base de données MariaDB.
Editer le fichier suivant :
nano /etc/rundeck/rundeck-config.properties
Celui devra ressembler à ça :
#loglevel.default is the default log level for jobs: ERROR,WARN,INFO,VERBOSE,DEBUG
loglevel.default=INFO
rdeck.base=/var/lib/rundeck
#rss.enabled if set to true enables RSS feeds that are public (non-authenticated)
rss.enabled=false
# change hostname here
grails.serverURL=https://rundeck.management.local
dataSource.dbCreate = none
dataSource.url = jdbc:mysql://localhost/rundeck?autoReconnect=true&useSSL=false
dataSource.username = rundeck_user
dataSource.password=password
dataSource.driverClassName = org.mariadb.jdbc.Driver
grails.plugin.databasemigration.updateOnStart=true
# Encryption for key storage
rundeck.storage.provider.1.type=db
rundeck.storage.provider.1.path=keys
rundeck.storage.converter.1.type=jasypt-encryption
rundeck.storage.converter.1.path=keys
rundeck.storage.converter.1.config.encryptorType=custom
rundeck.storage.converter.1.config.password=279458d38c0ab974
rundeck.storage.converter.1.config.algorithm=PBEWITHSHA256AND128BITAES-CBC-BC
rundeck.storage.converter.1.config.provider=BC
# Encryption for project config storage
rundeck.projectsStorageType=db
rundeck.config.storage.converter.1.type=jasypt-encryption
rundeck.config.storage.converter.1.path=projects
rundeck.config.storage.converter.1.config.password=279458d38c0ab974
rundeck.config.storage.converter.1.config.encryptorType=custom
rundeck.config.storage.converter.1.config.algorithm=PBEWITHSHA256AND128BITAES-CBC-BC
rundeck.config.storage.converter.1.config.provider=BC
rundeck.feature.repository.enabled=true
Bien penser à changer le mot de passe d'accès à la base de donnée !
Editer le fichier suivant :
nano /etc/rundeck/framework.properties
Celui devra ressembler à ça :
# framework.properties -
#
# ----------------------------------------------------------------
# Rundeck server connection information
# ----------------------------------------------------------------
framework.server.name = MANAG-RUNDECK
framework.server.hostname = MANAG-RUNDECK
framework.server.port = 4440
framework.server.url = https://rundeck.management.local
# ----------------------------------------------------------------
# Installation locations
# ----------------------------------------------------------------
rdeck.base=/var/lib/rundeck
framework.projects.dir=/var/lib/rundeck/projects
framework.etc.dir=/etc/rundeck
framework.var.dir=/var/lib/rundeck/var
framework.tmp.dir=/var/lib/rundeck/var/tmp
framework.logs.dir=/var/lib/rundeck/logs
framework.libext.dir=/var/lib/rundeck/libext
# ----------------------------------------------------------------
# SSH defaults for node executor and file copier
# ----------------------------------------------------------------
framework.ssh.keypath = /var/lib/rundeck/.ssh/id_rsa
framework.ssh.user = rundeck
# ssh connection timeout after a specified number of milliseconds.
# "0" value means wait forever.
framework.ssh.timeout = 0
# ----------------------------------------------------------------
# Auto generated server UUID: 8ac18b13-2293-4688-823a-812b94712677
# ----------------------------------------------------------------
rundeck.server.uuid = 8ac18b13-2293-4688-823a-812b94712677
Modifier bien framework.server.name, framework.server.hostname et framework.server.url selon vos besoin.
Pour pouvoir accèder à notre serveur rundeck en https, il nous faut le certifier.
Pour ce faire, installez nginx.
dnf install nginx -y
Puis modifier le fichier de conf nginx.
/etc/nginx/nginx.conf
celui-ci devra ressembler à ça :
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name rundeck.management.local;
return 301 https://rundeck.management.local$request_uri;
}
server {
listen 443 ssl;
listen [::]:443;
server_name rundeck.management.local;
ssl_certificate /etc/nginx/ssl/rundeck.management.local+4.pem;
ssl_certificate_key /etc/nginx/ssl/rundeck.management.local+4-key.pem;
location / {
proxy_pass http://localhost:4440;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header User-Agent $http_user_agent;
}
}
}
systemctl enable rundeckd
systemctl start rundeckd
systemctl status rundeckd
En cas de problème de démarrage, le fichier debug est ici :
tail -f /var/log/rundeck/service.log
Si tout est Ok, vous avez le message ci-dessous à la fin du fichier :
...
...
[2021-08-13T17:33:51,622] INFO rundeckapp.BootStrap - Rundeck startup finished in 1955ms
[2021-08-13T17:33:52,018] INFO rundeckapp.Application - Started Application in 68.486 seconds (JVM running for 73.154)
Grails application running at http://localhost:4440 in environment: production
Allez à présent sur la page web de rundeck.
Les identifiants et mot de passe par défaut sont : admin/admin.
Vous êtes à présent connecté !