La gestion d’un serveur

Besoin de conseils pour un pauvre débutant

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut à vous,

Depuis environ 2 ans maintenant, j’autohéberge et développe le site d’un club sportif dont je suis membre. L’idée de ce topic est que vous puissiez me partager vos expériences au niveau de la gestion des tests et de la mise en production.

Voici actuellement ma configuration : le serveur tourne sur un Raspberry connecté à ma Freebox, sur lequel est installé ArchLinux ARM. Le site est écrit en Python avec Django en framework. Toute requête http entrante est redirigée vers mon raspberry, sur lequel nginx écoute le port 80. Il sert les fichiers statiques, et transmets à un processus gunicorn pour le reste. Jusque là tout va bien…

Seulement, ma question concerne la gestion du développement. En effet, jusqu'à présent le site a très peu évolué. Récemment, j’ai voulu réécrire le système d’inscription en ligne à un tournoi, et je l'ai fait depuis mon PC portable, qui tourne sur Fedora (et django 1.6 alors que sur le raspberry, c’est django 1.9), puis une fois que j’avais bien testé, j’ai tout transféré sur le serveur en prod, moyennant quelques ajustements. Bref, vous l'avez compris, je suis un sys admin de merde, tout ça c’est bancal, et voilà pourquoi je viens sur ce forum ! ;)

Je me suis dit qu’il fallait que je me replonge plus sérieusement sur Git en travaillant avec deux branches. L’idée, c’est que je puisse travailler sur le Raspberry tout le temps, même lorsque je veux faire du dev. Du coup, je me suis dit que ce qui serait cool, c’est de faire tourner un processus gunicorn pour la branche master pour le serveur prod, auquel on passe les requêtes nginx, et un manage.py runserver interne à la machine pour ma version de développement. Seulement, petit problème : comment faire pour que j’ai un processus gunicorn qui soit la version de la branche master, alors que je vais lancer un git checkout dev ?

J’attends vos remarques sur ma solution, et pourquoi pas de meilleures idées de gestion de mon site ! :)
Merci !

+3 -0
Staff

Alors je vais essayer de t'apporter quelques éléments de réponse.

Premièrement essaye de travailler avec des environnements virtuels pour garder une cohérence dans tes versions de Django et des dépendances annexes. De plus ça fait plus de 6 mois que la version 1.6 de Django n'est plus maintenue et donc les failles présentes dessus non corrigées. Je ne parle même pas du code qui a bien changé pour certaines parties (template, url(), etc).

Ensuite travailler directement sur ton serveur (le Pi ici) n'est pas nécessairement une bonne idée. Si jamais tu lances une commande qui va consommer toute tes ressources (ce qui est assez facile sur un Pi), que va-t-il se passer ? Ton site va être très lent dans le meilleur des cas, voire inaccessible. Je te conseille vivement de travailler avec une machine séparée et des environnement virtuels.

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+2 -0
Auteur du sujet

Salut,

Effectivement, j’avais déjà entendu parler des environnements virtuels, je m’étais pas documenté sur virtualenv, mais j’avais trouvé ça assez lourd pour le petit site que je gère. Effectivement, j’ai pas mal de migrations à faire au niveau de mon code. En fait, sur mon PC portable, c’est encore Django 1.6 car je suis sous une ancienne version de Fedora où il n'y a plus de mises à jour. Faut que je me fasse un dist-upgrade bientôt.

Ok, mais du coup, comment je gère une fois que j’ai fini mon développement pour transférer sur le serveur ?

Je prends un exemple. Là, j’ai du travailler sur une "branche" où je développais une fonctionnalité qui nécessitait une communication avec FreeTDS et unixODBC. Donc, j’ai installé et configuré tout ça sur Fedora. Puis, lors de la mise en prod, j’ai du repasser un temps fou sur la config de unixODBC sur le Pi ! Et puis, au niveau des fichiers, comment ça se passe une mise en prod sur ZdS par exemple ?

+0 -0
Staff

Virtualenv est tout sauf lourd. J'en ai une cinquantaine et je peux t'assurer que c'est indispensable quand tu commences à travailler avec des environnements différents.

Le mieux est de travailler avec un dépôt git (GitHub, GitLab, FramaGit, Bitbucket et j'en passe) et de simplement mettre à jour la version qui est sur ton serveur. Pour ZdS on utilise ce script https://github.com/zestedesavoir/zds-site/blob/dev/scripts/deploy.sh .

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Auteur du sujet

Salut,

C’était juste un a priori comme ça de l’extérieur sans avoir réellement essayé…

Ok, donc en gros, je fais du dev sur mon pc, avant git, des branch et tout, et ensuite, je push tout sur mon GH, et derrière, je mets à jour la version sur mon serveur, ça c’est ok.

Mais du coup, pour les logiciels que je configure sur mon pc par exemple, je dois les reconfigurer sur le Pi ?

+0 -0
Auteur du sujet

D’accord, d’accord, merci pour toutes ces infos. Dernière question : comment on gère pour cacher le settings.py et les clés Django, les infos sur le serveur SMTP, etc… lorsqu’on fait un push sur GitHub ?

+0 -0
Staff

Tu fais un settings_prod.py comme cela https://github.com/zestedesavoir/zds-site/blob/dev/zds/settings.py#L573

Comme tu le vois il y a une valeur pour SECRET_KEY pour la configuration de ZdS sauf que celle-ci est surchargée sur les serveurs.

Édité par gustavi

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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