Подтвердить что ты не робот

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

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

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

Я нашел конфигурацию выскочки в /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
4b9b3361

Ответ 1

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

Затем измените script выше, чтобы иметь (добавить 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

Ответ 2

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

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

Ответ 3

  • Перейдите в папку /etc/default → Откройте файл "jenkins"
  • Изменить строку HTTP_PORT = 8080 как HTTP_PORT = 80
  • Запустите jenkins как root, используя команду: sudo/etc/init.d/jenkins start
  • Откройте браузер и просмотрите его как localhost: 80

что он

Ответ 4

Я бы предложил использовать 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>

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

  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.

Ответ 8

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

Ответ 9

Ни один из ответов не говорит о том, как просто перенаправить 80 8080 с помощью iptables.
К счастью, dskrvk comment does!

Там также 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

Btw, не забудьте включить его в сценарии инициализации сервера после тестирования, иначе вы потеряете перенаправление после перезагрузки. Протестировано на Debian 8.2 (Jessie)

Ответ 10

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

Ответ 11

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

Ответ 12

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

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.