¡GoConqr estrena diseño! Cuéntanos qué te parece.

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

Contenido del 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

Información

Descripción
Livro de devops
Creado por
Caibar
Visitas
14
Valoración

Escríbenos

¿Sobre qué es tu mensaje?

¿Qué te parece el nuevo diseño?

¿Te gusta?