2021-02-25 17:46:45 +00:00
Environnement de développement Docker pour démarrer un nouveau projet Symfony5
2017-12-27 19:03:06 +00:00
==================================
2021-02-25 17:46:45 +00:00
# Présentation
2021-02-18 18:42:17 +00:00
2021-02-25 17:46:45 +00:00
L'objectif de ce dépôt est de proposer et de faire évoluer une configuration de départ pour démarrer très simplement un nouveau projet Symfony dans des conteneurs Docker.
2021-02-18 18:42:17 +00:00
2021-02-25 17:46:45 +00:00
En suivant pas-à-pas les instructions à partir du chapitre "Installation", on peut démarrer en quelques minutes un nouveau projet.
2021-02-18 18:42:17 +00:00
2021-02-25 17:46:45 +00:00
Le dépôt utilise plusieurs branches qui peuvent être utilisée selon le point de départ recherché:
1. la branche `docker_config` fournit juste le docker-compose.yml et les Dockerfile qui permettent de construire les conteneurs ;
2. la branche `master` fournit la structure de départ du projet Symfony ;
3. la branche `with_vujs` permet de démarrer le projet en complémentarité du framework Javascript VueJS ;
2017-12-27 19:03:06 +00:00
2021-02-25 17:46:45 +00:00
# Installation
2021-02-18 16:46:47 +00:00
* Build containers: `docker-compose build`
* Run containers: `docker-compose up -d`
2021-02-18 17:50:06 +00:00
* Manually change owner of app dir (temp): `sudo chown 1000:1000 app/`
2021-02-18 16:46:47 +00:00
* Enter in php container `docker-compose exec --user 1000 php bash`
* Install Symfony: `composer create-project symfony/skeleton symfony`
2021-02-18 17:50:06 +00:00
* Move project in parent (app): `mv symfony/* . && mv symfony/.* . ; rmdir symfony`
2021-02-18 16:46:47 +00:00
* Add Symfony requirements:
```
composer require annotations
composer require --dev profiler
composer require twig
composer require orm
composer require form
composer require form validator
composer require maker-bundle
composer require security-csrf
```
* Stop containers: `docker-compose down`
* Adapt querystring in `./app/.env` :
2021-02-18 12:55:13 +00:00
```
--- DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13& charset=utf8"
2021-02-18 16:46:47 +00:00
+++ DATABASE_URL="postgresql://postgres:secret@db:5432/postgres?serverVersion=12& charset=utf8"
2021-02-18 12:55:13 +00:00
```
2021-02-18 16:46:47 +00:00
* Run containers: `docker-compose up -d`
* Enter in php container `docker-compose exec --user 1000 php bash`
* Test psql connection: `psql --host db --user postgres --password postgres`
* Create database schema: `bin/console doctrine:schema:create`
2021-02-25 17:46:45 +00:00
## C'est parti !
2021-02-18 16:46:47 +00:00
2021-02-25 17:46:45 +00:00
* Créons un premier objet:
2021-02-18 16:46:47 +00:00
* Create entity: `bin/console make:entity Beer`
* Create CRUD on entity: `bin/console make:crud Beer`
* See sql: `bin/console doctrine:schema:update --dump-sql`
* Control migrations: `bin/console doctrine:migrations:status`
* Generate migration file: `bin/console doctrine:migrations:diff`
* See migration file: `cat migrations/Version20210218160541.php `
* Migrate: `bin/console doctrine:migrations:migrate`
* Control migrations: `bin/console doctrine:migrations:status`
2021-02-25 17:46:45 +00:00
* ...
2021-02-18 20:10:16 +00:00
## Yarn
* installation de webpack-encore: `composer require symfony/webpack-encore-bundle`
* pour finir il faut installer et lancer yarn:
2021-02-25 18:01:23 +00:00
* un script bash `docker-node.sh` lancera nodejs dans un conteneur quand on a besoin de yarn:
2021-02-18 20:10:16 +00:00
* au premier lancement du container node:14, j'initialise la mise en place:
* `npm install yarn`
* `npm install --force`
* puis je lance (ce qu'il faudra faire à chaque fois):
2021-02-25 18:01:23 +00:00
* `yarn encore dev` avec éventuellement l'option `--watch`
2021-02-18 20:39:43 +00:00
## Sass
* dans le container node, installation de sass: `npm install sass-loader@^11.0.0 sass --save-dev`
2021-02-25 17:51:47 +00:00
2021-02-25 17:46:45 +00:00
---
# Docker compose cheatsheet
**Note:** you need to cd first to where your docker-compose.yml file lives.
* Start containers in the background: `docker-compose up -d`
* Start containers on the foreground: `docker-compose up` . You will see a stream of logs for every container running.
* Stop containers: `docker-compose stop`
* Kill containers: `docker-compose kill`
* View container logs: `docker-compose logs`
* Execute command inside of container: `docker-compose exec SERVICE_NAME COMMAND` where `COMMAND` is whatever you want to run. Examples:
* Shell into the PHP container, `docker-compose exec --user 1000 php bash`
* Run symfony console, `docker-compose exec --user 1000 php bin/console`
* Open a postgresql shell, `docker-compose exec --user postgres db psql`
* or if user is not postgres: `docker-compose exec db psql --user admin postgres`
# Docker general cheatsheet
**Note:** these are global commands and you can run them from anywhere.
* To clear containers: `docker rm -f $(docker ps -a -q)`
* To clear images: `docker rmi -f $(docker images -a -q)`
* To clear volumes: `docker volume rm $(docker volume ls -q)`
* To clear networks: `docker network rm $(docker network ls | tail -n+2 | awk '{if($2 !~ /bridge|none|host/){ print $1 }}')`