因此,只要我将它放在比micro更大的实例上,我的应用程序就会安装和部署。
当我在micro上部署时,当composer尝试安装时,我得到一个关于无法分配足够内存的php错误。所以我做了一些谷歌搜索,似乎你可以在启动时创建交换文件/磁盘/创建实例这里有两个教程one two
这些可能已过时,所以第一个问题是否仍可以这样做?
第二个问题是如何创建.ebextensions文件以在部署时实现?
这是我的尝试,但不足为奇,因为我对此知之甚少。
commands:
command:dd if=/dev/zero of=/swapfile bs=1M count=3072
command:mkswap /swapfile
command:swapon /swapfile
答案 0 :(得分:10)
没有尝试创建交换,因此我无法回答您的第一个问题。但请注意,.ebextensions
文件是YAML文件。这意味着空格和语法非常对于正常工作的东西非常重要......
您的示例的语法有点偏。应该是(见here):
commands:
000_dd:
command: dd if=/dev/zero of=/swapfile bs=1M count=3072
001_mkswap:
command: mkswap /swapfile
002_swapon:
command: swapon /swapfile
命令按字母顺序执行,因此在数字前加上一个数字是个好主意。
确保您能够登录EC2实例,并密切关注/var/log/cfn-init.log
文件。这将告诉你会发生什么。什么没有按预期工作......; - )
答案 1 :(得分:4)
在计算机上运行Composer需要相当多的资源,尤其是RAM。
我已经了解到在EC2微型实例上使用交换空间会适得其反,因为a)它是缓慢的交换空间而b)使用它会对IO进行计数,而IO也需要支付,以便在下个月获得意外账单
部署使用Composer的任何内容的正确方法是在将代码部署到计算机之前安装所有依赖项,然后一次性同步。这样你就可以独立于实例的有限资源,因为你可以使用一些强大的部署机器(我打赌你的开发机器可以做到)。您还可以防止因为某些必需的库托管已关闭(曾经历过Github停机时间?),因为您在部署服务器而不是实时计算机上检测到这一点。此外,Composer将缓存下载的任何内容,这些内容也可能超出微实例上的有限资源 - 或者至少将其用于非生产性内容。
答案 2 :(得分:3)
您可以创建预部署挂钩来通过ebextensions设置交换。
在项目根目录中创建一个.ebextensions
文件夹。在该文件夹中,使用以下内容创建文件0001_setup_swap.config
:
commands:
create-pre-dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/pre"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/0001_setup_swap.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
SWAPFILE=/var/swapfile
SWAP_MEGABYTES=2048
if [ -f $SWAPFILE ]; then
echo "Swapfile $SWAPFILE found, assuming already setup"
exit;
fi
/bin/dd if=/dev/zero of=$SWAPFILE bs=1M count=$SWAP_MEGABYTES
/sbin/mkswap $SWAPFILE
/sbin/swapon $SWAPFILE
echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
/bin/chown root:root $SWAPFILE
/bin/chmod 600 $SWAPFILE
有关详细信息,请参阅以下内容:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04,http://steinn.org/post/elasticbeanstalk-swap/