Prepare production Docker deployment
This commit is contained in:
+3
-1
@@ -2,19 +2,21 @@ APP_NAME=AirService
|
||||
APP_ENV=production
|
||||
APP_KEY=
|
||||
APP_DEBUG=false
|
||||
APP_URL=https://example.ru
|
||||
APP_URL=https://csk74.online
|
||||
|
||||
LOG_CHANNEL=stderr
|
||||
LOG_LEVEL=error
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
DB_DATABASE=/var/www/html/database/sqlite/database.sqlite
|
||||
DB_FOREIGN_KEYS=true
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
SESSION_DRIVER=file
|
||||
SESSION_SECURE_COOKIE=true
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
# S3 (опционально, если нужно хранение файлов)
|
||||
|
||||
+3
-2
@@ -11,11 +11,12 @@ FROM php:8.2-fpm-alpine AS app
|
||||
WORKDIR /var/www/html
|
||||
|
||||
RUN apk add --no-cache \
|
||||
libpng-dev libjpeg-turbo-dev freetype-dev libzip-dev sqlite \
|
||||
libpng-dev libjpeg-turbo-dev freetype-dev libzip-dev sqlite sqlite-dev \
|
||||
oniguruma-dev libxml2-dev \
|
||||
zip unzip git
|
||||
|
||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
||||
&& docker-php-ext-install pdo pdo_sqlite gd zip opcache pcntl
|
||||
&& docker-php-ext-install pdo pdo_sqlite mbstring dom xml gd zip opcache pcntl
|
||||
|
||||
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\Auth\Authenticatable;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AuthenticatedUserController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request): ?Authenticatable
|
||||
{
|
||||
return $request->user();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ActivityLogService;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class LogoutController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request, ActivityLogService $activityLogService): RedirectResponse
|
||||
{
|
||||
if (auth()->check()) {
|
||||
$activityLogService->log(auth()->user(), auth()->user(), auth()->id(), 'logout', 'Выход из системы', $request->ip());
|
||||
}
|
||||
|
||||
Auth::logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect()->route('login')->with('success', 'Вы вышли из системы.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Support\RoleRedirect;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
class HomeController extends Controller
|
||||
{
|
||||
public function __invoke(): RedirectResponse
|
||||
{
|
||||
if (! auth()->check()) {
|
||||
return redirect()->route('login');
|
||||
}
|
||||
|
||||
return redirect()->route(RoleRedirect::routeFor(auth()->user()));
|
||||
}
|
||||
}
|
||||
+9
-6
@@ -13,7 +13,8 @@ services:
|
||||
expose:
|
||||
- "9000"
|
||||
volumes:
|
||||
- storage_uploads:/var/www/html/storage/app/public
|
||||
- storage_public:/var/www/html/storage/app/public
|
||||
- storage_attachments:/var/www/html/storage/app/request-attachments
|
||||
- storage_logs:/var/www/html/storage/logs
|
||||
- sqlite_data:/var/www/html/database/sqlite
|
||||
networks:
|
||||
@@ -36,7 +37,8 @@ services:
|
||||
- .env
|
||||
command: ["php", "artisan", "queue:work", "--sleep=3", "--tries=3", "--max-time=3600"]
|
||||
volumes:
|
||||
- storage_uploads:/var/www/html/storage/app/public
|
||||
- storage_public:/var/www/html/storage/app/public
|
||||
- storage_attachments:/var/www/html/storage/app/request-attachments
|
||||
- storage_logs:/var/www/html/storage/logs
|
||||
- sqlite_data:/var/www/html/database/sqlite
|
||||
networks:
|
||||
@@ -53,16 +55,16 @@ services:
|
||||
container_name: airservice_nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "10.20.0.20:18201:80"
|
||||
- "10.20.0.25:18084:80"
|
||||
volumes:
|
||||
- storage_uploads:/var/www/html/public/storage:ro
|
||||
- storage_public:/var/www/html/public/storage:ro
|
||||
networks:
|
||||
- backend
|
||||
depends_on:
|
||||
app:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/health || exit 1"]
|
||||
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/health | grep -q ok"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
@@ -74,5 +76,6 @@ networks:
|
||||
|
||||
volumes:
|
||||
sqlite_data:
|
||||
storage_uploads:
|
||||
storage_public:
|
||||
storage_attachments:
|
||||
storage_logs:
|
||||
|
||||
@@ -4,14 +4,30 @@ set -e
|
||||
if [ "$DB_CONNECTION" = "sqlite" ]; then
|
||||
DB_DIR=$(dirname "$DB_DATABASE")
|
||||
mkdir -p "$DB_DIR"
|
||||
|
||||
if [ ! -f "$DB_DATABASE" ]; then
|
||||
touch "$DB_DATABASE"
|
||||
fi
|
||||
|
||||
chown -R www-data:www-data "$DB_DIR"
|
||||
chmod 775 "$DB_DIR"
|
||||
chmod 664 "$DB_DATABASE"
|
||||
fi
|
||||
|
||||
mkdir -p \
|
||||
/var/www/html/storage/app/public \
|
||||
/var/www/html/storage/app/request-attachments \
|
||||
/var/www/html/storage/logs \
|
||||
/var/www/html/storage/framework/cache \
|
||||
/var/www/html/storage/framework/sessions \
|
||||
/var/www/html/storage/framework/views \
|
||||
/var/www/html/bootstrap/cache
|
||||
|
||||
chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
|
||||
chmod -R ug+rwX /var/www/html/storage /var/www/html/bootstrap/cache
|
||||
|
||||
php artisan migrate --force
|
||||
php artisan storage:link || true
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan view:cache
|
||||
|
||||
+2
-4
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Api\AuthenticatedUserController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
@@ -14,6 +14,4 @@ use Illuminate\Support\Facades\Route;
|
||||
|
|
||||
*/
|
||||
|
||||
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
Route::middleware('auth:sanctum')->get('/user', AuthenticatedUserController::class);
|
||||
|
||||
+6
-24
@@ -2,7 +2,9 @@
|
||||
|
||||
use App\Http\Controllers\AttachmentController;
|
||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||
use App\Http\Controllers\Auth\LogoutController;
|
||||
use App\Http\Controllers\Auth\ResetPasswordController;
|
||||
use App\Http\Controllers\HomeController;
|
||||
use App\Livewire\Auth\LoginPage;
|
||||
use App\Livewire\Dashboard\DashboardPage;
|
||||
use App\Livewire\Directories\DepartmentsPage;
|
||||
@@ -26,19 +28,9 @@ use App\Livewire\Tasks\MyTasksPage;
|
||||
use App\Livewire\Users\UserFormPage;
|
||||
use App\Livewire\Users\UserShowPage;
|
||||
use App\Livewire\Users\UsersIndexPage;
|
||||
use App\Services\ActivityLogService;
|
||||
use App\Support\RoleRedirect;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/', function () {
|
||||
if (!auth()->check()) {
|
||||
return redirect()->route('login');
|
||||
}
|
||||
|
||||
return redirect()->route(RoleRedirect::routeFor(auth()->user()));
|
||||
});
|
||||
Route::get('/', HomeController::class);
|
||||
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('/login', LoginPage::class)->name('login');
|
||||
@@ -48,17 +40,7 @@ Route::middleware('guest')->group(function () {
|
||||
Route::post('/reset-password', [ResetPasswordController::class, 'store'])->name('password.store');
|
||||
});
|
||||
|
||||
Route::post('/logout', function (Request $request, ActivityLogService $activityLogService) {
|
||||
if (auth()->check()) {
|
||||
$activityLogService->log(auth()->user(), auth()->user(), auth()->id(), 'logout', 'Выход из системы', $request->ip());
|
||||
}
|
||||
|
||||
Auth::logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect()->route('login')->with('success', 'Вы вышли из системы.');
|
||||
})->middleware('auth')->name('logout');
|
||||
Route::post('/logout', LogoutController::class)->middleware('auth')->name('logout');
|
||||
|
||||
Route::middleware(['auth', 'active_user'])->group(function () {
|
||||
Route::get('/profile', ProfilePage::class)->name('profile');
|
||||
@@ -89,7 +71,7 @@ Route::middleware(['auth', 'active_user'])->group(function () {
|
||||
->whereNumber('user')
|
||||
->name('users.show');
|
||||
|
||||
Route::get('/reports', fn () => redirect()->route('reports.general'))->name('reports');
|
||||
Route::redirect('/reports', '/reports/general')->name('reports');
|
||||
Route::get('/reports/general', GeneralReportPage::class)->name('reports.general');
|
||||
Route::get('/reports/technicians', TechniciansReportPage::class)->name('reports.technicians');
|
||||
Route::get('/reports/sla', SlaReportPage::class)->name('reports.sla');
|
||||
@@ -102,7 +84,7 @@ Route::middleware(['auth', 'active_user'])->group(function () {
|
||||
->whereNumber('user')
|
||||
->name('users.edit');
|
||||
|
||||
Route::get('/directories', fn () => redirect()->route('directories.departments'))->name('directories');
|
||||
Route::redirect('/directories', '/directories/departments')->name('directories');
|
||||
Route::get('/directories/departments', DepartmentsPage::class)->name('directories.departments');
|
||||
Route::get('/directories/equipment-categories', EquipmentCategoriesPage::class)->name('directories.equipment-categories');
|
||||
Route::get('/directories/request-types', RequestTypesPage::class)->name('directories.request-types');
|
||||
|
||||
Reference in New Issue
Block a user