Skip to content

Instantly share code, notes, and snippets.

@itsTeknas
Last active April 15, 2023 15:32
Show Gist options
  • Save itsTeknas/d8c85eae98fa5ce34133e96c64487edd to your computer and use it in GitHub Desktop.
Save itsTeknas/d8c85eae98fa5ce34133e96c64487edd to your computer and use it in GitHub Desktop.
Sonarqube + Postgres + Traefik with auto SSL

Sonarqube Docker Compose Setup

sudo apt-get update
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
loginctl enable-linger $USER

Needed for sonarqube to work properly

sudo sysctl -w vm.max_map_count=262144

Setup directories for persistent data

sudo mkdir postgresql_data
sudo chmod 777 postgresql_data
sudo mkdir sonarqube_data
sudo chmod 777 sonarqube_data
touch acme.json
chmod 600 acme.json

Add Domain & Free SSL via LetsEncrypt

edit the docker-compose.yaml file above and replace your.domain.com with your actual domain in docker labels and acme email.

Start docker compose stack

sudo docker compose up -d

I tried Rootless mode but it dose't work with traefik somehow, the reverse proxy just dosen't detect other containers. You can suggest an edit if you can make it work.

version: "2.4"
services:
traefik:
image: "traefik:v2.9.5"
restart: always
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=sanket@your.domain.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/acme.json"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
ports:
- "80:80"
- "443:443"
volumes:
- "./acme.json:/acme.json"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
postgresql:
container_name: postgresql
restart: always
image: docker.io/bitnami/postgresql:14
volumes:
- './postgresql_data:/bitnami/postgresql'
mem_limit: 500M
environment:
- POSTGRESQL_USERNAME=sonarqube
- POSTGRESQL_DATABASE=sonarqube
- POSTGRESQL_PASSWORD=password
ports:
- '5432:5432'
sonarqube:
container_name: sonarqube
restart: always
image: sonarqube:9.9.0-community
mem_limit: 1500M
ports:
- '9000:9000'
volumes:
- './sonarqube_data:/opt/sonarqube/data'
depends_on:
- postgresql
environment:
- SONAR_WEB_HOST=0.0.0.0
- SONAR_WEB_PORT=9000
- SONAR_JDBC_URL=jdbc:postgresql://postgresql:5432/sonarqube?currentSchema=public
- SONAR_JDBC_USERNAME=sonarqube
- SONAR_JDBC_PASSWORD=password
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
- discovery.type=single-node
labels:
- "traefik.enable=true"
- "traefik.http.services.backend.loadbalancer.server.port=9000"
- "traefik.http.routers.backend.rule=Host(`your.domain.com`)"
- "traefik.http.routers.backend.entrypoints=websecure"
- "traefik.http.routers.backend.tls.certresolver=letsencrypt"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment