# Implantação (Web)

A fim de facilitar a implantação do sistema em modo produção, o repositório deve conter os arquivos de configuração necessários para permitir o *deploy* de forma distribuída na infra-estrutura usando [Docker ](https://www.docker.com/).

### [](https://gitlab.ifpe.edu.br/filipe/guia-software-institucional/wikis/implantacao-web#build)Build

A recomendação é que seja criado um `Dockerfile` ([ref](https://www.digitalocean.com/community/tutorials/como-instalar-e-utilizar-o-docker-primeiros-passos-pt)) com todas as instruções necessárias para criar uma imagem.

Exemplo:

```
<span class="c"># https://www.digitalocean.com/community/tutorials/docker-explained-how-to-containerize-python-web-applications</span>
<span class="k">FROM</span><span class="s"> ubuntu</span>
<span class="k">MAINTAINER</span><span class="s"> Filipe Arruda (filipe.arruda@reitoria.ifpe.edu.br)</span>

<span class="k">RUN </span>apt-get update
<span class="k">RUN </span>apt-get install -y tar git curl nano wget dialog net-tools build-essential
<span class="k">RUN </span>apt-get install -y python python-dev python-distribute python-pip

COPY /minha_aplicacao /minha_aplicacao

<span class="k">RUN </span>pip install -r /minha_aplicacao/requirements.txt

<span class="k">EXPOSE</span><span class="s"> 80</span>

<span class="k">WORKDIR</span><span class="s"> /minha_aplicacao</span>

<span class="k">CMD</span><span class="s"> python server.py</span>


```

Para se conectar com outros serviços, como por exemplo um banco de dados, é recomendado criar um arquivo docker-compose.yml:

```
<span class="na">version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2'</span>
<span class="na">services</span><span class="pi">:</span>
 <span class="na">db</span><span class="pi">:</span>
   <span class="na">image</span><span class="pi">:</span> <span class="s">postgres</span>
   <span class="na">volumes</span><span class="pi">:</span>
     <span class="pi">-</span> <span class="s">app_data:/var/lib/postgresql/data</span>
 <span class="na">web</span><span class="pi">:</span>
   <span class="na">build</span><span class="pi">:</span> <span class="s">.</span>
   <span class="na">volumes</span><span class="pi">:</span>
     <span class="pi">-</span> <span class="s">.:/minha_aplicacao</span>
   <span class="na">ports</span><span class="pi">:</span>
     <span class="pi">-</span> <span class="s2">"</span><span class="s">7000:80"</span>
   <span class="na">depends_on</span><span class="pi">:</span>
     <span class="pi">-</span> <span class="s">db</span>

```

Vale salientar que é necessário definir os volumes/diretórios que devem ser salvos fora do *containter* para permitir backups/restaurações/escalabilidade.