Zend Server 8 – Distribuição (Deployment)

Boa tarde pessoal!

Neste post da série sobre Zend Server, vamos ver como fazer a distribuição (ou deployment) para um servidor.

Se você usa o Zend Studio, o processo de deployment é bem mais simples pois é feito pelo próprio Zend Studio, mas para quem não tem, o Zend Server vem com uma ferramenta console chamada zdpack destinada a criar pacotes prontos para o deployment.

Mas qual a diferença entre usar o deployment e copiar os arquivos para o diretório manualmente?

O deployment é um processo repetitivo e vamos ser francos, quem nunca esqueceu de copiar um arquivo, modificar um arquivo após a cópia do projeto, alterar a permissão de um diretório? Existem várias ferramentas ótimas para este processo como o phing e Caspriano. Eu particularmente uso o phing e vou escrever um post sobre ele em breve. O zdpack só funciona para upload para o Zend Server.

Preparando o pacote

Para preparar o pacote de deployment, vamos executar o zdpack:

[leandro Tutoriais ]$ ls -l TutorialDeploy/
total 48
-rw-r--r--  1 leandro  staff   1,5K  8 Jan 14:04 LICENSE.txt
-rw-r--r--  1 leandro  staff   2,5K  8 Jan 14:04 README.md
-rw-r--r--  1 leandro  staff   338B  8 Jan 14:04 composer.json
-rw-r--r--  1 leandro  staff   7,9K  8 Jan 14:05 composer.lock
drwxr-xr-x  4 leandro  staff   136B  8 Jan 14:04 config/
drwxr-xr-x  3 leandro  staff   102B  8 Jan 14:04 data/
-rw-r--r--  1 leandro  staff   1,9K  8 Jan 14:04 init_autoloader.php
drwxr-xr-x  3 leandro  staff   102B  8 Jan 14:04 module/
drwxr-xr-x  8 leandro  staff   272B  8 Jan 14:04 public/
drwxr-xr-x  7 leandro  staff   238B  8 Jan 14:05 vendor/
[leandro Tutoriais ]$ zdpack create TutorialDeploy
Skeleton files were generated into TutorialDeploy
[leandro Tutoriais ]$ ls -l TutorialDeploy/
total 64
-rw-r--r--   1 leandro  staff   1,5K  16 Jan 14:04 LICENSE.txt
-rw-r--r--   1 leandro  staff   2,5K  16 Jan 14:04 README.md
-rw-r--r--   1 leandro  staff   338B  16 Jan 14:04 composer.json
-rw-r--r--   1 leandro  staff   7,9K  16 Jan 14:05 composer.lock
drwxr-xr-x   4 leandro  staff   136B  16 Jan 14:04 config/
drwxr-xr-x   5 leandro  staff   170B  16 Jan 14:07 data/
-rw-r--r--   1 leandro  staff   2,3K  16 Jan 14:07 deployment.xml
-rw-r--r--   1 leandro  staff   1,9K  16 Jan 14:04 init_autoloader.php
drwxr-xr-x   3 leandro  staff   102B  16 Jan 14:04 module/
drwxr-xr-x   8 leandro  staff   272B  16 Jan 14:04 public/
drwxr-xr-x  12 leandro  staff   408B  16 Jan 14:07 scripts/
drwxr-xr-x   7 leandro  staff   238B  16 Jan 14:05 vendor/
[leandro Tutoriais ]$ ls -l TutorialDeploy/data
total 16
-rw-r--r--  1 leandro  staff    83B  16 Jan 14:07 LICENSE.txt
drwxr-xr-x  2 leandro  staff    68B  16 Jan 14:04 cache/
-rw-r--r--  1 leandro  staff   214B  16 Jan 14:07 index.php
[leandro Tutoriais ]$ ls -l TutorialDeploy/scripts/
total 80
-rw-r--r--  1 leandro  staff   1,6K  16 Jan 14:07 post_activate.php
-rw-r--r--  1 leandro  staff   1,5K  16 Jan 14:07 post_deactivate.php
-rw-r--r--  1 leandro  staff   1,5K  16 Jan 14:07 post_rollback.php
-rw-r--r--  1 leandro  staff   1,7K  16 Jan 14:07 post_stage.php
-rw-r--r--  1 leandro  staff   1,5K  16 Jan 14:07 post_unstage.php
-rw-r--r--  1 leandro  staff   1,8K  16 Jan 14:07 pre_activate.php
-rw-r--r--  1 leandro  staff   1,5K  16 Jan 14:07 pre_deactivate.php
-rw-r--r--  1 leandro  staff   1,5K  16 Jan 14:07 pre_rollback.php
-rw-r--r--  1 leandro  staff   1,7K  16 Jan 14:07 pre_stage.php
-rw-r--r--  1 leandro  staff   1,5K  16 Jan 14:07 pre_unstage.php
[leandro Tutoriais ]$

A parte destacada representa os arquivo e diretórios criados.

Na raiz do projeto ele cria um arquivo deployment.xml que contem toda a configuração para o deployment (arquivos, nome, campos de configuração, validações, etc) e um diretório scripts que contem vários scripts que serão executados em cada etapa. Dentro do diretório data ele inclui um arquivo LICENSE.txt com a licença a ser usada e um index.php.

Uma coisa importante é que o diretório “data” do zdpack tem a finalidade de conter todos os arquivos da sua aplicação o que entra em “conflito” com o “data” do Zend Framework. O que faço é editar o deployment.xml e mudo o diretório onde ele busca os arquivos de “data” para “build”. Vamos ver como é a estrutura deste arquivo:

<?xml version="1.0" encoding="utf-8"?>
<package version="2.0" xmlns="http://www.zend.com/server/deployment-descriptor/1.0">
  <type>application</type>
  <name>TutorialDeploy</name>
  <summary>TutorialDeploy short description</summary>
  <description>TutorialDeploy long description</description>
  <version>
    <release>0.1</release>
  </version>
  <eula>data/LICENSE.txt</eula>
  <appdir>data</appdir>
  <docroot>data</docroot>
  <scriptsdir>scripts</scriptsdir>
  <healthcheck>/index.php</healthcheck>
  <dependencies>
    <required>
		<php>
			<min>5.3.15</min>
		</php>
		<extension>
			<name>pdo_mysql</name>
		</extension>
		<directive>
			<name>memory_limit</name>
			<min>16M</min>
		</directive>
    </required>
  </dependencies>
  <parameters>
    <parameter id="locale"
    display="Locale Settings.Locale"
    required="true" type="choice">
    <validation>
    <enums>
    	<enum>GMT</enum>
    	<enum>other</enum>
    </enums>
    </validation>
      <description></description>
    </parameter>
    <parameter id="db_host"
    display="Database Connection.Host"
    required="true" type="string">
      <description>
        You can specify server port, ex.: localhost:3307 If
        you are not using default UNIX socket, you can specify it
        here instead of host, ex.:
        /var/run/mysqld/mysqld.sock
      </description>
    </parameter>
    <parameter id="db_name"
    display="Database Connection.Database Name"
    required="true" type="string">
      <defaultvalue>TutorialDeploy</defaultvalue>
      <description>

      </description>
    </parameter>
    <parameter id="db_username"
    display="Database Connection.User Name"
    required="true" type="string">
      <defaultvalue>root</defaultvalue>
      <description>

      </description>
    </parameter>
    <parameter id="db_password"
    display="Database Connection.User Password"
    required="false" type="password">
      <defaultvalue></defaultvalue>
      <description>

      </description>
    </parameter>
    <parameter id="skip_base"
    display="Web access options.Skip Base URL Validation Before the Next Step"
    required="false" type="checkbox">
      <defaultvalue>false</defaultvalue>
      <description>
        Check this box only if it is not possible to
        automatically validate the Base URL.
      </description>
    </parameter>
  </parameters>
</package>

Para o processo não atrapalhar o ZF2, alteramos as linhas 10-12, criamos o diretório build dentro do diretório ZFTutorial e copiamos todos os arquivos do projeto para ele (excluindo os arquivos que o zdpack criou e quaisquer outros que não queremos distribuir, como por exemplo config/autoload/*local*).

Vamos à estrutura geral do arquivo (alguns campos não são criados pelo zdpack, basta acrescentá-los):

  • type: especificamos se é uma aplicação ou biblioteca (library, que poderá ser usada por outras aplicação, como um include_pach).
  • name: Nome da aplicação
  • summary: Um resumo da aplicação
  • description: A descrição completa da aplicação
  • version: Versão da nossa aplicação. É importante usarmos este valor corretamente pois é usado nas atualizações.
  • releasedate: Data de lançamento da versão
  • eula: O arquivo EULA
  • appdir: Diretório onde estão os arquivos da aplicação
  • docroot: Diretório para onde o alias do apache irá apontar. No caso de ZF2 é o public
  • scriptsdir: Diretório onde estão os scripts do zdpack
  • healthcheck: Caminho para o Zend Server testar se a aplicação está ok. Normalmente podemos definir como index.php.
  • updateurl: Url para atualização
  • dependencies: Os requisitos que o servidor deve ter para a aplicação funcionar corretamente. Todos serão checados durante o processo de deployment.
  • parameters: Parâmetros para o processo de deployment
  • variables: Define variáveis de ambiente para os scripts do zdpack

Os scripts do zdpack são executados numa ordem específica e você pode usar para atualizar o banco de dados, criar arquivos de configuração, enviar um email após uma atualização, etc. Dentro de cada script existe um comentário dando maiores explicações e quais variáveis estão disponíveis para ele.

  • Deploy
    • pre_stage.php: Executado logo após ser feito o upload e descompactado no servidor e antes de qualquer outra coisa
    • post_stage.php: Executado após a etapa de stage, todos os arquivos já estão no lugar, mas a aplicação ainda não é acessível via página
    • pre_activate.php: Antes de ativar a aplicação
    • post_activate.php: Final do processo de deployment. Aqui a aplicação já está toda configurada e acessível via página.
  • Rollback (lembro que a versão gratuita não oferece suporte para rollback)
    • pre_rollback.php: Executado antes de iniciar um rollback
    • post_rollback.php: Alguém arrisca? 🙂
  • Remover
    • pre_deactivate.php: Executado no início do processo de desativação da aplicação
    • post_deactivate.php: Executado após o processo, aqui a página já não é mais acessada, mas os arquivos ainda estão no servidor
    • pre_unstage.php: Início do processo de remoção da aplicação
    • post_unstage.php: Término do processo

Criando o pacote

Com tudo em ordem e configurado, podemos validar e criar nosso pacote. Saia do diretório da aplicação e execute:

[leandro Tutoriais ]$ zdpack validate TutorialDeploy/deployment.xml 
Using schema:  /usr/local/zend/share/deployment.xsd 
               TutorialDeploy/deployment.xml is a valid descriptor file 
[leandro Tutoriais ]$ zdpack pack TutorialDeploy 
scripts-dir is set to        : TutorialDeploy/scripts 
src-dir is set to            : TutorialDeploy/build 
package-descriptor is set to : TutorialDeploy/deployment.xml 
Created ./TutorialDeploy.zpk
[leandro Tutoriais ]$

Com o pacote criado, podemos entrar no Zend Server e fazer o upload do pacote.

Realizando o deployment

Vá na aba “Applications” -> Apps

1

Clique em “Deploy Application” e faça o upload do ZFTutorial.zpk

2

Selecione o nome, servidor e caminho da aplicação

3

Aceite a licença

4

Aqui ele vai fazer a validação dos pré-requisitos da aplicação

5

E pedir os campos definidos no deployment.xml

6

Em seguida, irá mostrar a tela de resumo

7

E irá começar o processo de instalação

8

Se tudo correr bem, ela esta pronta

9

E acessível pelo endereço http://<servidor>/zftutorial sem precisar mexer no apache, criar  Alias, nada, o Zend Server já faz automaticamente para você.

10

Atualizando uma aplicação

Depois de trabalharmos na nossa aplicação mais um pouco, chegou a hora de atualizarmos. O processo de criação do pacote é exatamente o mesmo, mas aumente o número da versão, senão o Zend Server vai achar que se trata da mesma versão e não vai fazer nada.

Ao invés de clicarmos em “Deploy”, vamos na linha da nossa aplicação e clicamos no primeiro botão que é “Update” e só seguir as instruções (Next, Next, Next 🙂 )

Pronto! Atualização feita.

Se olharmos o diretório onde ele salva os arquivos, vamos encontrar nosso diretório e as versões:

[leandro Tutoriais ]$ ls -l /usr/local/zend/var/apps/http/__default__/0/
total 4
drwxr-xr-x 4 zend zend 4096 Jan  16 08:17 TutorialDeploy
[leandro Tutoriais ]$ ls -l /usr/local/zend/var/apps/http/__default__/0/TutorialDeploy/
total 8
drwxr-sr-x 8 zend zend 4096 Jan  16 08:01 0.1
drwxr-sr-x 8 zend zend 4096 Jan  16 08:17 0.2
[leandro Tutoriais ]$ ls -l /usr/local/zend/var/apps/http/__default__/0/TutorialDeploy/0.2
total 740
drwxr-sr-x 3 zend zend   4096 Jan  16 08:17 build
-rw-r--r-- 1 zend zend    342 Jan  16 08:17 composer.json
-rw-r--r-- 1 zend zend    300 Jan  16 08:17 composer.lock
-rw-r--r-- 1 zend zend 709565 Jan  16 08:17 composer.phar
drwxr-sr-x 3 zend zend   4096 Jan  16 08:17 config
drwxr-sr-x 3 zend zend   4096 Jan  16 08:17 data
-rw-r--r-- 1 zend zend   1993 Jan  16 08:17 init_autoloader.php
-rw-r--r-- 1 zend zend   1548 Jan  16 08:17 LICENSE.txt
drwxr-sr-x 3 zend zend   4096 Jan  16 08:17 module
drwxr-sr-x 6 zend zend   4096 Jan  16 08:17 public
-rw-r--r-- 1 zend zend   1759 Jan  16 08:17 README.md
drwxr-sr-x 4 zend zend   4096 Jan  16 08:17 vendor
[leandro Tutoriais ]$

 

Referências:

Parte 1 – Visão Geral

Parte 2 – Instalação e Configuração

Parte 3 – Virtual Hosts

Parte 4 – Z-Ray

Parte 5 – Distribuição (Deployment)

Parte 6 – Definir uma aplicação

Parte 7 – Métrica

Parte 8 – Eventos e Code Tracing

Zend Server

Até a próxima!

Leandro Silva

2 comentários sobre “Zend Server 8 – Distribuição (Deployment)

  1. Olá Leandro Silva,

    Eu trabalho com testes, achei seu post muito interessante, inclusive instalei o zend server para analisar essa ferramenta.
    Teria como você fazer uma explicação de configuração para utilizar o z-ray em uma aplicação de produção?

Deixe uma resposta

This site uses Akismet to reduce spam. Learn how your comment data is processed.