Pre-requisites:
- Need AWS account
- Need EC2 (Ubuntu) instance
- Ubuntu user with root priviledges
- Already installed latest version of docker and docker-compose.
1. Create the docker-compose file.
- Create the docker-compose file
cd /home/ubuntu/
mkdir sonarqube-app
touch docker-compose.yaml
2. Paste the below code in the above created file
vim docker-compose.yaml
version: "3" #api version of docker-compose
services:
sonarqube:
image: sonarqube:community # latest version of sonarqube image
hostname: sonarqube # hostname of docker container
restart: unless-stopped # restart the docker container
container_name: sonarqube # Container name
shm_size: '4gb' # Memory assigned to docker container
depends_on: # this docker container is only create whe n postgres docker container up and running
- db
environment: # environment used in docker container
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes: # volumes for docker container
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db: # postgres database for sonarqube docker container
image: postgres:13
hostname: postgresql
container_name: postgresql
shm_size: '4gb'
restart: unless-stopped
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
Important points about above docker-compose file:
- shm_size: sometime docker container use lots of memory due to some unnecessary process. so it will consume the all memory of the server. so it is very important to limit the memory of docker container. so it uses memory only upto 4gb (In my case)
- restart: sometimes docker container stopped automatically due to anonymous reasons. so this command will automatically restart the container if containe is not stopped by manual command.
- volumes: To create the sonarqube server is one time activity on any environment, so if container crashes then all data of sonarqube will be lost. To resolve this issue, you need to use the docker volumes to save the data in such a cases.
You can use this docker-compose image for the production environment.
3. Run the docker-compose file:
sudo docker-compose up --build -d
output:
4. Check the Docker container
docker ps
output:
2. Install and configure nginx for sonarqube:
- Update the server if required
sudo apt update
2. Install the nginx web server
sudo apt install nginx
Output:
3. Enable Nginx web server:
If server reboots then nginx web server will automatically starts
sudo systemctl enable nginx
output:
4. Configure nginx file for sonarqube:
Go to nginx config files directory
sudo cd /etc/nginx/sites-available
create the nginx file
sudo touch sonarqube.dbkube.com
sudo vim sonarqube.dbkube.com
Paste the below code:
server{
listen 80;
server_name sonarqube.dbkube.com;
access_log /var/log/nginx/sonar.access.log;
error_log /var/log/nginx/sonar.error.log;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}
create the soft symbolic link with sites-enabled:
sudo ln -s /etc/nginx/sites-available/sonarqube.dbkube.com /etc/nginx/sites-enabled
Check the nginx file is correct or not:
sudo nginx -t
restart the nginx web server:
sudo systemctl restart nginx