部署 部署一个这样的服务器,都需要做哪些工作?

nightire · 发布于 2013年1月18日 · 最后由 lips 回复于 2015年12月19日 · 7116 次阅读
1573

我在公司申请了一台机器,目前我需要在这台机器上做以下事情:

  1. 安装一个 linux 操作系统,打算上 CentOS;
  2. 部署一套可以用来运行 Ruby on Rails 应用的模拟生产环境;
  3. 部署一套基于 Git 的源代码版本控制系统,打算用 GitlabHQ;
  4. 部署一套持续集成系统,打算用 Jenkins;

于是我们可以使用这台机器来管理现有的产品代码,同时把它作为一个 sandbox 来实验一些新东西。我们团队是第一次使用 Git 和 CI,以前从未有过相关的经验,所以在这个过程中我有一些问题不知从何下手:

  1. 安装和调试上述的工具我应该没有问题,我在本地(一台MacBook Pro)上已经试过一遍了;但是我不知道这些选择是否合适?我们在开发中会用到两种语言平台:Java 和 Ruby,目前是以 Java 为主,Ruby 作为技术转型的目标。

  2. 目前这台机器安装在局域网内,我们在公司内部去访问的话应该没什么问题。但如果我们想通过外网访问(比如通过 SSH,以前没弄过),不知道需要做哪些事情(服务端+客户端)?

  3. 请教一下搞过上述工具的高手,有什么经验和建议可以分享的吗?

现在机器刚到还是干净的,我想在正式动手前做好预习功课,所以还请各位不吝赐教,谢谢!

共收到 57 条回复
207
blacktulip · #1 · 2013年1月18日

RH 系的发行版跑 Rails 估计坑会有点多 ... 建议用 Debian 系,Ubuntu LTS 什么的

1573
nightire · #2 · 2013年1月18日

#1楼 @blacktulip 谢谢。选择 CentOS 是公司的要求,因为我们外包的产品服务器上运行的是 CentOS。对我们团队来说,只要不是不可能坑点多一点倒也可以接受,我们可以去攻关嘛~不过还是谢谢你的建议,如果 CentOS 实在太坑爹,我们再考虑 Ubuntu,这事情我们有心理准备,没指望一次就搞好。

96
jonny · #3 · 2013年1月18日

#1楼 @blacktulip 有什么坑?

4楼 已删除
172
ibachue · #5 · 2013年1月18日

楼主你要弄个ESXi虚拟机了,否则拿这种机器作实验太危险了。

1573
nightire · #6 · 2013年1月18日

#5楼 @iBachue 我不明白你的意思,危险是什么意思?这个基本上就是我们的试验用机器,不是产品服务器,不怕折腾的。

172
ibachue · #7 · 2013年1月18日

#6楼 @nightire 在我看来你这个服务器做三件事 1。QA环境 2。Git服务器 3。CI系统 这个已经比普通的服务器职责多多了,如果出问题,可能对工作影响很大,和实验环境完全隔离比较合理。

1573
nightire · #8 · 2013年1月18日

#7楼 @iBachue 哦,是这个意思,我明白了。我可能没说清楚,这三件事到目前为之我们都是第一次做,都是实验性质的。这台机器其实就是用来折腾这三样事情的,让大家逐渐适应之后,我们会考虑把它们都分离开或是别的策略。在此之前,我们会对产品代码另外按照旧有的方式做管理,这些东西暂时不会并入到实际的开发过程当中。

所以我们现在的问题是怎么做,而不是考虑风险。只有先搞明白怎么做了,才会放心大胆的并入到真实的工作环境中去。

另外,做实验沙盒这件事情是可选的,并不一定非要和这三件事搞到一起。

现实情况是,我们也希望有足够的资源把这些事情都分开,一件一件做好,奈何资源不允许啊。在你没有做出来让上面看到成果之前,申请一台机器都费尽周折……

202
xds2000 · #9 · 2013年1月18日

@nightire

  1. 环境安装完后,考虑Pupet对系统配置做一下管理。
  2. 外网直接SSH都是应该禁止的行为。如外网需要演示,你完全可以到EC2上开一个机器,使用Pupet部署一下就可以实现你的需求。
244
fsword · #10 · 2013年1月18日

做CI的话,我关心三个问题

  • 从零开始,完整的环境准备过程是否可复制
  • 各种验证环节是否自动
  • 配置项都收集全了没有
1573
nightire · #11 · 2013年1月18日

#9楼 @xds2000 哦,这样啊。倒不是为了演示,而是有时候出差了需要远程管理。外网禁止 SSH 访问这个是必须的?大家都是这样的吗?那为啥我们的产品服务器都允许 SSH 访问呢?

我现在的疑惑是,用客户端 SSH 访问一台服务器不是问题,但是搞台服务器能做到让客户端来访问,这件事情我没做过,不知道在服务器上需要做哪些工作才可以?需要一点方向上的指导。或者说,这件事情本来就很简单,不需要额外做什么?

207
blacktulip · #12 · 2013年1月18日

#11楼 @nightire 额,不会吧...... 顶多能让你 VPN 到内网然后 SSH 上去,外网直接 SSH 比较有隐患。

1573
nightire · #13 · 2013年1月18日

#12楼 @blacktulip 是这样的啊?没做过网管不清楚,我是问的我们网络管理员,他告诉我可以。或许他以为我知道先 VPN 到内网,所以就没细说。那是我的错。

那么按照你说的,正确的做法是先配置 VPN,保证能通过它访问到内网,然后再 SSH 上去,对吧?

这些事情对我来说真的挺陌生。比如说,我有一台 VPS,我平时就是直接 SSH 上去捣腾的,所以我以为都是这样来远程管理服务器的。那这么说来,我们在外购买的 VPS 允许直接 SSH 上去都是不好的做法了?

96
jimrokliu · #14 · 2013年1月18日

大胆去做,进了坑再来问。不过一次折腾这么多东西我觉得有点冒险,例如git,不如先租个github的服务,先让团队过度到git上。剩下的循序渐进。

96
bhuztez · #15 · 2013年1月18日

#14楼 @jimrokliu git也冒险?这可是连Server都不需要搭的就可以试的工具啊,比SVN容易太多了啊...

243
Saito · #16 · 2013年1月18日

需要的话我可以分享一个 Chef Solo 的 Java 应用环境方案.

包括 oracle-java nginx jetty maven mysql. ( CentOS based

Gitlab 本身也有 debian 系的 Chef Solo 用.

Jenkins 如果用 debian 的话可以直接 sudo apt-get install xx

CentOS 悔一生啊..

96
jimrokliu · #17 · 2013年1月18日

#15楼 @bhuztez 我想的比较复杂,不了解原来的团队用什么操作系统。

96
zhangjinzhu · #18 · 2013年1月18日

如果外网不能直接访问这台机器, 要做 ssh forward之类的让外部访问

101
daqing · #19 · 2013年1月18日

CentOS 一定要选最新的 6.3 版本。

1573
nightire · #20 · 2013年1月18日

#14楼 @jimrokliu 呵呵,胆子是没有问题的,问题也不在胆子上,我只是想做一下功课。本来我是向公司推荐 Github 的,但是上头不让,除非我们本地打一个类似的服务,所以我选了 GitlabHQ。

1573
nightire · #21 · 2013年1月18日

#16楼 @Saito 所以,用 Debian 系会比较好对吧。

243
Saito · #22 · 2013年1月18日

#21楼 @nightire 是的, 妥妥的 Ubuntu Server 12.04.

165
kenshin54 · #23 · 2013年1月18日

CentOS真的很折腾,为啥一定要搭建GitlabHQ,直接使用git不行么?

96
jimrokliu · #24 · 2013年1月18日

为了少折腾,我建议还是先从ubuntu LTS开始,毕竟时间也是金钱,团队早一天投入新环境不比解决了几个坑更有价值。

1573
nightire · #25 · 2013年1月18日

#23楼 @kenshin54 我们有几个客户想用类似 Github 那样的服务,可以把项目管理和 Git 整合起来。Github Enterprise 人家嫌贵,希望我们能帮助他们部署开源的类似产品,同时我们自己的产品是一个企业内部的知识管理和交流系统,客户希望这个系统和 GitlabHQ 这样的工具整合起来,方便客户的客户提交 Issue -> 进入 GitlabHQ -> 开发

大致就是这样的意思,当然我们也可以使用 Redmine 之类的东西,和 Git 整合也没有问题。但是客户不喜欢,觉得那样的东西太复杂,倒是 Github 很符合他们的胃口,简单,好用。

165
kenshin54 · #26 · 2013年1月18日

#25楼 @nightire 客户也要用,那其他CI,模拟production环境也都往上扔不太好吧

1573
nightire · #27 · 2013年1月18日

#26楼 @kenshin54 这个我说过了,CI以后肯定是要分离出去的,那是我们自己用的。问题就在于我们现在没有足够多的独立资源去做这件事情,公司在没有看到实际的东西之前不会给予资源上的支持。我们是刚起步的小团队,没有那么好的条件。现在有一个机器可以折腾,而且也不会立刻用于正式开发,所以我们当下的目标就是把这几件事情都做一遍,只有我们自己先搞明白了,才有可能获得进一步的支持。

1573
nightire · #28 · 2013年1月18日

#26楼 @kenshin54 另外,你可能理解错了,用户要用,但不会用在这台机器上,客户有自己的服务器。我们只是先做整合开发,把需求满足之后自然会把这套东西拆开了部署到客户那里。我们自己产品的版本管理是有独立的服务器的。

145
suupic · #29 · 2013年1月18日

#1楼 @blacktulip #4楼 @kgen #19楼 @daqing

CentOS 跑ruby或者java或者CI的那些东西完全不会有任何问题

#2楼 @nightire 从外网访问,只需要在那些服务前加装nginx即可 chef、puppet可以在有余力的时候上,刚开始并不是必须的。

1573
nightire · #30 · 2013年1月18日

#29楼 @suupic 嗯,我认为你说的有道理,我没打算搞那么复杂,遇到些坑什么的对我而言也不是什么大问题。我还是先一点点做吧,遇到具体的问题再问。

谢谢。

207
blacktulip · #31 · 2013年1月19日

#29楼 @suupic 没说有问题,肯定能跑, Linux 怎么都能折腾出来,只是说遇到的问题会比较多,能找到的帮助比较少

32楼 已删除
145
suupic · #33 · 2013年1月19日 1 个赞

#31楼 @blacktulip #32楼 @kgen CentOS衍生自Redhat,而Redhat是业界标准 CentOS yum源更新不是很及时,但这是出于系统稳定性考虑,实际遇到的问题比ubuntu少的多 ubuntu才是另类,包是够全,apt安装是够方便,然而一旦遇到问题就是个坑

做开发的话推荐ubuntu,但是生产环境部署还是推荐CentOS

122
lidashuang · #34 · 2013年1月19日

刚用 cento os 6.3 部署,感觉还是不错的。 没什么大坑

2511
as181920 · #35 · 2013年1月19日

centos,ubuntu都有用,还好吧。主要就是rmagick能依赖多的插件可能需要找到合适的包。rails本身部署都是ok的。 git刚开始直接用吧,确实需要功能再上web页面。 远程ssh一开始还好,风险不是特别大,如果不是安全保密特别重要的项目。 jenkins主要是它本身的配置复杂点,这个工具本来就不小,不过在centos上ok,我们以前也在centos上部署jenkins。 既然是测试阶段,大胆上去试,一定的坑和经验也是必要的(除非真的没有时间),大不了真的商用前从系统开始干净再装一次。

36楼 已删除
3210
taojay315 · #37 · 2013年1月19日

again? 为什么讨论怎么用CentOS的问题 ,wait a minute,是讨论怎么在CentOS上搭建环境的问题,会演变成R和D的争执的。。。 永远不会有结果的。。。

270
hysios · #38 · 2013年1月19日

@nightire 我们也用的是 CentOS 没什么太大的问题,反正都能搞定

145
suupic · #39 · 2013年1月19日

#36楼 @kgen 你能想像占据企业级数据库市场最大份额的Oracle并不支持"业界标准"的Debian/Ubuntu吗?

40楼 已删除
41楼 已删除
207
blacktulip · #42 · 2013年1月19日

#41楼 @kgen 其实折腾折腾也没啥坏处,楼主用 CentOS 有什么心得记得总结一下发出来看看。

145
suupic · #43 · 2013年1月19日

真是太无聊了,讨论归讨论,不知道咋就能随便找出些定语埋汰人 有些人从版本6开始用,并且目前还在专职运维大型网站

1107
jasl · #44 · 2013年1月20日

debian不才是以软件包老但稳健著称的么。。。我倒觉得rhel有点图样了。。ubuntu不能算标准的debian吧 用centos 5/6 配合rvm 没有任何问题

96
terrywang · #45 · 2013年1月21日

其实 CentOS 没那么烂,只是多数 Ruby / RoR 应用的文档都是在 Debian / Ubuntu 上部署(比如你要用的 GitLab 就是),要解决依赖比较麻烦而已(包的名字不同)有经验的 SA / DevOps 处理一下不会花太多时间。

很多人推荐 Ubuntu Server / Debian 的原因是直接跟着文档做,可以节省时间少走弯路。用什么发行版完全是自己的选择。

@suupic 实际上 Oracle Database 10g XE 是有 .deb 包的,不是 Oracle 不支持,是不想支持。事实上 Oracle 的所有产品在所有发行版上都可以装上,只是出问题人家不给你支持,不给你 fix bug 出 patch 罢了。如果你要跑中间件和 Oracle Database 那就用 RHEL / Oracle Linux (免费升级包 errata 还有 UEK2 等一些列好处)好了,我个人是不推荐 CentOS 的。

@jasl Debian 有三个分支 stable / testing / unstable (sid) 老而稳定是针对 stable 的,sid也算是半个滚动更新了 -_-z

202
xds2000 · #46 · 2013年1月21日

如果想用免费的企业版OS系统,Ubuntu Server是个不错的选择。Debian没厂家支持,但历史悠久,你如果一直都用它,就应该用这个系列。商业版系统OS,你可以选择RedHat RHEL 6。

686
jhjguxin · #47 · 2013年1月21日

各位 继续 这帖子 很不错 我关心的时候 大家用到了些什么,以及这些能够做些啥 收藏了先

96
neocanable · #48 · 2013年1月23日

没有发现centos有什么问题,测试的话ubuntu server 够了就

96
eiya · #49 · 2013年1月23日

真是碰巧,这几样东西我最近这一周内都搭过: centos 6.3,gitlab 4.1,jenkins 1.497(498改了加密格式) 楼主有兴趣可以联系我. 用centos是因为习惯了... 还有,gitlab是架在公网的,可以参照http://www.anemone.ws/article-1-1.html 站短admin申请。

96
woaigithub · #50 · 2013年1月24日

搞成虚拟机吧,方便出问题之后的。。。

657
tonyseek · #51 · 2013年1月25日

@kgen 你说 CentOS 是坑又不说哪里是坑,如果单单 Ruby 版本问题为什么不用可选源为什么不用 RVM?

96
Iacob · #52 · 2013年1月29日

曾经的CentOS用户表示,虽然我不知道@kgen说了什么,但CentOS确实是个坑,不管它的用户多么的多,套件多么地符合商业策略,但它本质上就是个坑,而且是整个Linux操作系统的高端黑,我现在见了CentOS恨不得绕道走,着不起这急,你在CentOS上面着再多的急,你的收入也不会因为你在CentOS上着急了而多一分钱

时间不等人,CentOS就让它去吧

1205
mjf429 · #53 · 2013年1月30日

建议不要用CentOS,实际上你们完全可以考虑用archlinux,archlinux不仅仅是一个好的linux桌面,就开发环境而言我认为archlinux > fedora > ubuntu(如果经验不是很丰富的话用fedora也很好,区别在于arch的优势主要在于自定义,而fedora和ubuntu会给你做很多默认的工作),这是我试用过20多种linux后得出的结论,另外freebsd也是不错的选择,不过freebsd不是linux,对使用人员要求会更高点,archlinux的优势有如下几点,灵活的自定义配置,最优雅的包管理系统(注意,是最好的,不是之一),完善的文档,丰富的社区支持,有LTS和普通版内核可以选择(生产环境用LTS),更新速度快。。。总之优点很多,是一个让你感觉到很爽的linux系统

2511
as181920 · #54 · 2013年1月30日

#53楼 @mjf429 告诉我archlinux的包管理比gentoo好哪些。archlinux自定义的成本有多少,桌面是否好?桌面不都是用通用软么gnome之类。

1205
mjf429 · #55 · 2013年1月30日

#54楼 @as181920 gentoo的包管理类似freebsd,这类包管理系统都可以称为ports-like类型的,ports-like是需要编译源码的,虽然说本地编译后的程序比通用包的效率稍高,但是现在机器的性能是可以忽略这点的,再说archlinux的包管理系统也能通过abs(Arch Build System)来进行本地的porting,porting是比较费时的,在微互其微的性能提升和方便快捷之间我相信大部分人一定会选择后者,archlinux本身能通过abs来进行porting,除非我是真的需要对所用包进行定制开发或者定制编译,否则我是绝对不会使用abs的,这也是arch包管理系统灵活性的一个体现,还有archlinux通过aur(Arch User Repository)提供了强大的社区支持,所有人都可以很容易的做出自己的PKGBUILD文件,然后将成果分享给社区,这一点上archlinux继承了slackware的优良传统,还有一点就是archlinux的包依赖管理不像rpm或者apt-get那种属于强依赖关系,这点是为了能够更好的解决依赖冲突的发生,archlinux的依赖关系是一种建议的依赖关系,默认安装命令是需要满足依赖关系,当冲突发生时,你可以可以在某些步骤突破依赖关系直接安装,然后进一步解决依赖冲突,在使用ubuntu和suse时我曾经多次为解决依赖冲突而苦恼,但是用arch后这件事情变得非常轻松,archlinux是一种能真正让你理解linux系统的系统,它的理念是你需要什么就安装什么配置什么,从安装系统开始,你最开始得到的就是一个最原始的linux,同时它对配置文件的管理又做得特别好,每一个配置文件都能了然于心,可能又有人问了,是不是说需要配置的项目特别多,其实完全不用担心,因为每一个包都有默认的配置,大部分你只需要sudo pacman -S packagename就解决了你的所有问题,当你需要定制配置时,vi /etc/packagename/packagename.conf往往就是默认的配置文件,同时archlinux的包管理也支持类似fedora包分组的概念,例如sudo pacman -S base-devel就搞定了你做开发需要的所有编译相关的基础包,最后一个问题,我说的桌面系统是指相比其它版本的linux系统arch更适合做个人用的桌面系统,当然通过lts内核用来做生产环境也是非常稳定的,初学者的话建议大家使用kde桌面,比较容易入手,版本之间变化也不大,个人觉得做开发的话其实一个简单的window manager也够用,很多大牛都会选择轻量级别的桌面或者wm,毕竟开发效率才是最重要的,总不希望窗口切换的时间很长很长

2511
as181920 · #56 · 2013年1月30日

#55楼 @mjf429 1,没有总结archlinux包管理和自定义配置的成本,gentoo/archlinux/ubuntu都有默认配置,到正常使用各自花费成本有何高低和优势。 2,portage的机制和功能没看出来比arch的包管理机制有啥不足,编译问题是发行版理念本身问题,如果要快速安装,可以放弃portage,这个理由合理。 3,包依赖apt不是最先进的,但是常用开发和常用软件基本很少遇到包依赖的问题。早的时候还比较多,我从8.04用起,现在12.04基本没遇到类似情况,当然我用的都是常用软件。包管理不止处理依赖和安装,还有很多比如异常,安装一半关机,中途恢复等,各有优势吧。 4,桌面,既然发行版都用kde(或者gnome/unity),任何发行版体验差的不是太多。wm的话跟发行版关系更少了,我的fvwm配置到任何linux版本都用同一个。 5,社区,我想都有吧,ubuntu的社区肯定人不少,问题基本都能找到,gentoo更不用说了,那么多文档和project,就看你有没有时间去学。 6,说的是使用linux,不是学习linux,所以最原始什么的不重要,好用就行,想要自定义可以lfs。

深入进去细节肯定很多, 我是说如果没有太多时间折腾,装个centos/ubuntu server,部署,相对来讲是可以放心的。 对楼主来说,我跑题了,哇哈哈:)

17696
lips · #57 · 2015年12月19日

#5楼 @ibachue 为啥不是在vmware上呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册