Utilizando o minio para armazenar Terraform State

Fala Galera, seguindo a linha de postagens curtas e bem diretas ao ponto. Hoje vou fazer um pequeno Tutorial de como configurar seu backend terraform para utilizar o min.io como um S3 local para armazenar o state do terraform. Quem ainda não conhece o minio sugiro da uma olhada no site e a documentação da ferramenta. Irei configurar um ambiente minio apenas para usar como lab.

Então, vamos preparar o ambiente do minio, seguindo a documentação iremos utilizar docker-compose para subir toda estrutura. minha estrutura de diretórios para este post:

Estrutura de Diretórios

Na configuração iremos subir 4 nós minio e 1 servidor nginx para ser um proxy reverso e realizar o balanceamento entre os nós. Como falei, o objetivo deste post é a configuração do backend do terraform, então não entrarei em detalhes sobre a configuração do minio. Os Arquivos de configuração serão linkados docker-compose.yml e nginx. Após realizados a configuração vamos subir o minio.

Subindo ambiente minio

Com o ambiente no ar, é possível acessar pelo endereço http://dominio.com:9000 (vai depender de como você configurou o nginx ). Criei um bucket chamado terraform-state, que será utilizado na nosso configuração do backend.

Minio Bucket criado

Agora que temos o Minio pronto e o Bucket criado, vamos configurar o nosso backend.

terraform {
  backend "s3" {
    access_key="minio"
    secret_key="minio123"
    endpoint = "http://dominio.com:9000"
    bucket = "terraform-state"
    key = "terraform.tfstate"
    region = "main"
    skip_credentials_validation = true
    skip_metadata_api_check = true
    skip_region_validation = true
    force_path_style = true
    
  }
}

Esta é a configuração do nosso backend , se você é acostumado a utilizar o S3, percebeu que é bem semelhante a configuração. Alguns campos é importante destacar, são eles:

endpoint Define o endereço do seu servidor Minio.
region Será ignorado com o skip_region_validation.

Um detalhe importante é o force_path_style – (Optional) Ele habilita o path-style S3 URLs (https://<HOST>/<BUCKET&gt; ao invés de https://<BUCKET&gt;.<HOST>).

Se vocês prestaram atenção, eu passei as credencias dentro do código, esta não é a forma recomendada, porém preferi deixar apenas para facilitar o teste, não façam isso.

Agora basta roda um init no terraform para que ele reconheça nosso backend.

terraform init

Se checarmos em nosso minio vamos ver que o arquivo foi criado dentro do bucket, como era o desejado.

Arquivo criado com sucesso

Com o resultado esperado, finalizamos os procedimentos.

Este post foi motivado pelo grupo do telegram do curso Descomplicando Terraform e tem como fonte o post https://dickingwithdocker.com/2019/02/terraform-s3-remote-state-with-minio-and-docker/

Para o post eu usei as seguintes versões de ferramentas.

/app # terraform -v
Terraform v0.12.28
+ provider.vsphere v1.14.0

Your version of Terraform is out of date! The latest version
is 0.13.4. You can update by downloading from https://www.terraform.io/downloads.html
% docker-compose -v
docker-compose version 1.27.4, build 40524192
minio:RELEASE.2020-10-03T02-19-42Z

Espero ter colaborado.

Valeu!!

Criando imagens com Packer

Captura de tela de 2020-05-06 10-18-31

    O Packer é uma ferramenta Open Source para criação de imagens através de código fonte. É importante alertar que o Packer não é uma ferramenta para gerenciamento de configuração e sim para criação de imagens estáticas pré-configuradas. Com o Packer é possível criar imagens para diversos ambientes como por exemplo, imagens para Docker, vmware entre outros.

    Para quem ainda não tem seu processo automatizado, o processo de criação de uma imagem nos dias de hoje pode passar por um processo massante e com grande perda de tempo, a ideia do Packer é justamente facilitar a criação destas imagens e com isso termos a mesma imagem em todos os ambientes, reduzindo o risco de erros manuais durante a criação.

    Irei Realizar uma sequencia de postagens com a criação de algumas imagens Docker e VMware:
– Instalando e Criando uma Imagem Docker.
– Criando uma Imagem VMware Centos Nginx.
– Criando uma Imagem VMware Centos PostqgreSQL.
– Criando uma Imagem VMware Centos Tomcat.

Instalando o Packer

    A instalação é bastante Simples. Basta acessar o endereço https://www.packer.io/downloads/ ele irá sugerir uma pacote para download, como mostra imagem abaixo.

Após baixar o .zip descompactar o arquivo no diretório /usr/sbin da sua maquina.

    Outra alternativa pra quem ta usando o Ubuntu é simplesmente executar o comando abaixo:

sudo apt-get install packer -y

Após instalado verificamos ser a instalação ocorreu com sucesso:

   Com tudo instalado e considerando que já possuímos o docker também em nosso computador, vamos iniciar a criação do nosso primeiro Builder.
O Builders são responsáveis pela criação das maquinas e geração das imagens.

    Como o post é Baseado na documentação oficial irei usar o mesmo exemplo do Builder, então vamos lá.

Criando o Builder

    O Packer utiliza arquivos em JSON, assim, vamos criar o arquivo packer.json com o seguinte conteúdo:

Captura de tela de 2020-05-06 10-22-02

    Se você prestar atenção, o arquivo reproduz algo parecido com um arquivo Dockerfile. Isso porque o Packer permite a criação de imagens sem o uso de um Dockerfile.

Agora detalhando o arquivo, temos :

type: Este é o campo onde dizemos se o Build será Docker, VMware, AWS.

image: Aqui iremos especificar qual imagem base será utilizada para criação da nossa imagem.

commit: Para quem já cria imagens docker, sabe que para criação da imagem é necessário o commit, assim o packer já automatiza esse processo.

changes : O changes é o campo onde iremos reproduzir todas as alterações que seria realizadas dentro do Dockerfile.

Podemos realizar a validação do nosso arquivo com o seguinte comando:

$ packer validate packer.json
Template validated successfully.

Veja que tivemos como retorno “Template validated successfully.”.

Iniciando o Build

Para realizar o build iremos usar o comando “packer build” no arquivo .json criado por nós.

$ packer build packer.json

docker output will be in this color.

==> docker: Creating a temporary directory for sharing data…
==> docker: Pulling Docker image: ubuntu
docker: Using default tag: latest
docker: latest: Pulling from library/ubuntu
docker: d51af753c3d3: Pulling fs layer
docker: fc878cd0a91c: Pulling fs layer
docker: 6154df8ff988: Pulling fs layer
docker: fee5db0ff82f: Pulling fs layer
docker: fee5db0ff82f: Waiting
docker: fc878cd0a91c: Download complete
docker: 6154df8ff988: Verifying Checksum
docker: 6154df8ff988: Download complete
docker: fee5db0ff82f: Verifying Checksum
docker: d51af753c3d3: Verifying Checksum
docker: d51af753c3d3: Download complete
docker: d51af753c3d3: Pull complete
docker: fc878cd0a91c: Pull complete
docker: 6154df8ff988: Pull complete
docker: fee5db0ff82f: Pull complete
docker: Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
docker: Status: Downloaded newer image for ubuntu:latest
docker: docker.io/library/ubuntu:latest
==> docker: Starting docker container…
docker: Run command: docker run -v /home/belyjr/.packer.d/tmp/packer-docker515954196:/packer-files -d -i -t ubuntu /bin/bash
docker: Container ID: 50fdf233946c2a2b2e62c68cef3331e33ce7de9d0f24d50ade44b9ea78a8d214
==> docker: Committing the container
docker: Image ID: sha256:f33c4882dd5a811cbda2bc5e2a9422915e840415e95551f41ed7d39ad52f0602
==> docker: Killing the container: 50fdf233946c2a2b2e62c68cef3331e33ce7de9d0f24d50ade44b9ea78a8d214
==> docker: Running post-processor: docker-tag
docker (docker-tag): Tagging image: sha256:f33c4882dd5a811cbda2bc5e2a9422915e840415e95551f41ed7d39ad52f0602
docker (docker-tag): Repository: bjuniow/ubuntu:0.1
Build ‘docker’ finished.

==> Builds finished. The artifacts of successful builds are:
–> docker: Imported Docker image: sha256:f33c4882dd5a811cbda2bc5e2a9422915e840415e95551f41ed7d39ad52f0602
–> docker: Imported Docker image: bjuniow/ubuntu:0.1

    Veja que apenas com este comando ele criou uma nova imagem, como podemos verificar no nosso docker:

$ docker images

    Podemos ver que foi criado a imagem como especificamos no arquivo de configuração packer.json.  Você pode realizar testes alterando o item changes do arquivo de acordo com seu dockerfile.

   Como sempre tento fazer posts bem diretos e seguindo o máximo a documentação , para não complicar muito. Espero ter colaborado e na sequencia devo criar outras imagens docker e vmware(pois vejo o pessoal realizando mais procedimentos pra aws).

Fonte: https://www.packer.io

Iniciando e Instalando o Docker

Retomando as postagens! A sequência dos próximos posts terá como objetivo criar uma visão geral e direta do Docker.

Então, vamos lá. =)

O que é o Docker ?

O Docker é um plataforma Open Source utilizado para criação de conteiners, que podem ser criados ambientes isolados rapidamente, além de fácil administração.

Conceitos que devem ser explicados são os das imagens e os conteiners.

O Docker trata uma imagem como um pacote independente, leve e com o necessário para para execução. Já o Conteiner é uma instância de uma imagem na qual é executada de forma isolada.

Outro ponto a ser esclarecido é entre Virtualização vs Conteiner.  Enquanto na virtualização necessitamos de hipervisores para executar sistemas operacionais convidados com kernel, discos e memórias dedicadas.  Os conteiners compartilham o mesmo kernel local, não sendo necessário a criação de uma nova maquina, assim executando apenas o necessário.  Como ilustrado na imagem abaixo:

VM-Diagram
Imagem retirada do site https://hub.docker.com/r/tplcom/docker-presentation/

 

Instalando o Docker

Após a breve introdução, vamos instalar o Docker. Irei utilizar um Debian na versão 8 e o Docker em sua versão community.

Instalando o Repositório

Antes de instalar o repositório vamos instalar alguns pacotes necessários para que o apt possa usar repositórios HTTPS. Então vamos fazer o seguinte procedimento( com permissões de root):

apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Em seguida, vamos adicionar a chave GPG ofcial do docker.

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

E por ultimo vamos adicionar o repositório

add-apt-repository "deb https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Assim adicionamos o repositório Docker ao nosso sources.list.

Instalando Docker

Com o repositório instalado, vamos realizar a instalação do Docker de forma bem simples. Vamos executar os comandos abaixo:

apt-get update
apt-get install  docker-ce

Após a instalação vamos verificar se o serviço Docker está ativo com o comando:

systemctl status docker

Devemos ter uma saída parecida com a imagem abaixo:

VirtualBox_Docker_23_05_2017_13_37_00
Saída comando systemctl status docker

Assim finalizamos este post =)

Os objetivos destes posts é ser bem direto ao tema abordado. Caso queira se aprofundar, ir direto na fonte.

Fonte: https://docs.docker.com

Instalando awstats em servidor zimbra

Instalando awstats em servidor zimbra

Para os usuários da ferramenta zimbra uma das maiores carências é falta de um relatório de e-mails, o AWSTATS é uma ferramenta que pode auxiliar com este objetivo. Neste POST vou demonstrar como instalar o awstats em paralelo com o zimbra.

Instalando o AWStats

Utilizando o Ubuntu 12.04.1 LTS , vamos instalar com o comando abaixo:

apt-get install awstats apache2

 Configurando AWStats

Após a instalação é necessário realizar alguns ajustes na ferramenta como: fazer a copia do arquivo .conf, que será usada como arquivo de configuração para cada domínio, copiar o script maillogconvert.pl para converter os logs para formato de e-mails(testei com postfix, portanto não sei se vai funcionar em outro sistema de e-mails).

cp /etc/awstats/awstats.conf /etc/awstats/awstats.dominio.com.conf
cp /usr/share/doc/awstats/examples/maillogconvert.pl /usr/share/awstats

É necessário realizar algumas alterações no arquivo awstats.dominio.com.conf:

vim /etc/awstats/awstats.dominio.com.conf

Edite as seguintes linhas:
A Variável LogFile deixando assim:

LogFile=”/usr/share/awstats/maillogconvert.pl standard < /var/log/mail.log |”

A Variável LogType deixando assim:

LogType=M

A Variável LogFormat deixando assim:

LogFormat=”%time2 %email %email_r %host %host_r %method %url %code %bytesd”

A Variável SiteDomain deixando assim:

SiteDomain=”dominio.com”

As seguintes variáveis também devem ser alteradas:

De
LevelForBrowsersDetection=2         
Para
LevelForBrowsersDetection=0       
De
LevelForOSDetection=2               
Para
LevelForOSDetection=0              
De
LevelForRefererAnalyze=2            
Para
LevelForRefererAnalyze=0            
De
LevelForRobotsDetection=2           
Para
LevelForRobotsDetection=0          
De
LevelForSearchEnginesDetection=2    
Para
LevelForSearchEnginesDetection=0    
De
LevelForKeywordsDetection=2      
Para
LevelForKeywordsDetection=0         
De
LevelForFileTypesDetection=2        
Para
LevelForFileTypesDetection=0        
Para 
LevelForWormsDetection=0            

De
ShowRobotsStats=HBL
Para
ShowRobotsStats=0

De
ShowEMailSenders=0
Para
ShowEMailSenders=HBML

De
ShowEMailReceivers=0
Para
ShowEMailReceivers=HBML

De
ShowSessionsStats=1
Para
ShowSessionsStats=0

De
ShowPagesStats=PBEX
Para
ShowPagesStats=0

De
ShowFileTypesStats=HB
Para
ShowFileTypesStats=0

De
ShowFileSizesStats=0
Para
ShowFileSizesStats=1

De
ShowDownloadsStats=HB
Para
ShowDownloadsStats=0

De
ShowOSStats=1
Para
ShowOSStats=0

De
ShowBrowsersStats=1
Para
ShowBrowsersStats=0

De
ShowOriginStats=PH
Para
ShowOriginStats=0

De
ShowKeyphrasesStats=1
Para
ShowKeyphrasesStats=0

De
ShowKeywordsStats=1
Para
ShowKeywordsStats=0

De
ShowMiscStats=a
Para
ShowMiscStats=0

De
ShowHTTPErrorsStats=1
Para
ShowHTTPErrorsStats=0

De
ShowSMTPErrorsStats=0
Para
ShowSMTPErrorsStats=1

Configurando APACHE2

Algumas configurações são necessárias para que o AWStats funcione corretamente com o apache, seguindo os procedimentos abaixo:

mkdir /var/www/awstats
ln -s /usr/share/awstats/icon /var/www/awstats/icon

 Editando o arquivo default

Vamos editar o arquivo default do apache para que seja possivel a visualização dos dados do AWStats no Servidor Web.

vim /etc/apache2/sites-available/default

Dentro o Virtualhost adicione a seguinte entrada:

<Location /awstats>
Order deny,allow
Deny from all
Allow from x.x.x.x/xx # substitua pelo endereço que terá acesso
</Location>

Alterando porta do Apache2

Para que não exista conflito com o zimbra vamos alterar o apache para funcionar na porta 8080. Alterando o aquivo abaixo:

Vim /etc/apache2/ports.conf

De
NameVirtualHost *:80
Para
NameVirtualHost *:8080

De
Listen 80
Para
Listen 8080

Edite também o arquivo /etc/apache2/sites-enabled/000-default

De
<VirtualHost *:80>
Para
<VirtualHost *:8080>

Restart o serviço

/etc/init.d/apache2 restart

Gerando os Reports
Após as configurações é necessário gerar os dados para isso devemos colocar no Cron para que sejam gerados os dados automaticamente, então:

Vim /etc/crontab

Adicionar a seguinte linha

60 * * * * /usr/lib/cgi-bin/awstats.pl -config=dominio.com -update > /dev/null

Após isto podemos gerar o arquivo index.html do AWStats com o comando abaixo:

/usr/lib/cgi-bin/awstats.pl -config=dominio.com -output -staticlink > /var/www/awstats/index.html

Após feitas as configurações as estatísticas podem ser acessadas pela URL http://dominio.com/awstats/

Alterar Logo Zimbra

Alterar Logos Zimbra

Uma das coisas boas do zimbra é o poder da customização, permitindo que a empresa ou orgão que o utilize deixe sua logomarca em destaque e os links direcionados para suas paginas.

Para isso precisamos saber que:

zimbraSkinLogoURL: É referente ao link apontados nas logomarcas.
zimbraSkinLogoLoginBanner: É referente a tela de login do webmail.
zimbraSkinLogoAppBanner: É referente a logo interna ao webmail.

Para uma melhor organização o diretorio “/opt/zimbra/jetty/webapps/zimbra/img/” deve conter as imagens das duas logomarcas.

Executando as alterações

Para executar as alterações, já com as imagens no diretorio correto basta executar os comandos abaixo com usuário zimbra:

#su -zimbra

zmprov modifyDomain empresa.com.br zimbraSkinLogoURL http://www.empresa.com.br
zmprov modifyDomain empresa.com.br zimbraSkinLogoLoginBanner http://webmail.empresa.com.br/img/LoginBanner.png
zmprov modifyDomain empresa.com.br zimbraSkinLogoAppBanner http://webmail.empresa.com.br/img/AppBanner.png

OBS:. Caso exista mais de um dominio, basta repetir os passos anteriores alterando para o outro dominio.
Após todas as configurações feitas basta executar o comando a seguir:

$ zmmailboxdctl reload