Я работал на сайте, построенном на Laravel 4.2 и Php 7.1. Недавно я пытался перенести сайт на Laravel 6 с php 7.4 и mysql 8. Я настраиваю docker со следующими настройками.
Файл базы данных:
FROM mysql:8.0.18
ADD data_x.sql /docker-entrypoint-initdb.d
CMD ["mysqld"]
EXPOSE 3306
Nginx Файл:
FROM nginx:latest
CMD ["nginx"]
EXPOSE 80 443
Nginx conf:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /var/www/public/superadmin;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}
}
Php -fpm
FROM php:7.4.0-fpm-buster
RUN docker-php-ext-install pdo_mysql
CMD ["php-fpm"]
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
EXPOSE 9000
docker -составить
version: '3'
services:
nginx:
build:
context: ./nginx
volumes:
- ../laravelproject:/var/www
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
depends_on:
- php-fpm
ports:
- "80:80"
- "443:443"
php-fpm:
build:
context: ./php-fpm
volumes:
- ../laravelproject:/var/www
- ../laravelproject/serve_config/custom.ini:/usr/local/etc/php/conf.d/custom.ini
links:
- database:mysql
database:
build:
context: ./database
environment:
- MYSQL_DATABASE=mydb
- MYSQL_USER=myuser
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=docker
command: ['--default-authentication-plugin=mysql_native_password']
ports:
- "3306:3306"
Миграция проходит гладко, но я заметил, что страницы загружаются довольно медленно.
Та же страница в моем старом коде, работающем на php 7.1 и Apache, занимает около 100 - 200 мс, в то время как моя новая версия почти заняла бы 1 секунду.
Я положил выход в bootstrap / app. php, и это все еще занимает примерно то же время. Я заметил, что app_debug был включен, и я выключил его, и это уменьшило задержку примерно до 600 - 700 мс, чтобы загрузить «привет» текст на странице.
Мне интересно, Docker добавляет задержку или я пропускаю какие-либо настройки на laravel 6, которые могут замедлять его.
Опкэш отключен на обоих.
Я пытался проверить некоторые различия во времени. Я не очень разбираюсь в том, как это сделать, но сделал это.
Первая страница индексной страницы
Старая настройка - 8 мс
Docker Настройка - 16 мс
в bootstrap приложении. php первая строка
старая настройка - 28 мс
Docker настройка - 106 мс
in bootstrap приложение. php до возврата $ app
старая настройка - 56 мс
Docker настройка - 206 мс
При индексе. php до запуска приложения
старая настройка - 68 мс
Docker настройка - 254 мс
после полной загрузки приложения
старая настройка - 115 мс
Docker настройка - 1 секунда (приблизительно)
В laravel 4 у нас была $ app-> run () в индексе. php после возврата $ app. В larave 6 вместо $ app-> run () у нас есть.
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
- это может загружать что-то, что может привести к некоторой задержке. Я также попытался закомментировать некоторое промежуточное программное обеспечение, и оно оставалось прежним.
Каждый запрос занимает много времени для загрузки. Шрифты загружаются за 300 ~ 400 мс, и все примерно в 10 раз медленнее, чем старый код на apache на Mamp.