

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 工作主机设置和配置
<a name="worker-host"></a>

工作主机是指运行 Deadline Cloud 工作程序的主机。本节介绍如何设置工作主机并根据您的特定需求对其进行配置。每台工作器主机都运行一个名为*工作器代理*的程序。工作人员代理负责：
+ 管理工作人员的生命周期。
+ 同步分配的工作、其进度和结果。
+ 监控正在运行的工作。
+ 将日志转发到已配置的目的地。

我们建议您使用提供的 Deadline Cloud 工作者代理。worker 代理是开源的，我们鼓励您提出功能请求，但您也可以根据自己的需求进行开发和定制。

要完成以下各节中的任务，您需要具备以下条件：

------
#### [ Linux ]
+ Linux基于亚马逊弹性计算云 (Amazon EC2) 的实例。我们推荐亚马逊 Linux 2023。
+ `sudo`特权
+ Python 3.9 或更高版本

------
#### [ Windows ]
+ Windows基于亚马逊弹性计算云 (Amazon EC2) 的实例。我们建议Windows Server 2022。
+ 管理员对工作主机的访问权限
+ 为所有用户安装了 Python 3.9 或更高版本

------

## 创建和配置 Python 虚拟环境
<a name="python-virtual-env"></a>

Linux如果您已经安装了 Python 3.9 或更高版本并将其放置在您的 Python 虚拟环境中，则可以在上创建 Python 虚拟环境`PATH`。

**注意**  
启用Windows，必须将代理文件安装到 Python 的全局站点包目录中。目前不支持 Python 虚拟环境。

**创建和激活 Python 虚拟环境**

1. 以`root`用户身份打开终端（或使用`sudo`/`su`）。

1. 创建并激活 Python 虚拟环境。

   ```
   python3 -m venv /opt/deadline/worker
   source /opt/deadline/worker/bin/activate
   pip install --upgrade pip
   ```

## 安装 Deadline Cloud
<a name="install-worker-agent"></a>

设置 Python 并在上创建虚拟环境后，安装 Deadline Cloud 工作器代理 Python 软件包。Linux

### 安装工作器代理 Python 软件包
<a name="w2aac23c17c19b5"></a>

------
#### [ Linux ]

1. 以`root`用户身份打开终端（或使用`sudo`/`su`）。

1. 从 PyPI 下载并安装 Deadline Cloud 工作器代理包：

   ```
   /opt/deadline/worker/bin/python -m pip install deadline-cloud-worker-agent
   ```

------
#### [ Windows ]

1. 打开管理员命令提示符或 PowerShell终端。

1. 从 PyPI 下载并安装 Deadline Cloud 工作器代理包：

   ```
   python -m pip install deadline-cloud-worker-agent
   ```

------

当您的Windows工作主机需要长路径名（超过 250 个字符）时，必须按如下方式启用长路径名：

#### 为Windows工作主机启用长路径
<a name="long-path"></a>

1. 确保已启用长路径注册表项。有关更多信息，请参阅在 Microsoft 网站上[启用日志路径的注册表设置](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#registry-setting-to-enable-long-paths)。

1. 安装适用于桌面 C\$1\$1 x86 应用程序的Windows软件开发工具包。有关更多信息，请参阅Windows开发人员中心的 [WindowsSDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/)。

1. 在安装工作器代理的环境中打开 Python 安装位置。默认值为 `C:\Program Files\Python311`。有一个名为的可执行文件`pythonservice.exe`。

1. 在同一位置创建一个`pythonservice.exe.manifest`名为的新文件。添加以下内容：

   ```
   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
     <assemblyIdentity type="win32" name="pythonservice" processorArchitecture="x86" version="1.0.0.0"/>
     <application xmlns="urn:schemas-microsoft-com:asm.v3">
       <windowsSettings>
         <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
       </windowsSettings>
     </application>
   </assembly>
   ```

1. 打开命令提示符并在您创建的清单文件所在的位置运行以下命令：

   ```
   "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\mt.exe" -manifest pythonservice.exe.manifest -outputresource:pythonservice.exe;#1
   ```

   您应该可以看到类似于如下所示的输出内容：

   ```
   Microsoft (R) Manifest Tool
   Copyright (c) Microsoft Corporation.
   All rights reserved.
   ```

现在，工作人员可以访问长路径了。要进行清理，请删除`pythonservice.exe.manifest`文件并卸载 SDK。

## 配置 Deadline 云端工作器代理
<a name="worker-agent-config"></a>

您可以通过三种方式配置 Deadline Cloud 工作器代理设置。我们建议您通过运行该`install-deadline-worker`工具来使用操作系统设置。

工作器代理不支持在 Windows 上以域用户身份运行。要以域用户身份运行作业，可以在为运行作业配置队列用户时指定域用户帐户。有关更多信息，请参阅 Deadline [Cloud *用户指南中 Deadline Cloud* 队列](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/queues.html)中的步骤 7。AWS 

**命令行参数**-从命令行运行 Deadline Cloud 工作器代理时，可以指定参数。某些配置设置无法通过命令行参数获得。要查看所有可用的命令行参数，请输入`deadline-worker-agent --help`。

**环境变量** — 您可以通过设置以开头的环境变量来配置 Deadline Cloud 工作器代理`DEADLINE_WORKER_`。例如，要查看所有可用的命令行参数，可以`export DEADLINE_WORKER_VERBOSE=true`用来将工作代理的输出设置为详细。有关更多示例和信息，请参阅 `/etc/amazon/deadline/worker.toml.example` on Linux 或 `C:\ProgramData\Amazon\Deadline\Config\worker.toml.example` on Windows。

**配置文件**-安装工作器代理时，它会创建一个位于 `/etc/amazon/deadline/worker.toml` on Linux 或 `C:\ProgramData\Amazon\Deadline\Config\worker.toml` on 的配置文件Windows。工作器代理在启动时加载此配置文件。您可以使用示例配置文件（`/etc/amazon/deadline/worker.toml.example`开启Linux或开`C:\ProgramData\Amazon\Deadline\Config\worker.toml.example`启Windows）根据您的特定需求定制默认工作器代理配置文件。

最后，我们建议您在部署软件并按预期运行*后*为工作器代理启用 auto shutdown。这使工作人员队伍能够在需要时扩大规模，并在作业完成时关闭。自动缩放有助于确保您只使用所需的资源。要使由 auto Scaling 组启动的实例能够关闭，您必须将其`shutdown_on_stop=true`添加到`worker.toml`配置文件中。

**启用自动关机**

作为**root**用户：
+ 安装带有参数的工作器代理**--allow-shutdown**。

------
#### [ Linux ]

  输入：

  ```
  /opt/deadline/worker/bin/install-deadline-worker \
    --farm-id FARM_ID \
    --fleet-id FLEET_ID \
    --region REGION \
    --allow-shutdown
  ```

------
#### [ Windows ]

  输入：

  ```
  install-deadline-worker ^
    --farm-id FARM_ID ^
    --fleet-id FLEET_ID ^
    --region REGION ^
    --allow-shutdown
  ```

------

## 创建作业用户和群组
<a name="create-job-user-and-group"></a>

本节介绍代理用户与队列中`jobRunAsUser`定义的用户之间所需的用户和组关系。

Deadline Cloud 工作服务器代理应在主机上以代理专用用户身份运行。您应配置 Deadline Cloud 队列的`jobRunAsUser`属性，以便工作人员以特定的操作系统用户和组的身份运行队列作业。此配置意味着您可以控制作业拥有的共享文件系统权限。它还提供了作业和工作代理用户之间的重要安全边界。

**Linux工作用户和群组**

要设置本地工作人员代理用户和`jobRunAsUser`，请确保满足以下要求。如果您使用的是 Linux 可插拔身份验证模块 (PAM)，例如 Active Directory 或 LDAP，则过程可能会有所不同。

工作器代理用户和共享`jobRunAsUser`组是在安装工作器代理时设置的。默认值为`deadline-worker-agent`和`deadline-job-users`，但可以在安装工作器代理时对其进行更改。

```
install-deadline-worker \
    --user AGENT_USER_NAME \
    --group JOB_USERS_GROUP
```

命令应以 root 用户身份运行。
+ 每个组都`jobRunAsUser`应该有一个匹配的主组。使用`adduser`命令创建用户通常会创建匹配的主组。

  ```
  adduser -r -m jobRunAsUser
  ```
+ 的主组`jobRunAsUser`是工作代理用户的辅助组。共享组允许工作器代理在作业运行时向其提供文件。

  ```
  usermod -a -G jobRunAsUser deadline-worker-agent
  ```
+ `jobRunAsUser`必须是共享工作组的成员。

  ```
  usermod -a -G deadline-job-users jobRunAsUser
  ```
+ `jobRunAsUser`不得属于工作代理用户的主组。工作器代理写入的敏感文件归代理的主组所有。如果 a `jobRunAsUser` 属于该组，则工作器上运行的作业可以访问工作器代理文件。
+ 默认值 AWS 区域 必须与工作人员所属服务器场的区域相匹配。这应适用于工作人员的所有`jobRunAsUser`账户。

  ```
  sudo -u jobRunAsUser aws configure set default.region aws-region
  ```
+ 工作代理用户必须能够以. 的身份运行`sudo`命令`jobRunAsUser`。运行以下命令打开编辑器以创建新的 sudoers 规则：

  ```
  visudo -f /etc/sudoers.d/deadline-worker-job-user
  ```

  将以下内容添加到文件中：

  ```
  # Allows the Deadline Cloud worker agent OS user to run commands
   # as the queue OS user without requiring a password.
  deadline-worker-agent ALL=(jobRunAsUser) NOPASSWD:ALL
  ```

下图说明了代理用户与队列关联的`jobRunAsUser`用户和群组之间的关系。

![\[代理用户与队列中的用户之间关系的插图jobRunAsUser。\]](http://docs.aws.amazon.com/zh_cn/deadline-cloud/latest/developerguide/images/worker_users_and_groups.png)


**Windows 用户**

要使用Windows用户作为`jobRunAsUser`，它必须满足以下要求：
+ 所有队列`jobRunAsUser`用户都必须存在。
+ 他们的密码必须与队列`JobRunAsUser`字段中指定的密钥值相匹配。有关说明，请参阅 Deadline [Cloud *用户指南中 Deadline Cloud* 队列](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/queues.html)中的第 7 步。AWS 
+  代理用户必须能够以这些用户的身份登录。

## 保护您的工作人员主机
<a name="securing-worker-host"></a>

设置工作主机时，请遵循安全最佳实践来保护敏感信息并保持适当的访问控制。

### 配置日志文件夹权限
<a name="configuring-log-folder-permissions"></a>

工作器代理写入的日志文件可能包含来自主机配置脚本和作业执行的敏感信息。该`install-deadline-worker`命令使用安全权限创建日志目录。如果您需要在安装前手动创建目录，请使用以下过程来匹配服务管理队列使用的权限：

------
#### [ Linux ]

**要在上配置日志目录权限 Linux**

1. 创建日志目录：

   ```
   sudo mkdir -p /var/log/amazon/deadline
   ```

1. 将所有者和群组设置为工作代理用户：

   ```
   sudo chown -R deadline-worker:deadline-worker /var/log/amazon/deadline
   ```

1. 将权限设置为 750：

   ```
   sudo chmod -R 750 /var/log/amazon/deadline
   ```

   这些权限可确保只有工作代理用户和组才能访问日志文件，从而防止作业用户和其他未经授权的用户读取潜在的敏感信息。

------
#### [ Windows ]

**要在上配置日志目录权限 Windows**

1. 打开管理员 PowerShell 终端。

1. 创建日志目录：

   ```
   New-Item -ItemType Directory -Force -Path "$env:PROGRAMDATA\Amazon\Deadline\Logs"
   ```

1. 将限制配置 ACLs 为仅允许工作代理用户和管理员：

   ```
   $acl = Get-Acl "$env:PROGRAMDATA\Amazon\Deadline\Logs"
   $acl.SetAccessRuleProtection($true, $false)
   $acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) }
   $agentRule = New-Object System.Security.AccessControl.FileSystemAccessRule("deadline-worker", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
   $adminRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
   $acl.AddAccessRule($agentRule)
   $acl.AddAccessRule($adminRule)
   Set-Acl "$env:PROGRAMDATA\Amazon\Deadline\Logs" $acl
   ```

   这些命令限制只有工作代理用户和管理员组才能访问日志目录，从而防止作业用户和其他未经授权的用户读取潜在的敏感信息。

------