manual implantacao Page History
Implantação
Sumário
OBS: As configurações apresentadas nesse manual estão de acordo com a implementação local, as devidas alterações devem ser feitas para outros ambiente.
Preparação da estação de trabalho
Para gerenciar o SPB, é necessária uma estação de trabalho GNU/Linux, que pode ser Debian 8 ou posterior, Ubuntu 14.04 ou superior, ou CentOS 7 ou superior (e equivalentes como RHEL 7 ou superior, ou Fedora). O processo também pode ser feito em outros sistemas, desde que os pacotes equivalentes estejam instalados.
As seguintes ferramentas serão necessárias:
Para instalar em Debian/Ubuntu:
$ sudo apt-get install git ruby
$ sudo gem install chake
Para instalar em CentOS/RHEL/Fedora:
$ sudo yum install git ruby
$ sudo gem install chake
As próximas dependências são utilizadas necessariamente nos ambiente locais e podem ser instaladas pelos comandos:
Para instalar em Debian/Ubuntu:
$ sudo apt-get install shunit2 moreutils redir
Para instalar em CentOS/RHEL/Fedora:
$ sudo yum install shunit2 moreutils redir
Além dessas ferramentas, será necessário um emulador de terminal. O emulador de terminal padrão do seu ambiente de trabalho, ou qualquer outro, vai servir.
Obtendo o Repositório de Configuração
Para iniciar, é necessário uma conta e usuário no SPB, com uma chave SSH configurada. Mais informações em Documentação de Apoio.
Para obter o repositório de configuração, é necessário clonar o
repositório com git
:
$ git clone git@portal.softwarepublico.gov.br:softwarepublico/softwarepublico.git
A partir daqui, todos os passos serão executados de dentro do repositório, então se certifique que o seu shell está no diretório onde foi clonado o repositório:
$ cd softwarepublico/
Preparação dos Servidores
Os servidores precisam estar acessíveis por SSH. Caso necessário, podem ser feitas configurações do SSH em
config/local/ssh_config
para isso.O usuário que vai conectar via SSH nos servidores precisa:
- ter permissão de usar
sudo
sem a necessidade de digitar senha. - ter acesso SSH configurado via chave SSH para evitar digitar senha, a partir da estação de trabalho utilizada. Ou seja, a chave pública SSH da estação de trabalho deve ser copiada para cada servidor. Para mais informações, veja a Documentação de Apoio.
- ter permissão de usar
O
sudo
não deve estar configurado com a opçãorequiretty
. Se houver uma linha como a seguinte em/etc/sudoers
, ela deve ser removida (ou comentada, como preferir):$ Defaults requiretty
A máquina
integration
precisa ter o utilitárionetcat
. No CentOS 7, pode ser instalado o pacotenmap-ncat
.
Configuração do Ambiente Alvo
O SPB tem o conceito de "ambientes", que são diferentes instalações da
mesma plataforma. Todas as informações específicas sobre um determinado
ambiente estão centralizadas em arquivos dentro do diretório
config/${ambiente}/
. Por exemplo, o ambiente "local", que se destina
ao uso para desenvolvimento local com máquinas virtuais, possui o
seguinte conteúdo::
$ find config/local/ | sort
config/local/config.yaml
config/local/ips.yaml
config/local/ssh_config
Estes arquivos possuem a seguinte finalidade:
config.yaml
: Parâmetros gerais de configuraçãoips.yaml
: Tabela de IP's (na rede local) das máquinas que compõem o ambiente.ssh_config
: Configuração necessária para o SSH. Pode ser um arquivo caso não seja necessária nenhuma configuração especial para acessar as máquinas (e.g. se você está na mesma rede local que elas.
Vamos agora verificar o conteúdo de cada arquivo no ambiente
local. Primeiro, config.yaml
:
admins:
- ["Paulo Meirelles", "paulo@softwarelivre.org"]
site_url: https://softwarepublico.dev
external_hostname: softwarepublico.dev
external_ip: 10.10.10.6
colab_from_address: '"Portal do Software Publico" <noreply@softwarepublico.dev>'
server_email: '"Portal do Software Publico" <noreply@softwarepublico.dev>'
email_subject_prefix: '[spb]'
lists_hostname: listas.softwarepublico.dev
lists_admin: paulo@softwarelivre.org
relay_hostname: relay.softwarepublico.dev
relay_ip: 10.10.10.3
alt_ssh_port: 5555
from_address: noreply@softwarepublico.dev
raven_dsn: https://a5e2f92a83774dfc9de66486e0fe970b:1a9229a4e1d2483582144d302fb53115@sentry.tracy.com.br/19
Para nossa sorte, o significado de cada um dos campo acima deve ser autoexplicativo.
O arquivo ips.yaml
contém uma tabela com os endereços IP de cada
servidor da plataforma na rede local. Exemplo:
integration: 10.10.10.2
email: 10.10.10.3
social: 10.10.10.4
database: 10.10.10.5
reverseproxy: 10.10.10.6
Já o arquivo ssh_config
contém opções padrão de configuração do
ssh
para conexão às máquinas::
Host *
ForwardAgent
Host reverseproxy.unconfigured
Hostname 189.9.151.16
User spb
Host reverseproxy
Hostname 10.18.0.15
User spb
Port 55555
ProxyCommand ssh spb@189.9.151.16 -p 22 nc %h %p
Host database
Hostname 10.18.0.16
User spb
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.16 nc %h %p
Host social
Hostname 10.18.0.17
User spb
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.16 nc %h %p
Host email
Hostname 10.18.0.18
User spb
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.16 nc %h %p
Host integration
Hostname 189.9.151.16
User spb
# Porta 22 de 189.9.151.16 cai aqui entao nao precisa de ProxyCommand
Configuração do DNS
(FIXME: o documento foi gerado com configurações locais, ou seja, não existe configurações de DNS)
Verificando o Ambiente
Para listar as máquinas do ambiente::
$ rake nodes SPB_ENV=local
O comando acima deve dar o seguinte resultado::
integration ssh
email ssh
social ssh
database ssh
reverseproxy ssh
Note que todas as vezes que formos chamar rake
, será preciso
informar sobre qual ambiente desejamos operar (SPB_ENV=local
).
Caso você for operar sobre apenas um ambiente, ou caso você queira
evitar digitação, você pode criar um arquivo local.rake
na raiz do
repositório com o seguinte conteúdo::
ENV['SPB_ENV'] ||= 'local'
Isto fará com que o valor e SPB_ENV
seja sempre local
, a
não ser que você informe na linha de comando. Daqui para frente, vamos
sempre exibir o parâmetro SPB_ENV=local
, mas lembre-se que ele pode
ser omitido se você tiver configurado o default em local.rake
.
Para testar a conectividade às máquinas, devemos antes realizar a preconfiguração das máquinas, caso o sistema nunca tenha sido instalado. Note que se este passo deve ser realizado uma única vez::
$ rake preconfig SPB_ENV=local
Finalmente, para testar a conectividade às máquinas, podemos executar um comando nelas::
$ rake run SPB_ENV=local
$ <PROMPT PARA VOCÊ DIGITAR>
No prompt, entre um comando simples como sudo date
. O resultado deve ser
parecido com o seguinte::
$ rake run SPB_ENV=local
$ sudo date
integration: $ sudo date
integration: Qui Mai 14 18:59:19 BRT 2015
email: $ sudo date
email: Qui Mai 14 18:59:22 BRT 2015
social: $ sudo date
social: Qui Mai 14 18:59:24 BRT 2015
database: $ sudo date
database: Qui Mai 14 18:59:27 BRT 2015
reverseproxy: $ sudo date
reverseproxy: Qui Mai 14 18:59:28 BRT 2015
Se o resultado se parece com o exemplo acima, e você não precisou digitar a sua senha nehuma vez, significa que:
- Você conseguiu conectar em todas as máquinas.
- O
sudo
sem senha está configurado corretamente. Está tudo certo para começar!
Nota sobre certificado SSL
O repositório de gestão de configuração não contém os par de chaves do cerficado SSL para o domínio softwarepublico.dev. Antes de realizar a implantação, você deve colocar o par de chaves nos seguintes locais:
cookbooks/reverse_proxy/files/host-reverseproxy/softwarepublico.dev.crt
: certificado (chave pública), em formato PEM.cookbooks/reverse_proxy/files/host-reverseproxy/softwarepublico.dev.key
: chave privada, em formato PEM.
Para uma melhor segurança da chave privada, é recomendado que a mesma
seja criptografada com GnuPG, o que é suportado pela ferramente de
implantação chake
. Isso pode ser feito da seguinte maneira::
$ cd cookbooks/reverse_proxy/files/host-reverseproxy/
# criptografar:
$ gpg --encrypt --recipient XXXXXXXX --output softwarepublico.dev.key.gpg softwarepublico.dev.key
# conferir que o conteúdo descriptografado está OK:
$ gpg --decrypt softwarepublico.dev.key.gpg
# apagar o arquivo sem criptografia:
$ rm softwarepublico.dev.key
# retornar ao diretório de origem
$ cd -
XXXXXXXX
deve ser substituído pelo ID da chave que está sendo usada
para criptografar.
Antes de fazer a implantação, o chake
vai enviar a chave privada
descriptografada apenas à máquina que vai ser o frontend HTTPS. Caso sua
chave GnuPG necessite de uma senha para ser usada, ela será solicitada.
Primeira instalação
Uma vez configurados os parâmetros em config/local/
, podemos
dar início à instalação. O primeiro passo é uma preconfiguração que
precisamos fazer, caso não tenha sido feito em :ref:verificandoambiente
::
$ rake preconfig SPB_ENV=local
Este comando vai fazer uma configuração inicial que é necessária para o resto do processo, e só é necessária fazer uma vez.
Depois de completo o procedimento acima, para aplicar as configurações a todos os servidores basta executar::
$ rake converge SPB_ENV=local
O comando converge
na verdade é o default, então o seguinte é
equivalente::
$ rake SPB_ENV=local
Se você tiver configurado o ambiente local no local.rake
(ver instruções acima), então o comando seguinte, também equivalente, é
muito mais simples::
$ rake
Todas as possibilidades de comandos serão listados se você executar
rake -T
. Consulte também a documentação do chake_.
Atualizações
O primeiro passo para realizar a atualização do ambiente consiste em entrar na pasta do repositório de configuração. Em caso de dúvida, veja a seção "Obtendo o Repositório de Configuração".
Em seguida atualize o repositório de gestão de configuração com o comando abaixo::
$ cd /diretorio/de_configuracao/softwarepublico
$ git pull
Após isso, basta executar o comando converge
novamente no ambiente
especifico::
$ rake converge SPB_ENV=[Ambiente Especifico]
Repare que SPB_ENV
, assume os seguintes valores de acordo com o ambiente
que será atualizado. Logo, se você deseja atualizar o ambiente de homologação
use SPB_ENV=homologa
. Se você deseja atualizar o ambiente de produção, use
SPB_ENV=prod
.
Caso após a atualização o noosfero não funcionar corretamente, provavelmente um erro de '502 Bad Gateway' irá aparecer, reinicie o ambiente social::
$ rake run:social SPB_ENV=[Ambiente Especifico]
$ sudo shutdown -r
Aguarde o ambiente reiniciar, e atualize a pagina.
Atualizações pontuais
Algumas vezes é preciso fazer atualizações em apenas um dos ambientes, como por exemplo, aplicar uma correção de bug. Tais correções/atualizações podem não precisar convergir o ambiente inteiro. Neste caso é possível fazer a atualização em ambientes especificos, por meio dos comandos abaixo:
- Atualizar a social:
rake converge:social SPB_ENV=homologa
- Atualizar a integration:
rake converge:social SPB_ENV=homologa
- Atualizar a email:
rake converge:email SPB_ENV=homologa
- Atualizar a database:
rake converge:database SPB_ENV=homolga
- Atualizar a reverseproxy:
rake converge:reverseproxy SPB_ENV=homologa
Atenção: Estes comandos devem ser executados dentro da pasta "softwarepublico", previamente clonada do repositório. Em caso de dúvida consulte a seção "Obtendo o Repositório de Configuração".
Lembrando que a variável SPB_ENV
, assume o valor do ambiente em que será
executado a atulização. Logo, se você estiver querendo atualizar o ambiente
de homologação então use SPB_ENV=homologa
, caso você deseje atualizar o
ambiente de produção utilize SPB_ENV=prod
.