### 一、准备docker容器环境
1. 下载docker ubuntu镜像 1 shell>> docker pull ubuntu
2. 启动ubuntu镜像并更新 1 2 3 shell>> docker run -it docker.io/ubuntu shell>> apt-get -y update
3. 安装ssh 1 2 3 4 5 6 7 shell>> apt-get install openssh-server vim shell>> vim /etc/ssh/sshd_config shell>> service ssh start shell>> exit
4. commit docker容器 1 2 shell>> docker commit -a "zhangteng" -m "add ssh" 876f90b7a5769c04f3d9975369b3a1148e6c951d1f4f4217728b072b6ae6a50b ubuntu-ssh ps: "876f90b7a5769c04f3d9975369b3a1148e6c951d1f4f4217728b072b6ae6a50b" 为刚刚安装了ssh的ubuntu容器的id ,需要替换,id 可通过ps -a查到
5. build docker容器 1 2 3 shell>> mkdir ubuntu_ssh shell>> cd ubuntu_ssh shell>> vim Dockerfile
在Dockerfile文件中输入如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 FROM ubuntu-ssh:latest MAINTAINER zhangteng RUN echo 'root:123456' | chpasswd EXPOSE 22 RUN mkdir /var/run/sshd ADD run.sh /run.sh RUN chmod 755 /run.sh CMD ["/run.sh" ]
在run.sh文件中输入如下内容:
1 2 3 4 #!/bin/bash /usr/sbin/sshd -D
build容器
1 docker build -t ubuntu-ssh:v1 .
6. 启动容器并进入容器 1 2 shell>> docker run -d -p 49170:22 --name=ubuntu-ssh ubuntu-ssh:v1 shell>> ssh root@127.0.0.1 -p 49170
二、安装gtilab 在完成上一步,进入docker容器之后就可以开始安装gitlab了。 注意:以下操作都必须在docker容器 中进行,不在容器中的操作会有说明,没有说明的都在容器中操作。 以下内容参考gitlab官方安装说明 ,根据我们这边要求进行了一些说明。
1. Packages/Dependencies 1.1 安装需要的依赖(用于编译Ruby和一些Ruby gems需要的原生依赖)
1 shell>> sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake libkrb5-dev nodejs
1.2 检查git的版本是否正确
1 2 3 4 5 shell>> sudo apt-get install -y git-core shell>> git --version
如果git的版本太久,可以移除它并用源码安装的方式安装一个高版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 shell>> sudo apt-get remove git-core shell>> sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential shell>> cd /tmp shell>> curl -L --progress https://www.kernel.org/pub/software/scm/git/git-2.1.2.tar.gz | tar xz shell>> cd git-2.1.2/ shell>> ./configure shell>> make prefix=/usr/local all shell>> sudo make prefix=/usr/local install
1.3 安装postfix 做邮件服务器用,但是现在没有调通
1 shell>> sudo apt-get install -y postfix
2. 安装Ruby 2.1 移除旧版本的Ruby
1 shell>> sudo apt-get remove ruby1.8
2.2 下载Ruby源码,编译并安装
1 2 3 4 5 6 shell>> mkdir /tmp/ruby && cd /tmp/ruby shell>> curl -L --progress http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.6.tar.gz | tar xz shell>> cd ruby-2.1.6 shell>> ./configure --disable-install-rdoc shell>> make shell>> sudo make install
2.3 更改Gem源 由于国内网络原因(你懂的),导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败。所以你会与遇到 gem install rack 或 bundle install 的时候半天没有响应,具体可以用 gem install rails -V 来查看执行过程。 详见http://ruby.taobao.org/ 。
1 2 3 4 5 6 7 shell>> gem sources --remove https://rubygems.org/ shell>> gem sources -a https://ruby.taobao.org/ shell>> gem sources -l *** CURRENT SOURCES *** https://ruby.taobao.org
2.4 安装Bundler Gem
1 shell>> sudo gem install bundler --no-ri --no-rdoc
3. 添加系统用户 1 shell>> sudo adduser --disabled-login --gecos 'GitLab' git
4. 安装数据库(MySql) 我们使用的数据库是宿主主机的数据库,这里安装只是为了用于后面安装Gem,不需要启动这个数据库。 数据库可以选择Mysql或者PostgreSQL,我们使用的是Mysql。
1 2 3 4 5 6 7 8 sudo apt-get install -y mysql-client libmysqlclient-devmysql --version
安装完数据库之后,还需要在宿主主机 的Mysql中创建gitlab需要用的账户和数据库。 以下操作在宿主主机中执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 shell>> mysql -h127.0.0.1 -uroot -p mysql> CREATE USER 'git' @'localhost' IDENTIFIED BY 'gitlab' ; mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `gitlabhq_production`.* TO 'git' @'localhost' ; mysql> GRANT ALL PRIVILEGES ON *.* TO git@"192.168.5.%" IDENTIFIED BY "git" ; mysql> GRANT ALL PRIVILEGES ON *.* TO git@"172.%.%.%" IDENTIFIED BY "git" ; mysql> use mysql; mysql> update user set Host="192.168.5.%" where user="git" and Host="%" ; mysql> flush privileges; mysql> \q;
5. 安装Redis 以下操作在docker容器中进行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 shell>> sudo apt-get install redis-server shell>> sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig shell>> sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee /etc/redis/redis.conf echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis/redis.confecho 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.confshell>> mkdir /var/run/redis shell>> chown redis:redis /var/run/redis shell>> chmod 755 /var/run/redis if [ -d /etc/tmpfiles.d ]; then echo 'd /var/run/redis 0755 redis redis 10d -' | sudo tee -a /etc/tmpfiles.d/redis.conf fi shell>> sudo service redis-server restart shell>> sudo usermod -aG redis git
6. 安装Gitlab 6.1 克隆Gitlab源码
1 2 3 shell>> cd /home/git shell>> sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-10-stable gitlab ps: 我有下载好的,如果下载速度太慢,可以找我要,我也会传到gitlab上
6.2 配置Gitlab
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 shell>> cd /home/git/gitlab shell>> sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml shell>> sudo -u git -H vim config/gitlab.yml host: gitlab.b-m.net port: 443 https: true email_from: gitlab@boman.net repos_path: /data/gitlab-data/repositories/ shell>> sudo chown -R git log / shell>> sudo chown -R git tmp/ shell>> sudo chmod -R u+rwX,go-w log / shell>> sudo chmod -R u+rwX tmp/ shell>> sudo -u git -H mkdir /home/git/gitlab-satellites shell>> sudo chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites shell>> sudo chmod -R u+rwX tmp/pids/ shell>> sudo chmod -R u+rwX tmp/sockets/ shell>> sudo chmod -R u+rwX public/uploads shell>> sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb nproc shell>> sudo -u git -H vim config/unicorn.rb 列出需要修改的关键地方 worker_processes 4 listen "/home/git/gitlab/tmp/sockets/gitlab.socket" , :backlog => 1024 listen "8080" , :tcp_nopush => true shell>> sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb shell>> sudo -u git -H git config --global user.name "GitLab" shell>> sudo -u git -H git config --global user.email "gitlab@b-m.net" shell>> sudo -u git -H git config --global core.autocrlf input shell>> sudo -u git -H cp config/resque.yml.example config/resque.yml shell>> sudo -u git -H editor config/resque.yml
6.3 配置Gitlab的数据库设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 shell>> sudo -u git cp config/database.yml.mysql config/database.yml shell>> sudo -u git -H vim config/database.yml 只需要修改production部分即可 production: adapter: mysql2 encoding: utf8 collation: utf8_general_ci reconnect: false database: gitlabhq_production pool: 10 username: git password: "gitlab" host: 192.168.5.1 socket: /alidata1/data/db3306/mysql.sock
6.4 安装Gems 6.4.1 修改Gem源
1 2 3 4 shell>> sudo -u git -H vim Gemfile 修改第一行 source 'https://ruby.taobao.org/'
6.4.2 安装
1 shell>> sudo -u git -H bundle install --deployment --without development test postgres aws
6.5 安装Gitlab Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 shell>> mkdir -p /data/gitlab-data/repositories/ shell>> chown -R git:git /data/gitlab-data/ shell>> sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.2] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production shell>> sudo -u git -H vim /home/git/gitlab-shell/config.yml user: git gitlab_url: https://gitlab.b-m.net/ http_settings: self_signed_cert: true repos_path: "/data/gitlab-data/repositories/" auth_file: "/data/gitlab-data/.ssh/authorized_keys" redis: bin: "/usr/bin/redis-cli" namespace: resque:gitlab socket: "/var/run/redis/redis.sock" log_level: INFO audit_usernames: false
6.6 初始化数据库
1 2 3 shell>> sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
可以使用下面的语句设置管理员的密码,如果不设置将使用默认密码。
1 shell>> sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=yourpassword
6.7 安装服务脚本
1 2 3 sudo cp lib/support/init.d/gitlab /etc/init.d/gitlabsudo update-rc.d gitlab defaults 21
6.8 安装日志管理工具
1 shell>> sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
6.9 检查程序状态
1 sudo -u git -H bundle exec rake gitlab:env :info RAILS_ENV=production
6.10 预编译
1 sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
6.11 启动Gitlab
1 sudo service gitlab start
7. 退出docker容器
到这里,gitlab已经可以投入使用了,后面的操作只是对docker进行一些更多的操作,保存镜像,配置静态ip。
三、将Gitlab容器做成docker镜像,配置静态ip 1. commit docker容器 这里commit的是刚刚安装了Gitlab的容器。
1 2 docker commit -a "zhangteng" -m"add gitlab" 26d8f1393450e6743e2f6becfb2ca4574e04cbb101234bb95f04d157fa9af6c2 ubuntu-gitlab ps: "26d8f1393450e6743e2f6becfb2ca4574e04cbb101234bb95f04d157fa9af6c2" 为刚刚安装了Gitlab的ubuntu-ssh容器的id ,需要替换,id 可通过ps -a查到
2. build docker容器 1 2 3 shell>> mkdir ubuntu_gitlab shell>> cd ubuntu_gitlab shell>> vim Dockerfile
在Dockerfile文件中输入如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Add gitlab to ubuntu # author: zhangteng # VERSION 1.0 FROM ubuntu-gitlab:latest MAINTAINER zhangteng # expose port 80 EXPOSE 80 # expose port 443 EXPOSE 443 # add run.sh ADD run.sh /run.sh RUN chmod 755 /run.sh CMD ["/run.sh"]
在run.sh文件中输入如下内容:
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash /etc/init.d/redis-server stop >/dev/null 2>&1 /etc/init.d/redis-server start >/dev/null 2>&1 /etc/init.d/gitlab stop >/dev/null 2>&1 /etc/init.d/gitlab start >/dev/null 2>&1 /usr/sbin/sshd -D >/dev/null 2>&1
最后,build容器
1 docker build -t ubuntu-gitlab:v1 .
3. 启动docker容器 1 2 3 docker run -d -v /alidata1/docker-gitlab:/data/gitlab-data --net=none --name=gitlabv1 ubuntu-gitlab:v1 -v参数需要根据实际情况修改 /alidata1/docker-gitlab文件夹需要先创建好
4. 为docker容器配置静态ip 可以使用我提供的脚本docker_static_ip.sh为docker设置静态ip 使用方法如下为:sh docker_static_ip.sh 容器id/容器name ip
容器id可以通过docker ps
得到
1 sh docker_static_ip.sh 69ead0a0e1ba266f97232f4f51940e9dd2da21952ce8517b99c699b66ad10a24 192.168.5.5
5. 进入docker容器 由于第3步启动docker容器的时候,docker容器还没有ip,在第4步的时候才设置,Gitlab在启动的时候会去连接Mysql,这个时候是连不上的,所以启动不起来,需要进入手动启动
1 2 3 4 5 shell>> ssh root@192.168.5.5 shell>> service gitlab restart shell>> chown -R git:git /data/gitlab-data shell>> exit
6. 在宿主主机中配置反向代理 配置反向代理到docker容器中,具体配置参考gitlab.b-m.net.conf文件。 我们使用的是https,但是没有证书,所以需要自己生成一个,可以用下面的命令:
1 shell>> openssl req -newkey rsa:2048 -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key
7. 访问 在浏览器中输入地址访问即可
四、使用中的一些问题 1. 设置git忽略对https的检测 由于我们使用的是自签名证书,git会对https进行检测,所以需要设置git对它忽略
1 shell>> git config --global http.sslVerify "false"
2. 让git记住用户名和密码 编辑工程目录下的.git/config,在最后增加
1 2 [credential] helper = store