Problème d'installation de Dokos sur VM Debian 10 : bench/tasks/main.yml:53

Bonjour,

Tout d’abord merci pour tout votre travail sur Dokos c’est génial comme outil !

J’ai le projet de développer une extension à Dokos pour les besoins de mon asso. Pour ça j’ai voulu créer une VM Debian 10 avec à l’intérieur Dokos pour travailler en local (vu qu’il n’y a pas encore de version Docker stable pour Dokos). Pour l’installation de Dokos j’ai eu divers problèmes que j’ai pu résoudre, mais je suis tombé sur une erreur que je n’arrive pas à résoudre :


TASK [bench : setup config] **************\*\***************\*\***************\*\***************

task path: /tmp/.bench/bench/playbooks/roles/bench/tasks/main.yml:53

<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: root

<127.0.0.1> EXEC /bin/sh -c 'echo ~root && sleep 0'

<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "`echo /var/tmp`"&& mkdir /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952 && echo ansible-tmp-1664465784.1725156-29554-106470440794952="`echo /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952`" ) && sleep 0'

Using module file /usr/local/lib/python3.7/dist-packages/ansible/modules/commands/command.py

<127.0.0.1> PUT /root/.ansible/tmp/ansible-local-26078_zpjn0d2/tmp_yi8jg8n TO /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952/AnsiballZ_command.py

<127.0.0.1> EXEC /bin/sh -c 'setfacl -m u:dokos:r-x /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952/ /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952/AnsiballZ_command.py && sleep 0'

<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n -u dokos /bin/sh -c '"'"'echo BECOME-SUCCESS-frsiqghosdcuytxnrqymnebdqufftotn ; /usr/bin/python3 /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952/AnsiballZ_command.py'"'"' && sleep 0'

<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /var/tmp/ansible-tmp-1664465784.1725156-29554-106470440794952/ > /dev/null 2>&1 && sleep 0'

fatal: [localhost]: FAILED! => {

"changed": true,

"cmd": [

"bench",

"setup",

"config"

],

"delta": "0:00:01.197805",

"end": "2022-09-29 17:36:27.190648",

"invocation": {

"module_args": {

"\_raw_params": "bench setup config",

"\_uses_shell": false,

"argv": null,

"chdir": "/home/dokos/dokos-bench",

"creates": "/home/dokos/dokos-bench/sites/common_site_config.json",

"executable": null,

"removes": null,

"stdin": null,

"stdin_add_newline": true,

"strip_empty_ends": true,

"warn": true

}

},

"msg": "non-zero return code",

"rc": 1,

"start": "2022-09-29 17:36:25.992843",

"stderr": "Traceback (most recent call last):\n File \"/usr/local/bin/bench\", line 8, in <module>\n sys.exit(cli())\n File \"/usr/local/lib/python3.7/dist-packages/bench/cli.py\", line 70, in cli\n cmd_from_sys = get_cmd_from_sysargv()\n File \"/usr/local/lib/python3.7/dist-packages/bench/utils/**init**.py\", line 559, in get_cmd_from_sysargv\n if sys_argv.index(arg) == 0 and arg in Bench(\".\").apps:\n File \"/usr/local/lib/python3.7/dist-packages/bench/bench.py\", line 66, in **init**\n self.apps = BenchApps(self)\n File \"/usr/local/lib/python3.7/dist-packages/bench/bench.py\", line 171, in **init**\n self.initialize_apps()\n File \"/usr/local/lib/python3.7/dist-packages/bench/bench.py\", line 269, in initialize_apps\n self.apps.remove(\"frappe\")\nValueError: list.remove(x): x not in list",

"stderr_lines": [

"Traceback (most recent call last):",

" File \"/usr/local/bin/bench\", line 8, in <module>",

" sys.exit(cli())",

" File \"/usr/local/lib/python3.7/dist-packages/bench/cli.py\", line 70, in cli",

" cmd_from_sys = get_cmd_from_sysargv()",

" File \"/usr/local/lib/python3.7/dist-packages/bench/utils/__init__.py\", line 559, in get_cmd_from_sysargv",

" if sys_argv.index(arg) == 0 and arg in Bench(\".\").apps:",

" File \"/usr/local/lib/python3.7/dist-packages/bench/bench.py\", line 66, in __init__",

" self.apps = BenchApps(self)",

" File \"/usr/local/lib/python3.7/dist-packages/bench/bench.py\", line 171, in __init__",

" self.initialize_apps()",

" File \"/usr/local/lib/python3.7/dist-packages/bench/bench.py\", line 269, in initialize_apps",

" self.apps.remove(\"frappe\")",

"ValueError: list.remove(x): x not in list"

],

"stdout": "",

"stdout_lines": []

}

PLAY RECAP ******************\*\*******************\*\*\*******************\*\*******************

localhost : ok=67 changed=13 unreachable=0 failed=1 skipped=72 rescued=0 ignored=0

Traceback (most recent call last):

File "install.py", line 656, in <module>

install_bench(args)

File "install.py", line 299, in install_bench

run_playbook("site.yml", sudo=True, extra_vars=extra_vars)

File "install.py", line 454, in run_playbook

success = subprocess.check_call(

File "/usr/local/lib/python3.8/subprocess.py", line 364, in check_call

raise CalledProcessError(retcode, cmd)

subprocess.CalledProcessError: Command '['ansible-playbook', '-c', 'local', 'site.yml', '-vvvv', '-e', '@/tmp/extra_vars.json', '--become', '--become-user=dokos']' returned non-zero exit status 2.

Voici mon process d’installation pour arriver à ce problème :

sudo apt update

sudo apt install -y spice-vdagent spice-webdavd # Permet de faire des copie et colle entre machine virtuelle et host

# Installation de Python 3.8

sudo apt-get install -y wget build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev liblzma-dev

wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz

tar xf Python-3.8.0.tar.xz

cd Python-3.8.0

./configure --enable-optimizations

sudo make altinstall

/usr/local/bin/python3.8 -m pip install --upgrade pip

# Ajout des sources pour installer MariaDB 10.4 a la place de MariaDB 10.3 (qui est installee par defaut si on change pas les sources de APT)

sudo apt-get install -y software-properties-common dirmngr

wget https://mariadb.org/mariadb_release_signing_key.asc

sudo apt-key add mariadb_release_signing_key.asc

sudo add-apt-repository 'deb [arch=amd64] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.4/debian buster main'

sudo apt update

# Installation de Dokos

sudo apt install -y python3-pip

sudo apt install -y build-essential python3-setuptools

sudo apt-get install -y python3-venv

sudo adduser dokos

sudo usermod -aG sudo dokos

su - dokos

export LC_ALL=C.UTF-8

wget https://gitlab.com/dokos/docli/raw/master/bench/install.py

# Premiere tentative d'installation

# -> on va normalement avoir un probleme pendant l'installation car expernet rajoute un fichier de configuration pour MariaDB afin de modifier le formatage du texte. Le formatage de MariaDB par défaut est le latin1 alors que le fichier de configuration rajouté par epernext spécifie le utf8mb4_unicode_ci pour collation-server (collation-server = utf8mb4_unicode_ci) mais ce fichier ne configuration ne change pas le character-set-server = utf8 en character-set-server = utf8mb4 ce qui pose problème pour lancer le serveur

sudo python3 install.py --production --verbose --user dokos

# Si on a une erreur durant l'installation avec MariaDB on modifie le fichier de configuration general

# On modif les lignes dans le fichier my.cnf avec les valeurs suivantes

sudo nano /etc/mysql/my.cnf

# Lignes a modifier

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

# On retente l'installation

sudo python3 install.py --production --verbose --user dokos

# -> Maintenant on tombe normalmemt sur l'erreur dont je parle dans le post

sudo bench setup production dokos # -> Je n'ai jamais reussi Ă  arriver Ă  cette Ă©tape

Voici diverses erreurs que j’ai pu avoir :

  • La version Python 3 (3.7.3) installĂ©e par dĂ©faut sur Debian n’est pas suffisante pour l’installation il est nĂ©cessaire d’installer Python 3.8.

  • La version de MariaDB qui est dans apt est trop ancienne 10.3 (ou moins je sais plus exactement) au lieu de 10.4 nĂ©cessaire Ă  l’installation.

  • Un problème de configuration dans les fichiers de MariaDB au niveau du formatage :

expernet rajoute un fichier de configuration pour MariaDB afin de modifier le formatage du texte. Le formatage de MariaDB par défaut est le latin1 alors que le fichier de configuration rajouté par epernext spécifie le utf8mb4_unicode_ci pour collation-server (collation-server = utf8mb4_unicode_ci) mais ce fichier ne configuration ne change pas le character-set-server = utf8 en character-set-server = utf8mb4 ce qui pose problème pour lancer le serveur

Est-ce-que vous auriez des indices ou des solutions pour résoudre ce problème ?

Je fais de grosse bêtises dans l’installation ?

Merci par avance à ceux qui ont lu jusqu’au bout et à ceux qui me répondront :slightly_smiling_face:

Bonne journée :wink:

Florian V.

Si tu veux tenter Dokos 3 plutot sur Debian 11, je viens de finir une procedure d’install manuelle sur Manual install of Dokos 3.x.x on debian 11 - HedgeDoc et puis le role ansible qui correspond (qui est en cours de peaufinage) sur mose/dokos-ansible: Custom role for Dokos for debian 11 - dokos-ansible - Gitea

Avant ca, j’avais reussi a installer dokos 2 sur debian 11 aussi, mais sans utiliser l’etape de bench setup production parce que ca couinait aussi (mais differemment).

cheers,
mose

1 « J'aime »

Bonjour Florian,

Je n’avais pas eu le temps de me pencher sur le script d’installation depuis la sortie de la version 3.
Avec le passage Ă  Python 3.10 et Debian 11 / Ubuntu 22.04, beaucoup de choses ne fonctionnaient plus correctement.

C’est désormais corrigé et le script a été testé pour Debian 11 / Ubuntu 22.04

Etant donné le travail assez important lié à la maintenance de ces scripts, j’ai décidé de ne les maintenir que pour ces deux distributions.

Ces script installent donc par défaut la version 3 de Dokos avec le framework Dodock et l’application Payments en plus.
Pour installer HRMS, il faut lancer les commandes suivantes après l’installation:

bench get-app hrms --branch v3.x.x
bench --site site1.local install-app hrms

@Florian n’hésites pas à ouvrir un ticket dans le répertoire suivant si tu rencontres des problèmes: Dokos / Docli · GitLab

Bonne journée !

1 « J'aime »

Bonjour,

Merci pour vos réponses !

Super travail pour expliquer comment installer manuellement Dokos @mose encore merci !

Merci @chdecultot pour la mise à jour du script je vais tester tout ça.

J’ai réussi à installer manuellement Dokos en suivant les instructions de @mose, le serveur se lance correctement quand je fait bench start (cf. les logs en dessous) mais je n’arrive pas à trouver l’adresse URL pour avoir la page d’accueil… J’ai essayé différentes adresses dérivées de http://127.0.0.1:8000 mais j’obtiens que des erreurs 404…

Normalement si je rentre la bonne adresse et le bon port je suis redirigé vers la page d’accueil ou il faut que je mette une adresse spécifique (que je n’arrive pas à trouver) ?

Bonne journée,

Florian

bench start
17:16:54 system           | redis_cache.1 started (pid=1864)
17:16:54 system           | redis_socketio.1 started (pid=1865)
17:16:54 system           | redis_queue.1 started (pid=1870)
17:16:55 system           | socketio.1 started (pid=1875)
17:16:55 system           | web.1 started (pid=1872)
17:16:55 system           | watch.1 started (pid=1883)
17:16:55 system           | worker_long.1 started (pid=1890)
17:16:55 system           | worker_short.1 started (pid=1889)
17:16:55 system           | schedule.1 started (pid=1882)
17:16:55 system           | worker_default.1 started (pid=1893)
17:16:55 redis_socketio.1 | 1876:C 04 Oct 2022 17:16:55.284 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17:16:55 redis_socketio.1 | 1876:C 04 Oct 2022 17:16:55.286 # Redis version=6.0.16, bits=64, commit=00000000, modified=0, pid=1876, just started
17:16:55 redis_socketio.1 | 1876:C 04 Oct 2022 17:16:55.286 # Configuration loaded
17:16:55 redis_socketio.1 | 1876:M 04 Oct 2022 17:16:55.293 * Increased maximum number of open files to 10032 (it was originally set to 1024).
17:16:55 redis_queue.1    | 1884:C 04 Oct 2022 17:16:55.339 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17:16:55 redis_queue.1    | 1884:C 04 Oct 2022 17:16:55.344 # Redis version=6.0.16, bits=64, commit=00000000, modified=0, pid=1884, just started
17:16:55 redis_queue.1    | 1884:C 04 Oct 2022 17:16:55.348 # Configuration loaded
17:16:55 redis_queue.1    | 1884:M 04 Oct 2022 17:16:55.390 * Increased maximum number of open files to 10032 (it was originally set to 1024).
17:16:55 redis_socketio.1 | 1876:M 04 Oct 2022 17:16:55.430 * Running mode=standalone, port=12000.
17:16:55 redis_socketio.1 | 1876:M 04 Oct 2022 17:16:55.439 # Server initialized
17:16:55 redis_socketio.1 | 1876:M 04 Oct 2022 17:16:55.447 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
17:16:55 redis_socketio.1 | 1876:M 04 Oct 2022 17:16:55.460 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').
17:16:55 redis_socketio.1 | 1876:M 04 Oct 2022 17:16:55.487 * Ready to accept connections
17:16:55 redis_queue.1    | 1884:M 04 Oct 2022 17:16:55.507 * Running mode=standalone, port=11000.
17:16:55 redis_queue.1    | 1884:M 04 Oct 2022 17:16:55.514 # Server initialized
17:16:55 redis_queue.1    | 1884:M 04 Oct 2022 17:16:55.522 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
17:16:55 redis_queue.1    | 1884:M 04 Oct 2022 17:16:55.529 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').
17:16:55 redis_queue.1    | 1884:M 04 Oct 2022 17:16:55.546 * Ready to accept connections
17:16:55 redis_cache.1    | 1877:C 04 Oct 2022 17:16:55.545 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17:16:55 redis_cache.1    | 1877:C 04 Oct 2022 17:16:55.557 # Redis version=6.0.16, bits=64, commit=00000000, modified=0, pid=1877, just started
17:16:55 redis_cache.1    | 1877:C 04 Oct 2022 17:16:55.561 # Configuration loaded
17:16:55 redis_cache.1    | 1877:M 04 Oct 2022 17:16:55.571 * Increased maximum number of open files to 10032 (it was originally set to 1024).
17:16:55 redis_cache.1    | 1877:M 04 Oct 2022 17:16:55.638 * Running mode=standalone, port=13000.
17:16:55 redis_cache.1    | 1877:M 04 Oct 2022 17:16:55.642 # Server initialized
17:16:55 redis_cache.1    | 1877:M 04 Oct 2022 17:16:55.646 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
17:16:55 redis_cache.1    | 1877:M 04 Oct 2022 17:16:55.650 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').
17:16:55 redis_cache.1    | 1877:M 04 Oct 2022 17:16:55.662 * Ready to accept connections
17:17:35 watch.1          | 
17:17:38 web.1            | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
17:17:38 web.1            |  * Running on all addresses (0.0.0.0)
17:17:38 web.1            |  * Running on http://127.0.0.1:8000
17:17:38 web.1            |  * Running on http://10.0.2.15:8000
17:17:38 web.1            | Press CTRL+C to quit
17:17:38 web.1            |  * Restarting with stat
17:17:39 watch.1          | yarn run v1.22.19
17:17:41 watch.1          | $ node esbuild --watch --live-reload
17:17:46 web.1            |  * Debugger is active!
17:17:46 web.1            |  * Debugger PIN: 108-301-950
17:17:59 watch.1          | clean: postcss.plugin was deprecated. Migration guide:
17:17:59 watch.1          | https://evilmartians.com/chronicles/postcss-8-plugin-migration
17:17:59 watch.1          | clean: postcss.plugin was deprecated. Migration guide:
17:17:59 watch.1          | https://evilmartians.com/chronicles/postcss-8-plugin-migration
17:18:38 schedule.1       | /home/dokos-user/frappe-bench/apps/frappe/frappe/database/query.py:206: UserWarning: The 'filters_config' hook used to add custom operators is not yet implemented in frappe.db.query engine. Use db_query (frappe.get_list) instead.
17:18:38 schedule.1       |   warn(
17:18:44 watch.1          | Browserslist: caniuse-lite is outdated. Please run:
17:18:44 watch.1          |   npx browserslist@latest --update-db
17:18:44 watch.1          |   Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
17:19:03 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:03] "GET / HTTP/1.1" 404 -
17:19:03 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:03] "GET /favicon.ico HTTP/1.1" 404 -
17:19:13 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:13] "GET /index HTTP/1.1" 404 -
17:19:18 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:18] "GET /index.html HTTP/1.1" 404 -
17:19:23 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:23] "GET /login HTTP/1.1" 404 -
17:19:27 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:27] "GET /login.html HTTP/1.1" 404 -
17:19:38 web.1            | 10.0.2.2 - - [04/Oct/2022 17:19:38] "GET /html/ HTTP/1.1" 404 -
17:20:41 watch.1          | clean: postcss.plugin was deprecated. Migration guide:
17:20:41 watch.1          | https://evilmartians.com/chronicles/postcss-8-plugin-migration
17:20:41 watch.1          | clean: postcss.plugin was deprecated. Migration guide:
17:20:41 watch.1          | https://evilmartians.com/chronicles/postcss-8-plugin-migration
17:21:09 watch.1          | Watching for changes...
17:22:13 web.1            | 10.0.2.2 - - [04/Oct/2022 17:22:13] "GET /dokos_test HTTP/1.1" 404 -
17:22:36 web.1            | 10.0.2.2 - - [04/Oct/2022 17:22:36] "GET /test_dokos HTTP/1.1" 404 -
17:22:44 web.1            | 10.0.2.2 - - [04/Oct/2022 17:22:44] "GET /test_dokos/login HTTP/1.1" 404 -
17:22:50 web.1            | 10.0.2.2 - - [04/Oct/2022 17:22:50] "GET /test_dokos/index.html HTTP/1.1" 404 -
17:23:33 web.1            | 10.0.2.2 - - [04/Oct/2022 17:23:33] "GET /test_dokos/home HTTP/1.1" 404 -

Re-bonjour Florian,

Vous avez installé Dokos sur une machine virtuelle distante ou locale ?
Si c’est une machine virtuelle distante, il faut utiliser l’adresse IP publique de la machine pour y accéder; En local ce sera localhost:8000 ou http://127.0.0.1:8000

Si vous ĂŞtes sur une machine distante, je vous conseille Ă©galement de passer en mode « Production Â»

Mode développement

Bench est initialisé à la demande via la commande bench start
C’est pratique pour développer sur Dokos, mais pas adapté à un usage classique

Mode Production

Les services permettant de faire fonctionner Dokos (Nginx, Werkzeug, RQ, etc…) sont toujours allumés et gérés par Supervisor

Pour passer en mode production il faut lancer la commande sudo bench setup production [votre utilisateur] depuis votre dossier bench

Ensuite vous pourrez configurer votre nom de domaine et générer un certificat SSL: Multi-tenant · Dokos Documentation

Bonne fin de journée !

Re-bonjour,

Ma machine tourne sur mon ordinateur en parallèle de mon OS du coup c’est une machine locale. J’ai ouvert le port 8000 sur la VM pour y accéder directement sur le navigateur de mon ordinateur (on va dire host pour que ce soit plus simple).

J’ai testé directement dans la VM d’aller sur localhost:8000 et http://127.0.0.1:8000 mais j’obtiens une erreur 404. J’obtiens la même chose quand j’y accède à partir de l’host (logique vue que je n’y arrive pas déjà en local). Dans les logs de mon message précédent l’adresse 10.0.2.2 correspond à celle de l’host pour la VM. Je vais réessayer demain en lançant en production et passant par le script si ça ne marche pas.

Merci encore pour ta réponse. Bonne fin de journée !

Je me permet de tagguer @corentin et @Antoine_Maas qui sont passé par là également et pourront peut-être t’aider.

Dans tous les cas l’accès au site sur une machine virtuelle locale est possible en mode développement comme en mode production. C’est juste une problématique de réseau à résoudre.

Tu peux essayer d’utiliser la commande bench add-to-hosts qui permet d’ajouter tes sites dans le fichier /etc/hosts

Bonne journée !

1 « J'aime »

Hello @Florian,

J’utilise une VM sur ubuntu 20.04.
De mon côté une fois que le bench est lancé ça fonctionne sans problème sur la VM à l’adresse 127.0.0.1:8000* (mais pas depuis la machine hôte).
Il doit y a voir un autre problème que l’adresse.

Désolé de ne pas pouvoir t’aider beaucoup plus que ça.
Antoine.

*ne pas oublier de bien vérifier le port qui est affiché au début du lancement du bench; quand tu as plusieurs bench le port change; c’est bien 8000 dans ton cas cela dit

1 « J'aime »