не запускается artisan serve в laradock контейнере workspace
есть проект на laravel. использую окружение laradock для запуска проекта. для запуска делаю
docker-compose up -d workspace mysql php-fpm
docker-compose exec workspace bash
cd ПАПКА_ПРОЕКТА
php artisan serve
но вот проблема, что после запуска последней команды (serve) в консоли выводится
Starting Laravel development server: http://127.0.0.1:8000 и так и стоит. сервер не запускается.
Версия php в workspace (php -v):
PHP 7.3.27-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Feb 7 2021 11:57:25) ( NTS )
Дистрибутив в workspace (neofetch):
Ubuntu 18.04.5 LTS x86_64
Host: Virtual Machine Hyper-V UEFI Release v4.0
Да и вообще очень странно себя ведет у меня laradock. к примеру есть еще такое что npm run dev очень медленно работает и npm run watch так же медленно собирает но плюс еще не делает watch т.е. при изменении в файлах не обновляется
nodejs (node -v):
7.5.3
npm (npm -v):
v15.8.0
Что я пробовал делать:
- Переустанавливал Docker, Laradock, WSL2
- Переключал Docker с WSL2 на Hyper-V и наоборот
- Use the WSL2 based engine в Docker
- Clean / Purge data в Docker
- apt update && apt upgrade в workspace
Даже не знаю в чем может быть проблема
Вот некоторые конфиги проекта:
package.json
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"axios": "^0.21",
"bootstrap": "^4.0.0",
"jquery": "^3.2",
"laravel-mix": "^6.0.0-beta.17",
"lodash": "^4.17.19",
"popper.js": "^1.12",
"postcss": "^8.1.14",
"resolve-url-loader": "^2.3.1",
"sass": "^1.20.1",
"sass-loader": "^8.0.0",
"vue": "^3.0.5",
"vue-loader": "^16.1.2",
"vue-template-compiler": "^2.6.10"
},
"dependencies": {
"@vue/compiler-sfc": "^3.0.5",
"swiper": "^6.4.11"
}
}
Laravel (php artisan --version):
Laravel Framework 8.26.1
docker-compose.yml laradock
.env laradock
time npm run dev
real 1m1.804s
user 0m16.883s
sys 0m6.296s
p.s. возможет быть надо что то поменять в php.ini поскольку мне удалось воспроизвести эту проблему вне workspace когда раскомментировал php.ini-development который был у меня в windows 10
Ответы (1 шт):
действительно нет особо смысла использовать artisan serve. лучше поднять nginx и использовать его. как сделать:
docker-compose up -d nginx
docker-compose exec nginx bash
apk add nano && nano /etc/nginx/nginx.conf
в этом файле ищете подобное
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-available/*.conf;
open_file_cache off; # Disabled for issue 619
charset UTF-8;
...
и добавляете такую строку
include /var/www/*/*.nginx;
!!! только если вы не меняли пути в .env laradock. если меняли вместо /var/www/ укажите свой путь до папки проектов.
затем в корень проекта (у меня laravel проект). добавляете nginx файл конфигурации. у меня содержимое файла такое:
config.nginx
server {
listen 80;
listen [::]:80;
# не забудьте добавить домен в hosts в виндовс (c:\windows\system32\drivers\etc).
# а то можете как я просидеть пол часа думая что же не так
server_name my_laravel_project.localhost;
access_log /var/www/my_laravel_project/storage/logs/nginx_access.log;
error_log /var/www/my_laravel_project/storage/logs/nginx_error.log;
root /var/www/my_laravel_project/public;
index index.php;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
charset utf-8;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
# serve static files directly
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
log_not_found off;
}
# removes trailing slashes (prevents SEO duplicate content issues)
if (!-d $request_filename)
{
rewrite ^/(.+)/$ /$1 permanent;
}
# enforce NO www
if ($host ~* ^www\.(.*))
{
set $host_without_www $1;
rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
}
# unless the request is for a valid file (image, js, css, etc.), send to bootstrap
if (!-e $request_filename)
{
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-upstream; # may also be: 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
теперь выходим из контейнера и делаем
docker-compose restart
и теперь по идее наш проект открыт по адресу my_laravel_project.localhost
p.s если в каком-то из описанных мною шагов есть ошибка. оставьте комментарий или правьте вопрос
p.s. решение о скорости wsl2 смотрите в ответе этого вопроса