Настройка Docker с использованием Traefik, Nginx и Laravel - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь выяснить, как настроить простой стек для разработки и последующего развертывания. Я хочу использовать Docker для обслуживания Traefik в контейнере в качестве общедоступного обратного прокси-сервера, который затем взаимодействует по мере необходимости с контейнером Nginx, который используется только для обслуживания статических файлов внешнего интерфейса (HTML, CSS, JS) и внутреннего PHP-контейнера, который запускает Laravel (я намеренно отделяю интерфейс и API для этого проекта).

Я стараюсь изо всех сил изучать все видео и письменные учебники, но все усложняется очень быстро (по крайней мере, для моего непосвященного мозга), и это немного ошеломляет. У меня есть недельный срок для завершения этого проекта, и я настоятельно рекомендую вообще отказаться от Docker, опасаясь, что я потрачу все время, пытаясь возиться с конфигурацией, а не с кодированием!

Для начала у меня есть простой docker-compose со следующей конфигурацией, которая, как я проверял, по крайней мере, работает правильно:

version: '3'

services:
  reverse-proxy:
    image: traefik
    command: --api --docker # Enables Web UI and tells Traefik to listen to Docker.
    ports:
      - "80:80" # HTTP Port
      - "8080:8080" # Web UI
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events.

Теперь мне нужно выяснить, как эффективно соединить Nginx и PHP / Laravel.

1 Ответ

0 голосов
/ 19 сентября 2018

Прежде всего, не подвергайте себя стрессу, чтобы изучать новые вещи.Потому что, если вы это сделаете, изучение новых вещей не будет чувствовать себя более комфортно.Возьмите свои знания технологии и сделайте вещи.Когда вы закончите, и вы поймете, что у вас есть 1/2 дня, чтобы уложиться в срок, попробуйте перерасход, включив новые технологии.Таким образом, вы не будете ограничивать свой срок и не будете испытывать стресс при определении нашей новой технологии или конфигурации.

Конфигурация, которую вы видите ниже, не завершена и не проверена функционально.Я просто скопировал большую часть материала из 3 моих основных проектов, чтобы дать вам отправную точку.Traefik as-is может быть сложно правильно настроить.

version: '3'

# Instantiate your own configuration with a Dockerfile!
# This way you can build somewhere and just deploy your container
# anywhere without the need to copy files around.

services:
  # traefik as reverse-proxy
  traefik:
    build:
      context: .
      dockerfile: ./Dockerfile-for-traefik # including traefik.toml
    command: --docker
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      # this file you'll have to create manually `touch acme.json && chmod 600 acme.json`
      - /home/docker/volumes/traefik/acme.json:/opt/traefik/acme.jso
    networks:
      - overlay
    ports:
      - 80:80
      - 443:443

  nginx:
    build:
      context: .
      dockerfile: ./Dockerfile-for-nginx
    networks:
      - overlay
    depends_on:
      - laravel
    volumes:
      # you can copy your assets to production with
      # `tar -c -C ./myassets . | docker cp - myfolder_nginx_1:/var/www/assets`
      # there are many other ways to achieve this!
      - assets:/var/www/assets

  # define your application + whatever it needs to run
  # important:
  # - "build:" will search for a Dockerfile in the directory you're specifying
  laravel:
    build: ./path/to/laravel/app
    environment:
      MYSQL_ROOT_PASSWORD: password
      ENVIRONMENT: development
      MYSQL_DATABASE: your_database
      MYSQL_USER: your_database_user
    networks:
      - overlay
    links:
      - mysql
    volumes:
      # this path is for development
      - ./path/to/laravel/app:/app

  # you need a database, right?
  mysql:
    image: mysql:5
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: your_database
      MYSQL_USER: your_database_user
    networks:
      - overlay
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:
  assets:

networks:
  overlay:
...