如何configurationJenkins以在端口80上运行
我正在运行Ubuntu 11.10并运行sudo apt-get install jenkins
在这个系统上安装Jenkins。
我已经看过一些关于如何设置反向代理(Apache,Nginx等)的教程,但是这是一个专门用于jenkins的虚拟机,我希望在jenkins运行在80端口时尽可能保持精简。
我在/etc/init/jenkins.conf
find了新的configuration,并将端口修改为80 env HTTP_PORT=80
当我通过jenkins service jenkins start
, ps
显示它运行了几秒钟,然后终止。
这是因为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
下载更高版本。 确保你已经安装了libc6
和libc6-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通常情况一样,有很多不同的方法来实现相同的结果。 使用最适合你的东西!
- 转到/ etc / default文件夹 – >打开文件“jenkins”
- 将HTTP_PORT = 8080行修改为HTTP_PORT = 80
- 以root身份启动jenkins:sudo /etc/init.d/jenkins start
- 打开浏览器并以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)