oryxr
1
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
oryxr
3
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é) :
oryxr
6
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 
Merci pour tes conseils