How to run sonarqube port 80

Hello,
I would like to run Sonarqube on port 80 instead of port 9000 but chaning port in configuration file is not enough. The following exception is throwed.

There is an expression that “only root users can bind to port 80”…

I start Sonarqube service a non-root user. What is the way running Sonarqube on port 80?

Could you please advise?

Thanks & Regards

==> /opt/sonarqube/logs/web.log <==
2021.12.16 07:58:24 INFO  web[][o.s.p.ProcessEntryPoint] Starting web
2021.12.16 07:58:25 ERROR web[][o.a.c.c.StandardService] Failed to initialize connector [Connector[HTTP/1.1-80]]
org.apache.catalina.LifecycleException: Protocol handler initialization failed
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:1077)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:557)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:850)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173)
        at org.apache.catalina.startup.Tomcat.start(Tomcat.java:440)
        at org.sonar.server.app.EmbeddedTomcat.start(EmbeddedTomcat.java:72)
        at org.sonar.server.app.WebServer.start(WebServer.java:52)
        at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:97)
        at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:81)
        at org.sonar.server.app.WebServer.main(WebServer.java:99)
Caused by: java.net.SocketException: Permission denied
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:455)
        at java.base/sun.nio.ch.Net.bind(Net.java:447)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
        at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:222)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1147)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:222)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:599)
        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:80)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:1074)
        ... 12 common frames omitted
2021.12.16 07:58:25 ERROR web[][o.s.s.a.EmbeddedTomcat] Fail to start web server
org.apache.catalina.LifecycleException: Failed to initialize connector [Connector[HTTP/1.1-80]]
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:564)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:850)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173)
        at org.apache.catalina.startup.Tomcat.start(Tomcat.java:440)
        at org.sonar.server.app.EmbeddedTomcat.start(EmbeddedTomcat.java:72)
        at org.sonar.server.app.WebServer.start(WebServer.java:52)
        at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:97)
        at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:81)
        at org.sonar.server.app.WebServer.main(WebServer.java:99)
2021.12.16 07:58:25 WARN  web[][o.s.p.ProcessEntryPoint] Fail to start web
java.lang.RuntimeException: org.apache.catalina.LifecycleException: Failed to initialize connector [Connector[HTTP/1.1-80]]
        at com.google.common.base.Throwables.propagate(Throwables.java:241)
        at org.sonar.server.app.EmbeddedTomcat.start(EmbeddedTomcat.java:77)
        at org.sonar.server.app.WebServer.start(WebServer.java:52)
        at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:97)
        at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:81)
        at org.sonar.server.app.WebServer.main(WebServer.java:99)
Caused by: org.apache.catalina.LifecycleException: Failed to initialize connector [Connector[HTTP/1.1-80]]
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:564)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:850)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173)
        at org.apache.catalina.startup.Tomcat.start(Tomcat.java:440)
        at org.sonar.server.app.EmbeddedTomcat.start(EmbeddedTomcat.java:72)
        ... 4 common frames omitted
2021.12.16 07:58:25 INFO  web[][o.s.p.ProcessEntryPoint] Hard stopping process

Hi @tirelibirefe ,

port 80 (or rather all ports smaller that 1024) are privileged ports and should not be used by none privileged applications. If you want to expose sonarqube on port 80 i would recommend you to install a reverse proxy like nginx in front of sonarqube and proxy the requests.

user → nginx on port 80/443 → sonarqube on port 9000

there are config examples how to do that in our documentation.

hope that helps