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>