diff --git a/source/_posts/using-drupal-with-symfony-local-server.md b/source/_posts/using-drupal-with-symfony-local-server.md new file mode 100644 index 00000000..88fd84de --- /dev/null +++ b/source/_posts/using-drupal-with-symfony-local-server.md @@ -0,0 +1,102 @@ +--- +title: Using Drupal 8.8 with Symfony Local Server +date: ~ +tags: [drupal, drupal-8, symfony] +draft: true +--- + +https://symfony.com/doc/current/setup/symfony_server.html + +![](/iimages/blog/drupal-symfony-server/terminal.png) + +## Installation + +## Different PHP Versions + +One of the most interesting features of the Symfony server is that it [supports multiple versions of PHP](https://symfony.com/doc/current/setup/symfony_server.html#different-php-settings-per-project) if you have them installed (e.g. via Homebrew), and setting different versions on any directory. + +As I work on different projects with have different requirements, this is a must for me. + +This is done simply by adding a `.php-version` file to the root of the project that contains the PHP version to use - e.g. `7.3`. + +[Further PHP customisations can be made per project](https://symfony.com/doc/current/setup/symfony_server.html#overriding-php-config-options-per-project) by adding a `php.ini` file. + +## Secure Sites Locally + +`symfony server:ca:install` + +`symfony serve --no-tls` + +## Custom Domain Names + +https://symfony.com/doc/current/setup/symfony_server.html#local-domain-names + +`symfony proxy:domain:attach dransible` + +## Adding Databases with Docker + +The Symfony server has an integration with Docker for providing extra services such as databases that we’ll need for Drupal. + +This is my `docker-compose.yaml` file which defines a `database` service for MySQL: + +```yaml +version: '2.1' +services: + database: + image: mysql:5.7 + ports: [3306] + environment: + MYSQL_ROOT_PASSWORD: secret + volumes: + - mysql-data:/var/lib/mysql +volumes: + mysql-data: +``` + +Because port 3306 is exposed, the server recognises it as a database service and automatically creates environment variables prefixed with `DATABASE_`. These can be seen by running `symfony var:export`. + +```dotenv +DATABASE_DATABASE=main +DATABASE_DRIVER=mysql +DATABASE_HOST=127.0.0.1 +DATABASE_NAME=main +DATABASE_PASSWORD=secret +DATABASE_PORT=32776 +DATABASE_SERVER=mysql://127.0.0.1:32776 +DATABASE_URL=mysql://root:secret@127.0.0.1:32776/main?sslmode=disable&charset=utf8mb4 +DATABASE_USER=root +DATABASE_USERNAME=root +SYMFONY_DOCKER_ENV=1 +SYMFONY_TUNNEL= +SYMFONY_TUNNEL_ENV= +``` + +Now I can use these environment variables within my `settings.php` file to allow Drupal to connect to the database service. + +```php +// web/sites/default/settings.php + +// ... + +if ($_SERVER['SYMFONY_DOCKER_ENV']) { + $databases['default']['default'] = [ + 'driver' => $_SERVER['DATABASE_DRIVER'], + 'host' => $_SERVER['DATABASE_HOST'], + 'database' => $_SERVER['DATABASE_NAME'], + 'username' => $_SERVER['DATABASE_USER'], + 'password' => $_SERVER['DATABASE_PASSWORD'], + 'port' => $_SERVER['DATABASE_PORT'], + 'prefix' => '', + 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', + 'collation' => 'utf8mb4_general_ci', + ]; +} +``` + +## Installing Drupal + +`../vendor/bin/drush site-install`: + +> Error: Class 'Drush\Sql\Sql' not found in Drush\Sql\SqlBase::getInstance() + +`symfony php ../vendor/bin/drush st` diff --git a/source/images/blog/drupal-symfony-server/terminal.png b/source/images/blog/drupal-symfony-server/terminal.png new file mode 100644 index 00000000..5b691516 Binary files /dev/null and b/source/images/blog/drupal-symfony-server/terminal.png differ