dbarzin / mercator

Mapping the information system / Cartographie du système d'information
GNU General Public License v3.0
246 stars 40 forks source link

Publication sur DockerHub #214

Closed Sailman83 closed 11 months ago

Sailman83 commented 2 years ago

Bonjour,

L'installation sur Docker me parait compliqué par rapport à ce que je connais.

Avez-vous prévus :

  1. Un publication sur DockerHub
  2. Un ficher Docker fil qui integre direct la jour de GitHub (avec un RUN wget -O dans le dockerfile)

Car actuellement pour l'installation et les MAJ c'est très compliqué :)

Cordialement,

dbarzin commented 2 years ago

Bonjour, Ce point se trouve dans le feuille de route. Cela mérite effectivement une amélioration. Merci pour la demande, Didier

Sailman83 commented 2 years ago

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

dbarzin commented 1 year ago

Ceci fait partie d'un enseble d'améliorations qui doivent être approtées à Mercator.

Voici les autres points à traiter :

asiffer commented 1 year ago

Dans l'esprit de ce que propose @Sailman83 (avec les commentaires de @dbarzin), je pense qu'il faudrait faire les choses suivantes:

asiffer commented 1 year ago

@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/

dbarzin commented 1 year ago

Merci, cela fonctionne parfaitement. Il serait intéressant d'importer la base de données de test à la fin de l’installation.

asiffer commented 1 year ago

Dans tous les cas il faudrait l'importer? Ou le choix doit-il être laissé à l'utilisateur?

dbarzin commented 1 year ago

Est-il possible d'ajouter les commandes docker pour importer la DB de test, repartir d'une DB vide, mettre à jour l'application ?

Sailman83 commented 1 year ago

Bonjour, Attention, je vois pas la gestion des volumes persistent :)

Du coup, en cas d’arrêt et redémarrage on perd tout :)

asiffer commented 1 year ago

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
dbarzin commented 1 year ago

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.  
asiffer commented 1 year ago

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
dbarzin commented 1 year ago

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
asiffer commented 1 year ago

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
dbarzin commented 1 year ago

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)
dbarzin commented 1 year ago

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

dbarzin commented 1 year ago

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.

dbarzin commented 1 year ago

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.

asiffer commented 1 year ago

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.

pdurandfr commented 1 year ago

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?

dbarzin commented 1 year ago

Oui, tu peux également faire un pull request. Cela semble être une très bonne contribution.