Как настроить Jenkins для работы на порте 80 - PullRequest
47 голосов
/ 17 февраля 2012

Я использую Ubuntu 11.10 и запускаю sudo apt-get install jenkins для установки Jenkins в этой системе.

Однако я видел несколько руководств по настройке обратного прокси-сервера (Apache, Nginx и т. Д.).это виртуальная машина, предназначенная только для jenkins, и я бы хотел, чтобы она работала как можно меньше при работе jenkins на порту 80.

Я нашел конфигурацию upstart в /etc/init/jenkins.conf и изменил порт на 80env HTTP_PORT=80

Когда я запускаю jenkins через service jenkins start, ps показывает, что он работает в течение нескольких секунд, а затем завершается.

Это потому, что jenkins работает как пользователь jenkinsна привилегированном порту?Если так, как я могу это исправить?Любые другие идеи приветствуются.

Вот выскочка конфигурации:

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

Ответы [ 12 ]

44 голосов
/ 16 января 2013

Другое решение состоит в том, чтобы просто использовать 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 можно вызвать, изменив /etc/network/interfaces или подключив к if-up / if-down скрипты. Вики-сообщество Ubuntu содержит отличную страницу, объясняющую эти методы.

Как обычно в случае с сетью, есть много разных способов достижения одного и того же результата. Используйте то, что работает лучше для вас!

33 голосов
/ 10 января 2013
  1. Перейдите в папку / etc / default -> Откройте файл "jenkins"
  2. Измените строку HTTP_PORT = 8080 как HTTP_PORT = 80
  3. Запустите jenkins от имени пользователя root с помощьюкоманда: sudo /etc/init.d/jenkins start
  4. Откройте браузер и найдите как localhost: 80

вот оно

29 голосов
/ 17 февраля 2012

Попробуйте ' 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

Для более новых установок Jenkins (1.598) на более новых установках Ubuntu (14.04) отредактируйте /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 и libc6-udeb. Вот authbind версия 2.1.1 из Ubuntu:

Затем выполните:

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
7 голосов
/ 24 апреля 2012

Я бы предложил использовать 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>
1 голос
/ 21 февраля 2019

Этого можно добиться с помощью следующих методов.

  1. Правило пересылки таблицы IP.
  2. Использование обратного прокси-сервера, такого как Nginx.
  3. Запуск Jenkins за балансировщиком нагрузки.

Метод 1: Запуск Jenkins On 80 с использованием правила пересылки таблицы IP

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"

Теперь, если вы обращаетесь к Jenkins через порт 80, таблица IP автоматически перенаправит запросы на 8080.

Метод 2: Запуск JenkinsЗа обратным прокси-сервером Nginx

Шаг 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: Выполните команду SELinux для обратного прокси-сервера Nginx.

sudo setsebool httpd_can_network_connect 1 -P

Шаг 6: Перезагрузите сервер Nginx.

sudo systemctl restart nginx

Теперь, если вы сможете получить доступ к Jenkins через порт 80.

Метод 3. Дженкинс за балансировщиком нагрузки

Добавление балансировщика нагрузки увеличит стоимостьустановка Дженкинса.Если вы находитесь в облаке, вы можете выбрать балансировщик нагрузки для конкретного облака, который будет отправлять весь трафик порта 80 на внутренний порт Jenkins 8080.

1 голос
/ 16 октября 2018

У меня была такая же проблема, и я нашел лучшее решение для нее, используя iptables .

По умолчанию Jenkins работает на портах 8080 или 8443. А серверы HTTP / HTTPS работают на портах 80и 443.

Но это специальные порты, и процесс, использующий их, должен принадлежать пользователю root.

Но запуск Jenkins от имени root - не лучшее решение (его следует запускать от своего собственного пользователя), и он также запускает Jenkins с веб-сервером, таким как Apache, и разрешает запросы прокси-серверов Jenkins.

Лучшее решение - использовать iptables в Linux для пересылки трафика.

1) Используйте эту команду для просмотра текущей конфигурации iptables:

$ iptables -L -n

target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

2) Если вы не видите вышеупомянутые записи, то вам нужно выполнить следующие команды:

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

3) Теперь повторно запустите команду $ iptables -L -n и убедитесь, чтоВы видите 1-й шаг o / p.

4) Последний шаг - запуск следующих команд для перенаправления трафика порта 80 на 8080 и трафика порта 443 на 8443 (если вы используете HTTPS).

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

5) Теперь ваш URL должен оставаться на порту 80

Более подробную информацию вы можете получить здесь .

1 голос
/ 13 мая 2015

Так как я использовал докер . Вы можете использовать его для запуска jenkins на порту 80, далее фрагмент моего скрипта:

JENKINS_PORT=80
JENKINS_HOME=/home/jenkins
/usr/bin/docker run -d -p $JENKINS_PORT:8080 -v $JENKINS_HOME jenkins
0 голосов
/ 11 апреля 2019

Запустите эти строки кода по отдельности:

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

Если ваша система основана на Debian, запустите:

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

Если ваша система основана на RedHat:

sudo iptables-save > /etc/sysconfig/iptables

Этот процесс изменит порт Jenkins по умолчанию с 8080 на 80.

0 голосов
/ 13 мая 2018

изменение / etc / default / jenkins на моей установке не работает *

0 голосов
/ 20 марта 2018

В Ubuntu 16.04 эта вики объясняет, как это сделать.

sudo nano /etc/rc.local

Затем добавьте следующее прямо перед выходом 0

#Requests from outside
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
#Requests from localhost
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

Теперь перезагрузите компьютер или запустите sudo /etc/rc.local, чтобы включить переадресацию портов

...