Salut,
Je cherche à installer un Dokos pour le réseau de tiers-lieux de La Réunion.
Je dois modifier le compose original car sur notre serveur on n’utilise pas les volumes virtuels gérés par Docker mais ceux qui sont montés dans le dossier local (c’est à dire concrètement en mettant un chemin local avec ./ devant le nom du volume)
Et çà a l’air de poser souci avec les services de ce compose. J’ai l’impression que ca vient du fait qu’un même volume est utilisé par plusieurs services. Par exemple en première erreur le service create-site ne trouve pas le fichier sites/common_site_config.json
Je n’ai pas encore réussi à le faire tourner malgré plein de tentatives, est ce que quelqu’un a déjà fait çà pour avoir un compose fonctionnel avec des bind locaux ?
J’ai pas testé avec dokos, je suis tout juste en train de démarrer des tests d’installation avec docker.
Lorsque j’ai besoin de faire un bind local, à partager entre plusieurs services ou non, je fais un truc du genre :
volumes:
un-nom-de-volume:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/chemin/vers/mon/répertoire/local'
Bonjour @Guillaume,
Le fichier <docker>/sites/common_site_config.json
est présent dans l’image normalement [1].
C’est bizarre que le common_site_config.json
ne soit pas copié dans ton dossier local. Peut-être qu’il faut supprimer le dossier (vide) des sites s’il existe localement, avant de lancer les conteneurs pour la première fois ?
Je veux dire : s’il y a un dossier local pour les sites qui existe déjà, alors Docker ne va pas l’écraser avec le contenu de l’image, et donc tu auras un dossier/volume sites
vide du point de vue des conteneurs je crois. [2]
Corentin
1. Containerfile issu de frappe_docker
2. Le dossier local écrase le contenu issu de l’image
Merci pour toutes ces réponses,
les dossiers locaux étaient écrasés probablement parce que je montais comme ca:
volumes:
- **./data/sites**:/home/frappe/frappe-bench/sites
J’avais bien essayé comme vous suggérez d’utiliser les volumes en précisant le chemin du device, et vous avez confirmé que c’était la piste alors j’ai re-essayé et je me suis rendu compte que je n’avais pas fait de compose down -v
pour recréer le volume. Donc c’est ok j’ai réussi à faire comme je le souhaite, avec mes dossiers de données dans mon dossier local, et avec Traefik en proxy
Merci !
Bonjour, pourrais-tu partager ta config et entre autre le docker-compose ?
Merci d’avance.
Bien sur voici :
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:
hostname: backend
<<: *backend_defaults
extra_hosts:
localhost: 172.17.0.1
dokos.XXX.re: 172.17.0.1
networks:
- dokos
- frontend
configurator:
<<: *backend_defaults
depends_on: {}
deploy:
restart_policy:
condition: "no"
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: "no"
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 frontend --no-mariadb-socket --admin-password=admin --db-root-password=admin --install-app dokos --install-app hrms --set-default || exit 0;
echo; echo "Site creation completed successfully"; echo;
networks:
- dokos
- frontend
db:
<<: *restart_on_failure
hostname: db
image: mariadb:10.6
healthcheck:
test: mysqladmin ping -h localhost --password=admin
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: admin
volumes:
- db-data:/var/lib/mysql
networks:
- dokos
frontend:
<<: *backend_defaults
command: nginx-entrypoint.sh
environment:
BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: frontend
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"
labels:
- traefik.enable=true
- traefik.docker.network=frontend
# ROUTER https
- traefik.http.routers.dokos-RTLx.tls.certresolver=myresolver
- traefik.http.routers.dokos-RTLx.rule=Host(`dokos.XXX.re`)
- traefik.http.routers.dokos-RTLx.entrypoints=entrypoints-https
- traefik.http.services.dokos-RTLx.loadbalancer.server.port=8080
networks:
- dokos
- frontend
queue-default:
<<: *backend_defaults
command: bench worker --queue default
networks:
- dokos
queue-long:
<<: *backend_defaults
command: bench worker --queue long
networks:
- dokos
queue-short:
<<: *backend_defaults
command: bench worker --queue short
networks:
- dokos
redis-queue:
<<: *restart_on_failure
image: redis:6.2-alpine
volumes:
- redis-queue-data:/data
networks:
- dokos
redis-cache:
<<: *restart_on_failure
image: redis:6.2-alpine
volumes:
- redis-cache-data:/data
networks:
- dokos
redis-socketio:
<<: *restart_on_failure
image: redis:6.2-alpine
volumes:
- redis-socketio-data:/data
networks:
- dokos
scheduler:
<<: *backend_defaults
command: bench schedule
networks:
- dokos
websocket:
hostname: websocket
<<: *backend_defaults
command: node /home/frappe/frappe-bench/apps/frappe/socketio.js
networks:
- dokos
volumes:
db-data:
driver: local
driver_opts:
type: none
o: bind
device: ./data/db
redis-queue-data:
driver: local
driver_opts:
type: none
o: bind
device: ./data/redis-queue
redis-cache-data:
driver: local
driver_opts:
type: none
o: bind
device: ./data/redis-cache
redis-socketio-data:
driver: local
driver_opts:
type: none
o: bind
device: ./data/redis-socketio
sites:
driver: local
driver_opts:
type: none
o: bind
device: ./data/sites
logs:
driver: local
driver_opts:
type: none
o: bind
device: ./data/logs
networks:
dokos:
internal: true
frontend:
external: true
À titre informatif, le create-site
sert uniquement pour créer le site initial (qui s’appelle frontend
).
Et l’application webshop
(E-commerce) n’est pas installée par défaut sur ce site (c’est un bug que je suis en train de corriger).
La même ligne sur le répertoire GitLab :
Merci, ca marche bien (je n’ai pas réussi à fonctionner avec le dossier sites hors-conteneur. J’ai du enlever toutes les configs des volumes).
Sinon, je voulais savoir comment ajouter un 2ème site avec avec traefik.
Faut-il créer un second container frontend (frontend2 !!) ?
Merci d’avance.