如何在服务器上安装和pipe理软件?

这可能是一个完整的答案填满整本书的问题; 但我不是一个专业的ITpipe理员,所以一个概述/介绍将是有帮助的。

假设我必须pipe理运行Apache,Django的一些Debian服务器(托pipe服务提供商的虚拟服务器),一些自行编写的用于pipe理的PHP脚本,用于状态监视的Nagios / NRPE,用于私有file upload的SFTP。 服务器应主要提供SFTP上传的静态文件; Django将被用于两个小dynamic网站。

我应该从哪个来源安装Apache,PHP,Django,NRPE,Nagios插件等软件? 我可以想到这些可能性:

  • 使用官方的Debian软件包
  • 从官方TGZ自行编译,安装在/ usr / local中
  • 下载并通过git clone从上游存储库安装到/ opt或主目录中
  • 安装PIP,Gem,CPAN(在可能的情况下)
  • 使用Docker镜像

我应该使用哪些? 还有没有列出的其他有用的可能性? 评估所有这些来源时,我应该使用哪些指导方针? 是否有select最佳安装方法的常见做法?

在我看来,正确的顺序是:

  1. 使用官方包pipe理工具和官方回购
  2. 使用官方的包pipe理工具和非正式的回购,仔细审查可靠性和稳定性
  3. 而已。

你不想手动安装软件。 它非常迅速地变成一个疯狂的维护负载(你必须每天检查所有的项目页面,看看是否有一些新的bug影响到你,每次你必须安排重build,并推出)。 安装你刚从互联网上取得的二进制文件甚至更疯狂; 至less在非官方的回购中,你有你的软件包pipe理工具的签名条款依赖于:你不能确定随机select的一组PHP的RPM来自remi的回购,但你可以肯定,你安装的所有版本从这些回购来自同一个地方。

foo是一种特殊的雪花,总有反驳的观点。 这只是你的开发人员在1.4.5.a3_345.21z版本中急需的libfoo 。 实际上,这有时是真的。 但是,开发者所做的任何事情都不会像开发者那样经常发生,你的回击应该是强大的,所以他们在正规渠道之外获得libfoo支持所需的痛苦与你支持它的痛苦是相当的。

即使如此,你应该打包,并有一个公司内部的存储库,使包可用。

尽pipeMadHatter在回答最初的问题方面做得非常出色 ,但我想回答这个问题

那么主要可用作Gem或PyPy软件包的软件呢? 如果我理解正确,我应该尽量避免使用这种软件,或者使用Debian软件包(即使它比较老)。

随着

还有没有列出的其他有用的可能性? 评估所有这些来源时,我应该使用哪些指导方针?

从原来的问题。

首先,你可能应该使用发行版提供的软件包。 这将为您提供可靠的安全补丁和错误修复。 这也适用于gem和python包。 很多都可以通过上游或其他志愿者项目打包。 如果超出可用软件包的范围,请使用语言级别的打包程序,但要将其保存在与系统二进制文件不同的目录中,并告诉应用程序添加该库目录。

其次,你是否可以忍受一个较旧的包装可能是一个艰难的决定。 请记住,跟上最新的软件是很多工作。 如果你真的想走上这条路,请阅读jenkins或Travis等持续集成系统。 当你有这么多的移动目标时,唯一的方法就是不断地testing每一个新的迭代。

既然你说你正在使用“托pipe服务提供商的虚拟服务器”,那么记住它可能是件好事:它可能会在任何时候死亡。 您可能需要在短时间内重build。 (这只是云中的生活。)或者,如果你的组织真的成功,你可能会决定build立更多的。 这导致备份configurationpipe理 。 备份是一个好主意,但我会让其他人告诉你所有关于它们的信息。 我希望您考虑configurationpipe理来安装您的软件。

有各种各样的configurationpipe理系统 – cfengine , 傀儡 , 厨师和盐是例子 – 但为了方便小规模入门我肯定会推荐适合您的情况。 你可以编写shell脚本来安装你的各种types的软件,但是让它更容易,更简洁。

首先,我可以使用apt-get安装一些系统软件包:

 --- - name: install deb's needed by users apt: name={{ item }} state=present with_items: - git - git-svn - ansible - tmux - screen - whois - traceroute - mtr - curl - wget - pcregrep 

然后安装一个Ruby的gem:

 - name: install vagrant 1.0 gem: name=vagrant version=1.0 state=present 

和一个python包:

 - name: Install (Bottle) into the specified (virtualenv), using Python 2.7 pip: name=bottle virtualenv=/my_app/venv virtualenv_command=virtualenv-2.7 

如果您遵循了我们用于aptwith_items语法,那么您可以在其中任何一个安装多个点或gem。 你提到安装一个PHP应用程序。 希望你把它存储在像github这样的源代码控制中,所以你可以使用git模块来安装它。 随着您继续制作完整的剧本,您最终可以轻松地重新安装系统,而无需在脑海中保留大量模糊的细节。