Версия 0.5.0 #8
@@ -1,18 +0,0 @@
 | 
			
		||||
<?php declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace App\Enums;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Cache\TaggedCache;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
 | 
			
		||||
enum CacheTag: string
 | 
			
		||||
{
 | 
			
		||||
    case Project = 'project';
 | 
			
		||||
    case ProjectTranslation = 'project_translation';
 | 
			
		||||
    case DocumantationVersion = 'documantation_version';
 | 
			
		||||
 | 
			
		||||
    public function getCache(): TaggedCache
 | 
			
		||||
    {
 | 
			
		||||
        return Cache::tags($this->value);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -2,8 +2,8 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Response;
 | 
			
		||||
 | 
			
		||||
final readonly class DocumentationVersion
 | 
			
		||||
@@ -17,7 +17,7 @@ final readonly class DocumentationVersion
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $seconds = 3600;
 | 
			
		||||
        $version = CacheTag::DocumantationVersion->getCache()->remember(self::class . $project->id . '-' . $versionSlug, $seconds, function () use ($project, $versionSlug) {
 | 
			
		||||
        $version = Cache::remember(self::class . $project->id . '-' . $versionSlug, $seconds, function () use ($project, $versionSlug) {
 | 
			
		||||
            return $project->documentationVersions()->where('slug', $versionSlug)->first() ?? false;
 | 
			
		||||
        });
 | 
			
		||||
        if ($version === false) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Response;
 | 
			
		||||
use Closure;
 | 
			
		||||
 | 
			
		||||
@@ -17,7 +17,7 @@ final class ProjectAndLanguage extends ProjectLanguage
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $seconds = 3600;
 | 
			
		||||
        $project = CacheTag::Project->getCache()->remember(self::class . $projectCode, $seconds, function () use ($projectCode) {
 | 
			
		||||
        $project = Cache::remember(self::class . $projectCode, $seconds, function () use ($projectCode) {
 | 
			
		||||
            return $this->projectRepository->getProjectByCode($projectCode) ?? false;
 | 
			
		||||
        });
 | 
			
		||||
        if ($project === false) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Response;
 | 
			
		||||
 | 
			
		||||
@@ -21,7 +21,7 @@ final class ProjectDomainAndLanguage extends ProjectLanguage
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $seconds = 3600;
 | 
			
		||||
        $project = CacheTag::Project->getCache()->remember(self::class . $httpHost, $seconds, function () use ($httpHost) {
 | 
			
		||||
        $project = Cache::remember(self::class . $httpHost, $seconds, function () use ($httpHost) {
 | 
			
		||||
            return $this->projectRepository->getProjectByHttpHost($httpHost) ?? false;
 | 
			
		||||
        });
 | 
			
		||||
        if ($project === false) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,13 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Models\Project;
 | 
			
		||||
use App\Repositories\ProjectLanguageRepository;
 | 
			
		||||
use App\Repositories\ProjectRepository;
 | 
			
		||||
use App\Repositories\ProjectTranslationRepository;
 | 
			
		||||
use App\Services\WebsiteTranslations;
 | 
			
		||||
use Illuminate\Support\Facades\App;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
 | 
			
		||||
abstract class ProjectLanguage
 | 
			
		||||
{
 | 
			
		||||
@@ -21,7 +21,7 @@ abstract class ProjectLanguage
 | 
			
		||||
    protected function getWebsiteTranslations(Project $project, ?string $languageCode): ?WebsiteTranslations
 | 
			
		||||
    {
 | 
			
		||||
        $seconds = 3600 * 3;
 | 
			
		||||
        $language = CacheTag::Project->getCache()->remember(self::class . $project->id . '-' . $languageCode, $seconds, function () use ($project, $languageCode) {
 | 
			
		||||
        $language = Cache::remember(self::class . $project->id . '-' . $languageCode, $seconds, function () use ($project, $languageCode) {
 | 
			
		||||
            return $this->projectLanguageRepository->getProjectLanguageByCodeOrDefault($project, $languageCode) ?? false;
 | 
			
		||||
        });
 | 
			
		||||
        if ($language === false) {
 | 
			
		||||
@@ -34,7 +34,7 @@ abstract class ProjectLanguage
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $seconds = 3600 * 24;
 | 
			
		||||
        $translations = CacheTag::ProjectTranslation->getCache()->remember(self::class . '-translations-' . $project->id . '-' . $language->id, $seconds, function () use ($project, $language) {
 | 
			
		||||
        $translations = Cache::remember(self::class . '-translations-' . $project->id . '-' . $language->id, $seconds, function () use ($project, $language) {
 | 
			
		||||
            return $this->projectTranslationRepository->getProjectTranslations($project->id, $language->id)->all()->pluck('text', 'code')->toArray();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ final class UpdateRequest extends FormRequest implements FormRequestDto
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'language.*.id' => ['required', 'numeric', 'min:1'],
 | 
			
		||||
            'language.*.code' => ['nullable', 'string', 'min:2', 'max:50'],
 | 
			
		||||
            'language.*.code' => ['nullable', 'string', 'min:2', 'max:50', 'required_with:language.*.source_language_id'],
 | 
			
		||||
            'language.*.source_language_id' => ['nullable', 'numeric', 'min:1', 'different:language.*.id'],
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,7 @@ final class Documentation extends Model
 | 
			
		||||
        'slug',
 | 
			
		||||
        'is_public',
 | 
			
		||||
        'category_id',
 | 
			
		||||
        'sort',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ namespace App\Services\Admin\Project;
 | 
			
		||||
use App\Dto\QuerySettingsDto;
 | 
			
		||||
use App\Dto\Builder\DocumentationVersion as DocumentationVersionBuilderDto;
 | 
			
		||||
use App\Dto\Service\Admin\Project\DocumentationVersion\StoreUpdate;
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Enums\DocumentationVersionStatus;
 | 
			
		||||
use App\Models\DocumentationVersion;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
@@ -141,7 +140,7 @@ final class DocumentationVersionService extends Service
 | 
			
		||||
                $dataVersion = $this->getDataVersion($data);
 | 
			
		||||
                return $this->documentationVersionCommandHandler->handleStore($project, $dataVersion);
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::DocumantationVersion);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
        } catch (\Throwable $e) {
 | 
			
		||||
            report($e);
 | 
			
		||||
            return $this->errService(__('Server Error'));
 | 
			
		||||
@@ -178,7 +177,7 @@ final class DocumentationVersionService extends Service
 | 
			
		||||
                $dataVersion = $this->getDataVersion($data);
 | 
			
		||||
                return $this->documentationVersionCommandHandler->handleUpdate($version, $dataVersion);
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::DocumantationVersion);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
        } catch (\Throwable $e) {
 | 
			
		||||
            report($e);
 | 
			
		||||
            return $this->errService(__('Server Error'));
 | 
			
		||||
@@ -207,7 +206,7 @@ final class DocumentationVersionService extends Service
 | 
			
		||||
            DB::transaction(function () use ($version) {
 | 
			
		||||
                $this->documentationVersionCommandHandler->handleDestroy($version);
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::DocumantationVersion);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
        } catch (\Throwable $e) {
 | 
			
		||||
            report($e);
 | 
			
		||||
            return $this->errService(__('Server Error'));
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ namespace App\Services\Admin\Project;
 | 
			
		||||
use App\Dto\Service\Admin\Project\Translation\Translations;
 | 
			
		||||
use App\Dto\Service\Admin\Project\Translation\Translation;
 | 
			
		||||
use App\Dto\Service\Admin\Project\Translation\Update;
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Jobs\Translate\ProcessTranslationText;
 | 
			
		||||
use App\Models\ProjectTranslation;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
@@ -83,7 +82,7 @@ final class TranslationService extends Service
 | 
			
		||||
            DB::transaction(function () use ($data, $project, $language) {
 | 
			
		||||
                $this->translationModelSyncCommand->execute($project, $language, $data->getTranslations());
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::ProjectTranslation);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
            if (\config('translation_service.enable', false)) {
 | 
			
		||||
                $this->translateContent($projectId, $languageId, $data);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ namespace App\Services\Admin;
 | 
			
		||||
use App\Dto\Builder\Project as ProjectBuilderDto;
 | 
			
		||||
use App\Dto\QuerySettingsDto;
 | 
			
		||||
use App\Dto\Service\Admin\Project\StoreUpdate;
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Enums\Morph;
 | 
			
		||||
use App\Models\Project;
 | 
			
		||||
use App\Models\ProjectLanguage;
 | 
			
		||||
@@ -134,7 +133,7 @@ final class ProjectService extends Service
 | 
			
		||||
 | 
			
		||||
                return $project;
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::Project);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
        } catch (\Throwable $e) {
 | 
			
		||||
            report($e);
 | 
			
		||||
            return $this->errService(__('Server Error'));
 | 
			
		||||
@@ -177,7 +176,7 @@ final class ProjectService extends Service
 | 
			
		||||
 | 
			
		||||
                return $project;
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::Project);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
        } catch (\Throwable $e) {
 | 
			
		||||
            report($e);
 | 
			
		||||
            return $this->errService(__('Server Error'));
 | 
			
		||||
@@ -202,7 +201,7 @@ final class ProjectService extends Service
 | 
			
		||||
            DB::transaction(function () use ($project) {
 | 
			
		||||
                $this->projectCommandHandler->handleDestroy($project);
 | 
			
		||||
            });
 | 
			
		||||
            $this->clearCacheCommandHandler->byTag(CacheTag::Project);
 | 
			
		||||
            $this->clearCacheCommandHandler->all();
 | 
			
		||||
        } catch (\Throwable $e) {
 | 
			
		||||
            report($e);
 | 
			
		||||
            return $this->errService(__('Server Error'));
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,12 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Services;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
 | 
			
		||||
final readonly class ClearCacheCommandHandler
 | 
			
		||||
{
 | 
			
		||||
    public function byTag(CacheTag $tag): void
 | 
			
		||||
    public function all(): void
 | 
			
		||||
    {
 | 
			
		||||
        $tag->getCache()->flush();
 | 
			
		||||
        Cache::flush();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
namespace App\Services\Site;
 | 
			
		||||
 | 
			
		||||
use App\Dto\Service\Site\Documentation;
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Enums\DocumentationVersionStatus;
 | 
			
		||||
use App\Models\DocumentationCategory;
 | 
			
		||||
use App\Models\Documentation as ModelDocumentation;
 | 
			
		||||
@@ -22,6 +21,7 @@ use App\Dto\Builder\Documentation as DocumentationBuilderDto;
 | 
			
		||||
use Illuminate\Database\Eloquent\Builder;
 | 
			
		||||
use Illuminate\Database\Eloquent\Relations\HasOne;
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
 | 
			
		||||
final class DocumentationService extends Service
 | 
			
		||||
{
 | 
			
		||||
@@ -37,8 +37,7 @@ final class DocumentationService extends Service
 | 
			
		||||
        if ($user?->cannot('viewAny', DocumentationVersion::class)) {
 | 
			
		||||
            $isPublic = 1;
 | 
			
		||||
        }
 | 
			
		||||
        $version = CacheTag::DocumantationVersion->getCache()
 | 
			
		||||
            ->remember(self::class . $project->id . '_' . $isPublic ?? 0, $seconds, function () use ($project, $isPublic) {
 | 
			
		||||
        $version = Cache::remember(self::class . $project->id . '_' . $isPublic ?? 0, $seconds, function () use ($project, $isPublic) {
 | 
			
		||||
                $versions = $project->documentationVersions()
 | 
			
		||||
                    ->when($isPublic, function (Builder $query) {
 | 
			
		||||
                        $query->where('is_public', 1);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@
 | 
			
		||||
 | 
			
		||||
namespace app\View\Components\Site;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Models\Project;
 | 
			
		||||
use App\Services\WebsiteTranslations;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
use Illuminate\View\View;
 | 
			
		||||
@@ -24,7 +24,7 @@ final class ChooseLanguage extends Component
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $seconds = 3600 * 12;
 | 
			
		||||
        $languages = CacheTag::Project->getCache()->remember(self::class . $this->project->id, $seconds, function () {
 | 
			
		||||
        $languages = Cache::remember(self::class . $this->project->id, $seconds, function () {
 | 
			
		||||
            return $this->project->languages;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,12 @@
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components\Site;
 | 
			
		||||
 | 
			
		||||
use App\Enums\CacheTag;
 | 
			
		||||
use App\Models\DocumentationVersion;
 | 
			
		||||
use App\Models\Project;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
use App\Services\WebsiteTranslations;
 | 
			
		||||
use Illuminate\Database\Eloquent\Builder;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
use Illuminate\View\View;
 | 
			
		||||
 | 
			
		||||
@@ -29,8 +28,7 @@ final class ChooseVersion extends Component
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $seconds = 3600 * 12;
 | 
			
		||||
        $versions = CacheTag::DocumantationVersion->getCache()
 | 
			
		||||
            ->remember(self::class . $this->project->id . '-' . $isPublic ?? 0, $seconds, function () use ($isPublic) {
 | 
			
		||||
        $versions = Cache::remember(self::class . $this->project->id . '-' . $isPublic ?? 0, $seconds, function () use ($isPublic) {
 | 
			
		||||
                return $this->project->documentationVersions()
 | 
			
		||||
                    ->when($isPublic, function (Builder $query) {
 | 
			
		||||
                        $query->where('is_public', 1);
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ use Illuminate\Foundation\Application;
 | 
			
		||||
use Illuminate\Foundation\Configuration\Exceptions;
 | 
			
		||||
use Illuminate\Foundation\Configuration\Middleware;
 | 
			
		||||
use Illuminate\Support\Facades\Route;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Response;
 | 
			
		||||
 | 
			
		||||
return Application::configure(basePath: dirname(__DIR__))
 | 
			
		||||
    ->withRouting(
 | 
			
		||||
@@ -19,8 +20,15 @@ return Application::configure(basePath: dirname(__DIR__))
 | 
			
		||||
        },
 | 
			
		||||
    )
 | 
			
		||||
    ->withMiddleware(function (Middleware $middleware) {
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
    })
 | 
			
		||||
    ->withExceptions(function (Exceptions $exceptions) {
 | 
			
		||||
        //
 | 
			
		||||
        $exceptions->respond(function (Response $response) {
 | 
			
		||||
            if ($response->getStatusCode() === 419) {
 | 
			
		||||
                return back()
 | 
			
		||||
                    ->withInput()
 | 
			
		||||
                    ->withErrors(['csrf' => __('http-statuses.csrfError')]);
 | 
			
		||||
            }
 | 
			
		||||
            return $response;
 | 
			
		||||
        });
 | 
			
		||||
    })->create();
 | 
			
		||||
 
 | 
			
		||||
@@ -81,4 +81,5 @@ return [
 | 
			
		||||
    '598'          => 'Network Read Timeout Error',
 | 
			
		||||
    '599'          => 'Network Connect Timeout Error',
 | 
			
		||||
    'unknownError' => 'Unknown Error',
 | 
			
		||||
    'csrfError'    => 'It looks like your session has expired. Please try again.',
 | 
			
		||||
];
 | 
			
		||||
 
 | 
			
		||||
@@ -81,4 +81,5 @@ return [
 | 
			
		||||
    '598'          => 'Истекло время ожидания',
 | 
			
		||||
    '599'          => 'Истекло время подключения',
 | 
			
		||||
    'unknownError' => 'Неизвестная ошибка',
 | 
			
		||||
    'csrfError'    => 'Похоже, что срок действия Вашей сессии истек. Пожалуйста, попробуйте еще раз.',
 | 
			
		||||
];
 | 
			
		||||
 
 | 
			
		||||
@@ -39,9 +39,9 @@
 | 
			
		||||
            <nav id="menu">
 | 
			
		||||
                <div class="menu__title">{{ $websiteTranslations->translate('site.Menu') }}</div>
 | 
			
		||||
                <ul>
 | 
			
		||||
                    <li><a href="{{ \App\Enums\Site\ProjectSection::Home->url($project, $websiteTranslations->getLanguage()) }}" @class(['active' => request()->route()->named(['home', 'language.home', 'project.home', 'project.language.home'])])>{{ $websiteTranslations->translate('site.About project') }}</a></li>
 | 
			
		||||
                    <li><a href="{{ \App\Enums\Site\ProjectSection::Documentation->url($project, $websiteTranslations->getLanguage()) }}" @class(['active' => request()->route()->named(['documentation', 'documentation.home'])])>{{ $websiteTranslations->translate('site.Documentation') }}</a></li>
 | 
			
		||||
                    <li><a href="{{ \App\Enums\Site\ProjectSection::Feedback->url($project, $websiteTranslations->getLanguage()) }}" @class(['active' => request()->route()->named(['feedback', 'language.feedback', 'project.feedback', 'project.language.feedback'])])>{{ $websiteTranslations->translate('site.Feedback') }}</a></li>
 | 
			
		||||
                    <li><a href="{{ \App\Enums\Site\ProjectSection::Home->url($project, $websiteTranslations->getLanguage()) }}" @class(['active' => request()->route()->named(['home', 'language.home', 'project.home', 'project.language.home', 'home-language'])])>{{ $websiteTranslations->translate('site.About project') }}</a></li>
 | 
			
		||||
                    <li><a href="{{ \App\Enums\Site\ProjectSection::Documentation->url($project, $websiteTranslations->getLanguage()) }}" @class(['active' => request()->route()->named(['documentation.*'])])>{{ $websiteTranslations->translate('site.Documentation') }}</a></li>
 | 
			
		||||
                    <li><a href="{{ \App\Enums\Site\ProjectSection::Feedback->url($project, $websiteTranslations->getLanguage()) }}" @class(['active' => request()->route()->named(['feedback', 'language.feedback', 'project.feedback', 'project.language.feedback', 'feedback-language'])])>{{ $websiteTranslations->translate('site.Feedback') }}</a></li>
 | 
			
		||||
                </ul>
 | 
			
		||||
            </nav>
 | 
			
		||||
            <div class="section-container">
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ COPY --from=unit_builder /var/lib/unit/ /var/lib/unit/
 | 
			
		||||
 | 
			
		||||
COPY docker/unit-config.json /docker-entrypoint.d/config.json
 | 
			
		||||
 | 
			
		||||
RUN apk --no-cache add pcre2 libbz2 libpng libwebp libjpeg-turbo icu-libs freetype oniguruma libzip \
 | 
			
		||||
RUN apk --no-cache add pcre2 libbz2 libpng libwebp libjpeg-turbo icu-libs freetype oniguruma libzip jq \
 | 
			
		||||
    && apk add --no-cache --virtual .phpize-deps icu-dev libpng-dev bzip2-dev libwebp-dev libjpeg-turbo-dev freetype-dev oniguruma-dev libzip-dev pcre2-dev ${PHPIZE_DEPS} \
 | 
			
		||||
    && docker-php-ext-configure intl --enable-intl && \
 | 
			
		||||
    docker-php-ext-configure bcmath --enable-bcmath && \
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,20 @@ if [ "$role" = "app" ]; then
 | 
			
		||||
      if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
 | 
			
		||||
          echo "$0: /docker-entrypoint.d/ is not empty, applying initial configuration..."
 | 
			
		||||
 | 
			
		||||
          if [[ -n "${UNIT_SOURCE:-}" ]]; then
 | 
			
		||||
            config="/docker-entrypoint.d/config.json"
 | 
			
		||||
            tmp="$(mktemp)"
 | 
			
		||||
            jq --arg src "${UNIT_SOURCE}" '
 | 
			
		||||
              .listeners["*:9000"].forwarded.source =
 | 
			
		||||
                ( $src
 | 
			
		||||
                  | split(",")
 | 
			
		||||
                  | map( gsub("^\\s+|\\s+$"; "") )    # trim пробелы
 | 
			
		||||
                  | map( select(. != "") )            # убрать пустые
 | 
			
		||||
                )
 | 
			
		||||
            ' "$config" > "$tmp"
 | 
			
		||||
            mv "$tmp" "$config"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          echo "$0: Looking for certificate bundles in /docker-entrypoint.d/..."
 | 
			
		||||
          for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.pem"); do
 | 
			
		||||
              echo "$0: Uploading certificates bundle: $f"
 | 
			
		||||
@@ -60,12 +74,6 @@ if [ "$role" = "app" ]; then
 | 
			
		||||
              curl_put $f "config"
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
          if [ ! -z ${UNIT_SOURCE+x} ]
 | 
			
		||||
          then
 | 
			
		||||
              echo $UNIT_SOURCE > /docker-entrypoint.d/unit_source.json
 | 
			
		||||
              curl_put "/docker-entrypoint.d/unit_source.json" "config/listeners/*:9000/forwarded/source"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          echo "$0: Looking for shell scripts in /docker-entrypoint.d/..."
 | 
			
		||||
          for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh"); do
 | 
			
		||||
              echo "$0: Launching $f";
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,20 @@ if [ "$role" = "app" ]; then
 | 
			
		||||
      if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
 | 
			
		||||
          echo "$0: /docker-entrypoint.d/ is not empty, applying initial configuration..."
 | 
			
		||||
 | 
			
		||||
          if [[ -n "${UNIT_SOURCE:-}" ]]; then
 | 
			
		||||
            config="/docker-entrypoint.d/config.json"
 | 
			
		||||
            tmp="$(mktemp)"
 | 
			
		||||
            jq --arg src "${UNIT_SOURCE}" '
 | 
			
		||||
              .listeners["*:9000"].forwarded.source =
 | 
			
		||||
                ( $src
 | 
			
		||||
                  | split(",")
 | 
			
		||||
                  | map( gsub("^\\s+|\\s+$"; "") )    # trim пробелы
 | 
			
		||||
                  | map( select(. != "") )            # убрать пустые
 | 
			
		||||
                )
 | 
			
		||||
            ' "$config" > "$tmp"
 | 
			
		||||
            mv "$tmp" "$config"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          echo "$0: Looking for certificate bundles in /docker-entrypoint.d/..."
 | 
			
		||||
          for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.pem"); do
 | 
			
		||||
              echo "$0: Uploading certificates bundle: $f"
 | 
			
		||||
@@ -60,12 +74,6 @@ if [ "$role" = "app" ]; then
 | 
			
		||||
              curl_put $f "config"
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
          if [ ! -z ${UNIT_SOURCE+x} ]
 | 
			
		||||
          then
 | 
			
		||||
              echo $UNIT_SOURCE > /docker-entrypoint.d/unit_source.json
 | 
			
		||||
              curl_put "/docker-entrypoint.d/unit_source.json" "config/listeners/*:9000/forwarded/source"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          echo "$0: Looking for shell scripts in /docker-entrypoint.d/..."
 | 
			
		||||
          for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh"); do
 | 
			
		||||
              echo "$0: Launching $f";
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
version: '3.7'
 | 
			
		||||
#version: '3.7'
 | 
			
		||||
services:
 | 
			
		||||
  app:
 | 
			
		||||
    build:
 | 
			
		||||
@@ -16,7 +16,7 @@ services:
 | 
			
		||||
      - ./app/application:/var/www/html
 | 
			
		||||
    environment:
 | 
			
		||||
      CONTAINER_ROLE: app
 | 
			
		||||
      UNIT_SOURCE: '"172.16.0.0/12"'
 | 
			
		||||
      UNIT_SOURCE: "172.16.0.0/12"
 | 
			
		||||
 | 
			
		||||
  queue:
 | 
			
		||||
    build:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
version: '3.7'
 | 
			
		||||
#version: '3.7'
 | 
			
		||||
services:
 | 
			
		||||
  app:
 | 
			
		||||
    #  image: korelf/my-projects-website:0.4.0 # docker hub
 | 
			
		||||
    image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.4.0 # MDHub
 | 
			
		||||
    #  image: korelf/my-projects-website:0.5.0 # docker hub
 | 
			
		||||
    image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.5.0 # MDHub
 | 
			
		||||
    #  restart: always
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - db
 | 
			
		||||
@@ -13,15 +13,15 @@ services:
 | 
			
		||||
    env_file: app/.env
 | 
			
		||||
    environment:
 | 
			
		||||
      CONTAINER_ROLE: app
 | 
			
		||||
      UNIT_SOURCE: '"172.16.0.0/12"'
 | 
			
		||||
      UNIT_SOURCE: "172.16.0.0/12"
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ./app/storage/app:/var/www/html/storage/app
 | 
			
		||||
      - ./app/storage/logs:/var/www/html/storage/logs
 | 
			
		||||
      # - ./app/translate/authorized_key.json:/var/www/html/storage/translation_service/authorized_key.json
 | 
			
		||||
 | 
			
		||||
  queue:
 | 
			
		||||
    #  image: korelf/my-projects-website:0.4.0 # docker hub
 | 
			
		||||
    image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.4.0 # MDHub
 | 
			
		||||
    #  image: korelf/my-projects-website:0.5.0 # docker hub
 | 
			
		||||
    image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.5.0 # MDHub
 | 
			
		||||
    #  restart: always
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - db
 | 
			
		||||
@@ -35,8 +35,8 @@ services:
 | 
			
		||||
      # - ./app/translate/authorized_key.json:/var/www/html/storage/translation_service/authorized_key.json
 | 
			
		||||
 | 
			
		||||
  scheduler:
 | 
			
		||||
    #  image: korelf/my-projects-website:0.4.0 # docker hub
 | 
			
		||||
    image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.4.0 # MDHub
 | 
			
		||||
    #  image: korelf/my-projects-website:0.5.0 # docker hub
 | 
			
		||||
    image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.5.0 # MDHub
 | 
			
		||||
    #  restart: always
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - db
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
version: '3.7'
 | 
			
		||||
#version: '3.7'
 | 
			
		||||
services:
 | 
			
		||||
  app:
 | 
			
		||||
    build:
 | 
			
		||||
@@ -13,6 +13,8 @@ services:
 | 
			
		||||
      - ${DOCKER_APP_PORT}:9000
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ./app/application:/var/www/html
 | 
			
		||||
    environment:
 | 
			
		||||
      CONTAINER_ROLE: app
 | 
			
		||||
 | 
			
		||||
  queue:
 | 
			
		||||
    build:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user