# GitLab em um servidor local - Instalação e configuração de (CI/CD) * Instalação dos pacotes necessários * Instalação do gitlab-ce * Configurações de proxy e certificado SSL * Habilitando as novas mudanças * Configuração do firewalld * Instalação do docker * Autenticação entre servidores usando o sshpass * Configuração de acesso entre servidores gitlab e nginx ## Passo 1 - Instalação dos pacotes necessários Instale os serviços usando o seguinte comando: `# yum -y install curl policycoreutils openssh-server openssh-clients postfix` Inicie ssh e postfix serviços: ``` # systemctl start sshd # systemctl start postfix ``` Habilite os serviços para iniciar com o sistema: ``` # systemctl enable sshd # systemctl enable postfix ``` ## Passo 2 - Instalação do gitlab-ce Primeiro vamos habilitar o repositório community edition `curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash` Agora vamos instalar o gitlab-ce `# yum -y install gitlab-ce` ## Passo 3 - Configurações de proxy e certificado SSL Vá até o diretório onde fica localizado o arquivo: `cd /etc/gitlab/` Abra o arquivo usando o editor de sua preferência: `# vim gitlab.rb` Caso já tenha um servidor de proxy configurado edite o arquivo e adicione as seguintes configurações: ``` external_url 'https://gitlab.marquesconsult.com.br' gitlab_rails['trusted_proxies'] = ['170.254.58.201'] nginx['redirect_https'] = false nginx['listen_port'] = 80 nginx['listen_https'] = false nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on" } ``` A external_url será o endereço de acesso da página do gitlab, e o restante das configurações são para usar a o protocolo https configurado no proxy. ## Passo 4 - Habilitando as novas mudanças Após fazer as alterações execute o seguinte comando para que as alterações entrem em prática: `# gitlab-ctl reconfigure` ## Passo 5 - Configuração do firewalld Instale o firewalld usando o comando abaixo: `# yum -y install firewalld` Agora inicie habilite a inicialização automática junto com o sistema: ``` # systemctl start firewalld # systemctl enable firewalld ``` Em seguida, libere as portas para os serviços. Abriremos portas SSH, HTTP e HTTPS para nossa configuração do GitLab. Execute os comandos firewall-cmd abaixo para abrir as portas. ``` # firewall-cmd --permanent --add-service ssh # firewall-cmd --permanent --add-service http # firewall-cmd --permanent --add-service https ``` Agora recarregue o firewall e verifique a configuração do firewalld. Verifique se SSH, HTTP e HTTPS estão na lista. ``` # firewall-cmd --reload # firewall-cmd --list-all ``` ## Passo 6 - Instalação do docker Remova instalações anteriores usando os seguintes comandos: ``` $ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ``` Atualize sistema: `yum check-update` Instale o docker novamente: ``` curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh usermod -aG docker #you_user ``` Instaledo Docker Machine ``` base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine ``` Instale o Docker Compose ``` curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ``` ``` curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine ``` ## Passo 7 - Autenticação entre servidores usando o sshpass O sshpass será usado para fazer a cópia protegida dos arquivos no build do servidor gitlab para o servidor remoto. Habilite o repositório epel para instalar o sshpas ``` # yum search epel-release # yum info epel-release # yum install epel-release ``` Agora instale o sshpass `yum --enablerepo=epel -y install sshpass` ## Passo 8 - Configuração de acesso entre servidores gitlab e nginx ### 8.1 Gerando as chaves SSH Gere um par de chaves em sua máquina local com o comando: `ssh-keygen -t rsa` Após executar o comando apenas siga pressionando enter e confirmando as informações como padrão. Será exibido algo como: ``` Generating public/private rsa key pair. Enter file in which to save the key (/home/andreson/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/andreson/.ssh/id_rsa. Your public key has been saved in /home/andreson/.ssh/id_rsa.pub. The key fingerprint is: SHA256:ac7iODrdkaVc8YNCf4EL04YM4NLRvlMYDW9cF38zOME andreson@elementary-os The key's randomart image is: +---[RSA 2048]----+ | ooo= o..oo. | | o .ooB.=...Eo | |. o. ++= = .+ + | | . o.o *.+ o o | | + *S. . | | o =+ | | . o..o | | . oo.. | | .o... | +----[SHA256]-----+ ``` São geradas algumas chaves no diretório .ssh que fica localizado na home. Digite o seguinte comando para verificar se as chaves foram geradas: `ls -la $HOME/.ssh` Será exibido algo do tipo: ``` drwx------ 2 root root 4096 Jan 15 11:24 . dr-xr-x---. 4 root root 4096 Jan 23 13:01 .. -rw------- 1 root root 804 Jan 15 11:24 authorized_keys -rw------- 1 root root 1679 Jan 13 11:32 id_rsa -rw-r--r-- 1 root root 408 Jan 13 11:32 id_rsa.pub -rw-r--r-- 1 root root 520 Jan 15 11:24 known_hosts ``` A chave "id_rsa" deve ser mantida apenas na sua máquina local. Já o arquivo "id_rsa.pub" deve ser carredo para a máquina remota onde serão transferidos os arquivos e executados os comandos ssh. No próximo passo vamos transferir a chave para o servidor remoto. ### 8.2 Copiando a chave pública para o servidor remoto Para copiar a chave pública diretamente no arquivo do authorized_keys do servidor remoto use o comando abaixo: `ssh-copy-id user@serverip` No lugar de "user" você deve substituir pelo usuário que se conectará ao servidor para fazer a transferência de arquivos. O serverip deverá ser substituído pelo ip da máquina remota. Depois que o comando for executado será exibido algo parecido com: ``` The authenticity of host 'Server's IP address' can't be established. RSA key fingerprint is ... Are you sure you want to continue connecting (yes/no)? ``` Digite yes e pressione enter. Será exibido uma outra mensagem em seguida como a mensagem mostrada abaixo solicitando a senha do usuário definida no comando "ssh-copy-id", na maioria das vezes é o usuário root. ``` Warning: Permanently added 'SERVER IP' (RSA) to the list of known hosts. user@serverip's password: ``` Depois de digitar a senha e confirmar você será saudado com outra mensagem: ``` Now try logging into the machine, with "ssh 'user@serverip'", and check in: ~/.ssh/authorized_keys* to make sure we haven't added extra keys that you weren't expecting. ```