Как правильно реализовать доступ к папкам проекта на Laravel в docker и на хост машине?
Структура проекта:
Файл docker-compose:
version: '3'
services:
php_laravel:
image: devilbox/php-fpm:8.2-work
container_name: php_laravel
volumes:
- ./www:/var/www/default/htdocs/
ports:
- 9000
restart: always
nginx_laravel:
image: devilbox/nginx-stable:latest
container_name: nginx_laravel
links:
- php_laravel
environment:
- PHP_FPM_ENABLE=1~
- PHP_FPM_SERVER_ADDR=php_laravel
volumes:
- ./www:/var/www/default/htdocs/
- ./conf/localhost.conf:/etc/httpd/conf.d/localhost.conf
- ./log:/var/log/nginx-stable/
ports:
- 82:80
restart: always
В папке WWW лежит проект на Laravel с папками app,public,storage.. и т.д., как правильно реализовать права на папки на хост мшине и если нужно в контейнерах, т.к. пользуюсь artisan из контейнера php_laravel,проблемы начинаются когда создаю контроллеры и т.п. из контейнера через артисан,phpstorm говорит что у него нет прав на редактирование данного файла, так же возникают проблемы с папкой storage/framework,и папкой bootstrap/cache, спасибо
Ответы (3 шт):
Если docker-compose.yaml используется только локально, добавьте в секцию с приложением user: "1000:1000"
. 1000 обычно UID пользователя от которого происходит вход по умолчанию. В некоторых случаях он может быть другой
Либо, можно заходить в контейнер из-под юзера, который является владельцем файлов в контейнере docker compose exec -u <user> <container> <shell>
. Имя юзера можно увидеть, сделав ls -la
в каталоге с проектом в контейнере
Первый способ предпочтительнее, поскольку не портит владельца файлов на хостовой машине
Добавьте в docker-compose также ftp-сервер.
Например, docker-pure-ftpd.
Просто прописываем корневую папку со скриптами. Добавляем логин и пароль пользователя для соединения. Не забудьте пробросить 21 порт.
Файлы будут доступны для редактирования в любом текстовом редакторе, как и в любом клиенте протокола FTP. Laravel работает с файлами по FTP также хорошо, как с локальными.
Настройка разрешений на хост-машине: Установите правильные разрешения и владельцев: Убедитесь, что папки вашего проекта Laravel имеют правильные разрешения и владельцев. Обычно это означает, что владелец должен быть вашим пользователем, а группа должна быть www-data.
bash sudo chown -R $USER:www-data www sudo find www -type f -exec chmod 664 {} ; sudo find www -type d -exec chmod 775 {} ; sudo chown -R www-data:www-data www/storage sudo chown -R www-data:www-data www/bootstrap/cache
Дайте группе www-data доступ к созданию файлов и директорий:
bash
sudo chmod -R ug+rwx www/storage
sudo chmod -R ug+rwx www/bootstrap/cache
Настройка Docker контейнеров: Запуск контейнеров от имени пользователя www-data: Убедитесь, что контейнеры Docker запускаются с правильными правами. В вашем docker-compose.yml файле, добавьте пользователя для сервиса php_laravel:
yaml version: '3' services: php_laravel: image: devilbox/php-fpm:8.2-work container_name: php_laravel user: '1000:33' # замените '1000' на ваш user ID, а '33' на group ID www-data volumes: - ./www:/var/www/default/htdocs/ ports: - 9000 restart: always
nginx_laravel: image: devilbox/nginx-stable:latest container_name: nginx_laravel links: - php_laravel environment: - PHP_FPM_ENABLE=1~ - PHP_FPM_SERVER_ADDR=php_laravel volumes: - ./www:/var/www/default/htdocs/ - ./conf/localhost.conf:/etc/httpd/conf.d/localhost.conf - ./log:/var/log/nginx-stable/ ports: - 82:80 restart: always
Убедитесь, что службы перезапускаются и применяются новые конфигурации:
bash
docker-compose down
docker-compose up -d
Работа с Artisan и PHPStorm: Использование Artisan из контейнера: Убедитесь, что вы выполняете команды artisan от имени пользователя www-data:
bash docker exec -u www-data php_laravel php /var/www/default/htdocs/artisan make:controller ExampleController
Настройка PHPStorm: Убедитесь, что PHPStorm имеет правильные настройки для работы с файлами. В настройках проекта, проверьте права на запись для папок.