Closed Sailman83 closed 11 months ago
Bonjour, Ce point se trouve dans le feuille de route. Cela mérite effectivement une amélioration. Merci pour la demande, Didier
C'est surtout un sacré boost pour l'utilisation de la solution.
Déploiement d'un Docker ~5min, Pour le moment, j'avoue ne même pas avoir essayer de l'installer
Ceci fait partie d'un enseble d'améliorations qui doivent être approtées à Mercator.
Voici les autres points à traiter :
Dans l'esprit de ce que propose @Sailman83 (avec les commentaires de @dbarzin), je pense qu'il faudrait faire les choses suivantes:
Dockerfile
pour générer une image simple et standalone (peut-être éviter ubuntu, simplifier l'entrypoint, utiliser sqlite par défaut etc.) -> installation "dev"docker-compose
(healthcheck, env etc.) -> installation "prod"@Sailman83, @dbarzin si vous voulez tester:
docker run --rm -it --name mercator -p "127.0.0.1:8000":8000 ghcr.io/asiffer/mercator:latest
Puis: http://127.0.0.1:8000/
Merci, cela fonctionne parfaitement. Il serait intéressant d'importer la base de données de test à la fin de l’installation.
Dans tous les cas il faudrait l'importer? Ou le choix doit-il être laissé à l'utilisateur?
Est-il possible d'ajouter les commandes docker pour importer la DB de test, repartir d'une DB vide, mettre à jour l'application ?
Bonjour, Attention, je vois pas la gestion des volumes persistent :)
Du coup, en cas d’arrêt et redémarrage on perd tout :)
ah ah, en effet c'était vraiment en mode dev (plutôt pour tester)! @dbarzin on doit pouvoir faire l'import selon la valeur d'une variable d'environnement, ex:
docker run --rm -it --name mercator -p "127.0.0.1:8000":8000 -e TESTING=1 ghcr.io/asiffer/mercator:latest
@Sailman83 je vais regarder mais ça va être qqch de simple comme:
docker run --rm -it --name mercator -p "127.0.0.1:8000":8000 -v "./db.sqlite:/var/www/mercator/database/db.sqlite" ghcr.io/asiffer/mercator:latest
Il y a une erreur lors du lancement de docker :
In Connection.php line 712:
Database (/var/www/mercator/db.sqlite) does not exist. (SQL: PRAGMA foreign
_keys = ON;)
In SQLiteConnector.php line 34:
Database (/var/www/mercator/db.sqlite) does not exist.
Seeding: Database\Seeders\PermissionsTableSeeder
In Connection.php line 712:
Database (/var/www/mercator/db.sqlite) does not exist. (SQL: PRAGMA foreign
_keys = ON;)
In SQLiteConnector.php line 34:
Database (/var/www/mercator/db.sqlite) does not exist.
Normalement il faut initier le fichier en local:
touch db.sqlite && chmod a+w db.sqlite
Puis le monter au moment de lancer le conteneur (attention à bien garder le ./
en début de fichier sinon docker crée un volume mais je crois que j'ai fait l'erreur dans le README):
docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -v "./db.sqlite:/var/www/mercator/database/db.sqlite" ghcr.io/dbarzin/mercator:latest
On peut changer la localisation du fichier avec la variable d'environnement DB_DATABASE
. Exemple avec /tmp/db.sqlite
:
docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -e "DB_DATABASE=/tmp/db.sqlite" -v "./db.sqlite:/tmp/db.sqlite" ghcr.io/dbarzin/mercator:latest
J'ai également ceci :
$ docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -v "./db.sqlite:/var/www/mercator/database/db.sqlite" ghcr.io/dbarzin/mercator:latest
docker: Error response from daemon: create ./db.sqlite: "./db.sqlite" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
See 'docker run --help'.
Il faut remplacer ./db.sqlite par db.sqlite
Mais la même erreur et renvoyées alors que ce fichier existe :
~$ ls -l /var/www/mercator/
total 0
-rwxrwxrwx 1 didier docker 0 avr 28 08:05 db.sqlite
Je pense que docker
renvoit cette erreur parce qu'il ne trouve pas le fichier db.sqlite
là où est lancée la commande (par conséquent il cherche à créer un volume et il ne peut créer un volume dont le nom a des caractères spéciaux). Pour être sûr de cela, le mieux est d'utiliser le chemin absolu de db.sqlite
:
touch /tmp/db.sqlite && chmod a+w /tmp/db.sqlite
docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -v /tmp/db.sqlite:/var/www/mercator/db.sqlite ghcr.io/dbarzin/mercator:latest
Même erreur :
$ docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -v /tmp/db.sqlite:/var/www/mercator/db.sqlite ghcr.io/dbarzin/mercator:latest
2023-04-28 14:22:48,763 INFO supervisord started with pid 1
2023-04-28 14:22:49,769 INFO spawned: 'migrate' with pid 7
2023-04-28 14:22:49,771 INFO spawned: 'nginx' with pid 8
2023-04-28 14:22:49,775 INFO spawned: 'php' with pid 9
In Connection.php line 712:
SQLSTATE[HY000] [14] unable to open database file (SQL: PRAGMA foreign_keys
= ON;)
In Exception.php line 18:
SQLSTATE[HY000] [14] unable to open database file
In PDOConnection.php line 40:
SQLSTATE[HY000] [14] unable to open database file
Seeding: Database\Seeders\PermissionsTableSeeder
In Connection.php line 712:
SQLSTATE[HY000] [14] unable to open database file (SQL: PRAGMA foreign_keys
= ON;)
In Exception.php line 18:
SQLSTATE[HY000] [14] unable to open database file
In PDOConnection.php line 40:
SQLSTATE[HY000] [14] unable to open database file
2023-04-28 14:22:50,216 INFO exited: migrate (exit status 0; not expected)
En faisant ceci cela fonctionne :
touch db.sqlite && chmod a+w db.sqlite
docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -v $PWD/db.sqlite:/var/www/mercator/db.sqlite ghcr.io/dbarzin/mercator:latest
Par contre il y a une erreur 404 sur l'URL http://127.0.0.1:8000
J'ai découvert également qu'il fallait faire un composer update avant composer install :
# Install mercator deps
RUN composer update
RUN composer install
mais je n'arrive pas à faire fonctionner docker.
Il manque le fichier db.sqlite dans le docker pour exécuter la version sans persistance. Il faut ajouter un "touch db.sqlite" avant de lancer l'application.
En faisant ceci cela fonctionne :
touch db.sqlite && chmod a+w db.sqlite docker run --rm -it --name mercator -p "127.0.0.1:8000":80 -v $PWD/db.sqlite:/var/www/mercator/db.sqlite ghcr.io/dbarzin/mercator:latest
Par contre il y a une erreur 404 sur l'URL http://127.0.0.1:8000
Attention, ici il faut bien monter le fichier créé soit /tmp/db.sqlite
(au lieu de $PWD/db.sqlite
).
Pour la version sans persistance, c'est un choix à discuter mais je suis d'accord que l'on peut créer le fichier au début de l'exécution du docker (c'est ce que j'avais fait initialement avant de me raviser^^)
Je vais mettre à jour ce comportement sur ma version et l'on pourra tenter une nouvelle PR.
Bonjour, j'ai fait une install "dev persistent", derrière un reverse proxy nginx qui fait le taf https. On est donc sur un proto bien solide, ou une petite prod.
Plutôt que de refaire un répertoire docker-compose etc, je propose de faire un .zip avec les fichiers docker-compose, laravel et nginx que j'ai utilisé et vous voyez comment l'intégrer proprement dans le répo?
Oui, tu peux également faire un pull request. Cela semble être une très bonne contribution.
Bonjour,
L'installation sur Docker me parait compliqué par rapport à ce que je connais.
Avez-vous prévus :
Car actuellement pour l'installation et les MAJ c'est très compliqué :)
Cordialement,