Symfony installeren op shared hosting: stappenplan

Symfony is een professioneel PHP framework dat uitstekend werkt op shared hosting. In deze handleiding leer je hoe je Symfony installeert, configureert en klaar maakt voor productie op Theory7 hosting.

Vereisten voor Symfony

Controleer of je hosting aan de vereisten voldoet.

PHP vereisten

Symfony 7 vereist:

  • PHP 8.2 of hoger
  • JSON PHP extension
  • Ctype PHP extension
  • Tokenizer PHP extension
  • PCRE PHP extension
  • Session PHP extension
  • SimpleXML PHP extension

Overige vereisten

  • SSH toegang voor Composer
  • MySQL, PostgreSQL of SQLite database
  • Voldoende schijfruimte (minimaal 50MB)
  • Composer beschikbaar Bij Theory7 hosting zijn alle vereisten standaard beschikbaar.

SSH toegang activeren

Symfony installeren vereist SSH.

SSH instellen

  1. Log in op DirectAdmin
  2. Ga naar Account Manager en dan SSH Keys
  3. Genereer of upload je SSH key
  4. Activeer SSH toegang Zie ook: SSH toegang activeren

Verbinding maken

ssh gebruikersnaam@jouwdomein.nl

Symfony installeren

Er zijn verschillende manieren om Symfony te installeren.

Website skeleton (aanbevolen voor web apps)

cd ~/domains/jouwdomein.nl
# Maak nieuw Symfony project
composer create-project symfony/skeleton myproject
# Navigeer naar project
cd myproject
# Voeg webapp bundle toe
composer require webapp

De webapp bundle installeert alles voor een complete webapplicatie.

Minimale installatie

Voor API's of microservices:

composer create-project symfony/skeleton myproject
cd myproject
# Alleen wat je nodig hebt
composer require symfony/http-foundation
composer require symfony/routing

Installatie verifiëren

# Controleer Symfony versie
php bin/console --version
# Output: Symfony 7.x.x

Document root configureren

Shared hosting vereist speciale configuratie.

Symfony's public map moet de document root zijn:

cd ~/domains/jouwdomein.nl
# Backup oude public_html
mv public_html public_html_backup
# Maak symlink naar Symfony public
ln -s myproject/public public_html

Alternatief: .htaccess redirect

# In root .htaccess
RewriteEngine On
RewriteRule ^(.*)$ myproject/public/$1 [L]

Omgeving configureren

Symfony gebruikt .env voor configuratie.

.env bestand aanpassen

cd myproject
nano .env

Pas de volgende waarden aan:

# Applicatie omgeving
APP_ENV=prod
APP_SECRET=genereer-een-lange-geheime-string
# Debug uit voor productie
APP_DEBUG=0
# Database URL
DATABASE_URL="mysql://user:password@localhost:3306/database?serverVersion=10.6&charset=utf8mb4"

APP_SECRET genereren

# Genereer een random secret
php -r "echo bin2hex(random_bytes(16));"

Gebruik deze waarde voor APP_SECRET.

.env.local voor productie

Maak een .env.local voor server-specifieke instellingen:

nano .env.local
APP_ENV=prod
APP_DEBUG=0
DATABASE_URL="mysql://productie_user:wachtwoord@localhost:3306/productie_db"

Dit bestand heeft voorrang op .env en komt niet in Git.

Database configureren

Stel de database verbinding in.

Database aanmaken

  1. Ga naar DirectAdmin
  2. Open Account Manager en dan MySQL Management
  3. Maak een nieuwe database aan
  4. Noteer database naam, gebruiker en wachtwoord

Doctrine ORM installeren

composer require symfony/orm-pack

Database schema maken

# Maak database tabellen
php bin/console doctrine:schema:create
# Of met migrations
php bin/console doctrine:migrations:migrate

Cache en optimalisatie

Optimaliseer voor productie.

Cache legen en opwarmen

# Leeg de cache
php bin/console cache:clear --env=prod
# Warm de cache op
php bin/console cache:warmup --env=prod

Assets installeren

Als je frontend assets hebt:

php bin/console assets:install public

Autoloader optimaliseren

composer install --no-dev --optimize-autoloader

Routing en controllers

Basis routing instellen.

Eerste controller maken

# Met maker bundle (development)
php bin/console make:controller HomeController

Of handmatig in src/Controller/HomeController.php:

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
    #[Route('/', name: 'home')]
    public function index(): Response
    {
        return new Response('Hello Symfony!');
    }
}

Routes bekijken

php bin/console debug:router

Logging configureren

Stel logging in voor productie.

monolog.yaml aanpassen

In config/packages/prod/monolog.yaml:

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: error
            handler: nested
        nested:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug

Logs bekijken

tail -f var/log/prod.log

Veelvoorkomende problemen

500 error na installatie

  1. Controleer of var/ map schrijfbaar is:
chmod -R 775 var
  1. Controleer de logs:
cat var/log/prod.log

Cache permission denied

# Reset rechten
rm -rf var/cache/*
chmod -R 775 var

Route niet gevonden

  1. Leeg de cache: php bin/console cache:clear
  2. Controleer routes: php bin/console debug:router
  3. Controleer controller annotations

Composer memory error

php -d memory_limit=512M composer install

Security configureren

Basis security instellen.

Security bundle installeren

composer require symfony/security-bundle

HTTPS afdwingen

In .htaccess:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Deployment workflow

Een typische deployment:

# 1. Code updaten (git pull of upload)
# 2. Dependencies installeren
composer install --no-dev --optimize-autoloader
# 3. Database migrations
php bin/console doctrine:migrations:migrate --no-interaction
# 4. Cache opschonen en opwarmen
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
# 5. Assets installeren
php bin/console assets:install public

Best practices

Voor development

  • Gebruik APP_ENV=dev
  • Installeer profiler: composer require --dev symfony/profiler-pack
  • Debug toolbar zichtbaar

Voor productie

  • APP_ENV=prod en APP_DEBUG=0
  • Cache opgewarmd
  • Geen dev dependencies
  • Logging naar bestanden

Gerelateerde artikelen

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.