Instalación
Docker Compose
Sonarqube se puede desplegar fácilmente utilizando Docker Compose. A continuación se muestra un ejemplo de archivo docker-compose.yml
que puedes utilizar:
Crea un archivo .env en la raíz del proyecto con el siguiente contenido, adaptando los valores a tus necesidades:
POSTGRES_USER=sonarqube
POSTGRES_PASSWORD=sonarqube
POSTGRES_DB=sonarqube
POSTGRES_HOST=postgresql
SONAR_JDBC_URL=jdbc:postgresql://postgresql:5432/sonarqube
SONAR_JDBC_USERNAME=sonarqube
SONAR_JDBC_PASSWORD=sonarqube
Crear la red para conectar Dependency-Track con Traefik:
docker network create dtrack
A continuación, crea el archivo docker-compose.yml
que define los servicios necesarios:
services:
postgresql:
image: postgres:15
container_name: sonarqube_postgresql
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- ./postgresql/data:/var/lib/postgresql/data
networks:
- sonarqube_network
restart: unless-stopped
sonarqube:
image: sonarqube:25.5.0.107428-community
container_name: sonarqube
depends_on:
- postgresql
environment:
SONAR_JDBC_URL: ${SONAR_JDBC_URL}
SONAR_JDBC_USERNAME: ${SONAR_JDBC_USERNAME}
SONAR_JDBC_PASSWORD: ${SONAR_JDBC_PASSWORD}
labels:
- "traefik.enable=true"
- "traefik.http.routers.sonar.rule=Host(`sonar.opensecdevops.com`)"
- "traefik.http.routers.sonar.entrypoints=websecure"
- "traefik.http.routers.sonar.tls=true"
- "traefik.http.routers.sonar.tls.certresolver=le"
- "traefik.http.services.sonar.loadbalancer.server.port=9000"
volumes:
- ./sonarqube/data:/opt/sonarqube/data
- ./sonarqube/logs:/opt/sonarqube/logs
- ./sonarqube/extensions:/opt/sonarqube/extensions
networks:
- sonarqube_network
ulimits:
nofile:
soft: 65536
hard: 65536
restart: unless-stopped
networks:
sonarqube_network:
external: true
Iniciar los contenedores:
docker-compose up -d
Kubernetes
Para proceder a la instalacion de Sonarqube en nuestra plataforma como con otras herramientas primero necesitamos clonar el repositorio del mismo, para asi poder ver los valores que deseamos utilizar en nuestro despliegue.
Repo
https://github.com/SonarSource/helm-chart-sonarqube.git
Agregamos el repositorio de helm y actualizamos
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
Podemos clonarnos el git mencianado anteriormente y copoar el values.yaml que se encuentra en la siguiente ruta.
cd helm-chart-sonarqube/charts/sonarqube/
Y procederemos a copiar o modificar el values.yaml. En el values.yaml debemos tener los siguientes parametros.
ingress:
enabled: true
hosts:
- name: sonar.opensecdevops.com
path: "/"
# This property allows for reports up to a certain size to be uploaded to SonarQube
annotations:
kubernetes.io/ingress.class: appsec-nginx
nginx.ingress.kubernetes.io/proxy-body-size: "64m"
# Set the ingressClassName on the ingress record
ingressClassName: appsec-nginx
tls:
# Secrets must be manually created in the namespace. To generate a self-signed certificate (and private key) and then create the secret in the cluster please refer to official documentation available at https://kubernetes.github.io/ingress-nginx/user-guide/tls/#tls-secrets
- secretName: SECRET_CERT
# hosts:
# - chart-example.local
prometheusExporter:
enabled: false
config:
rules:
- pattern: ".*"
postgresql:
# Enable to deploy the bitnami PostgreSQL chart
enabled: true
persistence:
enabled: true
accessMode: ReadWriteOnce
size: 10Gi
procedemos a la instalación con el helm
Helm
helm upgrade --install -n sonar sonarqube -f values.yaml sonarqube/sonarqube --create-namespace
Detalles del comando anterior:
--install
: Instala si no existe, actualiza si ya está instalado.--create-namespace
: Crea el namespace si no existe.-f values.yaml
: Especifica el archivo de configuración personalizado.-n sonar
: Indica el namespace de despliegue.