Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker将Docker compose和nginx配置为让jenkins支持nginx_Docker_Nginx_Jenkins_Docker Compose - Fatal编程技术网

Docker将Docker compose和nginx配置为让jenkins支持nginx

Docker将Docker compose和nginx配置为让jenkins支持nginx,docker,nginx,jenkins,docker-compose,Docker,Nginx,Jenkins,Docker Compose,我是docker和nginx的新手,我设法让nginx在容器中运行HTTPS,我想在nginx后面添加jenkins。我不想在我的服务器上打开新端口,我希望所有流量都通过我的nginx 我如何编写我的docker compose.yaml和我的app.conf(nginx的配置文件)来让它一起工作?这是我的配置文件,我已经用一个虚拟域名替换了我的域名example.com,我希望jenkins可以访问jenkins.example.com docker compose.yml nginx:

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

我如何编写我的
docker compose.yaml
和我的
app.conf
(nginx的配置文件)来让它一起工作?这是我的配置文件,我已经用一个虚拟域名替换了我的域名
example.com
,我希望jenkins可以访问
jenkins.example.com

docker compose.yml

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

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;
    }
}

要使nginx的工作配置能够作为Jenkins的反向代理,您应该看看。在这里,您可以找到许多不同用例的示例(有/没有SSL、AWS等等)

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


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

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

docker compose

  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

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;
  }
}