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
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.
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/
Os servidores precisam estar acessíveis por SSH. Caso necessário, podem ser feitas configurações do SSH em config/prod/ssh_config para isso.
O usuário que vai conectar via SSH nos servidores precisa:
O sudo não deve estar configurado com a opção requiretty. 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ário netcat. No CentOS 7, pode ser instalado o pacote nmap-ncat.
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:
Vamos agora verificar o conteúdo de cada arquivo no ambiente prod. Primeiro, config.yaml:
rpm_repository: https://copr-be.cloud.fedoraproject.org/results/softwarepublico/v5/epel-7-$basearch/
rpm_gpgkey: https://copr-be.cloud.fedoraproject.org/results/softwarepublico/v5/pubkey.gpg
admins:
- ["Nayanne Araújo", "nayanne.bonifacio@planejamento.gov.br"]
- ["Marisa Souza dos Santos", "marisa.santos@planejamento.gov.br"]
site_url: https://softwarepublico.gov.br
external_hostname: softwarepublico.gov.br
monitor_external_hostname: status.softwarepublico.gov.br
alternative_hostnames:
- www.softwarepublico.gov.br
- portal.softwarepublico.gov.br
- beta.softwarepublico.gov.br
external_ip: 189.9.151.64
alt_ssh_port: 55555
colab_from_address: '"Portal do Software Publico" <noreply@portal.softwarepublico.gov.br>'
server_email: '"Portal do Software Publico" <noreply@portal.softwarepublico.gov.br>'
email_subject_prefix: '[spb]'
lists_hostname: listas.softwarepublico.gov.br
lists_admin: nayanne.bonifacio@planejamento.gov.br
from_address: noreply@softwarepublico.gov.br
relay_hostname: relay.softwarepublico.gov.br
relay_ip: 189.9.151.68
external_outgoing_mail_relay: 189.9.150.53
external_outgoing_mail_domain: serpro.gov.br
raven_dsn: https://4418146896924efe9b73d557f803f047:8a59f39b5f584ff589ecf3dd47faaead@sentry.tracy.com.br/13
google_analytics_id: 'UA-64206731-1'
munin_master: 10.21.0.10
colab_http_workers: 32
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:
reverseproxy: 10.21.0.4
database: 10.21.0.6
social: 10.21.0.5
email: 10.21.0.7
integration: 10.21.0.8
mezuro: 10.21.0.11
monitor: 189.9.151.77
Já o arquivo ssh_config contém opções padrão de configuração do ssh para conexão às máquinas:
Host *
ForwardAgent yes
Host reverseproxy
User spb
Hostname 10.21.0.4
Port 55555
ProxyCommand ssh spb@189.9.151.64 -p 22 nc %h 55555
Host reverseproxy.unconfigured
User spb
Hostname 189.9.151.64
Host integration
User spb
Hostname 189.9.151.64
Host database
User spb
Hostname 10.21.0.6
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.64 -p %p nc %h 22
Host social
User spb
Hostname 10.21.0.5
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.64 -p %p nc %h 22
Host email
User spb
Hostname 10.21.0.7
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.64 -p %p nc %h 22
Host mezuro
User spb
Hostname 10.21.0.11
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.64 -p %p nc %h 22
Host monitor
User spb
Hostname 189.9.151.77
# connect via reverseproxy host
ProxyCommand ssh spb@189.9.151.64 -p %p nc %h 22
A tabela a seguir foi gerada dinamicamente a partir da configuração do ambiente prod. As seguintes entradas precisam ser configuradas no DNS:
Tipo | Entrada | Aponta para |
---|---|---|
A | softwarepublico.gov.br | 189.9.151.64 |
A | listas.softwarepublico.gov.br | 189.9.151.64 |
A | relay.softwarepublico.gov.br | 189.9.151.68 |
Tipo | Entrada | Aponta para |
---|---|---|
MX | softwarepublico.gov.br | relay.softwarepublico.gov.br. |
MX | listas.softwarepublico.gov.br | relay.softwarepublico.gov.br. |
Tipo | Entrada | Aponta para |
---|---|---|
PTR | 189.9.151.64 | softwarepublico.gov.br. |
PTR | 189.9.151.68 | relay.softwarepublico.gov.br. |
Tipo | Entrada | Deve conter |
---|---|---|
TXT (SPF: “v=spf1 ...”) | softwarepublico.gov.br | include:serpro.gov.br |
TXT (SPF: “v=spf1 ...”) | listas.softwarepublico.gov.br | include:serpro.gov.br |
Importante: A máquina integration tem o requisito mínimo de 8Gb de memória RAM.
Para listar as máquinas do ambiente:
$ rake nodes SPB_ENV=prod
O comando acima deve dar o seguinte resultado:
integration ssh
email ssh
social ssh
database ssh
mezuro ssh
monitor ssh
reverseproxy ssh
Note que todas as vezes que formos chamar rake, será preciso informar sobre qual ambiente desejamos operar (SPB_ENV=prod). 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'] ||= 'prod'
Isto fará com que o valor e SPB_ENV seja sempre prod, a não ser que você informe na linha de comando. Daqui para frente, vamos sempre exibir o parâmetro SPB_ENV=prod, 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=prod
Finalmente, para testar a conectividade às máquinas, podemos executar um comando nelas:
$ rake run SPB_ENV=prod
$ <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=prod
$ 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
mezuro: $ sudo date
mezuro: Qui Mai 14 18:59:24 BRT 2015
monitor: $ sudo date
monitor: Qui Mai 14 18:59:25 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:
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.gov.br. Antes de realizar a implantação, você deve colocar o par de chaves nos seguintes locais:
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.gov.br.key.gpg softwarepublico.gov.br.key
# conferir que o conteúdo descriptografado está OK:
$ gpg --decrypt softwarepublico.gov.br.key.gpg
# apagar o arquivo sem criptografia:
$ rm softwarepublico.gov.br.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.
Uma vez configurados os parâmetros em config/prod/, podemos dar início à instalação. O primeiro passo é uma preconfiguração que precisamos fazer, caso não tenha sido feito em Verificando o ambiente:
$ rake preconfig SPB_ENV=prod
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=prod
O comando converge na verdade é o default, então o seguinte é equivalente:
$ rake SPB_ENV=prod
Se você tiver configurado o ambiente prod 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.
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/deconfiguracao/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=prod
$ sudo shutdown -r
Aguarde o ambiente reiniciar, e atualize a pagina.
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 mezuro: rake converge:mezuro SPB_ENV=homolga
- Atualizar a monitor: rake converge:monitor 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.