Skip to main content

Environment Configuration

Sistema de Abogados uses Laravel’s environment configuration system. All configuration is managed through the .env file located in the application root directory.
Never commit your .env file to version control. It contains sensitive credentials and environment-specific settings.

Application Settings

Basic Application Configuration

Configure the core application settings in your .env file:
.env
APP_NAME="Sistema de Abogados"
APP_ENV=local
APP_KEY=base64:generated_key_here
APP_DEBUG=true
APP_URL=http://localhost:8000
APP_NAME
string
default:"Laravel"
The name of your application, displayed in emails and the interface.
APP_ENV
string
default:"local"
The application environment. Options: local, development, staging, production
Set to production in production environments for optimal security and performance.
APP_KEY
string
required
Application encryption key. Generate using php artisan key:generate
Never share this key publicly. It encrypts sessions and sensitive data.
APP_DEBUG
boolean
default:"true"
Enable debug mode. Set to false in production to prevent sensitive information leakage.
APP_URL
string
default:"http://localhost"
The base URL of your application. Used for generating absolute URLs.

Logging Configuration

.env
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
LOG_CHANNEL
string
default:"stack"
Log channel to use. Options: stack, single, daily, slack, stderr, syslog
LOG_LEVEL
string
default:"debug"
Minimum log level. Options: debug, info, notice, warning, error, critical, alert, emergency
Use warning or error in production to reduce log verbosity.

Database Configuration

MySQL Connection

Configure your MySQL database connection:
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sesionv2
DB_USERNAME=root
DB_PASSWORD=
DB_CONNECTION
string
default:"mysql"
Database driver. Options: mysql, pgsql, sqlite, sqlsrv
DB_HOST
string
default:"127.0.0.1"
Database host address. Use 127.0.0.1 for local development.
DB_PORT
integer
default:"3306"
Database port. MySQL default is 3306, PostgreSQL is 5432.
DB_DATABASE
string
default:"sesionv2"
required
Name of your database. Ensure this database exists before running migrations.
DB_USERNAME
string
default:"root"
required
Database username with appropriate permissions.
DB_PASSWORD
string
Database password. Leave empty if no password is set (not recommended for production).

Database Configuration File

Advanced database settings are configured in config/database.php:
'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],
The application uses utf8mb4 character set by default, which supports emoji and special characters.

Mail Configuration

Configure email sending for notifications and user communications:
.env
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
MAIL_MAILER
string
default:"smtp"
Mail driver. Options: smtp, sendmail, mailgun, ses, postmark, log, array
MAIL_HOST
string
default:"smtp.mailgun.org"
SMTP server hostname. For development, use mailpit or mailtrap.io.
MAIL_PORT
integer
default:"587"
SMTP port. Common ports: 587 (TLS), 465 (SSL), 25 (unencrypted)
MAIL_ENCRYPTION
string
Encryption type. Options: tls, ssl, null
MAIL_FROM_ADDRESS
string
required
Default “from” email address for all outgoing emails.

Production Mail Configuration Examples

.env
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=[email protected]
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="Sistema de Abogados"
Use an App Password instead of your regular Gmail password.

Cache Configuration

Configure caching for improved performance:
.env
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_CONNECTION=sync
CACHE_DRIVER
string
default:"file"
Cache storage driver. Options: file, redis, memcached, database, array
Use redis or memcached in production for better performance.
SESSION_DRIVER
string
default:"file"
Session storage driver. Options: file, cookie, database, redis, memcached, array
SESSION_LIFETIME
integer
default:"120"
Session lifetime in minutes. Default is 2 hours.

Redis Configuration (Optional)

For high-performance caching and session storage:
.env
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Install the Redis PHP extension: pecl install redis

Queue Configuration

Configure background job processing:
.env
QUEUE_CONNECTION=sync
QUEUE_CONNECTION
string
default:"sync"
Queue driver. Options: sync, database, redis, sqs, beanstalkd, null

Queue Driver Options

.env
QUEUE_CONNECTION=sync
Jobs execute immediately. Good for development, not recommended for production.

Spatie Permission Configuration

The application uses Spatie Laravel Permission for role-based access control. Configuration is located in config/permission.php:

Models

config/permission.php
'models' => [
    'permission' => Spatie\Permission\Models\Permission::class,
    'role' => Spatie\Permission\Models\Role::class,
],

Table Names

config/permission.php
'table_names' => [
    'roles' => 'roles',
    'permissions' => 'permissions',
    'model_has_permissions' => 'model_has_permissions',
    'model_has_roles' => 'model_has_roles',
    'role_has_permissions' => 'role_has_permissions',
],

Cache Configuration

config/permission.php
'cache' => [
    'expiration_time' => \DateInterval::createFromDateString('24 hours'),
    'key' => 'spatie.permission.cache',
    'store' => 'default',
],
Clear permission cache after updating roles or permissions:
php artisan permission:cache-reset

Default Roles

The system includes three predefined roles (seeded via RoleSeeder):

Admin

Full system access and management

Abogado

Lawyer role with case management access

Asistente

Assistant role with limited permissions

Laravel Scout Configuration

Laravel Scout provides full-text search functionality. Configuration is in config/scout.php:
config/scout.php
'driver' => env('SCOUT_DRIVER', 'algolia'),
'queue' => env('SCOUT_QUEUE', false),
'prefix' => env('SCOUT_PREFIX', ''),

Scout Driver Options

.env
SCOUT_DRIVER=database
Uses database LIKE queries. No additional setup required.

Indexing Models

Index your searchable models:
# Import all records
php artisan scout:import "App\Models\Cliente"
php artisan scout:import "App\Models\Expediente"

# Flush indices
php artisan scout:flush "App\Models\Cliente"

Broadcasting Configuration

For real-time features:
.env
BROADCAST_DRIVER=log
BROADCAST_DRIVER
string
default:"log"
Broadcasting driver. Options: pusher, redis, log, null

Pusher Configuration (Optional)

.env
PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret
PUSHER_APP_CLUSTER=mt1

VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

File Storage Configuration

.env
FILESYSTEM_DISK=local
FILESYSTEM_DISK
string
default:"local"
Default filesystem disk. Options: local, public, s3

AWS S3 Configuration (Optional)

.env
AWS_ACCESS_KEY_ID=your-access-key-id
AWS_SECRET_ACCESS_KEY=your-secret-access-key
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket-name
AWS_USE_PATH_STYLE_ENDPOINT=false
For document storage, configure the public disk:
php artisan storage:link
This creates a symbolic link from public/storage to storage/app/public.

Security Configuration

Authentication

The application uses Laravel Sanctum for authentication:
config/sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
    '%s%s',
    'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
    Sanctum::currentApplicationUrlWithPort()
))),

CORS Configuration

Configure Cross-Origin Resource Sharing in config/cors.php:
config/cors.php
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_origins' => ['*'],
'allowed_methods' => ['*'],
'allowed_headers' => ['*'],
In production, restrict allowed_origins to your actual domain instead of using *.

Performance Optimization

Production Optimization Commands

Run these commands before deploying to production:
# Cache configuration
php artisan config:cache

# Cache routes
php artisan route:cache

# Cache views
php artisan view:cache

# Optimize autoloader
composer install --optimize-autoloader --no-dev

Clear All Caches

During development or after configuration changes:
# Clear all caches
php artisan optimize:clear

# Or individually
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear

Configuration Files Reference

All configuration files are located in the config/ directory:

app.php

Application name, environment, debug mode, locale, timezone

auth.php

Authentication guards, providers, password reset settings

database.php

Database connections, migrations table, Redis configuration

mail.php

Mail drivers, SMTP settings, from address

cache.php

Cache stores, drivers, prefixes

queue.php

Queue connections, failed job settings

permission.php

Spatie permission models, tables, cache

scout.php

Search driver, queue, Algolia/Meilisearch settings

session.php

Session driver, lifetime, cookie settings

filesystems.php

Storage disks, S3 configuration

Environment-Specific Configuration

.env
APP_ENV=local
APP_DEBUG=true
LOG_LEVEL=debug

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_CONNECTION=sync

MAIL_MAILER=log

Next Steps

Creating Cases

Learn how to create and manage legal cases

Managing Expedientes

Guide to conciliation process management

Models Reference

Explore the data models and relationships

Controllers Reference

API controller documentation

Build docs developers (and LLMs) love