苦逼前端

腾讯云centos7安装gitlab及数据迁移

Javascript2018-03-14 18:59

前几天花360元撸了4年1核2G腾讯云,最近打算把原来阿里云上的gitlab迁过去,主要原因是这东西开起来就吃掉1G内存,当初为了能装这个玩意还升配了阿里云,花了不少银子。

当初阿里云怎么装的gitlab都有点忘干净了,只记得这玩意好像内置了nginx,搞不好会和之前安装的nginx有冲突。这次重新装正好可以记录下过程。

打开gitlab官网,选择自己的linux版本,然后按照提示一步步的进行即可完成安装。安装完成后发现系统里还没装nginx,然后再装好nginx,装完后想着把https也一起搞好吧,就继续安装了certbot,关于certbot的安装可以参照我的这篇文章

以上搞定后,开始生成https证书:
./path/to/certbot-auto --nginx certonly -d default.com
发现有报错:Error while running nginx -c /etc/nginx/nginx.conf -t,知道可能是certbot-auto默认使用/etc/nginx/nginx.conf这个路径的nginx配置文件,可是我的配置文件并不在这个目录。

执行./path/to/certbot-auto --help all发现可以通过--nginx-server-root来指定该配置文件的路径。

执行.path/to/certbot-auto --nginx certonly -d default.com --nginx-server-root /path/to/nginx/conf/后又报错:nginx restart failed:,看提示应该是刚装的nginx和gitlab内置的nginx端口冲突导致不能启动,所以我们先把gitlab停掉:gitlab-ctl stop

然后再次执行上面的命令,发现还有报错:Failed authorization procedure. default.com (http-01): urn:acme:error:unauthorized,查看报错的详细信息,发现脚本是真实请求了这个域名下的某个地址,由于域名是乱写的所以不能验证成功。

所以我们先给nginx配置一个可以访问的域名,例如mydomain.com,然后再次执行.path/to/certbot-auto --nginx certonly -d mydomain.com --nginx-server-root /path/to/nginx/conf/,证书终于成功生成了。nginx配置证书及证书更新可以参考我之前提到的这篇文章

配置好nginx及https后,我们接下来要替换gitlab内置的nginx服务器,然后把原来阿里云上的数据导过来。

替换内置nginx可以参考官方文档,这里有详细的说明,打开 /etc/gitlab/gitlab.rb: 先将里面的#nginx['enable'] = true改为nginx['enable'] = false
然后设置web_server['external_users] = ['nginx']
最后执行gitlab-ctl reconfigure

我们发现又报错了STDERR: gpasswd: user 'nginx' does not exist,说好的CentOS的nginx user是nginx呢?我们执行ps aux | grep nginx后发现,nginx的用户果然不是什么nginx而是nobody。再运行getent passwd来查看所有用户后发现,也不存在这个叫做nginx的用户,那我们创建一个好了:adduser nginx,然后再打开nginx.conf将nginx的用户改为这个nginx,执行nginx -s reload然后发现nginx的用户果然变成了nginx。再执行gitlab-ctl reconfigure后发现,终于配置成功了。

但却发现这1核2G的腾讯云好像有点带不动这个gitlab,启动后命令行输入内容有很大的延迟和卡顿,甚至有些操作直接Cannot allocate memory了。查看官网文档发现,这货的最低配置已经是4GB的RAM了,记得在阿里云(Ubuntu 12.04)装的时候还是2GB呢,查看了下当初装的是gitlab-ce@9.1.10,而现在在腾讯云装的是gitlab-ee@10.5.4。那么这俩货有什么区别呢?搜索到这篇文章后从中了解到,CE是社区版完全免费,EE是企业版有很多收费服务。因为要转移数据的阿里云装的是CE,为了减少麻烦,决定腾讯云也使用CE。

再次查看官方安装文档后发现,所有系统推荐的安装方式都变成了EE,无奈我们只好找到CE社区的package server自己下载,然后安装:
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
执行yum list gitlab-ce后发现脚本更新的源已经是10.5.4了,还是为了减少麻烦,我们要找到之前装的9.1.10版本进行安装:

wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/6/gitlab-ce-9.1.10-ce.0.el6.x86_64.rpm/download.rpm
yum localinstall gitlab-ce-9.1.10-ce.0.el6.x86_64.rpm

安装完成后,修改配置文件,执行gitlab-ctl reconfigure然后gitlab-ctl start,终于启动成功了,并且还有几百的剩余RAM,完全感觉不到延迟和卡顿。剩下就是迁移数据了。

参考备份与恢复: 先到阿里云执行gitlab-rake gitlab:backup:create, 会在默认目录/var/opt/gitlab/backups下创建一个名称类似1521022067_2018_03_14_gitlab_backup.tar的文件,然后到腾讯云把该文件scp过来,也放到/var/opt/gitlab/backups目录下,由于先前做好的铺垫,两边环境基本一致,直接执行gitlab-rake gitlab:backup:restore BACKUP=1521022067_2018_03_14恢复备份,完成后打开网址,发现数据已经全部迁移过来了。

付:使用non-bundled-web-server关键配置:
/etc/gitlab/gitlab.rb

external_url 'https://git.xwenliang.cn'
web_server['external_users'] = ['nginx']
nginx['enable'] = false

/data1/server/nginx/conf/vhosts/git.xwenliang.cn.conf

upstream gitlab-workhorse {
    server unix:/var/opt/gitlab/gitlab-workhorse/socket;
}
server {
    listen 443 ssl;
    ssl_certificate xxx/fullchain.pem; # 证书地址
    ssl_certificate_key xxx/privkey.pem; # 证书key地址
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    server_name git.xwenliang.cn; 
    server_tokens off;
    root /opt/gitlab/embedded/service/gitlab-rails/public;
    access_log  /var/log/nginx/gitlab_access.log;
    error_log   /var/log/nginx/gitlab_error.log;
    location / {
        client_max_body_size 0;
        gzip off;
        proxy_read_timeout      300;
        proxy_connect_timeout   300;
        proxy_redirect          off;
        proxy_http_version 1.1;
        proxy_set_header    Host                $http_host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_pass http://gitlab-workhorse;
    }
}
server{
    listen 80;
    server_name git.xwenliang.cn;
    return 301 https://git.xwenliang.cn$request_uri;
}

系统及软件版本:
阿里云1核2G Ubuntu 12.04.1
腾讯云1核2G CentOS 7.2.1511
gitlab-ce-9.1.10-ce.0.el7.x86_64

评论(2)
  • 111.202.148.*: mark2年6个月前
  • 111.196.247.*: gitlab吃内存简直无情, 卡的一比2年6个月前
还可输入200个字