Ignasiya / chtune-social

0 stars 1 forks source link

Docker-compose #5

Closed paulmixxx closed 5 months ago

paulmixxx commented 6 months ago

Есть небольшие советы по улучшению конфига

version: "3.8"

services:
  nginx:
    image: nginx:stable-alpine
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./src:${PATH_ROOT}
    ports:
      - '8000:80' # надо дать возможность переопределять внешний порт 
                  # https://github.com/docker/docs/issues/6914#issuecomment-398818071
                  # в других местах писать не буду, но тоже рекомендую поправить
    networks:
      - app
    depends_on:
      - server

  server:
    build: ./docker # это в целом норм вариант и многие так делают, но я бы посоветовал сделать по-другому.
                    # можно собрать готовый образ и загрузить его в реджистри github
                    # тогда ты надежно зафиксируешь образ и проект будет работать и запускаться у всех одинаково
                    # в отличии от варианта со сборкой в момент разворачивания проекта
                    # + не нужно тратить время на сборку, как бонус
                    # https://docs.github.com/ru/packages/working-with-a-github-packages-registry/working-with-the-container-registry
    working_dir: ${PATH_ROOT}
    restart: unless-stopped
    tty: true
    volumes:
      - ./src:${PATH_ROOT}
      - ./docker/php.ini:/usr/local/etc/php/conf.d/php-custom.ini
    ports:
      - '3000:3000' # я так понимаю это для фронта, да?
                    # вообще в философии докера, нужно стараться следовать практике 1 процесс = 1 контейнер
                    # по-хорошему лучше вынести dev server фронта на отдельный сервис, который будет запускаться 
                    # в момент make up
                    # в итоге у тебя будет 2 сервиса front и back, каждый живет в своем контейнере
    networks:
      - app
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    volumes:
      - ./mysql:/var/lib/mysql # я как-то ловил проблему с пробросом данных в папку
                               # возможно, это уже поправили в новых версиях, но с тех пор отношусь с осторожностью
                               # сам сохраняю данные в именованных томах
                               # они точно работают без проблем
    environment:
      MYSQL_ROOT_HOST: '%'
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    ports:
      - "8006:3306"
    networks:
      - app

  mailpit:
    image: axllent/mailpit:latest
    ports:
      - '1025:1025'
      - '8025:8025'
    networks:
      - app

networks:
  app:
    driver: bridge
Ignasiya commented 6 months ago

Привет, немного повозился с новым сервисом node, добавил команду, чтобы он работал. https://github.com/Ignasiya/chtune-social/pull/6

Ignasiya commented 6 months ago

Привет, я попробовал написать dockerfile для сервиса node, правильно ли сделал? https://github.com/Ignasiya/chtune-social/pull/8

Ignasiya commented 6 months ago

Смержил, протестил команды refresh и clear. Встает на моменте (command: bash -c "npm install && npm run dev") в docker compose, вернул интервал, ошибка пропала. Очень круто получилось настроить конфигурацию окружения проекта ))

paulmixxx commented 6 months ago

Давай всё таки попробуем разобраться с твоей проблемой, потому что у меня такой нет. Тебе скорее всего мешают артефакты от предыдущих сборок.

Попробуй следующее:

  1. очистить все образы, контейнеры, волюмы этого проекта
  2. удалить полностью папку с репо
  3. склонировать репо заново
  4. поменять command на bash -c "npm install && npm run dev"
  5. запустить make init

У меня проект запустился без проблем.

image

image

image

Если всё таки возникнет проблема, надо смотреть логи контейнера с нодой и копать дальше.

paulmixxx commented 6 months ago

["node", "-e", "setInterval(function() {}, 1000);"] это костыль, не серьезно

Ignasiya commented 5 months ago

Привет, последовал твоим советам, все заработало )) Я походу где-то не доделал )) Спасибо, что пояснил.

Слушай можешь объяснить, если не трудно, при make init в docker compose, в сервисе node, выполняется команда bash -c "npm install && npm run dev", а после ставиться композер и снова выполняется установка npm install, уже через make.

Может стоит убрать установку npm из make init?

paulmixxx commented 5 months ago

Вообще этот шаг не должен сейчас влиять на установку. Если очень хочется можно убрать, но я бы оставил. В общем на твое усмотрение;)

paulmixxx commented 5 months ago

Здесь думаю всё решили) Важно, что по-итогу мы получили окружение, которое поднимается в одну команду и это именно то, что нужно было вынести из этого треда;)