Mapa mental
DevOps na pratica

Mapa mental: DevOps na prática
Contenido del mapa
DevOps na pratica
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
- Executar o comando: vagrant init
- VirtualBox
- Download http://www.virtualbox.org/wiki/Downloads
- Vagrant
- Ferramentas para virtualização
- 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';"
- Instalar MySQL
- 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
- Instalar o Tomcat e o MySQL-client
- Servidor de banco de dados
- 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"/>
- Instalar ferramentas
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
- Declarar os servidores
- 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
- Criar um contato
- Adicionar uma nova VM no vagrant
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
- Criar um novo diretório chamado manifests
- 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
- Criar o arquivo db.pp
- 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
- Alterar o arquivo Vagrantfile
- 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
- Copiar os templates do servidor web
- Ferramentas de gerenciamento de configuração
Puppet além do básico