Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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
Php 如何使用cli将项目上传到Amazon ECS_Php_Amazon Web Services_Docker_Amazon Ec2 - Fatal编程技术网

Php 如何使用cli将项目上传到Amazon ECS

Php 如何使用cli将项目上传到Amazon ECS,php,amazon-web-services,docker,amazon-ec2,Php,Amazon Web Services,Docker,Amazon Ec2,我正在学习如何自动化我的项目交付。 我能够创建集群,但我必须将文件上传到EC2实例 现在我正在运行这些命令 ecs-cli up --keypair my_keypair --capability-iam --size 1 --instance-type t2.micro --force 这将创建集群。 然后我为php和nginx创建docker容器 ecs-cli compose up 这将创建没有任何文件的容器 现在,如果我使用SSH手动登录到EC2实例并创建phpinfo.php文件,

我正在学习如何自动化我的项目交付。 我能够创建集群,但我必须将文件上传到EC2实例

现在我正在运行这些命令

ecs-cli up --keypair my_keypair --capability-iam --size 1 --instance-type t2.micro --force
这将创建集群。 然后我为php和nginx创建docker容器

ecs-cli compose up
这将创建没有任何文件的容器

现在,如果我使用SSH手动登录到EC2实例并创建phpinfo.php文件,那么我可以在浏览器中查看它,告诉我所有设置都是正确的。但这是手动步骤。如何自动推送项目文件

也许我不明白这是怎么回事,我走错了方向。 我看到的所有教程都使用现成的wordpress图像。我没有部署wordpress映像。我想部署phpinfo.php(例如)

谢谢

version: '2'

services:
  nginx:
      image: tutum/nginx
      cpu_shares: 50
      mem_limit: 134217728
      ports:
          - "80:80"
      links:
          - phpfpm
      volumes:
          - /home/ec2-user/nginx/conf:/etc/nginx/sites-available/
          - /home/ec2-user/nginx/conf:/etc/nginx/sites-enabled/
          - /home/ec2-user/public:/var/www/html
  phpfpm:
      image: php-nginx-fpm:7.0.19-37
      cpu_shares: 50
      mem_limit: 134217728
      ports:
          - "9000:9000"
          - "3306:3306"
      volumes:
          - /home/ec2-user/public:/var/www/html

你可以用scp。这使用ssh以一种更易于自动化的方式复制文件

scp file <sshtarget>:/path/to/file
scp文件:/path/to/file
如果您愿意更改部署过程,可以改用CloudFormation模板


描述如何部署已包含文件的ec2实例。(查看步骤2下的“文件”部分)

您可以使用scp。这使用ssh以一种更易于自动化的方式复制文件

scp file <sshtarget>:/path/to/file
scp文件:/path/to/file
如果您愿意更改部署过程,可以改用CloudFormation模板


描述如何部署已包含文件的ec2实例。(请参阅步骤2下的“文件”部分)

因为您使用的是ECS—弹性容器服务—您需要首先对应用程序进行Dockerize,然后将生成的Docker映像上载到:弹性容器注册表

为此,您需要进入EC2容器服务->注册表并为您的容器创建一个存储库。然后进行配置

在源代码中,您需要有一个构建容器的Dockerfile:从基本图像开始,然后添加源代码到容器中

一旦你有了它,你要么需要让你的构建服务器构建并推送docker容器,要么就从你的机器上手动完成

您将设置为使用ECR中的docker映像,当您将docker推送到ECR时,您将“更新”任务定义,以便它获取最新版本的docker容器


您可以在启动时通过aws cli、通过web控制台本身(单击)或通过一些基础架构配置工具(如Cloudformation或Terraform)设置ECS和ECR。无论您需要什么样的浮动方式…

因为您使用的是ECS(弹性容器服务),所以您需要首先对应用程序进行Docker化,然后将生成的Docker映像上载到:弹性容器注册表

为此,您需要进入EC2容器服务->注册表并为您的容器创建一个存储库。然后进行配置

在源代码中,您需要有一个构建容器的Dockerfile:从基本图像开始,然后添加源代码到容器中

一旦你有了它,你要么需要让你的构建服务器构建并推送docker容器,要么就从你的机器上手动完成

您将设置为使用ECR中的docker映像,当您将docker推送到ECR时,您将“更新”任务定义,以便它获取最新版本的docker容器


您可以在启动时通过aws cli、通过web控制台本身(单击)或通过一些基础架构配置工具(如Cloudformation或Terraform)设置ECS和ECR。无论你需要什么,都可以通过使用S3 bucket轻松实现。请遵循以下步骤:

  • 在S3中创建一个bucket,并使用console或以下命令将代码从本地文件夹上载到S3

    aws s3同步。s3://mybucket

  • 现在在AWS中创建一个EC2角色,并添加S3读取权限

  • 将此角色分配给EC2实例。现在,您的EC2拥有下载代码的权限
  • 只要您想在EC2中下载代码,就可以使用下面的命令下载(您也可以在引导脚本中包含此命令)

    aws s3同步s3://mybucket


  • 好的方面是s3sync命令只上传/下载增量文件。因此,如果您只修改一个文件并执行上述命令,那么只有修改后的文件才会上载到S3并下载到EC2。

    您可以通过使用S3 bucket轻松实现这一点。请遵循以下步骤:

  • 在S3中创建一个bucket,并使用console或以下命令将代码从本地文件夹上载到S3

    aws s3同步。s3://mybucket

  • 现在在AWS中创建一个EC2角色,并添加S3读取权限

  • 将此角色分配给EC2实例。现在,您的EC2拥有下载代码的权限
  • 只要您想在EC2中下载代码,就可以使用下面的命令下载(您也可以在引导脚本中包含此命令)

    aws s3同步s3://mybucket


  • 好的方面是s3sync命令只上传/下载增量文件。所以,如果您只修改一个文件并执行上述命令,那么只有修改后的文件才会上载到S3并下载到EC2。

    为什么要否决投票?我面临一个问题,为什么要否决投票?我面临一个问题,需要帮助,但这是标准流程吗?这就是DevOp专家部署项目的方式吗?我想知道哪个对我更重要。我可以很容易地编写一个复杂的shell脚本,它可以实现所有功能,但我需要知道专业人员是如何做的,所以不要忘记,EC2实例的ip地址可以更改。毕竟它是无状态的。@Sallu有可能将应用程序容器化吗?或者你愿意改用CloudFormation吗?在我的工作中,我们在构建管道中使用脚本的组合(比如jenkins)