如何configurationJenkins以在端口80上运行

我正在运行Ubuntu 11.10并运行sudo apt-get install jenkins在这个系统上安装Jenkins。

我已经看过一些关于如何设置反向代理(Apache,Nginx等)的教程,但是这是一个专门用于jenkins的虚拟机,我希望在jenkins运行在80端口时尽可能保持精简。

我在/etc/init/jenkins.conffind了新的configuration,并将端口修改为80 env HTTP_PORT=80

当我通过jenkins service jenkins startps显示它运行了几秒钟,然后终止。

这是因为jenkins作为jenkins用户在特权端口上运行? 如果是这样,我该如何解决这个问题? 任何其他的想法一个欢迎。

这里是新贵的configuration:

 description "jenkins: Jenkins Continuous Integration Server" author "James Page <james.page@ubuntu.com>" start on (local-filesystems and net-device-up IFACE!=lo) stop on runlevel [!2345] env USER="jenkins" env GROUP="jenkins" env JENKINS_LOG="/var/log/jenkins" env JENKINS_ROOT="/usr/share/jenkins" env JENKINS_HOME="/var/lib/jenkins" env JENKINS_RUN="/var/run/jenkins" env HTTP_PORT=80 env AJP_PORT=-1 env JAVA_OPTS="" env JAVA_HOME="/usr/lib/jvm/default-java" limit nofile 8192 8192 pre-start script test -f $JENKINS_ROOT/jenkins.war || { stop ; exit 0; } $JENKINS_ROOT/bin/maintain-plugins.sh mkdir $JENKINS_RUN > /dev/null 2>&1 || true chown -R $USER:$GROUP $JENKINS_RUN || true end script script JENKINS_ARGS="--webroot=$JENKINS_RUN/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT" exec daemon --name=jenkins --inherit --output=$JENKINS_LOG/jenkins.log --user=$USER \ -- $JAVA_HOME/bin/java $JAVA_OPTS -jar $JENKINS_ROOT/jenkins.war $JENKINS_ARGS \ --preferredClassLoader=java.net.URLClassLoader end script 

试试' authbind ':

 sudo apt-get install authbind sudo touch /etc/authbind/byport/80 sudo chmod 500 /etc/authbind/byport/80 sudo chown jenkins /etc/authbind/byport/80 

然后修改上面的脚本(在$JAVA_HOME/bin/java部分之前添加authbind ):

 exec daemon --name=jenkins --inherit --output=$JENKINS_LOG/jenkins.log \ --user=$USER -- authbind $JAVA_HOME/bin/java $JAVA_OPTS \ -jar $JENKINS_ROOT/jenkins.war $JENKINS_ARGS \ --preferredClassLoader=java.net.URLClassLoader 

对于较新的Ubuntu安装(14.04)中较新的Jenkins安装(1.598),编辑/etc/init.d/jenkins并在$JAVA之前添加authbind

 $SU -l $JENKINS_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- authbind $JAVA $JAVA_ARGS -jar $JENKINS_WAR $JENKINS_ARGS" || return 2 

正如Alan所提到的(请参阅下面的注释),如果您需要IPv6并且您的系统低于Quantal,则可以使用apt-get安装authbind下载更高版本。 确保你已经安装了libc6libc6-udeb 。 这里是来自Ubuntu的authbind 2.1.1版本:

  • AMD64
  • I386

然后执行:

 sudo dpkg -i authbind_2.1.1_amd64.deb # or sudo dpkg -i authbind_2.1.1_i386.deb sudo touch /etc/authbind/byport/80 sudo chmod 500 /etc/authbind/byport/80 sudo chown jenkins /etc/authbind/byport/80 

另一种解决方法是简单地使用iptables将传入stream量从80改变到8080.规则如下所示:

 -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 

重新格式化为iptables.rules文件:

 *filter :INPUT ACCEPT [100:100000] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [95:9000] -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT COMMIT *nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 COMMIT 

iptable.rules文件的优点是规则可以在重新启动后保留。 只要确保将任何其他当前的iptable规则集成到同一个文件中!

在Redhat / CentOS上,这个文件可以进入/etc/sysconfig/iptables

在Debian / Ubuntu系统上,可以使用iptables-persistent软件包将它们保存在/etc/iptables/rules.v4 。 或者iptable.rules可以通过修改/etc/network/interfaces或连接if-up / if-down脚本来调用。 Ubuntu社区wiki有一个很好的页面来解释这些方法。

与networking通常情况一样,有很多不同的方法来实现相同的结果。 使用最适合你的东西!

  1. 转到/ etc / default文件夹 – >打开文件“jenkins”
  2. 将HTTP_PORT = 8080行修改为HTTP_PORT = 80
  3. 以root身份启动jenkins:sudo /etc/init.d/jenkins start
  4. 打开浏览器并以localhost:80浏览

而已

我build议使用Apache和mod_proxy。 这是我做的,我的虚拟主机configuration看起来有点像这样(我也redirectSSL,但你可以省略):

 <VirtualHost *:443> ServerAdmin webmaster@example.com ServerName ci.example.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPreservehost on ProxyPass / http://localhost:8080/ Header edit Location ^http://ci.example.com/ https://ci.example.com/ SSLEngine on SSLCertificateFile /etc/apache2/keys/apache.pem </VirtualHost> 

因为我使用docker 。 你可以用它在80端口上运行jenkins,以下是我的脚本的一个片段:

 JENKINS_PORT=80 JENKINS_HOME=/home/jenkins /usr/bin/docker run -d -p $JENKINS_PORT:8080 -v $JENKINS_HOME jenkins 

把8080端口转发到80端口的firewalld方式:

 yum install firewalld systemctl start firewalld chkconfig firewalld on firewall-cmd --permanent --zone=external --change-interface=eth0 firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080 

没有答案告诉如何简单地redirect80到8080与iptables。
幸运的是, dskrvk的评论呢!

还有一个Jenkins维基logging这个

我只需要在terminal上复制/粘贴这些行来获得redirect的工作:

 sudo iptables -I INPUT 1 -p tcp --dport 8443 -j ACCEPT sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443 

顺便说一句,不要忘记一旦testing过,将它包含到你的服务器的init脚本中,否则重启后你将失去redirect。 testingDebian 8.2(Jessie)