From ca349857155d74522ac500c3a3bf419bf475395d Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Thu, 14 May 2015 19:10:16 -0300 Subject: [PATCH] checkpoint + Data for the staging environment --- config/homologa/config.yaml | 15 +++++++++++++++ config/homologa/ips.yaml | 5 +++++ config/homologa/ssh_config | 33 +++++++++++++++++++++++++++++++++ config/local/config.yaml | 8 ++++---- config/production/config.yaml | 4 +--- docs/.gitignore | 1 + docs/arquitetura.rst | 10 ++++++++++ docs/build.rb | 10 ++++++++++ docs/implantacao.rst | 4 ---- docs/implantacao.rst.in | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ docs/local.mk | 7 +++++-- docs/manutencao.rst | 4 ++++ 12 files changed, 288 insertions(+), 13 deletions(-) create mode 100644 config/homologa/config.yaml create mode 100644 config/homologa/ips.yaml create mode 100644 config/homologa/ssh_config create mode 100644 docs/build.rb delete mode 100644 docs/implantacao.rst create mode 100644 docs/implantacao.rst.in diff --git a/config/homologa/config.yaml b/config/homologa/config.yaml new file mode 100644 index 0000000..f1aa91e --- /dev/null +++ b/config/homologa/config.yaml @@ -0,0 +1,15 @@ +admins: + - ["Nayanne Araújo", "nayanne.bonifacio@planejamento.gov.br"] + - ["Marisa Souza dos Santos", "marisa.santos@planejamento.gov.br"] +external_hostname: homologa.softwarepublico.gov.br +external_ip: 189.9.151.65 +site_url: https://homologa.softwarepublico.gov.br +colab_from_address: '"Portal do Software Publico (homologação)" ' +server_email: '"Portal do Software Publico (homologação)" ' +email_subject_prefix: '[spb]' +lists_hostname: listas.homologa.softwarepublico.gov.br +lists_admin: nayanne.bonifacio@planejamento.gov.br +relay_hostname: relay.homologa.softwarepublico.gov.br +relay_ip: 189.9.151.66 +alt_ssh_port: 55555 +from_address: noreply@homologa.softwarepublico.gov.br diff --git a/config/homologa/ips.yaml b/config/homologa/ips.yaml new file mode 100644 index 0000000..1c8442c --- /dev/null +++ b/config/homologa/ips.yaml @@ -0,0 +1,5 @@ +reverseproxy: 10.0.13.2 +database: 10.0.13.6 +social: 10.0.13.4 +email: 10.0.13.5 +integration: 10.0.13.7 diff --git a/config/homologa/ssh_config b/config/homologa/ssh_config new file mode 100644 index 0000000..58a9c85 --- /dev/null +++ b/config/homologa/ssh_config @@ -0,0 +1,33 @@ +Host * + ForwardAgent yes + +Host reverseproxy + Hostname 164.41.9.49 + Port 55555 + +Host reverseproxy.unconfigured + Hostname 164.41.9.49 + +Host database + Hostname 10.10.40.47 + Port 55555 + # connect via reverseproxy host + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22 + +Host social + Hostname 10.10.40.46 + Port 55555 + # connect via reverseproxy host + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22 + +Host email + Hostname 10.10.40.48 + Port 55555 + # connect via reverseproxy host + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22 + +Host integration + Hostname 10.10.40.45 + Port 55555 + # connect via reverseproxy host + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22 diff --git a/config/local/config.yaml b/config/local/config.yaml index 86d74f1..d971eee 100644 --- a/config/local/config.yaml +++ b/config/local/config.yaml @@ -1,14 +1,14 @@ admins: - - - - Paulo Meirelles - - paulo@softwarelivre.org -external_hostname: softwarepublico.dev + - ["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" ' server_email: '"Portal do Software Publico" ' 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 diff --git a/config/production/config.yaml b/config/production/config.yaml index 4922af1..0b2013c 100644 --- a/config/production/config.yaml +++ b/config/production/config.yaml @@ -1,7 +1,5 @@ admins: - - - - Paulo Meirelles - - paulo@softwarelivre.org + - ["Paulo Meirelles", "paulo@softwarelivre.org"] external_hostname: beta.softwarepublico.gov.br external_ip: 164.41.9.49 site_url: https://beta.softwarepublico.gov.br diff --git a/docs/.gitignore b/docs/.gitignore index 6e48c0f..eeaee99 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1 +1,2 @@ architecture.png +implantacao.rst diff --git a/docs/arquitetura.rst b/docs/arquitetura.rst index 7aa7d35..3fae272 100644 --- a/docs/arquitetura.rst +++ b/docs/arquitetura.rst @@ -6,3 +6,13 @@ A figura a seguir representa a arquitetura do SPB. .. TODO incluir uma figura feita manualmente, a gente deve ter isso de .. apresentações anterires .. image:: architecture.png + +TODO: + +* descrever arquitetura +* descrever papel de cada máquina +* descrever conexões +* adicionar links com o repositório de gestão de configuração + +* descrever repositório de gestão de configuração +* descrever como o chake funciona diff --git a/docs/build.rb b/docs/build.rb new file mode 100644 index 0000000..7dca52e --- /dev/null +++ b/docs/build.rb @@ -0,0 +1,10 @@ +$SPB_ENV = ENV.fetch('SPB_ENV', 'local') + +$_.gsub!('@@SPB_ENV@@', $SPB_ENV) + +$_.gsub!(/@@config\(([^\)]*)\)@@/) do |f| + lines = File.read("../config/#{$SPB_ENV}/#{$1}").lines + lines.shift + lines.map do |line| + ' ' + line + end.join +end diff --git a/docs/implantacao.rst b/docs/implantacao.rst deleted file mode 100644 index 31590e2..0000000 --- a/docs/implantacao.rst +++ /dev/null @@ -1,4 +0,0 @@ -Implantação -=========== - -.. include:: dns.rst diff --git a/docs/implantacao.rst.in b/docs/implantacao.rst.in new file mode 100644 index 0000000..cb204ae --- /dev/null +++ b/docs/implantacao.rst.in @@ -0,0 +1,200 @@ +Implantação +=========== + +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). + +As seguintes ferramentas serão necessárias: + +* git_: ferramenta de controle de versão. +* chake_: ferramenta de gestão de configuração. + +.. _chake: https://gitlab.com/terceiro/chake +.. _git: http://git-scm.com/ + +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. + +Obtendo o repositório de configuração +------------------------------------- + +Para iniciar, é necessário uma conta e usuário no SPB, com uma chave SSH +configurada. + +Para obter o repositório de configuração, é necessário clonar o +repositório com ``git``:: + + $ git clone git@beta.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/@@SPB_ENV@@/ssh_config`` para isso. +* O usuário que vai conectar via SSH nos servidores precisa: + * ter acesso SSH configurado via chave SSH para evitar digitar senha. + * ter permissão de usar ``sudo`` sem a necessidade de digitar senha. + +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 + +Cada um destes arquivos possui uma finalidade: + +=============== ======================================================= +Arquivo Finalidade +=============== ======================================================= +``config.yaml`` Parâmetros gerais de configuração +``ips.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 +**@@SPB_ENV@@**. Primeiro, ``config.yaml``: + +.. code-block:: yaml + + @@config(config.yaml)@@ + +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: + +.. code-block:: yaml + + @@config(ips.yaml)@@ + +Já o arquivo ``ssh_config`` contém opções padrão de configuração do +``ssh`` para conexão às máquinas:: + + @@config(ssh_config)@@ + +Configuração do DNS +------------------- + +A tabela a seguir foi gerada dinamicamente a partir da configuração do +ambiente **@@SPB_ENV@@**. As seguintes entradas precisam ser configuradas no +DNS: + +.. include:: dns.rst + +Verificando o ambiente +---------------------- + +Para listar as máquinas do ambiente:: + + $ rake nodes SPB_ENV=@@SPB_ENV@@ + +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=@@SPB_ENV@@``). +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'] ||= '@@SPB_ENV@@' + +Isto fará com que o valor e ``SPB_ENV`` seja sempre ``@@SPB_ENV@@``, a +não ser que você informe na linha de comando. Daqui para frente, vamos +representar o parâmetro ``SPB_ENV=@@SPB_ENV@@`` entre ``[]`` pra lembrar +que se ele estiver configurado no ``local.rake``, pode ser omitido. + +Para testar a conectividade às máquinas, podemos executar um comando +nelas:: + + $ rake nodes [SPB_ENV=@@SPB_ENV@@] + $ + +No prompt, entre um comando simples como ``sudo date``. O resultado deve ser +parecido com o seguinte:: + + $ rake run + $ 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 1) você conseguiu conectar em todas as máquinas +e 2) o sudo sem senha está configurado corretamente. Está tudo certo para +começar! + +Primeira instalação +------------------- + +Uma vez configurados os parâmetros em ``config/@@SPB_ENV@@/``, podemos +dar início à instalação. O primeiro passo é uma preconfiguração que +precisamos fazer:: + + $ rake preconfig [SPB_ENV=@@SPB_ENV@@] + + +This will perform some initial configuration to the system that is required +before doing the actual deployment. + +After that: + +```bash +$ rake SPB_ENV=production # deploys all servers +$ rake nodes SPB_ENV=production # lists all servers +$ rake converge:$server SPB_ENV=production # deploys only $server +``` + +You can also do `export SPB_ENV=production` in your shell and omit it in the +`rake` calls. + +See the output of `rake -T` for other tasks. diff --git a/docs/local.mk b/docs/local.mk index 35ae473..16416c8 100644 --- a/docs/local.mk +++ b/docs/local.mk @@ -1,14 +1,17 @@ # autogenerated DNS documentation BUILT += dns.rst - dns.rst: ../test/dns_test.sh (cd .. && sh test/dns_test.sh --doc) > $@ BUILT += architecture.png - architecture.png: architecture.dot dot -Tpng -o $@ $< +SPB_ENV ?= local + +BUILT += $(patsubst %.in, %, $(wildcard *.rst.in)) +%.rst: %.rst.in build.rb + ruby -p build.rb $< > $@ || ($(RM) $@; false) CLEAN_FILES += $(BUILT) diff --git a/docs/manutencao.rst b/docs/manutencao.rst index 96786d6..dbe55c3 100644 --- a/docs/manutencao.rst +++ b/docs/manutencao.rst @@ -1,2 +1,6 @@ Manutenção ========== + +* mantendo o sistema atualizado + +* modificando configurações -- libgit2 0.21.2