feat: Prepare Zemailnator for Dokploy deployment

- Add highly optimized Dockerfile with Nginx and PHP-FPM 8.4
- Add docker-compose.yml configured with Redis and MariaDB 10.11
- Implement entrypoint.sh and supervisord.conf for background workers
- Refactor legacy IMAP scripts into scheduled Artisan Commands
- Secure app by removing old routes with hardcoded basic auth credentials
- Configure email attachments to use Laravel Storage instead of insecure public/tmp
This commit is contained in:
idevakk
2026-02-28 23:17:39 +05:30
parent bf5b797cd8
commit c312ec3325
78 changed files with 750 additions and 360 deletions

View File

@@ -9,6 +9,7 @@ use Tests\TestCase;
class ActivationKeyTest extends TestCase
{
public $user;
protected function setUp(): void
{
parent::setUp();

View File

@@ -2,17 +2,19 @@
namespace Tests\Unit\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use App\Models\Blog;
use App\Models\Category;
use App\Models\User;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Tests\TestCase;
class BlogTest extends TestCase
{
private User|Collection $user;
public $category;
protected function setUp(): void
{
parent::setUp();

View File

@@ -2,9 +2,9 @@
namespace Tests\Unit\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Blog;
use App\Models\Category;
use Illuminate\Database\Eloquent\Model;
use Tests\TestCase;
class CategoryTest extends TestCase

View File

@@ -2,10 +2,10 @@
namespace Tests\Unit\Models;
use Illuminate\Support\Facades\Date;
use App\Models\Email;
use Carbon\Carbon;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Date;
use Tests\TestCase;
class EmailTest extends TestCase

View File

@@ -9,6 +9,7 @@ use Tests\TestCase;
class LogTest extends TestCase
{
public $user;
protected function setUp(): void
{
parent::setUp();

View File

@@ -2,13 +2,14 @@
namespace Tests\Unit\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Plan;
use Illuminate\Database\Eloquent\Model;
use Tests\TestCase;
class PlanTest extends TestCase
{
public $planData;
protected function setUp(): void
{
parent::setUp();

View File

@@ -10,6 +10,7 @@ use Tests\TestCase;
class PremiumEmailTest extends TestCase
{
public $user;
protected function setUp(): void
{
parent::setUp();

View File

@@ -2,17 +2,19 @@
namespace Tests\Unit\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Ticket;
use App\Models\TicketResponse;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Tests\TestCase;
class TicketResponseTest extends TestCase
{
public $user;
public $ticket;
protected function setUp(): void
{
parent::setUp();

View File

@@ -2,17 +2,19 @@
namespace Tests\Unit\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Ticket;
use App\Models\TicketResponse;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Tests\TestCase;
class TicketTest extends TestCase
{
public $user;
public $ticketData;
protected function setUp(): void
{
parent::setUp();

View File

@@ -9,6 +9,7 @@ use Tests\TestCase;
class UsageLogTest extends TestCase
{
public $user;
protected function setUp(): void
{
parent::setUp();

View File

@@ -2,25 +2,26 @@
namespace Tests\Unit\Models;
use Carbon\Carbon;
use Illuminate\Support\Facades\Hash;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Laravel\Cashier\Billable;
use Laravel\Sanctum\HasApiTokens;
use Filament\Models\Contracts\FilamentUser;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Laravel\Sanctum\NewAccessToken;
use App\Models\Log;
use App\Models\Ticket;
use App\Models\UsageLog;
use App\Models\User;
use Carbon\Carbon;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Hash;
use Laravel\Cashier\Billable;
use Laravel\Sanctum\HasApiTokens;
use Laravel\Sanctum\NewAccessToken;
use Tests\TestCase;
class UserTest extends TestCase
{
public $user;
protected function setUp(): void
{
parent::setUp();