Basculer site dokos existant sur docker

Bonjour Ă  tous,
Je monte une architecture docker pour dokos, et j’aurai voulu transféré toutes mes données.
L’installation sous docker se passe bien, mais je n’arrive pas à transféré le site correctement,
J’utilise la restauration expliqué dans la doc mais j’arrive à une internal error.

Le problème vient peut-etre du connecteur nextcloud. Dès que je l’installe sur un docker propre, ça plante. Comment l’installer ?

Sinon, comment faire pour supprimer le connecteur nextcloud et faire une migration propre?

Merci d’avance pour votre aide.
Pierre

Bonjour Pierre,

Le connecteur Nextcloud n’est pas disponible dans les images Docker proposées actuellement. C’est donc sûrement ce qui fait planter le démarrage du site.

Dans l’immédiat, tu peux désactiver l’application Nextcloud avec la commande bench --site mon-site.fr remove-from-installed-apps nextcloud, à exécuter à l’intérieur du conteneur. Je pense que ça peut marcher.

Alternativement, il est envisageable de fabriquer tes propres images Docker. Tu peux t’inspirer du code disponible ici, qu’il faut reformater un peu (en attendant que ça soit documenté) : .gitlab-ci.yml · develop · Dokos / Dokos · GitLab

Pour l’instant, l’image Dokos contient Dokos + HRMS (module RH), mais ce serait bien qu’une image plus grosse soit proposée, avec toutes les applis de l’écosystème Dokos. Je vais y réfléchir.

P.S. : je dirais que l’installation Docker est semi-expérimentale, dans le sens où la gestion fine est plus compliquée (car les commandes bench doivent être tapées dans les conteneurs), alors que l’installation est vraiment est plus simple (pas besoin d’installer beaucoup de choses), donc tous tes retours sont importants pour faire évoluer le projet

Merci pour ces infos, j’ai effectivement supprimé nextcloud de l’installation initial et j’ai restauré dokos sur docker et la ça marche.
Mais (il y a toujours un mais !!!) je n’arrive pas à générer des pdf.
J’ai essayé aussi avec une installation docker vierge. J’ai le même problème. Y a t il besoin d’un port spécifique ? Je ne sais pas quoi faire.

Merci d’avance.

Ah oui, c’est un problème spécifique au fonctionnement du système d’impression en local. Il faut modifier le fichier compose.yaml en ajoutant une ligne :

services:
  backend:
    <<: *backend_defaults
    extra_hosts:
      localhost: 172.17.0.1
      mon-site.fr: 172.17.0.1  # <-- il faut rajouter cette ligne

Explications : Quand tu fais tourner Dokos sur Docker en local, tu peux y accéder depuis http://localhost, mais le système d’impression a besoin de faire des requêtes web à lui-même, et donc vient récupérer des ressources (par exemple le logo de ton entreprise) à travers le réseau (par exemple en téléchargeant http://mon-site.fr/logo.png), ce qui ne fonctionne donc pas en local, à part en modifiant le fichier /etc/hosts.

Corentin

D’ailleurs j’ai écrit un script Python pour gérer une installation Docker complète en production, c’est peut-être plus simple à mettre en place (mais pas très bien documenté) :

Merci pour ces infos, mais ca ne marche pas

Je ne suis pas en local, j’ai un vps.
J’y ai installé docker et configuré traefik et portainer avec ce tuto en base : https://guillaumeouint.fr/linux/le-starter-pack-auto-hebergement-avec-docker/
Je trouve ce tuto simple, efficace avec le proxy qui s’ajuste automatiquement en fonction des labels que l’on rajoute dans les conteneurs.

Ensuite j’ai modifié compose.yaml pour intégrer traefik.

version: "3"

name: dodock

x-image: &image
  image: registry.gitlab.com/dokos/dokos

x-depends-on-ready: &depends_on_site_ready
  depends_on:
    configurator:
      condition: service_completed_successfully
    create-site:
      condition: service_completed_successfully

x-restart-on-failure: &restart_on_failure
  deploy:
    restart_policy:
      condition: on-failure

x-backend-defaults: &backend_defaults
  <<: [*depends_on_site_ready, *restart_on_failure, *image]
  volumes:
    - sites:/home/frappe/frappe-bench/sites
    - logs:/home/frappe/frappe-bench/logs

services:
  backend:
    <<: *backend_defaults
    extra_hosts:
      localhost: 172.17.0.1
      dokos.sje.bzh: 172.17.0.1

  configurator:
    <<: *backend_defaults
    depends_on: {}
    deploy:
      restart_policy:
        condition: none
    entrypoint: bash -cx
    command:
      - >
        ls -1 apps > sites/apps.txt;
        bench set-config -g db_host $$DB_HOST;
        bench set-config -gp db_port $$DB_PORT;
        bench set-config -g redis_cache "redis://$$REDIS_CACHE";
        bench set-config -g redis_queue "redis://$$REDIS_QUEUE";
        bench set-config -g redis_socketio "redis://$$REDIS_SOCKETIO";
        bench set-config -gp socketio_port $$SOCKETIO_PORT;
    environment:
      DB_HOST: db
      DB_PORT: "3306"
      REDIS_CACHE: redis-cache:6379
      REDIS_QUEUE: redis-queue:6379
      REDIS_SOCKETIO: redis-socketio:6379
      SOCKETIO_PORT: "9000"

  create-site:
    <<: *image
    depends_on:
      configurator:
        condition: service_completed_successfully
      db:
        condition: service_started
      redis-cache:
        condition: service_started
      redis-queue:
        condition: service_started
      redis-socketio:
        condition: service_started
    deploy:
      restart_policy:
        condition: none
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
    entrypoint: bash -c
    command:
      - >
        wait-for-it -t 120 db:3306;
        wait-for-it -t 120 redis-cache:6379;
        wait-for-it -t 120 redis-queue:6379;
        wait-for-it -t 120 redis-socketio:6379;
        export start=`date +%s`;
        until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \
          [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \
          [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]];
        do
          echo "Waiting for sites/common_site_config.json to be created";
          sleep 5;
          if (( `date +%s`-start > 120 )); then
            echo "could not find sites/common_site_config.json with required keys";
            exit 1
          fi
        done;
        echo "sites/common_site_config.json found";
        bench new-site sje.bzh --no-mariadb-socket --admin-password=admin --db-root-password=xxxxx--install-app dokos --install-app hrms --set-default || exit 0;
        echo; echo "Site creation completed successfully"; echo;

  db:
    <<: *restart_on_failure
    image: mariadb:10.6
    healthcheck:
      test: mysqladmin ping -h localhost --password=xxxx
      interval: 1s
      retries: 15
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --skip-character-set-client-handshake
      - --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
    environment:
      MYSQL_ROOT_PASSWORD: xxxxx
    volumes:
      - db-data:/var/lib/mysql

  sje-bzh:
    <<: *backend_defaults
    command: nginx-entrypoint.sh
    environment:
      BACKEND: backend:8000
      FRAPPE_SITE_NAME_HEADER: sje.bzh
      SOCKETIO: websocket:9000
      UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
      UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
      UPSTREAM_REAL_IP_RECURSIVE: "off"
      PROXY_READ_TIMOUT: 120
      CLIENT_MAX_BODY_SIZE: 50m
    ports:
      - "8080:8080"
    networks:
      - default
      - proxy
    labels:
      #- traefik.docker.network=proxy
      - traefik.enable=true
      - traefik.http.routers.dokos.entryPoints=websecure
      - traefik.http.routers.dokos.middlewares=redirect-www-to-non-www@file
      - traefik.http.routers.dokos.rule=Host("dokos.sje.bzh")
      - traefik.http.routers.dokos.tls=true
      - traefik.http.routers.dokos.tls.certresolver=letsencrypt

  queue-default:
    <<: *backend_defaults
    command: bench worker --queue default

  queue-long:
    <<: *backend_defaults
    command: bench worker --queue long

  queue-short:
    <<: *backend_defaults
    command: bench worker --queue short

  redis-queue:
    <<: *restart_on_failure
    image: redis:6.2-alpine
    volumes:
      - redis-queue-data:/data

  redis-cache:
    <<: *restart_on_failure
    image: redis:6.2-alpine
    volumes:
      - redis-cache-data:/data

  redis-socketio:
    <<: *restart_on_failure
    image: redis:6.2-alpine
    volumes:
      - redis-socketio-data:/data

  scheduler:
    <<: *backend_defaults
    command: bench schedule

  websocket:
    <<: *backend_defaults
    command: node /home/frappe/frappe-bench/apps/frappe/socketio.js

volumes:
  db-data:
  redis-queue-data:
  redis-cache-data:
  redis-socketio-data:
  sites:
  logs:

networks:
  proxy:
    external: true

Toujours pas l’impression :frowning:
Merci pour tes conseils