Error correction and preparation of the project for initial deployment
This commit is contained in:
+36
-10
@@ -1,6 +1,11 @@
|
|||||||
FROM php:8.2-fpm
|
FROM php:8.2-fpm
|
||||||
|
|
||||||
|
# Устанавливаем рабочую директорию до установки системных зависимостей,
|
||||||
|
# чтобы все последующие команды выполнялись в правильном контексте.
|
||||||
|
WORKDIR /var/www
|
||||||
|
|
||||||
# Установка системных зависимостей
|
# Установка системных зависимостей
|
||||||
|
# В одном RUN-слое, чтобы уменьшить количество слоев в образе.
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
apt-utils \
|
apt-utils \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
@@ -21,15 +26,17 @@ RUN apt-get update && apt-get install -y \
|
|||||||
libicu-dev \
|
libicu-dev \
|
||||||
g++ \
|
g++ \
|
||||||
default-mysql-client \
|
default-mysql-client \
|
||||||
&& docker-php-ext-configure gd --with-webp --with-jpeg \
|
# Установка Node.js (актуальная LTS-версия 18)
|
||||||
&& docker-php-ext-install gd pdo_mysql bcmath zip intl \
|
&& curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
|
||||||
|
&& apt-get install -y nodejs \
|
||||||
|
&& npm install -g npm \
|
||||||
|
# Очистка кэша, чтобы уменьшить размер образа
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
# Установка Node.js (актуальная LTS-версия)
|
# Установка расширений PHP
|
||||||
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
|
RUN docker-php-ext-configure gd --with-webp --with-jpeg \
|
||||||
&& apt-get install -y nodejs \
|
&& docker-php-ext-install gd pdo_mysql bcmath zip intl
|
||||||
&& npm install -g npm
|
|
||||||
|
|
||||||
# Установка Composer
|
# Установка Composer
|
||||||
ENV COMPOSER_ALLOW_SUPERUSER=1
|
ENV COMPOSER_ALLOW_SUPERUSER=1
|
||||||
@@ -37,6 +44,28 @@ RUN curl -sS https://getcomposer.org/installer | php -- \
|
|||||||
--filename=composer \
|
--filename=composer \
|
||||||
--install-dir=/usr/local/bin
|
--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/app/php.ini /usr/local/etc/php/conf.d/php.ini
|
||||||
COPY ./_docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
COPY ./_docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||||
@@ -47,10 +76,7 @@ RUN chmod 0644 /etc/cron.d/laravel-cron \
|
|||||||
&& crontab /etc/cron.d/laravel-cron \
|
&& crontab /etc/cron.d/laravel-cron \
|
||||||
&& touch /var/log/cron.log
|
&& touch /var/log/cron.log
|
||||||
|
|
||||||
# Рабочая директория
|
# Запуск Supervisor (управляет PHP-FPM, Inertia SSR, и worker-ами)
|
||||||
WORKDIR /var/www
|
|
||||||
|
|
||||||
# Запуск Supervisor (управляет PHP-FPM и Inertia SSR)
|
|
||||||
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]
|
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]
|
||||||
|
|
||||||
# Открываем порты
|
# Открываем порты
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ use App\Containers\InstituteStructure\Models\Faculty;
|
|||||||
use App\Ship\Contracts\SeoDescriptionInterface;
|
use App\Ship\Contracts\SeoDescriptionInterface;
|
||||||
use App\Ship\Contracts\SeoTitleInterface;
|
use App\Ship\Contracts\SeoTitleInterface;
|
||||||
use App\Ship\Traits\HasSeo;
|
use App\Ship\Traits\HasSeo;
|
||||||
use BezhanSalleh\FilamentShield\FilamentShield;
|
|
||||||
use BezhanSalleh\FilamentShield\Support\Utils;
|
use BezhanSalleh\FilamentShield\Support\Utils;
|
||||||
use BezhanSalleh\FilamentShield\Traits\HasPanelShield;
|
use BezhanSalleh\FilamentShield\Traits\HasPanelShield;
|
||||||
use Filament\Models\Contracts\FilamentUser;
|
use Filament\Models\Contracts\FilamentUser;
|
||||||
@@ -97,19 +96,7 @@ class User extends Authenticatable implements FilamentUser, SeoTitleInterface, S
|
|||||||
return $this->hasOne(AcceptedInvitation::class, 'receiver_id');
|
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
|
public function canAccessPanel(Panel|\Filament\Panel $panel): bool
|
||||||
{
|
{
|
||||||
return match ($panel->getId()) {
|
return match ($panel->getId()) {
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ class UserObserver
|
|||||||
public function created(User $user): void
|
public function created(User $user): void
|
||||||
{
|
{
|
||||||
$this->userCacheService->clearAllCacheByModel();
|
$this->userCacheService->clearAllCacheByModel();
|
||||||
|
if (\Illuminate\Support\Facades\Schema::hasTable('roles')) {
|
||||||
|
$user->assignRole(config('filament-shield.dashboard_user.name', 'dashboard_user'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Ship\Commands;
|
||||||
|
use BezhanSalleh\FilamentShield\FilamentShield;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Ship\Abstracts\Commands\ConsoleCommand as AbstractConsoleCommand;
|
||||||
|
|
||||||
|
class InitRoles extends AbstractConsoleCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'roles:init-roles';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Initializes default roles for Filament Shield.';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
// Проверяем, что Filament Shield включен
|
||||||
|
if (!config('filament-shield.dashboard_user.enabled', false)) {
|
||||||
|
$this->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.');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ namespace App\Ship\Kernels;
|
|||||||
|
|
||||||
use AlxDorosenco\PortoForLaravel\Loaders\CommandsLoader;
|
use AlxDorosenco\PortoForLaravel\Loaders\CommandsLoader;
|
||||||
use AlxDorosenco\PortoForLaravel\Loaders\RoutesLoader;
|
use AlxDorosenco\PortoForLaravel\Loaders\RoutesLoader;
|
||||||
|
use App\Ship\Commands\InitRoles;
|
||||||
use Illuminate\Console\Scheduling\Schedule;
|
use Illuminate\Console\Scheduling\Schedule;
|
||||||
use Illuminate\Foundation\Console\Kernel as LaravelConsoleKernel;
|
use Illuminate\Foundation\Console\Kernel as LaravelConsoleKernel;
|
||||||
|
|
||||||
@@ -23,6 +24,10 @@ class ConsoleKernel extends LaravelConsoleKernel
|
|||||||
$schedule->command('sitemap:generate')->dailyAt('03:00');
|
$schedule->command('sitemap:generate')->dailyAt('03:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected $commands = [
|
||||||
|
InitRoles::class,
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register the commands for the application.
|
* Register the commands for the application.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -14,7 +14,6 @@
|
|||||||
"filament/filament": "v3.2.127",
|
"filament/filament": "v3.2.127",
|
||||||
"filament/spatie-laravel-settings-plugin": "^3.2",
|
"filament/spatie-laravel-settings-plugin": "^3.2",
|
||||||
"filament/spatie-laravel-tags-plugin": "v3.2.113",
|
"filament/spatie-laravel-tags-plugin": "v3.2.113",
|
||||||
"defstudio/telegraph": "^1.59",
|
|
||||||
"guava/filament-icon-picker": "2.2.4",
|
"guava/filament-icon-picker": "2.2.4",
|
||||||
"guzzlehttp/guzzle": "^7.8",
|
"guzzlehttp/guzzle": "^7.8",
|
||||||
"imangazaliev/didom": "^2.0",
|
"imangazaliev/didom": "^2.0",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Containers\Widget\Models\CustomForm;
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
@@ -13,7 +14,7 @@ return new class extends Migration
|
|||||||
{
|
{
|
||||||
Schema::create('custom_form_responses', function (Blueprint $table) {
|
Schema::create('custom_form_responses', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignIdFor(\App\Models\CustomForm::class);
|
$table->foreignIdFor(CustomForm::class);
|
||||||
$table->text('answers');
|
$table->text('answers');
|
||||||
$table->boolean('checked')->default(0);
|
$table->boolean('checked')->default(0);
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|||||||
+7
-1
@@ -39,12 +39,15 @@ services:
|
|||||||
container_name: ntspi-php
|
container_name: ntspi-php
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- '5173'
|
- "5173"
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
networks:
|
networks:
|
||||||
- app-network
|
- app-network
|
||||||
|
dns:
|
||||||
|
- 8.8.8.8 # Google DNS
|
||||||
|
- 1.1.1.1 # Cloudflare DNS
|
||||||
|
|
||||||
php-queue-worker:
|
php-queue-worker:
|
||||||
restart: always
|
restart: always
|
||||||
@@ -60,6 +63,9 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
networks:
|
networks:
|
||||||
- app-network
|
- app-network
|
||||||
|
dns:
|
||||||
|
- 8.8.8.8 # Google DNS
|
||||||
|
- 1.1.1.1 # Cloudflare DNS
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mysql:8.0
|
image: mysql:8.0
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ APP_KEY=base64:AteyeZacFiLsdXZUpcqOR8QTMm/stbJ/cheFLgm8+FQ=
|
|||||||
APP_DEBUG=false
|
APP_DEBUG=false
|
||||||
APP_URL=http://localhost/
|
APP_URL=http://localhost/
|
||||||
|
|
||||||
|
NGINX_ENV=test
|
||||||
|
|
||||||
|
PORTO_ENABLED=true
|
||||||
|
|
||||||
LOG_CHANNEL=stack
|
LOG_CHANNEL=stack
|
||||||
LOG_DEPRECATIONS_CHANNEL=null
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
LOG_LEVEL=debug
|
LOG_LEVEL=debug
|
||||||
|
|||||||
Reference in New Issue
Block a user