詳細検索

Notas sobre como implementar o gitlab

Avatar
por komi
6 min de leitura

Notas sobre como implementar o gitlab
Traduzido do 日本語 • Ver original

Olá. Aqui é a Komiya. Senti que meus veteranos me pediam, então aqui estão minhas anotações quando apresentei o gitlab.

Se você mexer um pouco, o procedimento será longo e complicado, e se você pode reproduzi-lo como está pode depender do ambiente, então não podemos garantir. O sistema operacional reproduzido por esse procedimento foi o CentOS 6.5. Se você tolerar o postgres, existe uma versão omnibus que pode ser inserida automaticamente, então achei que seria uma boa ideia usar isso. Pessoalmente, eu não tinha muito conhecimento sobre operação do postgres, e não conseguia escapar do RDS, então fiz o meu melhor com o mysql.

Ao automatizar eu mesmo, achei que seria uma boa ideia adicionar uma opção para de alguma forma automatizar a interação entre passageiro e gitlab:setup. Esse procedimento em si é quase manual, embora seja parcialmente fornecido pelo chef. As opções de automação estão um pouco escritas no final.

1. De alguma forma coloquei o mysql daqui
$ wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.17-1.linux_glibc2.5.x86_64.rpm-bundle.tar -P site-cookbooks/mysqld/files/default/usr/local/src/ 
2. De alguma forma colocar a Ruby em RBENV, etc.

Se a versão do rubi estiver baixa, pode haver um erro na verificação de sintaxe do Gemfile e mysql2 pode não ser inserido.

3. Instalação do Git
    # yum -y install libcurl-devel libxslt-devel libxml2-devel expat-devel gettext openssl-devel zlib-devel
Instalado: 
  libcurl-devel.x86_64 0:7.19.7-37.el6_4 libxml2-devel.x86_64 0:2.7.6-14.EL6
  libxslt-devel.x86_64 0:1.1.26-2.el6_3.1

Dependência Instalada: 
  libgcrypt-devel.x86_64 0:1.4.5-11.el6_4 libgpg-error-devel.x86_64 0:1.7-4.el6


# su - chef; cd infra-chef-repo/ 

$ Livro de receitas faca criar git -o site-receitas
$ Livro de receitas faca criar redis -o site-receitas
$ vi site-cookbooks/git/recipes/default.rb
# 
# Nome do Livro de Receitas:: git
# Receita:: padrão
# 
# Direitos autorais 2014, YOUR_COMPANY_NAME
# 
# Todos os direitos reservados - Não Redistribuir
# 
%W{libcurl-devel
 libxslt-devel
 libxml2-devel
 Expatriado-Devel
 gettext
 openssl-devel
 zlib-devel
 libgcrypt-devel
 libGPG-error-devel}.each do |pkg|
  Pacote PKG DO
    not_if "rpm -qa|grep #{pkg}" 
    ação :install
  fim
fim
bash "bash-install-git" do
  not_if "ls -d /usr/local/src/git-1.9.0" 
  código <-EOC
    wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz -P /usr/local/src
    cd /usr/local/src/
    tar zxf git-1.9.0.tar.gz
    cd /usr/local/src/git-1.9.0
    ./configure --prefix=/usr/local/git
    make all
    make install
    ln -sf /usr/local/git/bin/git* /usr/local/bin/
  EOC
end

$ knife solo cook localhost -o git

    # wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz -P /usr/local/src

    # cd /usr/local/src/
    # tar zxf git-1.9.0.tar.gz
    # cd /usr/local/src/git-1.9.0
    # ./configure --prefix=/usr/local/git
    # make all
    # make install

    # ln -s /usr/local/git/bin/git* /usr/local/bin/
# which git
/usr/local/bin/git
# git --version
git version 1.9.0
4.redisのインストール
    # yum install -y --enablerepo=remi redis
    Installed:
      redis.x86_64 0:2.8.9-1.el6.remi

    Dependency Installed:
      gperftools-libs.x86_64 0:2.0-11.el6.3            libunwind.x86_64 0:1.1-2.el6

    # /etc/init.d/redis start

    # chkconfig redis on

# redis-cli ping
PONG

$ vi site-cookbooks/redis/recipes/default.rb
bash "yum-install-redis-from-remi" do
  not_if "which redis-cli"
  code <-EOC yum="" install="" -y="" --enablerepo="remi" redis="" eoc="" end="" service="" "redis"="" do="" supports="" :status=""> true, :restart => true
  Ação [:enable, :start]
fim
$ Knife Cookbook Test Redis
$ faca cozinheiro solo local host -o redis
5. Criação de usuários
# useradd -c 'GitLab' git
# chmod 755 /home/git

# su - git -s /bin/bash

$ mkdir .ssh
$ toque .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ chmod 700 .ssh
$ git config --global user.name "GitLab" 
$ git config --global user.email "gitlab@localhost" 

##### 6. Instalação do gitlab-shell
$ git clone https://github.com/gitlabhq/gitlab-shell.git -b v1.9.4
$ cp -a /home/git/gitlab-shell/config.yml{.example,}
$ /home/git/gitlab-shell/bin/install

Se a instalação falhar, adicione uma variável de ambiente ao .bashrc ou /etc/profile.d/ do usuário git, carregue e então execute novamente
exportar PATH=/caminho-para-rubi:$PATH
8. Instalação no GitLab
$ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-8-stable gitlab

$ cp -a /home/git/gitlab/config/gitlab.yml{.example,}

Desnecessário
-------------------------- 
$ chmod - você é você+rwX /home/git/gitlab/log/ 
$ chmod - você é você+rwX /home/git/gitlab/tmp/ 
$ mkdir /home/git/gitlab/tmp/pids/ 
$ mkdir /home/git/gitlab/tmp/sockets/ 
$ chmod - você é você+rwX /home/git/gitlab/tmp/pids/ 
$ chmod - você é você+rwX /home/git/gitlab/tmp/sockets/ 
$ mkdir /home/git/gitlab/public/uploads
$ chmod - você é você+rwX /home/git/gitlab/public/uploads
-------------------------- 

$ mkdir /home/git/gitlab-satellites
$ ll -d /home/git/gitlab-satellites
drwxrwxr-x 2 git git 4096 12:20, 19 mai de 2014 /home/git/gitlab-satellites
$ 
$ ll -d /home/git/gitlab-satellites
drwxr-x--- 2 git git 4096 19 de maio 12:20, 2014 /home/git/gitlab-satellites

$ cp -a /home/git/gitlab/config/unicorn.rb{.example,}

$ cp -a /home/git/gitlab/config/initializers/rack_attack.rb{.example,}

$ cd /home/git/gitlab
$ git config --global user.name "GitLab" 
$ git config --global user.email "gitlab@localhost" 
$ git config --global core.autocrlf input
9.DB Configurações
$ cp -a /home/git/gitlab/config/database.yml{.mysql,}

$ vi /home/git/gitlab/config/database.yml
$ diff /home/git/gitlab/config/database.yml{.mysql,}
10,12c10,12
<   username: git
<   password: "secure password"
<   # host: localhost
---
>   Nome de usuário: gitxxxxx
> senha: "xxxxxxxx" 
> apresentador: localhost

$ ls -al /home/git/gitlab/config/database.yml
-rw-rw-r-- 1 git git 777 12:32, 19 mai 2014 /home/git/gitlab/config/database.yml
$ chmod o-rwx /home/git/gitlab/config/database.yml
$ ls -al /home/git/gitlab/config/database.yml
-rw-rw---- 1 git git 777 12:32, 19 mai 2014 /home/git/gitlab/config/database.yml

$ vi /home/git/gitlab/config/gitlab.yml
$ diff /home/git/gitlab/config/gitlab.yml{,.example}
227c227
<     bin_path: /usr/local/bin/git
---
>     bin_path: /usr/bin/git

Você pode gerenciar o banco de dados em um local local (designado como database.yml)

# rpm -ivh /usr/local/src/MySQL-shared-5.6.17-1.linux_glibc2.5.x86_64.rpm

 MySQL-devel e shared-compat também podem ser usados, mas se a versão Ruby for 1.8 ou 1.9, a sintaxe do Gemfile não pode ser incluída por algum motivo, então coloquei mysql2 diretamente, mas provavelmente deveria ser normal no bundle '# gem install mysql2 -v '0.3.11''

10. Instalação do Pacote de Gemas
$ saída
# Delícia -y instalar libicu-devel.x86_64
Instalado: 
  Libicu-devel.x86_64 0:4.2.1-9.1.el6_2

Dependência Instalada: 
  libicu.x86_64 0:4.2.1-9.1.el6_2
*Se você travar, o MySQL-devel não é suficiente.

# su - git -s /bin/bash
$ cd /home/git/gitlab
$ Bundle install --deployment --sem desenvolvimento test postgres AWS
11. Inicialização e Configuração do Banco de Dados

Este é um processo em que uma nova tabela de banco de dados é criada, então o diálogo às vezes é feito para não excluir os dados existentes por engano.

$ bundle exec rake gitlab:setup RAILS_ENV=production
Isso criará as tabelas necessárias do banco de dados e irá semear o banco de dados. 
Você perderá qualquer dado anterior armazenado no banco de dados. 
Você quer continuar (sim/não)? Sim

Conta de administrador criada: 

login......... admin@local.host
senha...... xxxxxxxxx

$ bundle ativos de rake executivo:pré-compilação RAILS_ENV=produção

$ saída
12. Script de inicialização, cópia de configuração de log rote
# cp -a /home/git/gitlab/lib/support/init.d/gitlab /etc/rc.d/init.d/ 
# cp -a /home/git/gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/ 

# chkconfig gitlab ligado
# chkconfig --list gitlab
gitlab 0:off 1:off 2:on 3:on 4:on 5:on 6:off

# /etc/init.d/gitlab start
13. Instalação de Passageiros e Configuração de Proxy
# yum -y instalar httpd-devel
Instalado: 
  httpd-devel.x86_64 0:2.2.15-30.el6.centos

Dependência Instalada: 
  APR-devel.x86_64 0:1.3.9-5.el6_2 APR-util-devel.x86_64 0:1.3.9-3.el6_0.1
  APR-util-ldap.x86_64 0:1.3.9-3.el6_0.1 httpd.x86_64 0:2.2.15-30.EL6.CENTOS
  httpd-tools.x86_64 0:2.2.15-30.el6.centos

Completo! 

Se a especificação for baixa, a compilação vai falhar, então crie uma troca de 1GB

# dd if=/dev/zero of=/swap bs=1M contagem=1024
# mkswap /troca
# swapon /swap

# Instala Gem Passageiro --No-Rdoc ---No-ri

# passageiro-instal-apache2-módulo

Crie uma configuração (note que varia dependendo da versão do Ruby)
# cat <EOF>/etc/httpd/conf.d/passenger.conf
> LoadModule passenger_module /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/passenger-4.0.42/buildout/apache2/mod_passenger.so
> <IfModule mod_passenger.c="">
> PassengerRoot /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/passenger-4.0.42
> PassengerDefaultRuby /opt/chef/embedded/bin/ruby
> </IfModule>
> EOF


Não preciso de vhost, então escrevi para o padrão
# <EOF>cat >/etc/httpd/conf/httpd.conf
> ProxyPass / http://localhost:8080/ 
> ProxyPassReverse / http://localhost:8080/ 
> EOF

# /etc/init.d/httpd começar
# chkconfig httpd ligado

# su - git -s /bin/bash
$ cd /home/git/gitlab
$ bundle exec rake gitlab:env:info RAILS_ENV=production

RAILS_ENV=produção

Informações do sistema
Sistema: 
Usuário Atual: git
Usando RVM: não
~Omitido~
Redis versão >= 2.0.0? ... Sim
Seu caminho git bin é "/usr/local/bin/git" 
Git versão >= 1.7.10 ? ... Sim (1.9.0)

Conferindo o GitLab... Terminado

Faça login pelo navegador e mude sua senha http://123.123.123.123/users/sign\_in admin@local.host xxxxxxxx

Crie projetos e muito mais http://123.123.123.123/root/test

Sobre opções de automação Para ser honesto, se você pesquisar no Google o processo que quer automatizar, como Chef ou Docker (ou seja, moderado), vai saber que há pessoas que estão fazendo isso, mas vou anotar isso só por precaução.

・Passageiro

bash "passenger-install-apache2-module" do
  not_if "encontrar /opt/chef/embedded/lib -print|grep mod_passenger.so" 
  código <-EOC
    passenger-install-apache2-module install --auto
  EOC
end

・gitlab

bash "db_initialize,precompile" do
  user "git"
  not_if "mysql -u #{dbuser} -p#{rootpass} -h #{dbhost} -e 'use gitlabhq_production;show tables;'|grep users_projects"
  code <-EOC cd="" ome/git/gitlab="" export="" path="/opt/chef/embedded/bin:$PATH" pt/chef/embedded/bin/bundle="" install="" --deployment="" --without="" development="" test="" postgres="" aws="" pt/chef/embedded/bin/bundle="" exec="" rake="" gitlab:setup="" force="yes" rails_env="production" pt/chef/embedded/bin/bundle="" exec="" rake="" assets:precompile="" rails_env="production" eoc="" end="" ```="" 自動化するにあたり他にも色々地雷があったわけですが、、="" mysql2を入れるにあたり、公式のmysqlだとmysql\_libは消してsharedとshared-compatとdevelいれないといけない等々。="" あとはssl化したりdbを外出ししたり色々やったような記憶はありますが長くなるので省略します。="" あとchefgemに寄ってるレシピは適宜変えたほうがよさそうです。="" #####="" 14.バックアップとリストアについて="" mysqlの場合はdbサーバに以下のようなgrantをしないとダメです(user@host等固有の値は適宜ご指定ください)="" ```="" mysql=""> GRANT LOCK TABLES ON 'gitlabhq_production'.* PARA 'gitlab'@'localhost'; 
PRIVILÉGIOS DE DESCARGA DO MYSQL>; 
mysql> mostrar subsídios para 'gitlab'@'localhost'; 

Parece que o backup deve ser feito no git pelo usuário e $HOME/gitlab como localização. (Acho que é uma boa ideia registrar um cron)

#!/lixo/batida
export PATH=/opt/chef/embedded/bin:$PATH
export LD_LIBRARY_PATH=/opt/chef/embedded/lib:$LD_LIBRARY_PATH

cd /home/git/gitlab
Bundle exec rake gitlab:backup:create RAILS_ENV=production
w
Eco: "Fim de apoio do ancinho." 

Se quiser restaurar, instale o arquivo tar no local especificado como diretório de backup no gitlab.yml (ext:$HOME/gitlab/tmp/backups)

bundle exec rake RAILS_ENV=production gitlab:backup:restore BACKUP=tmp/backups/1425914208 --trace

Dessa forma, especifique a string numérica que é automaticamente anexada ao início do arquivo tar após o caminho de backup.

Com licença por agora. Muito obrigado por demorar tanto.</-EOC></-EOC>

Related Articles