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/