入门系列之在Ubuntu上安装Drone持续集成环境 (3)

我们已完成配置服务器组件。在离开之前,复制DRONE_SECRET文件中的值。配置代理时,我们需要在下一节中设置相同的密钥。完成后保存并关闭文件。

配置Drone Agent的环境变量文件

接下来,我们将为Drone代理组件创建一个环境文件。打开新文件以设置代理环境变量:

sudo nano /etc/drone/agent.env

我们只需要定义两个值。 DRONE_SECRET将匹配sever.env文件中的配置。

DRONE_SERVER设置将配置代理连接到Drone服务器组件的方式。它将以wss://协议前缀开头,表示连接将使用加密的Web套接字,后跟Drone服务器的域名,并在末尾附加/ws/broker:

DRONE_SECRET=secret_generated_on_command_line DRONE_SERVER=wss://example.com/ws/broker

完成后保存并关闭文件。

配置DRONE系统单元文件

现在我们的配置文件就位,我们可以定义一个systemd单元文件来管理Drone服务。

在/etc/systemd/system目录中打开一个新的.service文件来配置服务:

sudo nano /etc/systemd/system/drone.service

内部粘贴以下内容:

[Unit] Description=Drone server After=docker.service nginx.service [Service] Restart=always ExecStart=http://www.likecs.com/usr/local/bin/docker-compose -f /etc/drone/docker-compose.yml up ExecStop=http://www.likecs.com/usr/local/bin/docker-compose -f /etc/drone/docker-compose.yml stop [Install] WantedBy=multi-user.target

第一部分告诉systemd在Docker和Nginx可用后启动此服务。第二部分告诉系统在发生故障时自动重启服务。 然后,它使用Docker Compose和我们之前创建的配置文件定义启动和停止Drone服务的命令。最后,最后一节定义了如何使服务在引导时启动。

完成后保存并关闭文件。

在我们启动Drone服务之前,我们必须配置Nginx。Drone代理需要能够连接到Drone服务器,并且连接依赖于Nginx代理。

配置Nginx到代理请求到Drone

接下来,我们需要修改Nginx的配置以代理对Drone服务器的请求。首先找到处理腾讯云SSL的Nginx配置。通过输入以下内容在所有已启用的服务器块中搜索server_name属性:

grep -R server_name /etc/nginx/sites-enabled /etc/nginx/sites-enabled/default: server_name example.com; /etc/nginx/sites-enabled/default: return 301 https://$server_name$request_uri; /etc/nginx/sites-enabled/default: server_name example.com; /etc/nginx/sites-enabled/default:# server_name example.com;

在上面的输出中,域名(在此实例中为example.com)正在/etc/nginx/sites-enabled/default文件中定义。 您需要编辑与您的域名关联的文件。

您可能也会看到类似这样的内容:

/etc/nginx/sites-enabled/default: server_name _; /etc/nginx/sites-enabled/default: return 301 https://$server_name$request_uri; /etc/nginx/sites-enabled/default: server_name _; /etc/nginx/sites-enabled/default:# server_name example.com;

在上面的输出中,server_name _; 表示用作后备机制的服务器块。“_”主机说明符是无效的主机,因此它永远不会匹配。

在配置中,这些配置与listen指令配对,后者设置default_server选项,以便当请求的主机与其他的服务器块不匹配时,将充当默认值。如果找不到与您的域名匹配的server_name定义,则应使用定义这些回退块的文件。

在文本编辑器中打开与您的域最相关的文件:

sudo nano /etc/nginx/sites-enabled/default

在内部,我们将首先在现有server块之外添加两个部分:

upstream drone { server 127.0.0.1:8000; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { . . .

第一个块配置一个名为drone的上游请求,我们可以在其中代理请求。server指令定义了如何连接到我们的Drone服务,该服务将在端口8000上运行。

第二个块根据$connection_upgrade变量的值设置一个名为$http_upgrade的用户定义变量,Nginx在收到“Upgrade”HTTP标头时设置该变量。如果收到Upgrade头,Nginx将设置$connection_upgrade变量进行升级。如果没有,它将设置为关闭。 这些变量允许我们在代理WebSocket请求时设置正确的标头。

接下来,找到包含listen 443指令的服务器块。 使用以下指令替换内容。确保注释掉或删除该块中的任何现有配置以避免冲突:

. . . server { listen 443 ssl; . . . location / { # try_files $uri $uri/ =404; proxy_pass ; include proxy_params; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_redirect off; proxy_http_version 1.1; proxy_buffering off; chunked_transfer_encoding off; proxy_read_timeout 86400; } . . . }

proxy_pass行告诉Nginx将此块之外的所有流量传递给我们之前定义的上游。接下来,我们在proxy_params文件中包含一些代理头定义,并根据之前的地图设置添加其他头。然后,我们调整一些其他特定于代理的设置,以确保WebSocket代理正常工作,并确保我们的组件可以有效地进行通信。

完成保存并关闭文件后。

测试并重新启动Nginx和Drone

我们的配置现已完成。我们只需启动或重启我们的服务即可实现配置。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsswg.html