7月8号入职,到现在20多天的时间,本事也没有学到多少,就是越来越觉得自己水平太菜,到现在也就只有6台测试服务器和100台节点服务器的权限。今天月初,写点东西,总结一下这个月的收获与不足。
应当说这个月我就是熟悉了开发流程,叫这个名字不太恰当,毕竟只是运维,但是部署和维护都是我们来干,省得想新的名字,那就这么叫吧。
花了几天时间了解了一下git的作用,分布式集群管理系统(听名字还是很高端的),所以那位linux之父花了两个星期的时间开发出来的东西让现在全IT界的人都在使用,什么叫牛逼?这就叫牛逼!so,我们公司的代码也是放在上面托管的。
公司在github上面购买了空间,接着主要就是CTO在管理github上的项目什么的,开发把写好的代码上传到github上托管,要发布的时候,先在jenkins机器上修改发布脚本,把主机名称改为我们要部署的目标机器,使得jenkins机器与目标机器可以通信。然后在jenkins上新建个github上对应的项目,对github的代码进行build(当然,一般不用新建,就算新建我也只能拷贝项目),build好之后,也不用手动执行脚本(build的过程就是自动执行了),代码就部署到目标机器的对应目录了。最后部署nginx的配置文件,一切OK。
下面重点来了,如果单单只是这么简单的流程,我也不会搞得挺吃力(说真的,很丢人,出来之前觉得自己纵横江湖没有问题,结果刚进公司就被没接触过的东西搞得要死要活),然而在工作的过程中遇到并且解决了很多的问题(好吧,不是我一个人解决的),下面主要来总结一下这些问题,也算是积累了经验了:
一、两台机器的通信问题
在学校的时候,一直用的阿里云与自己的虚拟机,一路root下去,也不觉得有什么错,root多方便,开始还以为来公司的第一天他们会给我一堆的root密码(我现在都觉得我自己傻得可爱),真正来了之后,为了安全性,各种权限问题(而且亚马逊云默认root用户不能登录),而我几乎都不了解,经过一段时间,总算是熟悉了什么密钥和权限。
一般来说,我们登录服务器,都需要通过密钥验证(root密码估计只有CTO知道),密钥分为公钥和私钥,用命令 ssh-keygen 生成(记得一定要是jenkins用户生成的密钥),默认的密钥名字叫做 isa_rd、isa_rd.pub,当然我们也可以指定别的名字,这里不详述,有需要的可以上网搜(其实我也忘记了),如果要加权限的话,拿到别人的公钥,加到 /home/username/.ssh/authorized_keys 文件里面,注意这个文件的权限一定要改成600,文件的属主与属组也要改为该用户 username,这样基本就可以了,如果要给 root 权限,要在服务器的配置文件 /etc/sudoers 文件里的“root ALL=(ALL) ALL”下面加上“username ALL=(ALL) ALL”,这样我们新加的用户就可以通过 sudo -s 命令获得 root 权限。
如果要通过主机名来登录服务器的话,需要在 /~/.ssh/config 文件中加入主机名和ip,host=主机名、hostname=主机ip、user 用户名、PreferredAuthentications publickey、IdentityFile ~/.ssh/id_rsa
二、build出错问题
如果我们在jenkins机器上通过jenkins用户可以登录到目标服务器了,就说明第一步完成,接下来就可以build了,但是在build的过程中我们也同样会遇到很多的错误。
2.1、一般来说,最常见的错误就是build的时候提示找不到什么文件或者目录,这个时候我们可以登录到目标机器上手动创建,并且修改它们的主与组为nginx(目标服务器上部署的代码文件全部要改成nginx)。
2.2、还有就是提示找不到网站目录下的某些东西/var/www/html/justpay/node_modules/下的vendor或者不能绑定vendor目录下的某个文件,这个时候我们可以根据提示信息用 npm 来安装缺少的东西(npm install ... -d ),如果我们要安装的包已经存在,可以卸载后再装 (npm uninstall ... ),如果一直出错的话,可以考虑把所有的包全部卸载后重装( rm -rf node_modules ;npm install -d)。注意,安装的时候一定要使用 nginx 用户来装。
三、启动 nginx 提示找不到 key 的问题
在 /etc/nginx/ssl 目录下,创建 *.crt 的文件,然后可以去某台机器上将 /etc/nginx/ssl/*.crt 的内容拷贝过去即可。
四、502问题
以前还专门写过一篇文章总结 nginx 的502问题,然而到公司之后发现502基本是因为后端服务挂掉,比如python进程没有起来,如果我们手动启动之后会自动死掉,可能是因为我们从命令行启动服务,可以用 start service 的方式来启动(启动脚本在/etc/init/目录下,.conf 文件)。或者是因为启动参数中的某些东西不存在,我们可以手动创建。
五、yum 安装服务问题
之前一直喜欢用二进制包来安装服务,尤其是配置网站环境,但是公司的大牛们全部使用yum安装软件包,好吧,据说红帽官方都在推 yum,那么总结一些 yum 安装的问题。
我们在安装lamp的话,本人亲测,安装好 http、http-devel 、php、php-devel 就行,可以通过yum list 命令查看我们需要装哪些包,要使php解析,需要在httpd,conf中指定index.php、AddType .......、.so 模块等等,.so 模块其实在yum 安装的时候就已经安装上了,只需在配置文件中指定就好:LoadModule php5_module modules/libphp5.so
六、nginx 配置文件问题
其实在 build 成功后