Jenkins가 포트 80에서 수신 대기하도록 만드는 방법은 무엇입니까?

Jenkins가 포트 80에서 수신 대기하도록 만드는 방법은 무엇입니까?

기본 구성을 사용하여 Jenkins는 포트 8080에서 수신 대기합니다.

$ ss -tulpn | grep 8080
tcp  LISTEN 0      50       *:8080            *:*     users:(("java",pid=3052,fd=115)

그러나 나는 이것을 변경하고 Jenkins가 포트 80에서 수신 대기하도록 하고 싶습니다.

들어가서 /etc/sysconfig/jenkins변경 JENKINS_PORT하고 JENKINS_PORT="80"재부팅하면 다음과 같은 sudo service jenkins restart결과가 나타납니다.

$ ss -tulpn | grep 8080
$ ss -tulpn | grep 80
$ curl localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Connection refused
$ curl localhost:80
curl: (7) Failed to connect to localhost port 80 after 0 ms: Connection refused

Jenkins가 포트 80에서 수신 대기하도록 만드는 방법은 무엇입니까?

답변1

루트만 1024 미만의 포트에 바인딩할 수 있습니다. 이것이 Jenkins가 8080권한 있는 포트가 아니기 때문에 기본적으로 포트에서 실행되는 이유입니다 . 이 문제를 해결하는 한 가지 방법은 Jenkins 앞에 apache또는 nginx포트에서 수신 대기하는 역방향 프록시를 두는 것입니다.80이것문제를 해결하는 데 도움이 될 것입니다. 이것nginx 또는 apache 뒤에서 jenkins를 실행하는 방법에 대한 많은 튜토리얼 중 하나입니다.

답변2

systemd를 실행하는 경우 더 깔끔한 대답은 서비스 포트에 바인딩할 수 있는 기능을 프로세스에 제공하는 것입니다. systemctl edit jenkins.service다음 섹션을 실행 하고 추가합니다.

[Service]
Environment="JENKINS_PORT=80"
AmbientCapabilities=CAP_NET_BIND_SERVICE

그런 다음 서비스를 다시 시작하십시오. HTTPS가 필요한 경우 유사한 솔루션을 사용하여 443에 바인딩할 수 있습니다.

답변3

가 있는 시스템에서는 authbindJenkins가 전체 액세스 권한을 부여하지 않고도 포트 80에 바인딩하도록 허용할 수 있습니다 CAP_NET_BIND_SERVICE. 실행하려면 systemctl edit jenkins.service다음을 추가합니다.

[Service]
Environment="JENKINS_PORT=80"
ExecStart=/usr/bin/authbind --depth 2 /usr/bin/jenkins

그리고 포트 80을 허용하도록 Jenkins를 설정합니다.

touch /etc/authbind/byport/80
chown jenkins:jenkins /etc/authbind/byport/80
chmod 774 /etc/authbind/byport/80

관련 정보