用CentOS 7和Docker搭建Gitlab环境

先安装好CentOS 7 操作系统

操作之前,先开启ssh,以方便后续操作:
service sshd start
chkconfig sshd on

第一步,系统升级到最新:
yum -y update

第二步,安装docker:
老版本是:yum -y install docker

从Docker官方镜像安装新版本:
https://docs.docker.com/engine/installation/linux/centos/

然后注册自动启动并立即启动:
chkconfig docker on
service docker start

第三步,由于众所周知的原因(Fork the G.F.W.),国内访问Docker Hub常常很慢甚至访问不了,因此可以改用阿里云的Docker Registry(根据服务器选择合适的加速器,阿里云、腾讯都有):

# 系统要求 CentOS 7 以上,Docker 1.9 以上。

sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service sudo sed -i “s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon –registry-mirror=https://XXXXX.mirror.aliyuncs.com|g” /etc/systemd/system/docker.service sudo systemctl daemon-reload sudo service docker restart

其中的https://XXXXX.mirror.aliyuncs.com 即是阿里云Docker镜像访问加速器地址。需要自己去申请一下,免费的,路径:管理控制台-容器服务-指南-镜像管理-加速器。

第四步,运行Gitlab-ce Docker镜像:

docker run –detach \
–hostname gitlab.iconben.com \
–publish 443:443 –publish 80:80 –publish 22:22 \
–name gitlab \
–restart always \
–volume /srv/gitlab/config:/etc/gitlab \
–volume /srv/gitlab/logs:/var/log/gitlab \
–volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

以上是用指定参数来运行官方的gitlab(社区版本)的容器。要注意的是,可能在CentOS上默认SELinux是开启的,如果是这样的话,以上命令运行会权限不足,容器运行不成功,此时应该运行如下命令:

docker run --detach \
    --hostname gitlab.iconben.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab:Z \
    --volume /srv/gitlab/logs:/var/log/gitlab:Z \
    --volume /srv/gitlab/data:/var/opt/gitlab:Z \
    gitlab/gitlab-ce:latest

以上的端口映射,如果本机80端口已经被Apache或者Nginx占用,则需要改到另外端口。22端口也是,可能与sshd冲突,一样可以修改。修改方式有三种:

1,Container生成之前,也就是在执行以上命令行之前,修改命令行参数,如:

docker run –detach \
–hostname gitlab.iconben.com \
–publish 443:443 –publish 880:80 –publish 822:22 \
–name gitlab \
–restart always \
–volume /srv/gitlab/config:/etc/gitlab \
–volume /srv/gitlab/logs:/var/log/gitlab \
–volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

2,如果Container已经生成,这时候可以 docker rm gitlab删除该容器,然后用改过端口的命令行重新生成;

3,如果不想删除重建Container,可以停止docker,然后修改Container的配置文件:

docker stop container
service docker stop
vi /var/lib/docker/%container_id%/hostconfig.yml

在这个文件里面可以修改端口映射,改完再启动。
**注意:一定要停用整个service,改完配置文件,再启动service才生效。否则service还开着的时候,配置修改了也不会生效,还会被自动改回去。

第五步,配置与使用Gitlab

以上步骤操作得当的话,这时候浏览器里面输入网址,就应该已经能访问到gitlab了。初始会要求设置新密码。然后就可以做各种新建用户、新建项目、设置权限等操作了。

有些配置如external url要修改的话,需要改gitlab的配置文件。这时候可以停用gitlab,然后修改,方式有两种:

1,由于存储是加载的外部卷,可以根据之前启动Docker的时候指定的存储卷位置,直接在Host中修改对应文件,如前面例子中的参数:–volume /srv/gitlab/config:/etc/gitlab \,说明在docker内的/etc/gitlab文件夹,在宿主机上实际是放在/srv/gitlab/config位置的。

2,就是通过 docker exec gitlab /usr/bin/bash 来进入docker命令行操作,譬如 vi /etc/gitlab/gitlab.rb来修改gitlab配置文件。

3,追加还有一种方式,就是删除容器(不删除配置和数据),然后用新的参数重新运行创建容器的命令,因为OMNIBUS 的Gitlab容器镜像支持通过命令行直接传递配置进去,这些配置会存储在Docker的容器配置里面,并且会在启动容器后自动覆盖容器内文件系统中所保存的Gitlab配置,具体可以参见OMNIBUS关于Gitlab镜像使用说明的官方文档。

CentOS+Apache环境下安装gitlab

环境:CentOS 6.8,  Apache 2.22.15

先根据官方教程,安装omnibus版本的安装包。官方源速度太慢,镜像选择了清华tuna。安装过程一路顺利。

关键是配置,gitlab默认内嵌nginx服务器,如果要使用Apache的话,需要禁用掉先,否则开机会报80端口冲突(话说这两天服务器被我重启了三四次。。。,之前170天左右稳定运行没动过)。

设置workhouse tcp连接,本机 127.0.0.1 端口8181

具体参考:

http://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server

看文档,SELinux环境下需要做一些配置,本次安装因为本机SELinux已经禁用,因此没有遇到。

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications

根据使用的gitlab版本及本机apache版本,选择一个合适的配置文件,本机参考了:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/apache/gitlab-omnibus-apache22.conf

启动服务器,报503错误,查httpd的日志,发现Apache没有与127.0.0.1:8181连上。

如果要配置HTTPS访问,则配置文件参考:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/8-1-stable/web-server/apache/gitlab-omnibus-ssl-apache22.conf

配置编辑完成后重启httpd,结果报错:

Invalid command ‘SSLCompression’, perhaps misspelled or defined by a module not included in the server

查了一下,是因为Apache版本太低(2.22.15)的原因,起码需要2.22.24。针对低版本的临时解决方案如下:

修改 /etc/sysconfig/httpd文件,添加如下语句:

export OPENSSL_NO_DEFAULT_ZLIB=1

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#other-httpd-security-considerations

然后重启结果还是不行。—暂时没解决,谋求升级系统。

参考:

http://serverfault.com/questions/455450/how-to-disable-sslcompression-on-apache-httpd-2-2-15-defense-against-crime-bea

http://serverfault.com/questions/508520/how-to-disable-ssl-tls-compression-in-apache-2-2-16

CentOS+webmin环境安装OpenLDAP和phpldapadmin【未完成】

利用webmin里面的功能,安装了ldap server管理模块,当然了,在它提示下也安装了openldap。遗憾的是,webmin里面ldap server管理模块貌似不是最新,并不能一步到位正确配置openldap,需要手工配置。搞了很久,不少坑。

首先,是webmin里面的模块参数,里面的openldap的执行文件路径、配置文件路径等等,好多都跟我的环境不一样。对模块的参数进行了修改。然后也设置了openLDAP的一些参数:Suffix、RootDN、Rootpw等等。这些知识修改的文件,要配置成功,还得要服务器运行,并且webmin的模块能连上ldap server。但由于不是很熟,一直不能成功连上server。

中间也检查过slapd服务,确实开起来了,用前面设的RootDN和Rootpw去登录,就是不成功,报错“Invalid credential”。后来临机一动,停用了服务,直接执行

slapd -f /etc/openldap/slapd.conf

结果能连上了。研究了一下/etc/init.d/slapd文件,暂时没什么头绪。phpldapadmin安装上了,还没配置好,还不能成功登录。

CentOS中解决Yum Update过程中的依赖冲突

阿里云的CentOS6.7

在系统升级过程中,遇到提示glibc的版本冲突,断断续续折腾了三四天,今天解决了。

主要是不同的源导致的版本冲突。

进入/etc/yum.repos.d/,尝试将不太靠谱的源先移除,基本上centos开头和epel开头的比较可靠。其它的要具体问题具体分析。我应该是过去安装某些程序添加了第三方的源,这次都先备份移除了。

然后rpm –rebuilddb一下

然后再yum update

问题解决。

网站实现HTTPS协议

HTTPS协议的作用和好处就不多说了。

整个过程的步骤,一是要找到一个证书。

二是安装证书,尤其对于一台服务器部署多个虚拟站点的情况。

证书方面,虽然自己也可以制作,但用户访问的时候,会提示需要用户接受该证书,这个很不友好。换成浏览器能接受的CA发行的证书就没有这个问题了。收费的不用说,贵的便宜的都有,一般的主机托管服务商都会有。免费的找到几家公认可以用的,一家是国内的wosign,一家是国外的startcom,应该都好用,免费ssl主要是针对域名进行验证的,申请过程中需要证明对域名的拥有权,可以通过在网站根目录上传特定文件,或者添加特定二级域名来验证。过程中还发现赛门铁克也注册了一个叫freessl.com的网站,里面显示即将推出免费ssl,咱们拭目以待吧。

安装证书一般都有教程,本人是阿里云的ECS服务器,centos6.7 + apache,找到对应教程即可。值得注意的是,阿里云版本的ssl配置文件位置和独立安装的centos的ssl配置文件的位置稍有不一样。

可以参考:https://freessl.wosign.com/aliyun-ssl.html

由于多数免费ssl会有对应的域名限制(譬如wosign上面最多允许一个证书对应5个域名),所以当单台服务器上有超过五个站点都需要启动https的时候,需要再申请另外的ssl。这时候,需要注意ssl配置文件里面的虚拟主机的设置。要考虑用不同的端口来对应不同的证书。

解决WebStorm界面出现中文乱码(出现口口口)

WebStorm界面出现中文乱码(出现口口口)

  1. 点一下界面上那个扳手图标(settings),快捷键Ctrl+Alt+S。
  2. 找到“Appearance”这个选项
  3. 然后在右边勾选“Override default fonts by(not recommended)”,在Name里选一个中文字体宋体或者微软雅黑…(当然现在你看到的也是乱码口口口,先摸黑选一个,点确定后再看看)。设置好后,重启软件后就行了。

解决Joomla站点的500错误

维护的某Joomla网站突然不能访问,前后台都报500错误。

网上搜了一下,结合apache日志,初步认为是服务器的配置问题。虽然不明白为什么服务器配置为什么会突然不行(因为应该是没人改过),但因为最近有另外的人也在使用后台,心想也许是他的某个操作触发了隐藏的漏洞或者bug。于是就往服务器配置这条路上走了很远。

网上有说是joomla开通SEF功能后的配置问题的,有要修改.htaccess文件的,等等,都不起作用。怕配置文件改除了隐藏的bug自己没发现,甚至干脆尝试了重装XAMPP,数据库备份后恢复,重新配置apache等。仍然没解决,从中午开始忙到晚上,十分崩溃。

然后看PHP源代码。发现所有的php文件头部都被加入了一段混淆过的php代码,于是看了看规律貌似是这样的:

<?php $rzzeaxkup =  xxxxxxxxxxx此处省去无数混淆过的代码xxxxxxxxxx    $rzzeaxkup=$noamvuns-1; ?>

应该是感染了什么,或者被人利用漏洞入侵了。于是使用正则表达式进行查找替换,全部清除掉了,用到的表达式:

^<\?php \$rzzeaxkup.*\$rzzeaxkup=\$noamvuns-1; \?><\?php

以为问题解决后,结果依然显示500错误。

于是,绕不开的代码啊,干起程序员本行,以行行代码调试。终于发现在/libraries/import.legacy.php中有一行:

require_once JPATH_PLATFORM . ‘/legacy/form/field/form.php’;

程序在这里就跑不下去了。于是打开form.php文件,一看愣了。

满屏的乱码,文件开头是这样的:

<?php echo ‘abc’;/* PHP Encode by  http://Www.PHPJiaMi.Com/ */error_reporting(0);ini_set(“display_errors”, 0)

里面指向的 www.phpjiami.com看起来是一个专门做代码混淆加密的网站。也许本站点感染的病毒/木马/后门程序的开发者用到了这个在线加密??

看了看,感觉这个文件应该没什么大作用,于是果断的将对它 require_once的语句注释掉。

再打开网站,前后台终于恢复。

此时已经是凌晨一点半了,详细原因后续再查找,这个加密文件form.php到底做什么用,也待后续再了解吧。

xcopy批处理报内存不足的错误

网站备份最近两个月一直都有问题,刚刚才发现,手工run了一遍批处理文件,发现在xcopy到一定时候,报insufficient memory的错误,一开始以为xcopy会把文件放到内存里面,文件多的时候导致耗用内存过度,心想这样的算法也太不严谨了,后来查google才知道,应该是文件路径问题。

具体参考:

http://forums.whirlpool.net.au/archive/2150703

从这两篇文章粗看起来,解决起来还挺烦,因为是涉及源文件的路径长度问题,所以要费一些脑筋。

后来看到官方wiki,才知道xcopy已经正式退休弃用,改由robocopy来代替了。

于是脚本做了修改,一切OK了。

答友人

作者:黄光烈

同桌共饮情未忘,

兴奋之际读华章。

恭喜吾兄出胜男,

皇都名胜尽观赏。

国强民富百业旺,

日新月异美家乡。

但愿与君常相会,

共享盛世好风光。

近日,与友架桥幸会,读良臣大作有感。余不才,赋歪诗一首,以示敬意。

光烈附注

2016年6月8日