Laravel .env en storage instellen voor productie
Laravel .env en storage instellen voor productie
Een correct geconfigureerd .env bestand en werkende storage zijn essentieel voor elke Laravel applicatie. In deze handleiding leer je hoe je deze correct instelt voor een productieomgeving.
Het .env bestand begrijpen
Het .env bestand bevat environment-specifieke configuratie die niet in versiebeheer hoort.
Waarom .env gebruiken
- Scheidt configuratie van code
- Voorkomt gevoelige data in Git
- Maakt deployment naar verschillende omgevingen eenvoudig
- Elke omgeving (dev, staging, productie) heeft eigen .env
.env aanmaken
Als je Laravel cloont, maak je een .env aan:
cd ~/domains/jouwdomein.nl/project
# Kopieer het voorbeeld bestand
cp .env.example .env
# Genereer de app key
php artisan key:generate
Essentiële .env instellingen
Configureer deze instellingen voor productie.
Applicatie instellingen
APP_NAME="Mijn Laravel App"
APP_ENV=production
APP_KEY=base64:gegenereerde-key-hier
APP_DEBUG=false
APP_TIMEZONE=Europe/Amsterdam
APP_URL=https://jouwdomein.nl
Belangrijk:
APP_ENV=productionactiveert productie optimalisatiesAPP_DEBUG=falsevoorkomt dat foutmeldingen zichtbaar zijnAPP_URLmoet je volledige URL bevatten met https
Database configuratie
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=jouw_database
DB_USERNAME=jouw_user
DB_PASSWORD=jouw_wachtwoord
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
Logging configuratie
LOG_CHANNEL=daily
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=error
Voor productie:
dailymaakt per dag een nieuw logbestandLOG_LEVEL=errorlogt alleen errors, niet waarschuwingen
Cache en Session
CACHE_STORE=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_ENCRYPT=true
SESSION_PATH=/
SESSION_DOMAIN=.jouwdomein.nl
Voor betere performance op shared hosting is file de beste keuze.
Queue configuratie
QUEUE_CONNECTION=database
Of voor shared hosting zonder workers:
QUEUE_CONNECTION=sync
Mail configuratie
MAIL_MAILER=smtp
MAIL_HOST=mail.jouwdomein.nl
MAIL_PORT=587
MAIL_USERNAME=info@jouwdomein.nl
MAIL_PASSWORD=je-mail-wachtwoord
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=info@jouwdomein.nl
MAIL_FROM_NAME="${APP_NAME}"
Storage configureren
Laravel gebruikt de storage map voor logs, cache en uploads.
Storage structuur
storage/
├── app/
│ ├── public/ # Publiek toegankelijke uploads
│ └── private/ # Private bestanden
├── framework/
│ ├── cache/ # File cache
│ ├── sessions/ # Sessie bestanden
│ └── views/ # Compiled views
└── logs/ # Log bestanden
Storage link maken
De public storage moet toegankelijk zijn via het web:
# Maak de symlink
php artisan storage:link
Dit creëert: public/storage -> storage/app/public
Controleer of de link werkt:
ls -la public/
# Je ziet: storage -> /path/to/storage/app/public
Handmatige symlink
Als het artisan commando niet werkt:
cd public
ln -s ../storage/app/public storage
Storage rechten instellen
Zorg dat Laravel kan schrijven:
# Recursief schrijfbaar maken
chmod -R 775 storage
chmod -R 775 bootstrap/cache
# Eigenaar instellen (indien nodig)
chown -R www-data:www-data storage
chown -R www-data:www-data bootstrap/cache
Op shared hosting is meestal alleen chmod nodig.
Productie beveiliging
Beveilig je .env en storage.
.env beveiligen
Het .env bestand mag nooit publiek toegankelijk zijn:
- Laravel's public map is de document root
- .env staat een niveau hoger
- .htaccess blokkeert toegang Controleer met:
curl https://jouwdomein.nl/.env
# Moet 403 of 404 geven, NOOIT de inhoud!
.env in .gitignore
Zorg dat .env nooit in Git komt:
.env
.env.backup
.env.production
Storage beschermen
Private uploads beschermen:
// In routes/web.php
Route::get('/download/{file}', function ($file) {
// Autorisatie check
if (!auth()->check()) {
abort(403);
}
return Storage::download('private/' . $file);
});
Cache configuratie
Optimaliseer caching voor productie.
Config cache
php artisan config:cache
Dit combineert alle config bestanden in een cached bestand. Let op: Na config:cache wordt .env niet meer direct gelezen. Wijzigingen in .env vereisen:
php artisan config:clear
php artisan config:cache
Route cache
php artisan route:cache
Versnelt route resolution aanzienlijk.
View cache
php artisan view:cache
Pre-compileert alle Blade templates.
Alles tegelijk
php artisan optimize
Of bij deployment:
php artisan optimize:clear
php artisan optimize
Veelvoorkomende problemen
Storage permission denied
# Reset rechten
chmod -R 775 storage bootstrap/cache
# SELinux context (CentOS/RHEL)
chcon -R -t httpd_sys_rw_content_t storage
Symlink werkt niet
Op sommige servers zijn symlinks uitgeschakeld:
# Kopieer in plaats van symlink
cp -r storage/app/public/* public/storage/
Of pas de FileController aan om bestanden te serveren.
.env wijzigingen werken niet
# Leeg config cache
php artisan config:clear
# Of als je geen SSH hebt
# Verwijder: bootstrap/cache/config.php
APP_KEY problemen
Als je APP_KEY mist of fout is:
php artisan key:generate
Dit regenereert de key. Let op: bestaande encrypted data wordt onleesbaar.
Environment detectie
Check de huidige environment in code:
// In code
if (app()->environment('production')) {
// Productie specifieke code
}
// In Blade
@production
<!-- Alleen op productie -->
@endproduction
Best practices
.env management
- Gebruik nooit dezelfde .env op dev en productie
- Bewaar productie .env veilig (password manager)
- Gebruik sterke, unieke wachtwoorden
- Roteer credentials regelmatig
Storage management
- Configureer backup voor storage/app
- Overweeg cloud storage voor schaling
- Ruim oude logs regelmatig op
Gerelateerde artikelen
- PHP frameworks en DirectAdmin
- Laravel met Composer via SSH
- Artisan en Console commando's via SSH
- Meer informatie over Laravel hosting bij Theory7
Hulp nodig?
We staan voor je klaar! Loop je ergens tegenaan of heb je vragen? Ons supportteam helpt je graag persoonlijk verder. Stuur ons een berichtje via het ticketsysteem - we reageren meestal binnen een paar uur en denken graag met je mee.
0 van 0 vonden dit nuttig