适用于:“运行 Python 3.4 的 64 位 Amazon Linux 2015.09 v2.0.6”,来自私有 bitbucket 存储库的依赖项。可能会针对github等进行修改。
将您的私有依赖项添加到 piprequirements.txt:
-e [email protected]:account_name/dependency-name.git#egg=dependency-name
生成 SSH 公钥和私钥(如何可以在其他地方找到)这样你就有了 id_rsa(私有)和 id_rsa.pub(公共)密钥文件。
在 bitbucket.org 项目选项卡上, find settings并进入“部署密钥”。使用表单设置您的公共 SSH 密钥 there.
上传两个生成的密钥(只要私人就足够了)在 S3 存储桶上使用亚马逊AWS控制台:
bucket-with-keys/bitbucket/:
- id_rsa
- id_rsa.pub
Where 带钥匙的桶/bitbucket- 是[BUCKET_NAME]/[PATH]。
添加包文件到您的项目:project_name/.ebextensions/packages.config
packages:
yum:
git: []
添加配置文件到您的项目:project_name/.ebextensions/03-pip-install-from-bitbucket.config:
files:
"/root/.ssh/config":
owner: root
group: root
mode: "000600"
content: |
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
"/root/.ssh/known_hosts":
owner: root
group: root
mode: "000644"
content: |
#
# paste output of `ssh-keyscan -H github.com` here
#
commands:
01-command:
command: aws s3 cp --recursive s3://bucket-with-keys/bitbucket/ /root/.ssh
02-command:
command: chmod 600 /root/.ssh/id_rsa
如果您修改此文件,请记住:
- 命令按字母顺序执行,因此“01-”在“02-”之前开始,即使您更改其顺序也是如此。
- 文件名也遵循该规则。
转到 AWS 控制台 IAM(身份和访问管理)“策略”选项卡并查找AmazonS3完全访问列在清单上并附上aws-elasticbeanstalk-ec2-角色。
如果您找不到策略,您可以创建如下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
寻找 ”创建并附加您的第一个客户托管策略“如果需要,可以提供教程。这项政策相当开放,建议创建一个更狭窄的政策......aws-elasticbeanstalk-ec2-角色是 Elastic Beanstalk 默认创建的角色,但您可以使用自己的角色,只要使用 CLI 工具设置即可EB配置下:“IamInstanceProfile:aws-elasticbeanstalk-ec2-role”
现在您可以创建您的环境 with ebCLI 工具:
eb create project_name-prod-env \
--instance_type t2.micro \
--tier webserver \
--region eu-west-1 \
--cname project_name-prod-env \
--keyname identifier-of-ssh-key-accessed-from-console-here \
--platform "64bit Amazon Linux 2015.09 v2.0.6 running Python 3.4"
现在应该可以工作了!
如果某事出了问题您可以调试 SSH 文件是否到达其位置:
eb ssh
sudo su
ls -la /root/.ssh/
并在 AWS 控制台或直接在实例上检查日志:
eb ssh
sudo su
less /var/log/eb-activity.log
尝试以 root 用户身份从 project_name/.ebextensions/03-pip-install-from-bitbucket.config 手动执行命令,但按照它们在日志文件中显示的方式,使用开关获取更详细的输出。