Back-End

Back-End

Trabalhando com o SAPUI5 localmente – Parte 02: agora com Docker

6 set, 2018
Publicidade

Na primeira parte falei sobre como construir nosso ambiente de trabalho para trabalhar com a UI5 localmente, em vez de usar o WebIDE. Agora, nesta segunda parte da publicação veremos como fazer isso usando o Docker para configurar nosso ambiente.

Usarei o docker-compose para configurar o projeto. Basicamente, como explico na primeira parte, o projeto tem duas partes: um back-end e um front-end. Vamos usar exatamente o mesmo código para o front-end e para o back-end.

O front-end é construído sobre um localneo. Como é um aplicativo de node, usaremos um node: alpine base host.

FROM node:alpine
 
EXPOSE 8000
 
WORKDIR /code/src
COPY ./frontend .
RUN npm install
ENTRYPOINT ["npm", "run", "serve"]

No docker-compose, precisamos apenas mapear a porta que iremos expor em nosso host e, como queremos esse projeto em nosso processo de desenvolvimento, também mapearemos o volume para evitar a re-geração do nosso contêiner cada vez que alterarmos o código.

...
  ui5:
    image: gonzalo123.ui5
    ports:
    - "8000:8000"
    restart: always
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-ui5
    volumes:
    - ./src/frontend:/code/src
    networks:
    - api-network

O back-end é um aplicativo PHP. Podemos configurar um aplicativo PHP usando arquiteturas diferentes. Neste projeto, usaremos o nginx e o PHP-FPM.

Para o nginx, usaremos o seguinte Dockerfile:

FROM  nginx:1.13-alpine
 
EXPOSE 80
 
COPY ./.docker/web/site.conf /etc/nginx/conf.d/default.conf
COPY ./backend /code/src

E para o host PHP, o seguinte (com o xdebug para ativar a depuração e os pontos de interrupção):

FROM php:7.1-fpm
 
ENV PHP_XDEBUG_REMOTE_ENABLE 1
 
RUN apt-get update && apt-get install -my \
    git \
    libghc-zlib-dev && \
    apt-get clean
 
RUN apt-get install -y libpq-dev \
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install pdo pdo_pgsql pgsql opcache zip
 
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
 
RUN composer global require "laravel/lumen-installer"
ENV PATH ~/.composer/vendor/bin:$PATH
 
COPY ./backend /code/src

E basicamente isso é tudo. Aqui o arquivo completo do docker-compose.

version: '3.4'
 
services:
  nginx:
    image: gonzalo123.nginx
    restart: always
    ports:
    - "8080:80"
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-nginx
    volumes:
    - ./src/backend:/code/src
    - ./src/.docker/web/site.conf:/etc/nginx/conf.d/default.conf
    networks:
    - api-network
  api:
    image: gonzalo123.api
    restart: always
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-lumen-dev
    environment:
      XDEBUG_CONFIG: remote_host=${MY_IP}
    volumes:
    - ./src/backend:/code/src
    networks:
    - api-network
  ui5:
    image: gonzalo123.ui5
    ports:
    - "8000:8000"
    restart: always
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-ui5
    networks:
    - api-network
 
networks:
  api-network:
    driver: bridge

Se quisermos usar este projeto, você só precisa:

  • Clonar o repo do GitHub
  • Executar ./ui5 up

Com essa configuração estamos expondo duas portas 8080 para o front-end e 8000 para o back-end. Também estamos mapeando nosso sistema de arquivos local para contêineres para evitar a regeneração de nossos contêineres toda vez que alteramos o código.

Nós também podemos ter uma variação. Uma versão de “produção” do nosso arquivo de composição do docker. Coloco a produção entre aspas, porque normalmente não usamos o localneo como servidor de produção (por favor, não faça isso). Usaremos o SCP para hospedar o front-end.

Essa configuração é apenas um exemplo sem mapeamento do sistema de arquivos, sem o xdebug no back-end e sem expor o back-end externamente (somente o front-end pode usá-lo).

version: '3.4'
 
services:
  nginx:
    image: gonzalo123.nginx
    restart: always
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-nginx
    networks:
    - api-network
  api:
    image: gonzalo123.api
    restart: always
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-lumen
    networks:
    - api-network
  ui5:
    image: gonzalo123.ui5
    ports:
    - "8000:8000"
    restart: always
    build:
      context: ./src
      dockerfile: .docker/Dockerfile-ui5
    networks:
    - api-network
 
networks:
  api-network:
    driver: bridge

E isso é tudo. Você pode ver todo o código-fonte na minha conta do GitHub.

***

Gonzalo Ayuso faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://gonzalo123.com/2018/09/03/working-with-sapui5-locally-part-2-now-with-docker/