Installation Docker Image [ANCIENNE MÉTHODE]

Bonjour,

J’essaie d’installer Dokos avec l’image Docker, et lorsque j’ouvre le navigateur : http://erp.example.com/ ça donne :

Internal Server Error

et en https://erp.example.com :

404 page not found

En suivant la procédure d’installation, voici ma configuration :

$ cat .env
LETSENCRYPT_EMAIL=email@example.com
DOKOS_VERSION=latest
DODOCK_VERSION=latest
MARIADB_HOST=mariadb
MYSQL_ROOT_PASSWORD=admin
SITE_NAME=erp.example.com
SITES=erp.example.com
DB_ROOT_USER=root
ADMIN_PASSWORD=admin
INSTALL_APPS=erpnext
ENTRYPOINT_LABEL=traefik.http.routers.dodock-nginx.entrypoints=web
CERT_RESOLVER_LABEL=traefik.http.routers.dodock-nginx.tls.certresolver=myresolver
HTTPS_REDIRECT_RULE_LABEL=dodock.local.no-cert-resolver=hostregexp({host:.+})
HTTPS_REDIRECT_ENTRYPOINT_LABEL=dodock.local.no-entrypoint=web
HTTPS_REDIRECT_MIDDLEWARE_LABEL=dodock.local.no-middleware=redirect-to-https
HTTPS_USE_REDIRECT_MIDDLEWARE_LABEL=dodock.local-no-redirect-middleware=https

$ cat /etc/hosts
127.0.0.1 erp.example.com

$ docker-compose --project-name dokostuxtower up -d
Building with native build. Learn about native build in Compose here: docker compose build | Docker Documentation
Creating network « dokostuxtower_default » with the default driver
Creating volume « dokostuxtower_mariadb-vol » with default driver
Creating volume « dokostuxtower_redis-cache-vol » with default driver
Creating volume « dokostuxtower_redis-queue-vol » with default driver
Creating volume « dokostuxtower_redis-socketio-vol » with default driver
Creating volume « dokostuxtower_assets-vol » with default driver
Creating volume « dokostuxtower_sites-vol » with default driver
Creating volume « dokostuxtower_cert-vol » with default driver
Creating dokostuxtower_redis-queue_1 … done
Creating dokostuxtower_redis-socketio_1 … done
Creating dokostuxtower_traefik_1 … done
Creating dokostuxtower_mariadb_1 … done
Creating dokostuxtower_redis-cache_1 … done
Creating dokostuxtower_webserver_1 … done
Creating dokostuxtower_worker-short_1 … done
Creating dokostuxtower_scheduler_1 … done
Creating dokostuxtower_worker-default_1 … done
Creating dokostuxtower_worker-long_1 … done
Creating dokostuxtower_socketio_1 … done
Creating dokostuxtower_python_1 … done
Creating dokostuxtower_site-creator_1 … done

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b6f6c4f3a26 registry.gitlab.com/dokos/dokidocker/dokos-worker:latest « docker-entrypoint.s… » 6 minutes ago Exited (1) 5 minutes ago dokostuxtower_site-creator_1
d490b09bd16d registry.gitlab.com/dokos/dokidocker/dokos-worker:latest « docker-entrypoint.s… » 6 minutes ago Up 6 minutes 8000/tcp dokostuxtower_python_1
698ce76efe55 registry.gitlab.com/dokos/dokidocker/dodock-socketio:latest « docker-entrypoint.s… » 7 minutes ago Up 6 minutes dokostuxtower_socketio_1
7b4db7b5545e registry.gitlab.com/dokos/dokidocker/dokos-worker:latest « docker-entrypoint.s… » 7 minutes ago Up 6 minutes 8000/tcp dokostuxtower_worker-default_1
03894b176e1b registry.gitlab.com/dokos/dokidocker/dokos-worker:latest « docker-entrypoint.s… » 7 minutes ago Up 6 minutes 8000/tcp dokostuxtower_worker-long_1
ed1f85ba64ad registry.gitlab.com/dokos/dokidocker/dokos-worker:latest « docker-entrypoint.s… » 7 minutes ago Up 6 minutes 8000/tcp dokostuxtower_worker-short_1
cf20fa9046a7 registry.gitlab.com/dokos/dokidocker/dokos-worker:latest « docker-entrypoint.s… » 7 minutes ago Up 6 minutes 8000/tcp dokostuxtower_scheduler_1
09f26c83e18d registry.gitlab.com/dokos/dokidocker/dokos-nginx:latest « /docker-entrypoint.… » 7 minutes ago Up 7 minutes 80/tcp dokostuxtower_webserver_1
ee01f9444fae traefik:v2.2 « /entrypoint.sh --lo… » 7 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp dokostuxtower_traefik_1
94b393b9f14b mariadb:10.3 « docker-entrypoint.s… » 7 minutes ago Up 7 minutes 3306/tcp dokostuxtower_mariadb_1
15e5a1de2dc3 redis:latest « docker-entrypoint.s… » 7 minutes ago Up 7 minutes 6379/tcp dokostuxtower_redis-queue_1
8957e6f304f1 redis:latest « docker-entrypoint.s… » 7 minutes ago Up 7 minutes 6379/tcp dokostuxtower_redis-cache_1
59ad87dbfca2 redis:latest « docker-entrypoint.s… » 7 minutes ago Up 7 minutes 6379/tcp dokostuxtower_redis-socketio_1

$ ss -ntple
LISTEN 0 4096 0.0.0.0:80 0.0.0.0:* ino:5701496 sk:1002 cgroup:/ ↔

Donc visiblement le serveur est bien lancé, mais il y a un problème quelque part. Une idée ?

Bonjour,
Je viens aussi d’essayer en enlevant les paramètres =web etc. à la fin des lignes, ça ne répare pas le problème.

Une idée svp ?

Bonjour RĂ©mi,

Désolé je n’ai pas eu le temps de me pencher sur l’image Docker depuis quelques temps et la version proposée n’est qu’un prototype, non utilisé en production pour le moment.

J’essaye de regarder ça au cours des prochains jours.

En attendant, je conseille plutĂ´t une installation classique sur une VM linux.

Bonjour Charles-Henry,
Ok merci pour votre réponse. Oui j’ai vu que c’est un prototype, et en même temps docker est tellement pratique :+1:
J’ai des connaissances en docker avec le DockerFile, mais pas avec une architecture complexe comme ça. Du coup là je vois pas trop ce qui coince.
N’hésitez pas à me tenir au courant dès que vous aurez pu essayer.
Bonne soirée :slight_smile:

Bonjour Ă  vous,
Après avoir encore essayé d’installer Dokos avec Docker, j’ai essayé hier de l’installer sur une machine virtuelle virtualbox et pas mal d’erreur à l’installation.

J’aimerais vraiment réussir l’installation sur Docker, parce que c’est largement plus léger qu’une VM virtualbox… Est ce quelqu’un aurait réussi par hasard ?

Bonne journée :slight_smile:

1 Like

Salut effectivement, l’installation docker est un must have ! J’ai tenté sans succès mais j’ai l’impression d’y être presque !

La documentation ne semble pas à jour car il n’y a pas de fichier cli.py dans le repo.
Il n’y a pas non plus d’images docker dans le registry de Gitlab.

J’ai dû builder les images en local, ça se fait avec docker build -t image:latest -f vers/le/Dockerfile . à la racine du repo. J’ai passé node en version 17.9.0.

Il y a des erreurs au moment de la création du container dodock-nginx comme Could not resolve "./lib/moment.js". Il semble qu’il manque le fichier dodock/frappe/develop/frappe/public/js/lib/moment.js.

En les ignorant, le lance pour tester docker-compose up -d avec succès sauf pour le service webserver (dokos-nginx).

Les logs docker logs -f dokos-webserver donnent l’erreur suivante :

rsync: [sender] link_stat "/var/www/html/assets/js" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1333) [sender=3.2.3]

Une idée ?

Voici mon docker-compose.yml :

version: "3"

services:
  traefik:
    image: "traefik:v2.2"
    container_name: dokos-traefik
    command:
      - "--log.level=DEBUG"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    labels:
      # enable traefik
      - "traefik.enable=true"
      # global redirect to https for production only
      # - "${HTTPS_REDIRECT_RULE_LABEL}"
      # - "${HTTPS_REDIRECT_ENTRYPOINT_LABEL}"
      # - "${HTTPS_REDIRECT_MIDDLEWARE_LABEL}"
      # middleware redirect for production only
      # - "${HTTPS_USE_REDIRECT_MIDDLEWARE_LABEL}"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - cert-vol:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  webserver:
    image: dokos-nginx:${DOKOS_VERSION}
    container_name: dokos-webserver
    restart: on-failure
    environment:
      - DODOCK_PY=python
      - DODOCK_PY_PORT=8000
      - DODOCK_SOCKETIO=socketio
      - SOCKETIO_PORT=9000
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dokos-nginx.rule=Host(${SITES})"
      - "${ENTRYPOINT_LABEL}"
      - "${CERT_RESOLVER_LABEL}"
      - "traefik.http.services.dokos-nginx.loadbalancer.server.port=80"
    volumes:
      - sites-vol:/var/www/html/sites:rw
      - assets-vol:/assets:rw

  python:
    image: dokos-worker:${DOKOS_VERSION}
    container_name: dokos-python
    restart: on-failure
    environment:
      - MARIADB_HOST=${MARIADB_HOST}
      - REDIS_CACHE=redis-cache:6379
      - REDIS_QUEUE=redis-queue:6379
      - REDIS_SOCKETIO=redis-socketio:6379
      - SOCKETIO_PORT=9000
      - AUTO_MIGRATE=1
    depends_on:
      - redis-queue
      - redis-cache
      - socketio
      - mariadb
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw
      - assets-vol:/home/dodock/dodock-bench/sites/assets:rw

  socketio:
    image: dodock-socketio:${DODOCK_VERSION}
    container_name: dokos-socketio
    restart: on-failure
    depends_on:
      - redis-socketio
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw
      - logs-vol:/home/dodock/dodock-bench/logs:rw

  worker-default:
    image: dokos-worker:${DOKOS_VERSION}
    container_name: dokos-worker-default
    restart: on-failure
    command: worker
    depends_on:
      - redis-queue
      - redis-cache
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw
      - logs-vol:/home/dodock/dodock-bench/logs:rw

  worker-short:
    image: dokos-worker:${DOKOS_VERSION}
    container_name: dokos-worker-short
    restart: on-failure
    command: worker
    environment:
      - WORKER_TYPE=short
    depends_on:
      - redis-queue
      - redis-cache
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw

  worker-long:
    image: dokos-worker:${DOKOS_VERSION}
    container_name: dokos-worker-long
    restart: on-failure
    command: worker
    environment:
      - WORKER_TYPE=long
    depends_on:
      - redis-queue
      - redis-cache
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw
      - logs-vol:/home/dodock/dodock-bench/logs:rw

  scheduler:
    image: dokos-worker:${DOKOS_VERSION}
    container_name: dokos-scheduler
    restart: on-failure
    command: schedule
    depends_on:
      - redis-queue
      - redis-cache
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw
      - logs-vol:/home/dodock/dodock-bench/logs:rw

  redis-cache:
    image: redis:latest
    container_name: dokos-redis-cache
    restart: on-failure
    volumes:
      - redis-cache-vol:/data

  redis-queue:
    image: redis:latest
    container_name: dokos-redis-queue
    restart: on-failure
    volumes:
      - redis-queue-vol:/data

  redis-socketio:
    image: redis:latest
    container_name: dokos-redis-socketio
    restart: on-failure
    volumes:
      - redis-socketio-vol:/data

  mariadb:
    image: mariadb:10.3
    container_name: dokos-mariadb
    restart: on-failure
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    volumes:
      - ./installation/dodock-mariadb.cnf:/etc/mysql/conf.d/dodock.cnf
      - mariadb-vol:/var/lib/mysql

  site-creator:
    image: dokos-worker:${DOKOS_VERSION}
    container_name: dokos-site-creator
    restart: "no"
    command: new
    depends_on:
      - python
    environment:
      - SITE_NAME=${SITE_NAME}
      - DB_ROOT_USER=${DB_ROOT_USER}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - INSTALL_APPS=${INSTALL_APPS}
    volumes:
      - sites-vol:/home/dodock/dodock-bench/sites:rw
      - logs-vol:/home/dodock/dodock-bench/logs:rw

volumes:
  mariadb-vol:
  redis-cache-vol:
  redis-queue-vol:
  redis-socketio-vol:
  assets-vol:
  sites-vol:
  cert-vol:
  logs-vol:

Et mon .env :

LETSENCRYPT_EMAIL=***@***.**
DOKOS_VERSION=latest
DODOCK_VERSION=latest
MARIADB_HOST=mariadb
MYSQL_ROOT_PASSWORD=admin
SITE_NAME=localhost
SITES=`localhost`
DB_ROOT_USER=root
ADMIN_PASSWORD=admin
INSTALL_APPS=erpnext
ENTRYPOINT_LABEL=traefik.http.routers.dodock-nginx.entrypoints=websecure
CERT_RESOLVER_LABEL=traefik.http.routers.dodock-nginx.tls.certresolver=myresolver
HTTPS_REDIRECT_RULE_LABEL=
HTTPS_REDIRECT_ENTRYPOINT_LABEL=
HTTPS_REDIRECT_MIDDLEWARE_LABEL=
HTTPS_USE_REDIRECT_MIDDLEWARE_LABEL=

Bonjour, je crois bien que la documentation a été écrite par rapport à la branche develop du repo, des changements qui n’ont pas encore été fusionnés avec master. Peut-être que l’installation sera plus simple en essayant avec cette branche develop ?

Merci @corentin pour ta réponse malheureusement j’ai réessayé sur la branche develop et j’obtiens la même erreur dans les logs du container dokos-nginx :

rsync: [sender] link_stat "/var/www/html/assets/js" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1333) [sender=3.2.3]

La plupart des erreurs de build sont maintenant réglées :partying_face: mais je remarque qu’au moment de builder dokos-nginx j’obtiens les avertissements suivants :

WARN  Cannot connect to redis_cache to update assets_json
WARN  Cannot connect to redis_cache to update assets_json
WARN  Cannot connect to redis_cache to update assets_json

warning " > @frappe/esbuild-plugin-postcss2@0.1.3" has unmet peer dependency "less@^4.x".
warning " > @frappe/esbuild-plugin-postcss2@0.1.3" has unmet peer dependency "stylus@^0.x".

J’ai l’impression qu’on se rapproche… Une idée ?

1 Like

Il me semble que la branche utilisée par défaut pour Dokos/Dodock est develop, qui ne fonctionne pas encore très bien. Donc il faut utiliser la branche master de Dokos et Dodock (mais rester sur develop pour dokidocker).

Peut-être qu’il faut ajouter le paramètre --build-arg GIT_BRANCH=master aux commandes docker build

Je ne peux pas encore tester tout ça malheureusement, mais dès que j’ai le temps je testerai et j’essaierai d’améliorer la documentation.


Je ne me souviens plus très bien du fonctionnement des conteneurs ensemble, je crois bien que la seule variable qu’il ne faille changer soit GIT_BRANCH.

@lecoqlibre

Bonjour Ă  tous,

De mon coté, j’ai aussi un bug lors du docker-compose

Pulling scheduler (registry.gitlab.com/dokos/dokidocker/dokos-worker:latest)...
ERROR: manifest for registry.gitlab.com/dokos/dokidocker/dokos-worker:latest not found: manifest unknown: manifest unknown

Si vous avez une idée de la procédure à suivre pour démarrer l’application en mode docker avec la version à jour je suis preneur ;).

Merci d’avance !

Bonjour @jfg,

Nous n’avons malheureusement pas eu le temps de nous remettre sur la génération d’images Docker pour la dernière version.
Le plus simple à ce jour est d’installer Dokos de manière plus classique dans une VM: Installation rapide | Dokos

Bonne fin de journée

Bonjour @chdecultot ,

Merci pour ce retour rapide.
Entendu, mais cela va nécessiter un VPS dédié en attendant.
Je vais être patient car la solution docker me permet de réduire l’infrastructure dédié à la solution.

Merci pour la solution.

Pour de la prod (K8S ou 3S), c’est pas vraiment adapté.
On essaie sous Portainer/Docker … mais le compose fait vraiment peur.
Une image officielle dans le docker hub est-elle prévue ?

Merci pour votre temps passé.

Bonjour, entre-temps on a eu le temps de développer une installation individuelle simplifiée sous Docker :

Installation Docker · Dokos Documentation

Pour l’instant on a eu peu de retours sur cette méthode, mais on a bien une image Dokos disponible registry.gitlab.com/dokos/dokos:latest (liste ici : Container Registry · Dokos / Dokos · GitLab)


Pour aller plus loin :

merci corentin.
Mon niveau sous docker est moyen, donc je vais testouiller Ă  mon niveau.:wink:
Ce qui est assez rebutant, dans le docker-composer proposé, c’est l’emploi d’Anchor, et de multiple éléments (section).
Pourquoi pas tout dans une seul image avec un volume, quelques variables pour paramètrer cette image et zou … , non ? (la je vois plein de module dokos_mailer, dokos_scheduler, dokos_worker, dokos_worker_short, dokos_********** : pourquoi autant de section ?)

Cette image semble déjà plus lisible … pour un newbie comme moi: