我正在开发一个Drupal应用程序,计划在Amazon Elastic Beanstalk环境中进行托pipe。 基本上,Elastic Beanstalk通过启动基于预定义规则的其他Web服务器实例来自动扩展应用程序。 共享数据库正在Amazon RDS实例上运行,所有实例都可以正确访问。 问题是共享文件文件夹(网站/默认/文件)。 我们使用git作为SCM,通过执行$ git aws.push ,我们可以部署新版本。 在后台Elastic Beanstalk自动删除( $ rm -rf )环境中运行的所有服务器的当前代码库,并部署新版本。 计划是在分段环境中使用S3(s3fs)作为共享文件,在生产环境中使用NFS。 我们已经成功设置了环境,以便在重新启动后正确安装共享文件文件夹。 但… 问题在于,在这种设置中,在运行实例上部署新版本失败,因为$ rm -rf无法删除挂载的目录,结果整个环境停止运行,我们需要重新启动环境,真的是一个优雅的解决scheme 问题1是在这种部署中pipe理共享文件的正确方法是什么? 你正在运行这样的环境? 你是怎么解决这个问题的? 通过查看Elastic Beanstalk Hostmanager代码(Ruby),似乎有一种方法可以将我们的function(如果在预部署中挂载并在后部署中挂载)挂接到Hostmanager(/ opt / hostmanager / srv / lib / elasticbeanstalk / hostmanager /应用程序/ phpapplication.rb),但文件中定义的脚本(即/tmp/php_post_deploy_app.sh)似乎没有工作。 这可能是因为我们的Ruby技能是不存在的。 问题2是你设法以便携的方式(例如不更改核心Hostmanager文件)在Hostmanager中挂载你的function吗?
我是开发者的新手,我一直在努力将一个Python应用程序打包成一个RPM(使用python setup.py bdist_rpm),通过Yum部署到一个centos VM上。 厨师是用来pipe理虚拟机。 Python应用程序将在virtualenv中运行,作为持续部署过程的一部分。 如果RPM是智能且独立的,那么执行诸如创build/启动virtualenv环境,pip-安装所需的依赖关系,然后最终configuration一个init进程(在这种情况下启动virtualenv的uwsgi REST服务器进程)? 或者,如果Chef食谱pipe理构buildvirtualenv和pip安装依赖项,RPM自己做一个简单的“python setup.py install”来将我的Python模块加载到virtualenv的pythonX.Y / site-packages文件夹中? “yum install / reinstall”调用(通过自动化进程)的后续操作可以适用于这两种方法,但前者需要更复杂的RPM,这可能不是“最佳实践”,是正确的吗? 前者确实允许一个独立的安装,以后可以更干净地删除,并更好地分离开发人员(Python)和dev-ops(厨师)之间的关注。 请告知什么是“典型”完成。
我已经阅读了关于aws的零停机时间的文档,但似乎无法理解在这种情况下会发生什么? 我有一个在生产环境中运行的“红色” 我将环境复制为“蓝色” 我在我的应用程序中使用eb init来推送到称为蓝色的新环境。 我的新版本成功运行在蓝色环境中 我交换环境url(我没有这样做,害怕,我猜) 一段时间后,我的stream量被指示为蓝色,红色将显示零stream量监控。 现在的问题是, 如果我从命令行使用git aws.push ,它会推到红色还是蓝色? 如果推到红色,我有一个零宕机的过程。 如果它变成蓝色,这是否意味着我必须再次启动init? 如果我必须再次启动它意味着 破坏红色(旧)环境 将蓝色复制为红色 eb init再次用于红色环境 这似乎并不正确。 我可能会错过一些东西。 什么是正确的方法来做ebs零宕机? 我读了很多,但似乎不能得到这些观点。 谢谢!
我的Django项目运行在gunicorn上 。 有时加载一个页面(和oracle程序调用相关)需要很多时间。 服务器在几分钟内保持非活动状态时,会发生90/100。 我怎样才能解决这个问题? wsgi.py import os import site import sys from whitenoise.django import DjangoWhiteNoise # Add the site-packages of the chosen virtualenv to work with site.addsitedir('/new_esmart/esmart_env/lib/python2.7/site-packages') # Add the app's directory to the PYTHONPATH sys.path.append('/new_esmart/esmart2') sys.path.append('/new_esmart/esmart2/esmart2') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "esmart2.settings") # Activate your virtual env activate_env = os.path.expanduser("/new_esmart/esmart_env/bin/activate_this.py") execfile(activate_env, dict(__file__=activate_env)) from django.core.wsgi import get_wsgi_application application […]
如何通过networking远程镜像一台Mac而无需访问本机(无键盘)? 更新:selectnetworking启动盘后,我们可能会遇到重启过程中的问题,请参阅下面的编辑。 我们正在学习mac映像来pipe理一小部分mac构build机器(8 mac minis)。 这些机器被放在我们无法进入的房间里。 我们对这些机器拥有完整的pipe理权限,但是我们还没有制定出符合我们需求的成像stream程。 目标: 使用标准图像分发构build池环境更改 更改包括更新的iOS证书,configuration文件,XCode版本以及其他难以自动更改。 可以保存图像以捕获确切的环境,使旧版本可重复使用,例如,在生成新版本的同时,为实时版本提供修补程序。 对于图像自动化,我们希望成为: 能够从模板机器捕获图像,并将其存储在其他地方,如另一台Mac或networking上 能够将该映像远程应用到池中的其他计算机 能够应用没有本地访问的图像,尤其是没有按住组合键。 我们目前: 正在使用NetBoot和DeployStudio进行映像 专用一台机器全职成为“图像服务器” 捕获机器图像没有问题 可以使用NetBoot启动,但必须按住组合键才能使其工作 networking启动后似乎很好 编辑:本地networking引导可靠地持有Command-N。 select启动磁盘并重新启动不一致。 我们发现似乎十分之一左右的工作。 在成功的情况下,机器重新启动,显示苹果标志,PXE在networking上启动,图像加载并在整个过程中继续。 在故障情况下,屏幕保持黑屏,机器稍后重启。 这是令人费解的,但这可能表明我们有一个不同的问题需要解决。 感觉就像我们非常接近一个解决scheme,但是我们无法解决关键问题,这确实会导致我们的工作stream程出现问题。 有没有一种成像方法能够以这种方式与完全远程机器一起工作?
这可能听起来像一个非常愚蠢的问题,所以让我先说我想达到什么,然后继续我的问题,我如何设想这样的工作。 我试图实现完全无缝部署我们的Web应用程序到IIS(不中断用户或活动连接)。 我设想这个工作的方式是有两个根虚拟目录共享同一个站点。 根目录虚拟目录我的意思是IIS在内部创build并将其分配到每个站点或Web应用程序的根目录; 除了在这里我想有两个这样的根vdirs(每个绑定到自己的应用程序池,但都引用完全相同的应用程序从不同的文件夹)。 在正常的操作过程中,其中一个vdirs将不起作用。 在进行部署时,我会将新代码放到第二个(非活动)vdir所引用的另一个文件夹中,然后将其标记为活动状态。 我想要完成的是让IIS开始发送所有新的连接(请求同一站点)到新的代码,但保持旧的还活着和活动,直到所有剩余的连接到它死了(一些,如file upload,可能会长期运行)。 一旦所有滞留的连接都死掉,旧的vdir / app池将变为非活动状态,而第二个包含新代码的连接将成为唯一活动状态。 我希望这是有道理的。 如果不是这样,我的另一个尝试就是用一个例子来解释它。 — Web Site ("mysite.com") — Root VDir#1 (IIS Internal, App Pool: AppPool#1, Virtual Path: /, Physical Path: C:\inetpub\MySite.v1084\). ACTIVE — Root VDir#2 (IIS Internal, App Pool: AppPool#2, Virtual Path: /, Physical Path: NONE). INACTIVE 在部署期间,Root VDir#2将变为活动状态,其物理path将变为C:\ inetpub \ MySite.v1085。 这将是默认的vdir IIS将服务于所有新的连接。 […]
我在一个单独的networking上有大约十几台相当健壮的机器。 这个networking不是(不会,不能)连接到互联网。 我想在它们上部署OpenStack,以便它们可以用作一种内部云托pipe解决scheme。 这将是一种“原型环境”,所以虽然我可以容忍周围的事情有点粗糙,但主要目标仍然是使用机器完成工作,而不仅仅是搞乱OpenStack。 以下是我到目前为止的选项: 运行相关存储库的本地镜像,并安装基于脚本的安装解决scheme,如Alamo 3+。 我不完全确定如何找出所有相关的存储库,但我并不期望发现使用反复试验。 使用撬棍build立一个独立的ISO,或使用提供的一个 。 尽pipe我没有完全清楚这些应该没有互联网接入的工作。 使用Alamo 2.0 ISO,它使用较旧的Exeter版本的Openstack。 我确定我错过了其他十几个选项。 如果可能的话,我想远离商业供应商。 在努力,function和面向未来的方面,实现这个目标的最好方法是什么?
我对chef是新手,并计划在我们的生产环境中实施它。 我们正计划使用chef来维护系统状态/configuration以及应用程序部署。 在应用程序部署期间,部署不应该在群集中的所有主机上并行发生。 相反,部署必须以集合的forms发生,即在10个主机的集群中,首先2个主机必须被停止轮换,并且必须在那里完成发布,然后只有当发布成功完成时,才应该部署下一组主机。 这可以做chef吗?
我在appengine上使用nodejs。 星期二我们有一个非常稳定的应用脚手架,到了星期五,尝试部署后它完全被打破了。 我们对前端代码做了一些小的改动,但是我认为没有什么会阻止实例的旋转。 这里是重现的步骤。 gcloud –project "{appname}" preview app deploy 日志显示npm安装,容器构build等 挂起Updating service [default]… 5分钟 失败,错误。 错误:(gcloud.preview.app.deploy)错误响应:[13]启动虚拟机时超时。 应用程序代码可能是不健康的。 (准备好0/1,仍然在部署1)。 我已经尝试恢复存储库,当我们有稳定的部署,并没有帮助。 这让我觉得GCP上的东西坏了。 我试图删除所有当前版本,然后部署,但无济于事。
我们有超过一千个Mac客户端,偶尔会发出影响其中许多或全部(例如安装新软件,创build本地用户帐户或应用更新)的更改。 我想知道你用什么方法知道你的客户是最新的,一目了然 ,因为我们发现,当一些机器错过了更新,它反映在我们身上相当糟糕:) 发布更改:我指的是使用一个系统推出更改,如Casper,Puppet,radmind,Apple远程桌面,甚至是一个黑客一起ssh授权expect脚本。 至于“一目了然”,有两个主要的地方我会看(特别是如果从发布变化的系统的信息不是很明显): 走进电脑室,看着屏幕(甚至从远处看) 通过Apple Remote Desktop扫描实验室并查看四个自定义字段。 我发现简单的改变是改变login屏幕的背景 ,或者改变login窗口上的文本 。 什么可能会更强大将是一种方法来采取标准的桌面背景,并作出注释的副本(也许有一些点或文字,以表示已经发生的变化)。 [有谁知道如何做到这一点,或者我应该问它作为一个单独的问题,无论是在这里或在计算器上?] 另一个简单的改变是设置四个ARD字段中的一个,如下所示: defaults write /Library/Preferences/com.apple.RemoteDesktop Text4 "`date +%Y-%m-%d`" 那么,你怎么知道你的客户是最新的(或者,如果你知道怎么做,你想做什么?)