介绍
Concourse CI是一个现代化和可扩展的连续集成系统,旨在用可复制的声明语法来自动化测试管道,基于早期CI系统的成功,Concourse旨在简化管道管理,消除雪花
服务器,以便测试服务器与其处理的代码一样受管制。
在以前的教程中(LINK0),我们展示了如何在Ubuntu 16.04服务器上安装和配置Concourse CI实例,最后我们留下了可以从命令行和Web接口管理和监控的连续集成服务器。
在本指南中,我们将通过与 Nginx 设置一个 TLS/SSL 反向代理来保护 Concourse CI 接口.虽然 Concourse 可以配置为本地使用 SSL,但反向代理为未来的扩展提供更多的灵活性,并获得更强大的功能集。
前提条件
在你开始之前,你需要一个 Ubuntu 16.04 服务器 **具有至少 1G 的 RAM **. 完成以下指南来设置一个非根用户,安装和配置 Concourse,安装 Nginx,并在服务器上配置 TLS/SSL 连接。
- 初始服务器设置与Ubuntu 16.04
- How To Install Concourse CI on Ubuntu 16.04
- How To Install Nginx on Ubuntu 16.04
- How To Secure Nginx with Let's Encrypt on Ubuntu 16.04 ]
遵循这些前提后,您将有一个 Concourse 服务器在端口 8080 上运行。 此外, Nginx 将在端口 80 和 443 上运行。
当你准备好开始时,继续下方。
将 Nginx 配置为 Concourse 的反向代理
我们需要做的第一件事是修改SSL服务器封锁文件,将流量路由到Concourse CI服务器。
找到正确的文件来编辑
由于我们希望我们的 SSL 安全域名为 Concourse 接口提供服务,我们需要找出目前处理我们的域名的服务器块文件。
1grep -R server_name /etc/nginx/sites-enabled
你可能会看到这样的东西:
1[secondary_label Output]
2/etc/nginx/sites-enabled/default: server_name example.com;
3/etc/nginx/sites-enabled/default: return 301 https://$server_name$request_uri;
4/etc/nginx/sites-enabled/default: server_name example.com;
5/etc/nginx/sites-enabled/default:# server_name example.com;
在上述输出中,域名(‘example.com’ 在本例中)正在被定义为 /etc/nginx/sites-enabled/default
文件中。
也许你也看到了这样的东西:
1[secondary_label Output]
2/etc/nginx/sites-enabled/default: server_name _;
3/etc/nginx/sites-enabled/default: return 301 https://$server_name$request_uri;
4/etc/nginx/sites-enabled/default: server_name _;
5/etc/nginx/sites-enabled/default:# server_name example.com;
server_name _;
通常在上述输出中是一个服务器块定义,匹配任何未匹配的请求. 如果您无法找到一个匹配您的域名的server_name
定义,您应该使用看起来像这样的文件。
定义竞争服务器块
在文本编辑器中打开定义您的域名的文件,以便开始:
1sudo nano /etc/nginx/sites-enabled/default
随着评论被删除,您的文件可能会看起来类似于此,如果您正确遵循前提部分中的教程:
1[label /etc/nginx/sites-enabled/default]
2server {
3 listen 80 default_server;
4 listen [::]:80 default_server;
5 server_name example.com;
6 return 301 https://$server_name$request_uri;
7}
8
9server {
10 listen 443 ssl http2 default_server;
11 listen [::]:443 ssl http2 default_server;
12 include snippets/ssl-example.com.conf;
13 include snippets/ssl-params.conf;
14
15 root /var/www/html;
16 index index.html index.htm index.nginx-debian.html;
17
18 server_name example.com;
19
20 location / {
21 try_files $uri $uri/ =404;
22 }
23
24 location ~ /.well-known {
25 allow all;
26 }
27}
可能会有轻微的变化,但这应该是文件的总体结构,我们可以通过进行两个重要的编辑来适应这个代理服务器的 Concourse。
首先,在文件的开始,在服务器
块之前,我们将创建一个名为concourse
的上游
块,该块定义了我们的Concourse Web 流程如何接受连接。
接下来,找出负责提供SSL内容的服务器块,以Listen 443
字符串搜索该块. 再次检查该块中定义的server_name
是否匹配您的域名(或设置为server_name _;
如果您在搜索find
时没有找到与您的域名匹配的任何结果)。
在这个服务器块中,我们需要调整位置/
块,以便 Nginx 将所有请求(在其他地方没有明确定义)传递给 Concourse 服务器。
用下面的示例中的行替代在位置/
块中定义的try_files
指令。
1[label /etc/nginx/sites-enabled/default]
2upstream concourse {
3 server 127.0.0.1:8080;
4}
5
6server {
7 listen 80 default_server;
8 listen [::]:80 default_server;
9 server_name example.com;
10 return 301 https://$server_name$request_uri;
11}
12
13server {
14 listen 443 ssl http2 default_server;
15 listen [::]:443 ssl http2 default_server;
16 include snippets/ssl-example.com.conf;
17 include snippets/ssl-params.conf;
18
19 root /var/www/html;
20 index index.html index.htm index.nginx-debian.html;
21
22 server_name example.com;
23
24 location / {
25 include proxy_params;
26 proxy_http_version 1.1;
27 proxy_read_timeout 90;
28
29 proxy_set_header Upgrade $http_upgrade;
30 proxy_set_header Connection "upgrade";
31
32 proxy_pass http://concourse;
33 }
34
35 location ~ /.well-known {
36 allow all;
37 }
38}
完成编辑后,保存并关闭文件。
测试并激活新配置
在使用新配置之前,请让 Nginx 通过键入检查语法错误:
1sudo nginx -t
1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful
如果您看到错误消息,而不是上面的成功消息,请返回并检查您编辑的文件,以查找错误,然后继续。
要实现新的配置,请重新启动 Nginx:
1sudo systemctl restart nginx
Nginx现在已配置为将域名请求转发到Concourse服务器。
将 Concourse 配置为连接到本地回路接口
现在,Concourse将在所有接口上接受端口 8080的连接,因此用户可以通过直接连接到集成服务器来绕过SSL加密。
我们可以通过更改 Concourse Web 配置来修改这种行为. 在您的文本编辑器中打开我们在 /etc/concourse/web_environment
创建的 web
过程的配置文件:
1sudo nano /etc/concourse/web_environment
查找CONCOURSE_EXTERNAL_URL
参数,并将其更改以反映用户应该使用的URL访问CONCOURSE Web接口。这包括协议,指定为https://
,然后是我们的域名。
之后,设置一个名为CONCOURSE_BIND_IP
的新环境变量为127.0.0.1
。 默认情况下,Concourse 会倾听所有界面,但此设置告诉Concourse 只将其绑定到本地界面。
1[label /etc/concourse/web_environment]
2. . .
3CONCOURSE_EXTERNAL_URL=https://example.com
4CONCOURSE_BIND_IP=127.0.0.1
保存并关闭文件,当你完成。
重新启动Web
程序,开始使用新设置:
1sudo systemctl restart concourse-web
检查ConcourseWeb
界面是否只听到本地环绕界面,键入:
1sudo netstat -plunt | grep 8080
1[secondary_label Output]
2tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 20932/concourse
上面的输出表明,ConcourseWeb
过程只在本地界面上进行听取。
我们现在可以更改我们的防火墙设置,以删除我们对端口8080的例外,因为所有外部请求都将通过Nginx路由:
1sudo ufw delete allow 8080
1secondary_label Output]
2Rule deleted
3Rule deleted (v6)
现在,我们可以安全地登录Web界面。
测试 Web 界面
在您选择的网页浏览器中,访问您的服务器的域名:
1https://example.com
您应该能够访问首页 Concourse CI:
如果您查看浏览器的地址栏,会有一些迹象表明您正在通过安全连接连接到集成服务器:
Nginx 确保了与您的浏览器的连接,并将请求传递给 Concourse. 现在我们可以安全地连接,您可以安全地登录 Web 界面。
如果您点击右上角的 login 链接,您可以登录 Web 接口. 首先,您将被要求选择您的团队。
在下一页,您将被要求输入您的凭证。
输入您在web_environment
文件中配置的凭证后,您将登录并返回默认的位置接口:
一旦你将你的管道配置提交到服务器中,这个屏幕将被一个接口取代,你可以监控你的管道活动。
结论
在本指南中,我们将 Nginx 配置为 Concourse CI 服务器的安全反向代理。 Nginx 接受客户端的安全连接,并向 Concourse 服务器提交请求。
现在您可以安全地联系 Concourse 服务器,您可以使用飞
工具和 Web 界面开始构建和管理管道。 您可以遵循我们的下一个指南来学习 如何开发和实施连续集成管道为您的项目设置自动测试流程。