Tic Tac Toe: Ciclo do Conteúdo
Neste artigo, consideraremos uma implementação de back-end usando a biblioteca C ++ Boost.Beast usando um exemplo de servidor síncrono. A mesma funcionalidade do artigo anterior - obtemos um número aleatório de 0 a 8, inclusive do back-end. Aconteceu que elevar o contêiner para Beast não é mais difícil do que para o Flask. O principal é encontrar imediatamente um bom exemplo adequado . Aqui peguei um Dockerfile para o meu projeto.

A foto foi tirada da apresentação deste relatório para atrair atenção e para aumentar o humor e a motivação daqueles que não conhecem C ++.
Instalação do Projeto
Clonamos o projeto no seu computador:
git clone https://github.com/nomhoi/tic-tac-toe-part5.git
Lançar contêineres:
cd tic-tac-toe-part5 docker-compose up -d
Criamos o aplicativo da web:
cd front npm install npm run-script build
Abra o navegador em http: // localhost .
Contentores Docker
O serviço de balão foi substituído pelo serviço de besta .
docker-compose.yml:
version: '3.6' services: nginx: image: nginx:alpine container_name: nginx volumes: - ./front/public:/usr/share/nginx/html - ./default.conf:/etc/nginx/conf.d/default.conf:ro ports: - "80:80" depends_on: - beast networks: - backend beast: container_name: beast build: context: beast/ dockerfile: Dockerfile ports: - "8080:8080" networks: - backend networks: backend: name: backend
Frontend
Aqui, apenas a configuração no arquivo de configuração nginx'a default.conf foi alterada.
location /number { proxy_pass http://beast:8080; }
Backend
O Dockerfile foi obtido aqui: https://github.com/vinniefalco/CppCon2018 .
FROM ubuntu:bionic AS build # Install tools required for the project RUN apt-get update \ && apt-get install gcc -y \ && apt-get install g++ -y \ && apt-get install cmake -y \ && apt-get install wget -y # Install Boost RUN cd /home \ && wget http://downloads.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.gz \ && tar xfz boost_1_70_0.tar.gz \ && rm boost_1_70_0.tar.gz \ && cd boost_1_70_0 \ && ./bootstrap.sh --with-libraries=system \ && ./b2 install # Copy the entire project and build it COPY ./app /cpp/src/project/ WORKDIR /cpp/src/project/ RUN g++ http_server_sync.cpp -o http_server_sync -lpthread FROM ubuntu:bionic COPY --from=build /cpp/src/project /app/ ENTRYPOINT ["/app/http_server_sync", "0.0.0.0", "8080", "/app/wwwroot"] EXPOSE 8080
Como você pode ver, é usada a tecnologia de montagem em vários estágios . No primeiro estágio, os pacotes necessários e as bibliotecas Boost são instalados, o servidor http_server_sync é criado . No segundo estágio, o servidor finalizado é copiado para o contêiner final e é iniciado lá.
O código fonte do servidor síncrono foi obtido aqui . Adicionada uma função handle_number_request para manipular a solicitação em / number .
No corpo da resposta, escrevemos um número aleatório de 0 a 8, inclusive.
Conclusão
Como você pode ver, o Flask nos ajudou a ter uma ideia geral da interação entre o front-end e o back-end, e rapidamente obtivemos a estrutura de todo o aplicativo. Ao desenvolver o back-end do Beast, já entendemos como a interação era organizada e focada apenas em encontrar o contêiner certo e escrever o próprio servidor de back-end.
Como tarefa de casa, você pode tentar refazer o serviço nginx usando uma compilação de vários estágios, para que o frontend seja montado no primeiro estágio. Agora, o serviço nginx está configurado para que seja mais conveniente realizar o desenvolvimento front-end, sem montagem desnecessária.
Segunda lição de casa: tente remover o serviço nginx e aumente a interface no serviço besta. Eu acho que deveria dar certo.
Poste suas decisões nos comentários.
A terceira tarefa: meditar sobre a questão da escalabilidade - vertical e horizontal. Como combinar essas duas linguagens, C ++ e Python, em uma estrutura da Web para resolver esse problema.
Repositório do GitHub
https://github.com/nomhoi/tic-tac-toe-part5