{"id":6265,"date":"2021-05-08T17:49:36","date_gmt":"2021-05-08T12:19:36","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=6265"},"modified":"2021-05-08T17:49:39","modified_gmt":"2021-05-08T12:19:39","slug":"how-to-install-sonarqube-on-ubuntu-18-04-16-04-lts","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/how-to-install-sonarqube-on-ubuntu-18-04-16-04-lts\/","title":{"rendered":"How to Install SonarQube on Ubuntu 18.04\/16.04 LTS"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Ubuntu 18.04\/16.04 LTS with minimum 2GB RAM and 1 CPU.<\/li><li>PostgreSQL Version 9.3 or higher<\/li><li>SSH access with sudo privileges<\/li><li>Firewall Port: 9000<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">MySQL Support for SonarQube is depricated.Increase the vm.max_map_count kernal ,file discriptor and ulimit for current session at runtime.<br><br>1) Please follow the below steps to increase the max_map_count.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo sysctl -w vm.max_map_count=262144<\/span><\/li><li><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo sysctl -w fs.file-max=65536<\/span><\/li><li><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo ulimit -n 65536<\/span><\/li><li><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo ulimit -u 4096<\/span><\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">2) To Increase the vm.max_map_count kernal ,file discriptor and ulimit permanently .Open the below config file and Insert the below value as shown below.<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo nano \/etc\/security\/limits.conf<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-01-05.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"837\" height=\"115\" src=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-01-05.png\" alt=\"\" class=\"wp-image-6266\" srcset=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-01-05.png 837w, https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-01-05-300x41.png 300w, https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-01-05-768x106.png 768w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">3) Before installing, Lets update and upgrade System Packages<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo apt-get update<br>$ sudo apt-get upgrade<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4) Install OpenJDK and JRE 11 using following command<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">$ sudo apt-get install openjdk-11-jdk -y<br>$ sudo apt-get install openjdk-11-jre -y<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5) Install and Setup PostgreSQL 10 Database For SonarQube by following the below steps<br>        <span class=\"has-inline-color has-vivid-cyan-blue-color\"> a)  sudo sh -c &#8216;echo &#8220;deb http:\/\/apt.postgresql.org\/pub\/repos\/apt\/ <code>lsb_release -cs<\/code>-pgdg main&#8221; &gt;&gt; \/etc\/apt       \/sources.list.d\/pgdg.list&#8217;<br>         b)  wget -q https:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc -O &#8211; | sudo apt-key add &#8211;<br>         c)  sudo apt-get -y install postgresql postgresql-contrib<br>         d) sudo -Hiu postgres<br>         e) createuser sonaradmin<br>         f) createdb -O sonaradmin sonarqubedb<br>         g) psql<br>         h) ALTER USER sonaradmin WITH ENCRYPTED password &#8216;changethepassword&#8217;;<br>         i)  \\q<br>         j) exit<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">6) Fontconfig and FreeType fonts are required for generating SonarQube executive reports. Install them as follows;<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">apt install fontconfig-config libfreetype6<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">7) Once all the prerequisites are met, proceed to install SonarQube<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">wget https:\/\/binaries.sonarsource.com\/Distribution\/sonarqube\/sonarqube-8.7.0.41497.zip<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">8) Extract SonarQube to some directory, e.g the <code><strong>\/opt<\/strong><\/code> directory<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">apt install zip<br>unzip sonarqube-8.7.0.41497.zip -d \/opt\/<br>mv \/opt\/sonarqube{-8.7.0.41497,}<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">9) SonarQube should not be run as root. As such, you can create an non admin account for running SonarQube as follows;<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">useradd -M -d \/opt\/sonarqube\/ -r -s \/bin\/bash sonarqube<br>chown -R sonarqube: \/opt\/sonarqube<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">10) Set database connection details as per your PostgreSQL setup above.<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">vim \/opt\/sonarqube\/conf\/sonar.properties<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-25-07.png\"><img decoding=\"async\" width=\"698\" height=\"286\" src=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-25-07.png\" alt=\"\" class=\"wp-image-6267\" srcset=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-25-07.png 698w, https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-08-17-25-07-300x123.png 300w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">  11) Save and exit the file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">12) As much as you can start SonarQube in standalone mode using the <code><strong>\/opt\/sonarqube\/bin\/linux-x86-64\/sonar.sh<\/strong><\/code> script by passing the <code><strong>start<\/strong><\/code> option as in <code><strong>\/opt\/sonarqube\/bin\/linux-x86-64\/sonar.sh start<\/strong><\/code>, it is better to use the systemd service unit. Create SonarQube Systemd Service Unit file;<br><br><span class=\"has-inline-color has-vivid-cyan-blue-color\">nano \/etc\/systemd\/system\/sonarqube.service<\/span> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy and paste the below content  <br><br><span class=\"has-inline-color has-vivid-cyan-blue-color\">[Unit] <br>Description=SonarQube service <br>After=syslog.target network.target<br><br>[Service]<br>Type=forking<br>ExecStart=\/opt\/sonarqube\/bin\/linux-x86-64\/sonar.sh start<br>ExecStop=\/opt\/sonarqube\/bin\/linux-x86-64\/sonar.sh stop<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">User=sonarqube<br>Group=sonarqube<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">Restart=always<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">LimitNOFILE=65536<br>LimitNPROC=4096<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">[Install]<br>WantedBy=multi-user.target<\/span><br><br>13) Save and close the file. Now stop the sonarqube script earlier we started to run using as daemon. Start the Sonarqube daemon by running:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">sudo systemctl start sonarqube.service<br>sudo systemctl enable sonarqube.service<br>sudo systemctl status sonarqube.service<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">14) You can find all the logs under, <code><strong>\/opt\/sonarqube\/logs<\/strong><\/code> directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">15) In order to access SonarQube Web interface, you need to install and setup a web server to proxy the requests to SonarQube running locally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">16) You can either use Apache or Nginx web server.<br><span class=\"has-inline-color has-vivid-cyan-blue-color\">apt install nginx -y<br>nano \/etc\/nginx\/sites-available\/sonarqube<br><\/span><br>17) Copy and paste the below content<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">server{\n    listen      80;\n    server_name sonarqube.kifarunix-demo.com;\n\n    access_log  \/var\/log\/nginx\/sonarqube.access.log;\n    error_log   \/var\/log\/nginx\/sonarqube.error.log;\n\n    proxy_buffers 16 64k;\n    proxy_buffer_size 128k;\n\n    location \/ {\n        proxy_pass  http:\/\/127.0.0.1:9000;\n        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;\n        proxy_redirect off;\n<\/span>\n        <span class=\"has-inline-color has-vivid-cyan-blue-color\">proxy_set_header    Host            $host;\n        proxy_set_header    X-Real-IP       $remote_addr;\n        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header    X-Forwarded-Proto http;\n    }\n}<\/span>\n\n18) Check Nginx syntax errors;\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">nginx -t<\/span>\n\n19) Enable SonarQube Nginx site;\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">ln -s \/etc\/nginx\/sites-available\/sonarqube \/etc\/nginx\/sites-enabled\/\nsystemctl restart nginx<\/span>\n\n20) The access SonarQube using the address <code><strong>http:\/\/sonarqube-server-host-IP-or-hostname<\/strong><\/code>.\nYou will be prompted to enter login details. Default authentication creds are <strong>Username<\/strong>: admin <strong>Password<\/strong>: admin\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prerequisites Ubuntu 18.04\/16.04 LTS with minimum 2GB RAM and 1 CPU. PostgreSQL Version 9.3 or higher SSH access with sudo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1020],"tags":[858,857],"class_list":["post-6265","post","type-post","status-publish","format-standard","hentry","category-containers-kubernetes","tag-code-analysis","tag-sonarqube","psol-cat-containers-kubernetes"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-1D3","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/6265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=6265"}],"version-history":[{"count":0,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/6265\/revisions"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=6265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=6265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=6265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}