Как настроить 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
Ответы
Ответ 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
Вы можете добиться этого, используя следующие методы.
- Правило пересылки таблицы IP.
- Использование обратного прокси, такого как Nginx.
- Запуск Дженкинса за балансировщиком нагрузки.
Метод 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.