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.