Django - Génération de fichiers au format Word

Hébergement chez Pythonanywhere

a marqué ce sujet comme résolu.

Bonjour à tous,

je suis en train de développer une application de facturation avec Django. Pour la génération des documents, j’ai utilisé avec succès en local templated-docs. J’ai trouvé la lib vraiment simple à utiliser et très intuitive au niveau front-end, étant donné que les templates sont des documents Libreoffice dans lesquels on peu inclure des variables/boucles/conditions.

J’ai un problème au niveau de l’hébergement. Je suis chez Pythonanywhere, et il n’est pas possible d’installer Libreoffice en root. Ce soft est nécessaire au bon fonctionnement de la lib précitée. J’ai tenté d’installer Libreoffice dans mon dossier /home, comme conseillé par le support, mais ça m’a généré une liste d’erreur d’1km de long (disk quota excedeed notamment).

Du coup, je me demande que faire et j’aimerais avoir votre avis. Je peux :

  1. Rester chez le même hébergeur et chercher une autre façon de générer des documents au format Word ou .ods (ou équivalent). L’avantage chez Pythonanywhere est la simplicité de déploiement, clairement. Par contre c’est un peu limité dans ce qu’on peut installer. Je ne souhaite pas passer par du PDF directement car l’utilisateur final souhaite un document facilement modifiable.

  2. Me diriger vers un VPS et le configurer à la main. Il y a bien un VPS déjà configuré chez DigitalOcean avec Django pré-installé, mais c’est la version 1.8.7, incompatible avec mon projet actuel. Je pense être capable d’installer à la main tout ça sur un VPS, en suivant les conseils et tutos de DigitalOcean par exemple, ils sont très bien foutus. Par contre, je ne me rends pas compte de ce que ça va représenter en terme de maintenance, mises à jour, etc…

Voilà, j’aimerais avoir vos avis éclairés. D’avance merci !

Salut leir,

Si tu donne un peu plus de détails sur les erreurs, peut être seront-nous en mesure de te donner plus de détails. Pour ton problème te taille de disque, ne peux-tu pas augmenter ton forfait d’hébergement pour avoir plus de place disponible ?

A mon avis pour la solution 1 tu aura le même genre de problème quelque soit la lib qui tu souhaitera utiliser. Elle demandera forcément de la place et un peu de configuration, donc tu risque de passer beaucoup de temps pour au final peut être avoir des problèmes plus ou moins similaires.

Pour la solution 2 l’installation de base pourra se résumer a quelque chose d’assez classique type Python + supervisord + Gunicorn + Nginx. C’est quelque chose qui est faisable en quelques heures si c’est la premier fois que tu le fait mais que tu est un peu à l’aise avec linux / le ssh / la ligne de commande. Après tout dépend du fonctionnement exact de ton application. Pour la maintenance ça dépend à quelle fréquence tu compte déployer ton application, mais ça peut prendre pas mal de temps. A ça tu doit ajouter un minimum de mises à jours de sécurité (os ou applications) plus éventuellement un peu de monitoring pour vérifier que tout se passe bien (uptime, consommation de ram, etc.). Clairement ça peu représenter un peu de travail ;)

Est ce qu’il est possible d’imaginer une troisième solution qui consisterait à:

  • Laisser ton application la où elle est (faciliter d’hébergement / pas de maintenance)
  • Héberger la partie génération de document sur un petit VPS qui ne sert qu’à ça (maintenance d’un service uniquement, pas forcément beaucoup d’évolution)
  • Faire communiquer les deux serveurs entre eux ?

Je te conseille de creuser un peu plus sur la raison du non fonctionnement de ta solution initiale ;)

Anto59290

Pour la maintenance ça dépend à quelle fréquence tu compte déployer ton application, mais ça peut prendre pas mal de temps.

Ouais, et avec la BDD, les logs, le monitoring et les sauvegardes ça se complique encore plus. (J’imagine que Pythonanywhere gère déjà tout ça pas trop mal, non ?)

La solution de ne pas tout déplacer vers un VPS est possiblement la meilleure. Si tu veux vraiment minimiser l’administration système, un service comme Heroku voire AWS Lambda peut peut-être convenir même si ça risque d’être douloureux de faire tourner LibreOffice là dedans. À moins que…

Merci à vous deux pour vos remarques éclairées ! Alors j’ai rapidement tenté ce soir d’installer à nouveau Libreoffice sur le serveur de Pythonanywhere, sans succès. Ensuite, j’ai suivi un pas-à-pas afin de tout réinstaller sur un VPS de DigitalOcean en partant de zéro (en profitant pour passer de mysql à postgresql), et tout fonctionne déjà. Du coup, je pense me laisser emballer par le VPS, même si ce sera un peu plus compliqué à maintenir, je vais apprendre plus de choses également ;-)

Merci encore !

Edit : pour ceux que ça pourrait intéresser, deux tutos vraiment faciles que j’ai suivis :

  1. Setup de base d’un serveur sous Ubuntu 16.04 c’est par-ici.

  2. Setup du serveur pour une application Django c’est par-ici

+0 -0

C’est sur qu’en termes d’apprentissage ce n’est pas pareil. Je te conseille de creuser les points suivants:

  • Faire des backups : de tout ce qui est sur ton serveur (fichiers de configurations, base de données, etc.). Le mieux étant de réaliser plusieurs copies de manières journalières sur des serveurs / stockages différents de ton serveur applicatif.
  • Jeter un coup d’oeil du côté du monitoring de DigitalOcean.
  • Récupérer les logs de ton applications pour en savoir plus sur les erreurs. Soit en configurant les loggers Django pour recevoir des mails, soit en regardant du côté de Sentry par exemple.

Bonne continuation ;)

@Anto59290 merci de m’avoir répondu. J’en suis là actuellement :

backups : - j’ai loué un autre VPS ailleurs, avec pratiquement rien dessus. Sa seule fonction est de faire des sauvegardes de mes sites. Par contre, je ne sais pas si la méthode est bonne. J’ai des scripts bash lancés @daily via cron. Par exemple :

1
2
3
clear
ssh user@ip_de_mon_server_avec_django "mysqldump -u user -pMon_mdp nom_de_la_base" > ~/backups/mon_site/$(date +"%Y-%m-%d").mon_site.backup.sql
echo "DB saved"

Je ne sais pas si c’est bon de faire comme ça, pour la gestion du mdp notamment.

Concernant les fichiers de configuration, j’ai effectué un SnapShot du serveur quand pratiquement tout était installé. Ça me permettrait de remettre le serveur en état rapidement si j’ai un problème je pense.

  • monitoring Je ne me suis pas encore penché là-dessus, mais il va falloir que je m’y mette c’est sûr, merci ! :-)

  • logs d’erreur Idem que pour le monitoring, les erreurs par mail, ça me paraît bien.

Salut leir,

Ta méthode n’est pas mauvaise mais elle peut être améliorée. En effet avec ta commande tu fait un export synchrone dans la connexion SSH. Plus ta base sera grande plus le temps d’export sera important, il se peut que la connexion SSH entre le deux serveurs finisse par échouer ou rencontre un problème.

Une solution pour améliorer ça, ça serait:

  • Lancer le cron de backup de BDD directement sur le serveur applicatif. Imaginons que le backup soit enregistré dans /home/backup/backup-mysql-latest.sqm
  • Avoir un cron sur ton serveur backup qui effectue juste une copie (avec scp) du fichier en question.

Ainsi si ton serveur backup tombe tu as toujours une copie présente sur ton serveur applicatif. Si ton serveur applicatif tombe, tu as une copie sur ton serveur backup.

Si tu as des médias uploadé par les utilisateurs / les administrateurs, n’oublie pas de faire une copie de ton dossier de médias aussi, par exemple avec rsync.

Bon courage ;) Antonin

Si j’ai raté l’explication excuse-moi, sinon j’ai une question :

Que se passe-t-il une fois le document généré ? Il est généré en RAM et directement envoyé au navigateur pour être téléchargé ? Ou tu le gardes sur le disque un certain temps ? Autre ?

+1 -0

@Anto59290 Merci pour tes indications ! C’est vrai que j’ai cherché à faire un backup via ssh, mais c’est sûrement mieux de faire comme ça ! Je vais donc faire comme tu as proposé, ça m’a l’air vraiment mieux !

@victor Oui, dans mon cas, j’ai fait en sorte que la facture puisse être consultée et gérée en ligne (version HTML) et qu’au click sur un bouton, le document soit généré et que le téléchargement se lance directement.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte