最近由于开发的需求,需要在公司部署一个git的服务器,在刚开始选择的时候,我打算使用gitolite来管理git,后来发现gitlab这个系统更加方便,它既支持ssh方式,又支持http方式,用户能够通过命令行甚至是web来提交自己的代码,非常的实用。
gitlab是一个基于ruby的开源项目,能够实现git仓库的功能,能够在网页上直接浏览自己的代码,下面主要介绍一下部署的过程,主要分为如下几个大步骤:
1、提供一些必须包,提供epel,关闭防火墙和selinux等操作; 2、gitlab依赖的python功能比较多,需要升级python到2.7.X; 3、安装redis的内存数据库; 4、安装MySQL的关系型数据库; 5、为gitlab提供ruby的环境支持; 6、提供gitlab-shell来管理git仓库; 7、安装gitlab系统; 8、安装nginx的web服务,做反向代理。
1、提供epel源,安装相应包
[[email protected] ~]# rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm [[email protected] ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
下面提示你安装的包,一定要装,要不然,你会在部署过程中折返回来装的
[[email protected] ~]# yum install -y git gcc-c++ libyaml libicu-devel cmake nodejs
关闭防火墙和selinux,这对你的实验非常重要,要不然,排了半天错,原来是它搞的鬼
[[email protected] ~]# iptables -F [[email protected] ~]# setenforce 0
2、升级python到2.7.X
查看当前系统中python版本,CentOS6.5的默认是2.6.6
[[email protected] ~]# python -V Python 2.6.6
到python.org上去下载源代码,进行如下编译安装
[[email protected] ~]# tar Jxf Python-2.7.6.tar.xz [[email protected] ~]# cd Python-2.7.6 [[email protected] ~]# ./configure --prefix=/usr/local/python [[email protected] ~]# make && make install
备份python2.6的版本,并把新的2.7指向到系统中去
[[email protected] ~]# mv /usr/bin/python /usr/bin/python2.6.6 [[email protected] ~]# ln -sv /usr/local/python/bin/python /usr/bin/python
再次查看当前系统的python版本
[[email protected] ~]# python -V Python 2.7.6
为了防止yum安装软件出错,将yum的依赖的python指回2.6.6
[[email protected] ~]# vim /usr/bin/yum #!/usr/bin/python2.6.6
3、安装redis数据库
首先去redis.io上去下载redis的稳定版源码,进行编译安装
[[email protected] ~]# tar zxvf redis-3.0.3.tar.gz [[email protected] ~]# cd redis-3.0.3 [[email protected] ~]# make [[email protected] ~]# make install
执行redis的安装脚本
[[email protected] redis-3.0.3]# ./utils/install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] /etc/redis.conf Please select the redis log file name [/var/log/redis_6379.log] /var/log/redis.log Please select the data directory for this instance [/var/lib/redis/6379] /var/lib/redis.pid Please select the redis executable path [/usr/local/bin/redis-server] Selected config: Port : 6379 Config file : /etc/redis.conf Log file : /var/log/redis.log Data dir : /var/lib/redis.pid Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful!
更改redis的启动脚本,并启动服务
[[email protected] ~]# mv /etc/init.d/redis_6379 /etc/init.d/redis [[email protected] ~]# service redis start
4、安装MySQL数据库
MySQL的编译安装文档很多,这里为了方便,我采用的是yum安装过程
[[email protected] ~]# yum install mysql mysql-server mysql-devel -y
为了保证数据的安全,应该数据和二进制日志会放在单独的分区中
[[email protected] ~]# vim /etc/my.cnf datadir = /data/mysql
对MySQL进行初始化操作
[[email protected] ~]# mysql_install_db --user=mysql --datadir=/data/mysql/
启动MySQL数据库
[[email protected] ~]# service mysqld start
设置root的密码和相关登录信息
[[email protected] ~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we‘ll need the current password for the root user. If you‘ve just installed MySQL, and you haven‘t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from ‘localhost‘. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MySQL comes with a database named ‘test‘ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you‘ve completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
上面对于数据库的部署已经OK了,下面就要为gitlab创建一个库用来存储数据
[[email protected] ~]# mysql -uroot -pgitlab mysql> CREATE USER ‘gitlab‘@‘localhost‘ IDENTIFIED BY ‘gitlab‘; Query OK, 0 rows affected (0.00 sec) mysql> CREATE DATABASE IF NOT EXISTS `gitlab` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; Query OK, 1 row affected (0.01 sec) mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlab`.* TO ‘gitlab‘@‘localhost‘; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
5、提供ruby环境
下载ruby的源代码包
[[email protected] ~]# curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz [[email protected] ~]# ./configure --prefix=/usr/local/ [[email protected] ~]# make && make install
由于是在国内,安装gem的相关包会特别的慢,建议换成淘宝的,此处为淘宝点赞
[[email protected] ~]# gem sources --remove https://rubygems.org/ [[email protected] ~]# gem sources -a http://ruby.taobao.org/
安装bundler,它是帮助管理ruby下的所有依赖的包,相当于yum的功能
[[email protected] ~]# gem install bundler
添加一个git用户,作为git服务的授权用户
[[email protected] ~]# useradd git
6、安装gitlab-shell来管理git仓库
[[email protected] ~]# su - git [[email protected] ~]$ git clone https://github.com/gitlabhq/gitlab-shell.git
将分支切换到2.6.3,有些文档说1.4.0,我建议切到2.6.3,因为版本低了,不支持用户ssh形式的提交代码到git服务中去
[[email protected] ~]$ cd gitlab-shell/ [[email protected] ~]$ git checkout v2.6.3
提供配置文件,修改gitlab的URL地址
[[email protected] ~]$ cp config.yml.example config.yml [[email protected] ~]$ vim config.yml gitlab_url: "http://192.168.190.138/"
进行安装操作
[[email protected]~ gitlab-shell]$ ./bin/install mkdir -p /home/git/repositories: true mkdir -p /home/git/.ssh: true chmod 700 /home/git/.ssh: true touch /home/git/.ssh/authorized_keys: true chmod 600 /home/git/.ssh/authorized_keys: true chmod -R ug+rwX,o-rwx /home/git/repositories: true find /home/git/repositories -type d -print0 | xargs -0 chmod g+s: true
7、安装gitlab系统
克隆gitlab的代码到git家目录
[[email protected] ~]$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab [[email protected] ~]$ cd gitlab [[email protected] ~]$ git checkout 7-10-stable
配置项目,提供配置文件
[[email protected] ~]$ cp config/gitlab.yml.example config/gitlab.yml
将localhost改为本机ip或者是域名
[[email protected] ~]$ sed -i ‘s/localhost/192.168.190.138/g‘ config/gitlab.yml
修改目录的相关权限
[[email protected] ~]$ chown -R git log/ [[email protected] ~]$ chown -R git tmp/ [[email protected] ~]$ chmod -R u+rwx log/ [[email protected] ~]$ chmod -R u+rwx tmp/
[[email protected] ~]$ mkdir /home/git/gitlab-satellites
#可以视为临时目录,通过web ui的提交请求文件以及检出版本库都会存放在这个位置
提供unicorn的配置
[[email protected] ~]$ cp config/unicorn.rb.example config/unicorn.rb
修改unicorn的配置,指明监听的端口和超时时间
[[email protected] ~]$ vim config/unicorn.rb listen "192.168.190.138:8080", :tcp_nopush => true timeout 300
配置git的用户和邮件
[[email protected] ~]$ git config --global user.name "GitLab" [[email protected] ~]$ git config --global user.email "[email protected]" [[email protected] ~]$ git config --global core.autocrlf input
配置数据库,使gitlab将数据存入到MySQL数据库中
[[email protected] ~]$ cp config/database.yml.mysql config/database.yml [[email protected] ~]$ vim config/database.yml production: adapter: mysql2 encoding: utf8 collation: utf8_general_ci reconnect: false database: gitlab pool: 10 username: gitlab password: "gitlab"
修改其权限,保证其他用户不能访问
[[email protected] ~]$ chmod o-rwx config/database.yml
安装gem的相关包,进行gitlab的初始化操作
切回root操作下面步骤
[[email protected] ~]# gem install charlock_holmes --version ‘0.6.9.4‘
切回git用户
[[email protected] ~]# su - git [[email protected] ~]$ cd gitlab
修改Gemfile文件,将gem源改成淘宝的源
[[email protected] ~]$ vim Gemfile source "http://ruby.taobao.org"
安装一些依赖包
[[email protected] ~]$ bundle install --deployment --without development test postgres puma aws ... Remember to run generator to generate sample file and include mousetrap-rails with Rails Asset Pipeline $ rails generate mousetrap:install Post-install message from rdoc: Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay!
当你看到上面这段的时候就成功了
初始化gitlab
[[email protected] ~]$ bundle exec rake gitlab:setup RAILS_ENV=production ... This will create the necessary database tables and seed the database. You will lose any previous data stored in the database. Do you want to continue (yes/no)? yes Administrator account created: login.........root password......5iveL!fe
只要显示上面的管理员账号被创建,就ok了
为gitlab提供启动脚本
切回root用户
[[email protected] ~]# wget -O /etc/init.d/gitlab https://raw.githubusercontent.com/gitlabhq/gitlab-recipes/master/init/sysvinit/centos/gitlab-unicorn --no-check-certificate [[email protected] ~]# chmod +x /etc/init.d/gitlab [[email protected] ~]# chkconfig --add gitlab
启动gitlab服务
[[email protected] ~]# service gitlab start
8、安装nginx做反向代理
配置nginx官方源
[[email protected] ~]# vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch gpgcheck=0 enabled=1
安装nginx包
[[email protected] ~]# yum install nginx -y
为gitlab配置反向代理的虚拟主机
[[email protected] ~]# vim /etc/nginx/conf.d/gitlab.conf server { listen 80; server_name 192.168.190.138; client_max_body_size 512M; access_log /var/log/nginx/gitlab_access.log; error_log /var/log/nginx/gitlab_error.log; location / { proxy_pass http://192.168.190.138:8080; } }
启动nginx服务
[[email protected] ~]# service nginx start
为提供服务的可靠性,建议将这些服务都设为开机自启动
在浏览器中访问我们的IP地址
本篇博客的主要目的是为了做个笔记,下次部署时,能更加方便快速一些,如果,大家有需要,也可以借鉴,博客中的错误之处,请帮忙之处,感谢!