DevOps na prática: Instalando PostgreSQL compilado com CHEF

Este Post tem o intuito de apresentar como instalar e configurar o PostgreSQL 9.3.1 compilado através do CHEF. Além...

Dextra

View posts by Dextra
Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes. A Dextra faz parte da Mutant, empresa B2B líder no mercado brasileiro e especialista em Customer Experience para plataformas digitais.
Data de publicação: 08/11/2013

Este Post tem o intuito de apresentar como instalar e configurar o PostgreSQL 9.3.1 compilado através do CHEF. Além disso, a receita que apresentarei pode ser adicionada para trabalhar com um disco otimizado: RAID / EBS / EBS IO Otimizado / SAS / etc.

Utilizarei o CHEF-SOLO para execução do procedimento, porém, a mesma receita pode ser adicionada para trabalhar com Client/Server.

Preparando o nosso ambiente:

OBS.: realizei os testes em Ubuntu Server.

1 – Instale o client do GIT para baixar a receita

# apt-get install git-core

2 – Instalar o CHEF-SOLO

#curl -L https://www.opscode.com/chef/install.sh | bash
# wget http://github.com/opscode/chef-repo/tarball/master
# tar -zxvf master
# mv opscode-chef-repo-f9d4b0c/ /opt/chef-repo
# mkdir /opt/chef-repo/.chef

3 – Configurar o CHEF-SOLO

Crie o arquivo /opt/chef-repo/.chef/knife.rb e adicione a seguinte linha:

cookbook_path [ '/opt/chef-repo/cookbooks' ]

Crie o arquivo /opt/chef-repo/solo.rb e adicione as seguintes linhas:

file_cache_path "/opt/chef-solo"
cookbook_path "/opt/chef-repo/cookbooks"

4 – Realize o Download da receita

# git clone https://github.com/ximenes/chef_pginstall.git -l /opt/chef-repo/cookbooks/pginstall

5 – Crie o arquivo JSON para execução da receita (/opt/chef-repo/JSON_NAME.json) e adicione a seguinte linha:

{ "run_list": [ "recipe[pginstall]" ] }

6 – Agora, basta executar a receita pginstall baixada do GitHub:

# chef-solo -c /opt/chef-repo/solo.rb -j /opt/chef-repo/JASON_NAME.json

Depois da execução da receita, o PostgreSQL já esta rodando e apto a receber os databases necessários.

Mas a intenção deste Post não somente realizar a instalação do Postgres, mas sim explicar um pouco o funcionamento da ferramenta. Para isso, logo abaixo, estou postando a receita comentada:

#
# Cookbook Name:: pginstall
# Recipe:: PostgreSQL 9.3.1
#
# Copyright 2013, Eduardo Ximenes Soares
#
# All rights reserved - Do Not Redistribute
#
####### Pacotes essênciais para instalação do Postgres Compilado: #######
package "build-essential" do
  action :install
end
package "zlib1g-dev" do
  action :install
end
package "libreadline6-dev" do
  action :install
end
#########################################################################
####### Realizando o download e a instalação do PostgreSQL 9.3.1  #######
bash "download_install_pg" do
  user "root"
  code <<-EOH
    wget http://ftp.postgresql.org/pub/source/v9.3.1/postgresql-9.3.1.tar.gz -O /opt/postgresql-9.3.1.tar.gz
    tar -zxf /opt/postgresql-9.3.1.tar.gz -C /opt/
    (cd /opt/postgresql-9.3.1/ && ./configure --prefix=/usr/local/pgsql9.3.1 && make && make install)
  EOH
end
####### Adicionando arquivo de START do PostgreSQL no /etc/init.d #######
####### Adicionei este item na receita, pois necessita de uma 	  #######
####### configuração específica					  #######
cookbook_file "/etc/init.d/postgresql" do
  source "postgresql"
  mode 0544
  owner "root"
  group "root"
end
####### Criando link simbólico necessário para armazenar os	  #######
####### executáveis do PostgreSQL 				  #######
execute "link_pg" do
  command "ln -s /usr/local/pgsql9.3.1/ /usr/local/pgsql"
end
####### Adicionando o start do PostgreSQL para iniciar	          #######
####### automaticamente						  #######
execute "start_default_pg" do
  command "update-rc.d postgresql defaults"
end
####### Criando o diretório /DATABASE caso ele não exista	  #######
####### Caso no seu servidor tenha RAID ou EBS (AWS) otimizado    #######
####### monte o disco neste diretório, pois ele armazenará 	  #######
####### a estrutura do banco de dados				  #######
directory "/database" do
  owner "postgres"
  group "postgres"
  mode 0755
  action :create
  ignore_failure true
end
####### Criando o usuário postgres				  #######
execute "add_user_pg" do
 command "useradd postgres --home-dir /database --shell /bin/bash"
 ignore_failure true
end
####### Adicionando o PTBR no locale-gen			  #######
####### Arquivo de referência: pasta files/default/locale-gen     #######
cookbook_file "/var/lib/locales/supported.d/local" do
  source "locale-gen"
   mode 0544
  owner "root"
  group "root"
end
####### Lendo as novas configurações de locale			  #######
execute "locale_gen" do
 command "locale-gen"
end
####### Configurando o locale default na máquina		  #######
####### Arquivo de referência: pasta files/default/locale_etc	  #######
cookbook_file "/etc/default/locale" do
  source "locale_etc"
  mode 0554
  owner "root"
  group "root"
end
####### Adicionando o profile no home do usuário Postgres	  #######
####### Arquivo de referência: pasta files/default/profile_pg	  #######
cookbook_file "/database/.profile" do
  source "profile_pg"
  owner "postgres"
  group "postgres"
  mode 0755
end
####### Criando o diretório de armazenamento dos arquivos do PG   #######
directory "/database/data" do
  owner "postgres"
  group "postgres"
  mode 0700
  action :create
end
####### Iniciando o cluster do postgreSQL 			  #######
execute "initdb" do
  command "su postgres -l -c 'initdb'"
  action :run
end
####### Iniciando o serviço do PostgreSQL			  #######
service "postgresql" do
 action :start
end

Neste post foi apresentado a receita do CHEF para maior entendimento de como a ferramenta CHEF funciona. Temos inúmeras receitas espalhadas e normalmente temos dificuldades em executá-la, por isso a necessidade deste entendimento.

Você poderia falar: "eu faço um shell script para isso"

Eu também fazia, mas era só mudar a versão de Kernel que o script quebrava.

A receita esta disponível no Github: https://github.com/ximenes/chef_pginstall/

Pense, se eu precisar de um plano de continuidade, basta executar esta receita do CHEF e restaurar um dump da base de dados!! Para Dev, o sprint 0 reduz bastante também.

Dextra

View posts by Dextra
Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes. A Dextra faz parte da Mutant, empresa B2B líder no mercado brasileiro e especialista em Customer Experience para plataformas digitais.

Comentários

  1. DevHellozilla17 de dezembro de 2014

    Só intendi porque você colocou um código com ‘All rights reserved – Do Not Redistribute’ na internet.

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

onze + catorze =

Posts relacionados

  1. Sobre a Dextra

    Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes.

  2. Categorias

Scroll to top