

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

# 在 Elastic Beanstalk 上使用 Procfile 配置自定义启动命令
<a name="go-procfile"></a>

要指定用于启动 Go 应用程序的自定义命令，请在源包根目录中包含一个名为 `Procfile` 的文件。

有关编写和使用 `Procfile` 的详细信息，请参阅 [Buildfile 和 Procfile](platforms-linux-extend.build-proc.md)。

**Example Procfile**  

```
web: bin/server
queue_process: bin/queue_processor
foo: bin/fooapp
```

您必须调用主应用程序 `web`，并在 `Procfile` 中将其列为第一个命令。Elastic Beanstalk 在环境的根 URL 上公开主 `web` 应用程序；例如，`http://my-go-env.elasticbeanstalk.com`。

Elastic Beanstalk 还会运行名称没有 `web_` 前缀的任何应用程序，但这些应用程序在您的实例外部不可用。

Elastic Beanstalk 希望从 `Procfile` 运行的进程一直运行。Elastic Beanstalk 会监控这些应用程序并重启所有终止的进程。对于短期运行的进程，请使用 [Buildfile](go-buildfile.md) 命令。

## 在 Amazon Linux AMI（在 Amazon Linux 2 之前）上使用 Procfile
<a name="go-procfile.alami"></a>

如果您的 Elastic Beanstalk Go 环境使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前），请阅读本节中的其他信息。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### 端口传递 — 亚马逊 Linux AMI (AL1)
<a name="go-procfile.alami.ports"></a>

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。

Elastic Beanstalk 配置 nginx 代理，使其在应用程序的 `PORT` [环境属性](go-environment.md#go-options)中指定的端口号上转发对应用程序的请求。您的应用程序应始终侦听该端口。您可以通过在应用程序中调用 `os.Getenv("PORT")` 方法访问此变量。

Elastic Beanstalk 使用 `PORT` 环境属性中指定的端口号作为 `Procfile` 中第一个应用程序的端口，然后对 `Procfile` 中的每个后续应用程序的端口号递增 100。如果未设置 `PORT` 环境属性，则 Elastic Beanstalk 使用 5000 作为初始端口。

在前面的示例中，`web` 应用程序的 `PORT` 环境属性为 5000，`queue_process` 应用程序使用 5100，`foo` 应用程序使用 5200。

您可以通过 [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment) 命名空间设置 `PORT` 选项从而指定初始端口，如下例所示。

```
option_settings:
  - namespace:  aws:elasticbeanstalk:application:environment
    option_name:  PORT
    value:  <first_port_number>
```

有关为应用程序设置环境属性的更多信息，请参阅 [选项设置](ebextensions-optionsettings.md)。