首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker配置docker-compose和nginx,让jenkins在nginx后面

Docker配置docker-compose和nginx,让jenkins在nginx后面
EN

Stack Overflow用户
提问于 2019-08-23 15:52:47
回答 2查看 1.8K关注 0票数 2

我是docker和nginx的新手,我设法让nginx和HTTPS在容器中运行,我想在nginx后面添加jenkins。我不想在我的服务器上打开新的端口,我希望所有的流量都通过我的nginx。

我如何编写我的docker-compose.yamlapp.conf (nginx的配置文件)来让它们一起工作?这是我的配置文件,我已经用一个虚拟的example.com替换了我的域名,我希望jenkins可以在jenkins.example.com上使用。

docker-compose.yml

代码语言:javascript
复制
nginx:
  image: nginx:1.17-alpine
  container_name: nginx-docker
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ./data/nginx:/etc/nginx/conf.d
    - ./data/html:/etc/nginx/html
jenkins:
  image: "jenkins/jenkins:lts"
  container_name: jenkins-docker
  volumes:
    - ./data/jenkins:/var/jenkins_home
  expose:
    - "8080"
  ports:
    - "50000:50000"

app.conf

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com;

    location / {
        return 301 https://$host$request_uri;
    } 
}

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        root html;
        index index.html;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-23 16:08:03

要将nginx的工作配置用作Jenkins的反向代理,您应该查看Official Jenkins Wiki。在那里你可以找到许多不同用例的示例(使用/不使用SSL、AWS、…)

考虑到nginx也运行在Docker容器中(在同一网络中),这里必须更改的是,您不能重定向到localhost:8080,而是jenkins:8080 ( Docker服务的名称,同一网络中的容器可以使用它进行通信)。

除此之外,您的docker-compose.yml看起来还不错。这里唯一要做的就是将端口50000映射到主机的端口50000。如果您不想在机器上打开任何新端口,并且希望所有流量都通过nginx,那么我真的看不出这样做有什么意义。公开它(就像您对端口8080所做的那样)就足够了,然后您可以添加一行到nginx,以将特定子域的请求定向到那里,例如。

票数 3
EN

Stack Overflow用户

发布于 2019-08-23 20:41:34

以下是我的配置文件的最终版本:

docker-compose

代码语言:javascript
复制
  nginx:
    image: nginx:1.17-alpine
    container_name: nginx-docker
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/html:/etc/nginx/html
  jenkins:
    image: "jenkins/jenkins:lts"
    container_name: jenkins-docker
    volumes:
      - ./data/jenkins:/var/jenkins_home
    expose:
      - "8080"

app.conf

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com *.example.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        root html;
        index index.html;
    }
}

upstream jenkins {
  server jenkins:8080 fail_timeout=0;
}

server {
  listen 443 ssl;
  server_name jenkins.example.com;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  location / {
    proxy_set_header        Host $host:$server_port;
    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;
    proxy_redirect http:// https://;
    proxy_pass              http://jenkins;
    # Required for new HTTP-based CLI
    proxy_http_version 1.1;
    proxy_request_buffering off;
    proxy_buffering off; # Required for HTTP-based CLI to work over SSL
    # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
    add_header 'X-SSH-Endpoint' 'jenkins.domain.tld:50022' always;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57621945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档