L’installation de Graylog dans sa version dockerisée est très facile. C’est même un euphémisme que de dire qu’un application dockerisée s’installe facilement. Sa mis en place dans mon infra basé sur Gitlab et docker-compose se fait dans les étapes décrites ci-dessous.
Déploiement en staging
Grâce à Traefik je peux mettre au point la plomberie dans un environnement iso-prod avant bascule en production. Pour cela j’utilise le fichier docker-compose.yml commun https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/docker-compose.yml
version: '3.7'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongo:
image: mongo:3
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:3.3
depends_on:
- mongo
- elasticsearch
En environnement staging, ce fichier doit être complété par docker-compose.staging.yml https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/docker-compose.staging.yml
version: '3.7'
services:
graylog:
environment:
- GRAYLOG_HTTP_EXTERNAL_URI=https://graylog.bressure.net:444/
labels:
- "traefik.http.routers.staging_graylog.entryPoints=staging"
- "traefik.http.routers.staging_graylog.rule=Host(`graylog.bressure.net`)"
- "traefik.docker.network=staging_traefik_backend"
volumes:
- '/srv/staging_graylog/config:/usr/share/graylog/data/config'
networks:
- default
- outside
networks:
outside:
external: true
name: staging_traefik_backend
L’intégration continue se fait par un .gitlab-ci.yml des plus classique pour mon infra https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/.gitlab-ci.yml
image:
name: docker/compose:1.24.0
entrypoint: [""]
before_script:
- docker info
- docker-compose version
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
stages:
- build
- test
- staging
- production
run_graylog:
stage: test
tags:
- dind
- infra
- regular
variables:
# For non-Kubernetes executors, we use tcp://docker:2375/
DOCKER_HOST: tcp://docker:2375/
DOCKER_TLS_CERTDIR: ""
# When using dind, it's wise to use the overlayfs driver for
# improved performance.
DOCKER_DRIVER: overlay2
services:
- name: docker:dind
entrypoint: ["/bin/sh","-c" ,'echo "192.168.122.1 registry-backup.bressure.net registry-proxy.bressure.net">>/etc/hosts && dockerd-entrypoint.sh --insecure-registry registry-backup.bressure.net:5000 --insecure-registry registry-proxy.bressure.net:5000 --registry-mirror https://registry-proxy.bressure.net:5000' ]
script:
- echo "run $CI_PROJECT_NAME for testing"
- docker-compose up -d
- docker-compose ps
#verify_running:
# stage: test
# tags:
# image: golang # because I know it has curl installed
# script:
# - sleep 120
# - curl -v http://docker:8180
deploy_to_staging:
stage: staging
tags:
- infra
- docker
- regular
script:
- echo "deploy $CI_PROJECT_NAME to staging"
- docker-compose pull
- docker-compose -p staging_$CI_PROJECT_NAME -f docker-compose.yml -f docker-compose.staging.yml up -d
environment:
name: staging
url: https://graylog.bressure.net:444/
on_stop: stop_staging
only:
- master
stop_staging:
stage: staging
tags:
- infra
- docker
- regular
variables:
GIT_STRATEGY: none
script:
- echo "Remove $CI_PROJECT_NAME "
- docker-compose -p staging_$CI_PROJECT_NAME -f docker-compose.yml -f docker-compose.staging.yml down
when: manual
environment:
name: staging
action: stop
deploy_to_production:
stage: production
tags:
- infra
- docker
- regular
script:
- echo "deploy to production"
- docker-compose pull
- docker-compose -f docker-compose.yml -f docker-compose.infra.yml up -d
environment:
name: production
url: https://graylog.bressure.net/
on_stop: stop_production
only:
- master
when: manual
stop_production:
stage: production
tags:
- infra
- docker
- regular
variables:
GIT_STRATEGY: none
script:
- echo "Remove matomo"
- docker-compose -f docker-compose.yml -f docker-compose.infra.yml down
when: manual
environment:
name: production
action: stop
Afin de ne pas mettre les identifiants dans les fichiers docker-compose qui sont publiquement accessibles sur mon Gitlab, je choisi de les mettre dans le fichier de configuration exposés dans un volume docker sur l’hôte. Ainsi il faut sur l’hôte docker dans le répertoire /srv/staging_graylog/config
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/3.3/config/graylog.conf
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/3.3/config/log4j2.xml
Puis dans le fichier graylog.conf il faut modifier password_secret, root_username et root_password_sha1.
DNS local
Le fichier /etc/hosts de la machine de test doit être configuré pour résoudre graylog.bressure.net car je n’ai pas (encore) de DNS local ! Et voilà, dans mon navigateur https://graylog.bressure.net:444/ me donne accès à la mire de login de Graylog:
Déploiement en production
Quand on est satisfait de l’installation en staging, on peut déployer en production. A ce stade je n’ai pas encore paramétré mon instance de Graylog mais pour pouvoir y accéder depuis internet sur mon smartphone, un déploiement en production est utile. Pour cela le fichier docker-compose.infra.yml suivant vient s’ajouter https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/docker-compose.infra.yml:
version: '3.7'
services:
graylog:
environment:
- GRAYLOG_HTTP_EXTERNAL_URI=https://graylog.bressure.net/
labels:
- "traefik.http.routers.graylog.entryPoints=web"
- "traefik.http.routers.graylog.rule=Host(`graylog.bressure.net`)"
- "traefik.docker.network=traefik_backend"
volumes:
- '/srv/graylog/config:/usr/share/graylog/data/config'
networks:
- default
- outside
networks:
outside:
external: true
name: traefik_backend
On peut reprendre la configuration de staging pour la basculer en production en copier les volume docker /srv/staging_graylog vers /srv/graylog. Puis il reste à modifier le DNS publique pour y ajouter graylog.bressure.net.
Et voilà, mon instance graylog est disponible en production et avec son environnement de staging sur lequel je peux tester mes changement de configuration.
Tags: Docker Gitlab Graylog
Comments