Saltar al contenido principal

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:

.env
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:

docker-compose.yml
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.

values.yaml
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.