Как подключить Encore для проекта Symfony в Docker-Compose?
Перекидываю Symfony-проект под docker-compose. Встала проблема переноса Encore'a.
Моя попытка следующая:
В docker-compose.yml :
compose:
image: composer:1.9
container_name: compose
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
working_dir: ${APP_PATH_CONTAINER}
command: composer install
command: composer yarn install
command: composer require symfony/webpack-encore-bundle
encore:
container_name: encore
image: node:alpine
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
ports:
- 8083:8083
working_dir: ${APP_PATH_CONTAINER}
command: [ "yarn", "dev-server", "--host=0.0.0.0" ]
command: yarn install
command: yarn add @symfony/webpack-encore --dev
command: encore yarn build
command: encore dev --watch
На выходе при запуске docker-compose up указывает, что symfony/webpack-encore-bundle композер установил, но выдает ошибку:
encore | internal/modules/cjs/loader.js:895
encore | throw err;
encore | ^
encore |
encore | Error: Cannot find module '/var/www/html/encore'
encore | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:892:15)
encore | at Function.Module._load (internal/modules/cjs/loader.js:742:27)
encore | at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
encore | at internal/main/run_main_module.js:17:47 {
encore | code: 'MODULE_NOT_FOUND',
encore | requireStack: []
encore | }
encore exited with code 1
Я понимаю, что здесь мне логически неоткуда брать модуль Encore, но иных вариантов я не нашёл в интернете. Я не понимаю как и из какого образа мне "вытащить" применение команды Encore в docker-compose через command.
Подскажите, пожалуйста, в чём моя ошибка и как её разрешить.
Ответы (2 шт):
Многошаговый command не пройдет.
Либо пишите скрипт-обертку с шагами и вызывайте в command,
либо делайте Dockerfile с RUN шагами.
Проблема решена.
Воспользовался методичкой отсюда: https://github.com/thecodingmachine/symfony-vuejs
Чтобы внедрить в свой проект, я в свой docker-composer.yml добавил один сервис, подправив версию на поновее. Encore работает.
app:
image: thecodingmachine/php:7.4-v3-apache-node12
labels:
- traefik.enable=true
- traefik.backend=app
- traefik.frontend.rule=Host:app.localhost
environment:
APACHE_DOCUMENT_ROOT: "public/"
PHP_EXTENSION_XDEBUG: "1"
PHP_INI_MEMORY_LIMIT: "1G"
# Symfony
APP_ENV: "dev"
APP_SECRET: "8d2a5c935d8ef1c0e2b751147382bc75"
DATABASE_URL: "mysql://root:root@db/mydatabase"
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}:rw
command: bash -c "yarn install && yarn dev --watch"
upd: исправил command и убрал лишний сервис