O GoConqr está de visual novo! Conte para nós o que você achou.

Mapa mental

DevOps na pratica

Caibar Português

Mapa mental sobre DevOps na prática: monitoramento, infraestrutura como código, Puppet e ambiente de produção

Mapa mental: DevOps na prática

Conteúdo do mapa

DevOps na pratica

  1. Tudo começa emprodução

    • Objetivo é subir um sistema de produção completo, começando do zero, e instalar uma aplicação java.
    • Aplicação de exemplo: A loja virtual
    • Instalando o ambiente de produção
      • Ferramentas para virtualização
        • Vagrant
          • Download http://www.vagrantuo.com/downloads.html
          • Configurar box
            • vagrant box add hashicorp/precise32
            • Declarando e subindo os servidores
              • Executar o comando: vagrant init
                • Este comando vai criar um arquivo Vagrantfile. 
                • Alterar o arquivo Vagrantfile
                  • # -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "hashicorp/precise32" config.vm.define :db do |db_config| db_config.vm.hostname = "db" db_config.vm.network :private_network, :ip => "192.168.33.10" end config.vm.define :web do |web_config| web_config.vm.hostname = "web" web_config.vm.network :private_network, :ip => "192.168.33.12" end end
                  • Executar: vagrant up
                    • vagrant up
        • VirtualBox
          • Download http://www.virtualbox.org/wiki/Downloads
    • Configurando dependências nos servidores de produção
      • Servidor de banco de dados
        • Instalar MySQL
          • sudo apt-get update sudo sudo apt-get install mysql-server
          • Configurar para permitir conexões externas
            • sudo nano /etc/mysql/conf.d/allow_external.cnf digitar o conteúdo: [mysqld]         bind-address = 0.0.0.0
            • Reiniciar o MySQL
              • sudo service mysql restart
              • Criar o banco de dados: loja_schema
                • mysqladmin -u root -p create loja_schema senha "secret"
                • Remover a conta anônima
                  • mysql -u root -p -e "DELETE FROM mysql.user WHERE user=' '; FLUSH PRIVILECES
                  • Criar usuário loja
                    • mysql -u root -e "GRANT ALL PRIVILEGES ON loja_shema.* TO 'loja'@'%' IDENTIFIED BY 'lojasecret';"
      • Servidor web
        • Instalar o Tomcat e o MySQL-client
          • sudo apt-get update sudo sudo apt-get install tomcat7 mysql-client
          • Configurar SSL
            • cd /var/lib/tomcat7/conf sudo keytool -genkey -alias tomcat -keyalg RSA -keystore .keystore Senha : secret First and last name? Loja Virtual Organization unit? Devops na Pártica Organization? Casa do Código Lacality? São Paulo State? SP Country? BR Confirmar? yes
          • Habilitar conector SSL do Servidor Tomcat
            • sudo nano /var/lib/tomcat7/conf/server.xml Encontrar a definição do conector SSL porta 8443, descomentar e adicionar as seguinte linhas: maxThreads="150" scheme=https" secure="true" keystoreFile="conf/.keystore" keystorePass="secret" clientAuth="false" sslProtocol="SSLv3" />
          • Aumentar memória que o Tomcat pode usar
            • sude nano /etc/default/tomcat7 JAVA_OPTS="-Djava.awt.headless=true -Xmx512M -XX:+UseConcMarkSweepGC
          • Por fim deve reiniciar o Tomcat
            • sudo service tomcat7 restart
    • Build e deploy da aplicação
      • Instalar ferramentas
        • sudo apt-get install git maven2 openjdk-6-jdk
        • Baixar o código da aplicação
          • git clone https://github.com/dtsato/loja-virtual-devops.git
          • executar build
            • cd loja-virtual-devops export MAVEN_OPTS=-Xmx256m mvn install
            • Deploy
              • cd ~/loja-virtual-devops sudo cp combined/target/devopsnapratica.war /var/lib/tomcat7/webapps
      • Configurar fontes de dados JNDI
        • sudo nano /var/lib/tomcat7/conf/context.xml
        • <Resource name="jdbc/web" auth="Conteiner" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="loja" password="lojasecret" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.33.10:3306/loja_schema"/>
        • <Resource name="jdbc/secure" auth="Conteiner" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="loja" password="lojasecret" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.33.10:3306/loja_schema"/>
        • <Resource name="jdbc/storege" auth="Conteiner" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="loja" password="lojasecret" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.33.10:3306/loja_schema"/>
  2. Monitoramento

    • Adicionar uma nova VM no vagrant
      • config.vm.define :monitor do |monitor_config| monitor_config.vm.hostname = "monitor" monitor_config.vm.network :private_network, :ip => "192.168.33.14" end
      • vagrant up
      • Instalando o NAGIOS
        • logar na máquina echo "Package:  nagios* Pin: release n=raring Pin-Priority: 990" | sudo tee /etc/apt/preferences.d/nagios echo "deb http://old-releases.ubuntu.com/ubuntu raring main" | sudo tee /etc/apt/sources.list.d/raring.list sudo apt-get update
        • sudo apt-get install nagios3 cinfigurar e-mail: opção: Internet Site nome: "monitor.lojavirtualdevops.com.br" Senha: secret
    • Monitorar outros servidores
      • Declarar os servidores
        • sudo nano /etc/nagios3/conf.d/loja_virtual.cfg
        • define host { use     generic-host host_name 192.168.33.10 hostgroups ssh-servers, debian-servers } define host {use     generic-hosthost_name 192.168.33.12hostgroups ssh-servers, debian-servers}
        • sudo service nagios3 reload
        • Grupos de monitoramento
          • sudo nano /etc/nagios3/conf.d/loja_virtual.cfg
          • define hostgroup { hostgroup_name db-servers alias Database Servers } deifine hostgroup { hostgroup_name web-servers alias Web Servers } define host { use     generic-host host_name 192.168.33.10 hostgroups ssh-servers, debian-servers, db-servers } define host { use     generic-host host_name 192.168.33.12 hostgroups ssh-servers, debian-servers, web-servers }
          • sudo service nagios3 reload
    • Comandos de verificação do Nagios
      • diretório de plugins /usr/lib/nagios/plugins
    • Adicionando verificações
      • sudo nano /etc/nagios3/conf.d/loja_virtual.cfg
      • no final de arquivo define service { service_description MySQL use generic-service hostgroup_name db-server check_command check_tcp!3306 } define service { service_description MySQL-lojavirtual use generic-service hostgroup_name db-server check_command check_mysql_database!loja!lojasecret!loja_schema } define command { command_name check_tomcat_http command_line /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' \ -p '$ARG1$' -u '$ARG2$' -e 'HTTP/1.1 200 OK' } define service { service_description Tomcat use generic-service hostgroup_name web-servers check_command check_tomcat_http!8080!'/devopsnapratica/' } define command { command_name check_tomcat_https command_line /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' \ --ssl=3 -p '$ARG1$' -u '$ARG2$' -e 'HTTP/1.1 200 OK' } define service { service_description Tomcat SSL use generic-service hostgroup_name web-servers check_command check_tomcat_https!8443!'/devopsnapratica/admin/ '}
      • sudo service nagios3 reload
    • Recebendo alertas
      • Criar um contato
        • /etc/nagios3/conf.d/contacts_nagios2.cfg alterar o e-mail: define contact { email @gmail.com }
        • sudo service nagios3 reload
  3. Infraestrutura como código

    • Ferramentas de gerenciamento de configuração
      • Shell scripts
      • Puppet
        • Criar um novo diretório chamado manifests
          • Vagrantfile manifests ->db.pp
          • Declarar o Puppet no Arquivo Vagrantfile
            • config.vm.define :db do |db_config| db_config.vm.hostname = "db" db_config.vm.network :private_network, :ip => "192.168.33.10" db_config.vm.provision "puppet" do |puppet| puppet.manifest_file = "db.pp" endend
      • Chef
      • Ansible
      • Salt
      • Pallet
      • CFEngine
    • Reinstalando o servidor de banco de dados
      • Criar o arquivo db.pp
        • o arquivo db.pp deve fica no diretório manifestis
        • exec { "apt-update": command => "/usr/bin/apt-get update" } package { "mysql-server": ensure => installed, require => Exec["apt-update"], } file { "/etc/mysql/conf.d/allow_external.cnf": owner => mysql, group => mysql, mode => 0644, content => "[mysql]\n bind-address = 0.0.0.0", require => Package["mysql-server"], }
        • vagrant provision db
        • Para usar template
          • criar o arquivo allow_ext.cnf"
          • [mysqld] bind-address = 9.9.9.9
          • Alteramos o arquivo Vagrantfile
            • file { "/etc/mysql/conf.d/allow_external.cnf": owner => mysql, group => mysql, mode => 0644, content => template("/vagrant/manifests/allow_ext.cnf"), require => Package["mysql-server"], notify => Service[mysql"],}
            • vagrant provision db
            • Reiniciar o serviço mySQL
              • service { "mysql": ensure => running, enable => true, hasstatus => true, hasrestart => true, require => Package["mysql-server"], }
              • vagrant provision db
              • Criar o schema
                •  exec { "loja-schema": unless => "mysql -u root loja_schema", command => "mysqladmin -u root create loja_schema", path => "/usr/bin/", require => Service[mysql"], }
                • Remover a conta anônima
                  •   exec { "remove-anonymous-user": command => "mysql -u root -e \"DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES\"", onlyif => "mysql -u ''", path => "/usr/bin/", require => Service["mysql"], }
                  • Criar usuário Loja
                    •   exec { "loja-user": unless => "mysql -u loja -p lojasecret loja_schema", command => "mysql -u root -e \"GRANT ALL PRIVILEGES ON loja_schema.* TO 'loja'@'%' IDENTIFIED BY 'lojasecret';\"", path => "/usr/bin/", require => Exec["loja-schema"], }
                    • vagrant provision db
    • Reinstalando o servidor web
      • Alterar o arquivo Vagrantfile
        • config.vm.define :web2 do |web_config| web_config.vm.hostname = "web" web_config.vm.network :private_network, :ip => "192.168.33.13" web_config.vm.ptovision "puppet" do |puppet| puppet.manifest_file = "web.pp" end end
        • Criar o arquivo web.pp
          • o arquivo web.pp deve fica no diretório manifestis
          • exec { "apt-update": command => "/usr/bin/apt-get update" } package { ["mysql-client", "tomcat7"]: ensure => installed, require => Exec["apt-update"], }
          • vagrant up web2
          • copiar os arquivos de configurações do servidor web
            • vagrant ssh web -- 'sudo cp /var/lib/tomcat7/conf/.keystore /vagrant/manifests/' vagrant ssh web -- 'sudo cp /var/lib/tomcat7/conf/server.xml /vagrant/manifests/' vagrant ssh web -- 'sudo cp /etc/default/tomcat /vagrant/manifests/'
            • Alterar o arquivo web.pp
              • file { "/var/lib/tomcat7/conf/.keystore": owner => root, group => tomcat7, mode => 0640, source => "/vagrant/manifests/.keystore", require => Package["tomcat7"], notify => Service["tomcat7"], }file { "/var/lib/tomcat7/conf/server.xml":owner => root,group => tomcat7,mode => 0644,source => "/vagrant/manifests/server.xml",require => Package["tomcat7"],notify => Service["tomcat7"],}file { "/etc/default/tomcat7":owner => root,group => root,mode => 0644,source => "/vagrant/manifests/tomcat7",require => Package["tomcat7"],notify => Service["tomcat7"],}service { "tomcat7":ensure => running,enable => true,hasstatus => true,hasrestart =>true,require => Package["tomcat7"],}
              • vagrant provision web2
    • Fazendo o deploy da aplicação
      • Copiar os templates do servidor web
        • vagrant ssh web -- 'sudo cp /var/lib/tomcat7/conf/context.xml /vagrant/manifests/' vagrant ssh web -- 'sudo cp /var/lib/tomcat7/webapps/devopsnapratica.war /vagrant/manifests/'
        • Altear o arquivo web.pp
          • $db_host = "192.168.33.10" $db_schema = "loja_schema" $db_user = "loja" $db_password = "lojasecret" file { "/var/lib/tomcat7/conf/context.xml": owner => root, group => tomcat7, mode => 0644, content => template("/vagrant/manifests/context.xml"), require => Package["tomcat7"], notify => Service["tomcat7"], } file { "/var/lib/tomcat7/webapps/devopsnapratica.war": owner => root, group => tomcat7, mode => 0644, source => "/vagrant/manifests/devopsnapratica.war"), require => Package["tomcat7"], notify => Service["tomcat7"], }
          • Alterar o arquivo context.xml
            • <Resource name="jdbc/web"  auth="Conteiner"  type="javax.sql.DataSource"  maxActive="100"  maxIdle="30"  maxWait="10000"  username="<%= db_user %>"  password="<%= db_password %>" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://<%= db_host %>:3306/<%= db_schema%>"/> <Resource name="jdbc/secure"  auth="Conteiner"  type="javax.sql.DataSource"  maxActive="100"  maxIdle="30"  maxWait="10000"  username="<%= db_user %>"  password="<%= db_password %>" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://<%= db_host %>:3306/<%= db_schema%>"/> <Resource name="jdbc/storage"  auth="Conteiner"  type="javax.sql.DataSource"  maxActive="100"  maxIdle="30"  maxWait="10000"  username="<%= db_user %>"  password="<%= db_password %>" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://<%= db_host %>:3306/<%= db_schema%>"/>
            • vagrant provision web2
            • Destruir as duas VM web
              • vagrant destroy web web2
              • Alterar o arquivo Vagrantfile
                • Remover a vm web2 e adicionar as configurações do puppet na vm web web_config.vm.ptovision "puppet" do |puppet|puppet.manifest_file = "web.pp"end
                • vagrant up web
  4. Puppet além do básico

Informações

Descrição
Livro de devops
Criado por
Caibar
Visualizações
14
Avaliação

Fale Conosco

Sobre o que é sua mensagem?

O que você acha do novo visual?

Você gostou?