From e62b44299101db86c93077521a768825f9e384fb Mon Sep 17 00:00:00 2001 From: F4ilji Date: Mon, 11 Aug 2025 16:12:10 +0500 Subject: [PATCH] Error correction and preparation of the project for initial deployment --- _docker/app/Dockerfile | 48 ++++++++++++++----- app/Containers/User/Models/User.php | 15 +----- app/Observers/UserObserver.php | 5 +- app/Ship/Commands/InitRoles.php | 48 +++++++++++++++++++ app/Ship/Kernels/ConsoleKernel.php | 5 ++ composer.json | 1 - ...152_create_custom_form_responses_table.php | 3 +- docker-compose.yml | 10 +++- example.env | 4 ++ 9 files changed, 109 insertions(+), 30 deletions(-) create mode 100644 app/Ship/Commands/InitRoles.php diff --git a/_docker/app/Dockerfile b/_docker/app/Dockerfile index 1b9a63b..f4dea18 100644 --- a/_docker/app/Dockerfile +++ b/_docker/app/Dockerfile @@ -1,6 +1,11 @@ FROM php:8.2-fpm +# Устанавливаем рабочую директорию до установки системных зависимостей, +# чтобы все последующие команды выполнялись в правильном контексте. +WORKDIR /var/www + # Установка системных зависимостей +# В одном RUN-слое, чтобы уменьшить количество слоев в образе. RUN apt-get update && apt-get install -y \ apt-utils \ libpq-dev \ @@ -21,15 +26,17 @@ RUN apt-get update && apt-get install -y \ libicu-dev \ g++ \ default-mysql-client \ - && docker-php-ext-configure gd --with-webp --with-jpeg \ - && docker-php-ext-install gd pdo_mysql bcmath zip intl \ + # Установка Node.js (актуальная LTS-версия 18) + && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + # Очистка кэша, чтобы уменьшить размер образа && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -# Установка Node.js (актуальная LTS-версия) -RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ - && apt-get install -y nodejs \ - && npm install -g npm +# Установка расширений PHP +RUN docker-php-ext-configure gd --with-webp --with-jpeg \ + && docker-php-ext-install gd pdo_mysql bcmath zip intl # Установка Composer ENV COMPOSER_ALLOW_SUPERUSER=1 @@ -37,6 +44,28 @@ RUN curl -sS https://getcomposer.org/installer | php -- \ --filename=composer \ --install-dir=/usr/local/bin +# Создаём необходимые поддиректории внутри 'storage' +# Шаг 5: Копирование файлов Composer для кэширования +COPY composer.json composer.lock ./ + +# Шаг 6: Установка зависимостей +RUN composer install --no-dev --optimize-autoloader --no-interaction + +# Шаг 7: Копирование всего остального кода приложения +# В этот момент директории 'storage' и 'bootstrap/cache' появятся в образе. +COPY . . + +# Шаг 8: Создание необходимых поддиректорий +# Эта команда создаст поддиректории внутри 'storage', которые могут отсутствовать. +RUN mkdir -p storage/framework/views storage/framework/sessions storage/framework/cache storage/logs + +# Шаг 9: Установка прав доступа +# Теперь эта команда выполнится успешно, так как директории уже существуют. +RUN chown -R www-data:www-data storage bootstrap/cache \ + && chmod -R 775 storage bootstrap/cache + + + # Копирование конфигураций COPY ./_docker/app/php.ini /usr/local/etc/php/conf.d/php.ini COPY ./_docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf @@ -47,12 +76,9 @@ RUN chmod 0644 /etc/cron.d/laravel-cron \ && crontab /etc/cron.d/laravel-cron \ && touch /var/log/cron.log -# Рабочая директория -WORKDIR /var/www - -# Запуск Supervisor (управляет PHP-FPM и Inertia SSR) +# Запуск Supervisor (управляет PHP-FPM, Inertia SSR, и worker-ами) CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"] # Открываем порты EXPOSE 9000 -EXPOSE 13714 \ No newline at end of file +EXPOSE 13714 diff --git a/app/Containers/User/Models/User.php b/app/Containers/User/Models/User.php index 2040708..c146541 100644 --- a/app/Containers/User/Models/User.php +++ b/app/Containers/User/Models/User.php @@ -8,7 +8,6 @@ use App\Containers\InstituteStructure\Models\Faculty; use App\Ship\Contracts\SeoDescriptionInterface; use App\Ship\Contracts\SeoTitleInterface; use App\Ship\Traits\HasSeo; -use BezhanSalleh\FilamentShield\FilamentShield; use BezhanSalleh\FilamentShield\Support\Utils; use BezhanSalleh\FilamentShield\Traits\HasPanelShield; use Filament\Models\Contracts\FilamentUser; @@ -97,19 +96,7 @@ class User extends Authenticatable implements FilamentUser, SeoTitleInterface, S return $this->hasOne(AcceptedInvitation::class, 'receiver_id'); } - protected static function booted(): void - { - if (config('filament-shield.dashboard_user.enabled', false)) { - FilamentShield::createRole(name: config('filament-shield.dashboard_user.name', 'dashboard_user')); - FilamentShield::createRole(name: config('', 'editor')); - static::created(function (User $user) { - $user->assignRole(config('filament-shield.dashboard_user.name', 'dashboard_user')); - }); - static::deleting(function (User $user) { - $user->assignRole(config('filament-shield.dashboard_user.name', 'dashboard_user')); - }); - } - } + public function canAccessPanel(Panel|\Filament\Panel $panel): bool { return match ($panel->getId()) { diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php index 8cc1c80..870e0df 100644 --- a/app/Observers/UserObserver.php +++ b/app/Observers/UserObserver.php @@ -20,6 +20,9 @@ class UserObserver public function created(User $user): void { $this->userCacheService->clearAllCacheByModel(); + if (\Illuminate\Support\Facades\Schema::hasTable('roles')) { + $user->assignRole(config('filament-shield.dashboard_user.name', 'dashboard_user')); + } } /** @@ -56,4 +59,4 @@ class UserObserver $this->userCacheService->clearCache($user); $this->userCacheService->clearAllCacheByModel(); } -} \ No newline at end of file +} diff --git a/app/Ship/Commands/InitRoles.php b/app/Ship/Commands/InitRoles.php new file mode 100644 index 0000000..59c5daa --- /dev/null +++ b/app/Ship/Commands/InitRoles.php @@ -0,0 +1,48 @@ +warn('Filament Shield dashboard user is not enabled in the config.'); + return; + } + + // Создаем роли + FilamentShield::createRole( + name: config('filament-shield.dashboard_user.name', 'dashboard_user') + ); + FilamentShield::createRole( + name: config('', 'editor') + ); + + $this->info('Filament Shield roles have been initialized successfully.'); + } +} diff --git a/app/Ship/Kernels/ConsoleKernel.php b/app/Ship/Kernels/ConsoleKernel.php index aeb1ab1..9fe9c11 100644 --- a/app/Ship/Kernels/ConsoleKernel.php +++ b/app/Ship/Kernels/ConsoleKernel.php @@ -4,6 +4,7 @@ namespace App\Ship\Kernels; use AlxDorosenco\PortoForLaravel\Loaders\CommandsLoader; use AlxDorosenco\PortoForLaravel\Loaders\RoutesLoader; +use App\Ship\Commands\InitRoles; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as LaravelConsoleKernel; @@ -23,6 +24,10 @@ class ConsoleKernel extends LaravelConsoleKernel $schedule->command('sitemap:generate')->dailyAt('03:00'); } + protected $commands = [ + InitRoles::class, + ]; + /** * Register the commands for the application. * diff --git a/composer.json b/composer.json index 4f8e54b..ae5c494 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,6 @@ "filament/filament": "v3.2.127", "filament/spatie-laravel-settings-plugin": "^3.2", "filament/spatie-laravel-tags-plugin": "v3.2.113", - "defstudio/telegraph": "^1.59", "guava/filament-icon-picker": "2.2.4", "guzzlehttp/guzzle": "^7.8", "imangazaliev/didom": "^2.0", diff --git a/database/migrations/2024_08_16_231152_create_custom_form_responses_table.php b/database/migrations/2024_08_16_231152_create_custom_form_responses_table.php index 4dbe077..7be295c 100644 --- a/database/migrations/2024_08_16_231152_create_custom_form_responses_table.php +++ b/database/migrations/2024_08_16_231152_create_custom_form_responses_table.php @@ -1,5 +1,6 @@ id(); - $table->foreignIdFor(\App\Models\CustomForm::class); + $table->foreignIdFor(CustomForm::class); $table->text('answers'); $table->boolean('checked')->default(0); $table->timestamps(); diff --git a/docker-compose.yml b/docker-compose.yml index 00834e4..9ff1801 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,12 +39,15 @@ services: container_name: ntspi-php restart: always ports: - - '5173' + - "5173" depends_on: db: condition: service_healthy networks: - app-network + dns: + - 8.8.8.8 # Google DNS + - 1.1.1.1 # Cloudflare DNS php-queue-worker: restart: always @@ -60,6 +63,9 @@ services: condition: service_healthy networks: - app-network + dns: + - 8.8.8.8 # Google DNS + - 1.1.1.1 # Cloudflare DNS db: image: mysql:8.0 @@ -100,4 +106,4 @@ volumes: networks: app-network: - driver: bridge \ No newline at end of file + driver: bridge diff --git a/example.env b/example.env index d8dba10..e7bdb25 100644 --- a/example.env +++ b/example.env @@ -4,6 +4,10 @@ APP_KEY=base64:AteyeZacFiLsdXZUpcqOR8QTMm/stbJ/cheFLgm8+FQ= APP_DEBUG=false APP_URL=http://localhost/ +NGINX_ENV=test + +PORTO_ENABLED=true + LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug