Mise en place avec Docker / Podman
Une bonne solution pour installer une application est de la conteneriser car cela apporte que des avantages :
- moins de dépendances sur le serveur
- mise à jour simplifier
- sécurisation des environnements
Je vais donc montrer comment installer cette application avec un outil de conteneurisation.
Préparation de la machine
Sur la machine hôte, installer un outil de conteuneurisation
installation des packages
pour installer docker avec les meilleurs pratique, vous pouvez suivre le lien ici : Installation de docker
Debian
Docker
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg -y; done
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose -y
- Podman
sudo apt install podman -y
RHEL
Docker
RHEL
sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- Podman
sudo dnf install podman -y
Création des dossiers
Dans un dossier dédié sur la machine, nous allons stockées l'ensemble des fichier nécessaires ainsi que ceux générer par le conteneurs
mkdir -p ~/keycloak/{certs,postgresql}
cd ~/keycloak
touch compose.yml .env
Préparation de la solution
maintenant que l'arborescence est en place, nous allons modifié le fichier compose.yml et .env
- compose.yml
Il faut copier le texte suivant :
services:
keycloak:
container_name: keycloak_app
image: quay.io/keycloak/keycloak:latest
restart: always
environment:
KEYCLOAK_ADMIN: ${KEYCLOAK_USER}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
KC_HOSTNAME: ${KEYCLOAK_URL}
KC_DB: postgres
KC_DB_USERNAME: ${POSTGRES_USER}
KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
KC_DB_URL_HOST: keycloak_postgres
KC_DB_URL_DATABASE: keycloak
KC_HTTPS_CERTIFICATE_FILE: /etc/x509/https/tls.crt
KC_HTTPS_CERTIFICATE_KEY_FILE: /etc/x509/https/tls.key
volumes:
- ./certs:/etc/x509/https
depends_on:
keycloak_postgres:
condition: service_healthy
ports:
- "8080:8080"
- "8443:8443"
networks:
- keycloak-network
command:
- start
keycloak_postgres:
container_name: keycloak_postgres
image: docker.io/library/postgres:17
restart: always
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./postgresql:/var/lib/postgresql/data
networks:
- keycloak-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d keycloak"]
interval: 10s
timeout: 5s
retries: 5
networks:
keycloak-network:
name: keycloak-network
driver: bridge
- .env
Il faut ensuite remplir le fichier .env avec des mots de passes plus complexe !
KEYCLOAK_USER=admin
KEYCLOAK_PASSWORD=admin
KEYCLOAK_URL=keycloak.local
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
Gestion des certificats
Keycloak a un gestionnaire de certificats intégré, pour ce tuto, je vais me servir d'un certificat autosigné pour tout faire fonctionné. Mais un certificat let's encrypt ou autre fonctionnera
cd ~/keycloak/certs
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout tls.key -out tls.crt
Lancement du conteneur
Dans le dossier racine où il y a le fichier compose.yml
il faut lancer le conteneur
- Docker
docker compose up -d
- Podman
podman-compose up -d
une fois que le conteneurs est lancé, vous pouvez vous rendre depuis votre navigateurs au lien: