52

私は Ubuntu 11.10 を実行sudo apt-get install jenkinsしており、このシステムに Jenkins をインストールするために実行しました。

リバース プロキシ (Apache、Nginx など) をセットアップする方法に関するいくつかのチュートリアルを見てきましたが、これはジェンキン専用の VM であり、ポート 80 でジェンキンを実行している間は、可能な限りスリムに保ちたいと考えています。

upstart config を見つけて/etc/init/jenkins.conf、ポートを 80 に変更しましたenv HTTP_PORT=80

service jenkins start経由でジェンキンスを起動するpsと、数秒間実行されてから終了することがわかります。

これは、ジェンキンスがjenkins特権ポートでユーザーとして実行されているためですか? もしそうなら、どうすればこれを修正できますか? 他のアイデアは大歓迎です。

これがupstart構成です:

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
4

13 に答える 13

49

もう 1 つの解決策は、単純に iptables を使用して着信トラフィックを 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 システムでは、パッケージ/etc/iptables/rules.v4を使用して保存できます。または、 /スクリプトを変更またはフックiptables-persistentすることで、iptable.rules を呼び出すことができます。Ubuntu Community wikiには、これらの方法を説明する素晴らしいページがあります。/etc/network/interfacesif-upif-down

ネットワーキングではよくあることですが、同じ結果を得るにはさまざまな方法があります。あなたに最適なものを使用してください!

于 2013-01-15T22:08:17.580 に答える
37
  1. /etc/default フォルダーに移動します --> ファイル「jenkins」を開きます
  2. 行 HTTP_PORT=8080 を HTTP_PORT=80 に変更します。
  3. 次のコマンドを使用して、ルートとして jenkins を起動します: sudo /etc/init.d/jenkins start
  4. ブラウザーを開き、localhost:80 として参照します。

それでおしまい

于 2013-01-10T12:18:53.227 に答える
33

' 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

次に、上記のスクリプトを次のように変更します(パーツauthbindの前に追加$JAVA_HOME/bin/java)。

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して追加しますauthbind$JAVA

$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を確認してください。Ubuntuのバージョン2.1.1は次のとおりですlibc6-udebauthbind

次に、以下を実行します。

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
于 2012-02-17T15:32:14.913 に答える
7

apache と mod_proxy を使用することをお勧めします。これは私がしていることであり、私の vhost 構成は次のようになります (SSL にもリダイレクトしますが、省略できます)。

<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>
于 2012-04-24T17:07:20.657 に答える
6

これは、次の方法を使用して実現できます。

  1. IP テーブル転送ルール。
  2. Nginx などのリバース プロキシを使用します。
  3. ロード バランサーの背後で Jenkins を実行する。

方法 1: IP テーブル転送ルールを使用して 80 で Jenkins を実行する

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

ここで、IPtable またはシステムの再起動後も保持されるように、これらのルールを保存する必要があります。

Redhat ベースのシステムの場合は、次を実行します。

sudo iptables-save > /etc/sysconfig/iptables

Debian ベースのシステムの場合、次のコマンドを実行します。

sudo sh -c "iptables-save > /etc/iptables.rules"

ポート 80 で Jenkins にアクセスすると、IP テーブルは自動的にリクエストを 8080 に転送します。

方法 2: Nginx リバース プロキシの背後で Jenkins を実行する

ステップ1:Nginxをインストールする

sudo yum install nginx

ステップ 2: Nginx 構成ファイルを開きます。

sudo vi /etc/nginx/nginx.conf

ステップ 3: nginx.conf ファイルで次のスニペットを見つけます。

location / {
}

ステップ 4: 中かっこの間に次の行を追加します。

proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

ステップ 5: Nginx リバース プロキシに対して SELinux コマンドを実行します。

sudo setsebool httpd_can_network_connect 1 -P

ステップ 6: Nginx サーバーを再起動します。

sudo systemctl restart nginx

これで、ポート 80 で Jenkins にアクセスできるようになります。

方法 3: ロード バランサーの背後にある Jenkins

ロード バランサーを追加すると、Jenkins のセットアップに余分なコストがかかります。クラウド上にいる場合は、すべてのポート 80 トラフィックをバックエンドの Jenkins 8080 ポートに送信するクラウド固有のロード バランサーを選択できます。

于 2019-02-21T14:17:41.097 に答える
0

ポート 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
于 2014-11-24T23:25:02.450 に答える
0

どの回答も、iptables を使用して 80 を 8080 に単純にリダイレクトする方法を示していません。
幸いなことに、dskrvkさんのコメントは !

これを文書化しているJenkins wikiもあります


リダイレクトを機能させるには、端末にこれらの行をコピーして貼り付けるだけでした。

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

ところで、テストしたらサーバーの初期化スクリプトに含めることを忘れないでください。そうしないと、再起動後にリダイレクトが失われます。 Debian 8.2 (Jessie) でテスト済み

于 2017-01-05T17:33:47.240 に答える
0

/etc/default/jenkins を変更しても、セットアップ ubunutu 16.-4 Jenkins 2.89.4 では機能しません。iptable ルート 80 から 8080 を使用するソリューションは、80 で jenkins を実行する場合に必要な結果とは反対です。

于 2018-05-13T17:19:42.693 に答える