it-roy-ru.com

Как настроить Jenkins для работы на порте 80

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

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

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

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

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

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

description "jenkins: Jenkins Continuous Integration Server"
author "James Page <[email protected]>"

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
45
hafichuk

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

Другое решение - просто использовать 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 Wiki есть отличная страница, объясняющая эти методы.

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

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

вот и все

32
Ripon Al Wasim

Я бы предложил использовать Apache и mod_proxy. Это то, что я делаю, и моя конфигурация vhost выглядит примерно так (я также перенаправляю для SSL, но вы можете опустить это):

<VirtualHost *:443>
ServerAdmin [email protected]
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>
7
regulatethis

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

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

У меня была такая же проблема, и я нашел лучшее решение, используя 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
Pratik Patel

Ни один из ответов не говорит о том, как просто перенаправить 80 на 8080 с помощью iptables.
К счастью, комментарий 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)

0
Balmipour

fireWalld способ переадресации порта 8080 на 80:

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
0
Greg

Вы можете добиться этого, используя следующие методы.

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

Метод 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: Дженкинс за балансировщик нагрузки

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

0
Subhash

изменение/etc/default/jenkins не работает на моей установке ubunutu 16.-4 Jenkins 2.89.4 и решение использовать iptable-маршруты от 80 до 8080, что противоположно требуемому результату запуска jenkins на 80

0
Barak

В 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, чтобы включить переадресацию портов

0
Katu