Ce que "setup" avez-vous vu à l'œuvre le meilleur? J'ai utilisé virtualenv et déplacé mon
projet django à l'intérieur de cet environnement, toutefois, j'ai vu un autre
là où il y a un dossier pour les environnements virtuels et d'autres pour
projets.
virtualenv est un moyen d'isoler Python environnements; en tant que tel, il n'a pas un grand rôle à jouer au déploiement - toutefois, au cours du développement et de test , il est une exigence si pas très recommandé.
La valeur de virtualenv est qu'il vous permet de vous assurer que les versions correctes des bibliothèques sont installées pour l'application. Donc, il n'a pas d'importance où vous vous en tenez l'environnement virtuel lui-même. Assurez-vous de ne pas l'inclure dans le code source du système de gestion de versions.
Le système de fichiers de mise en page n'est pas critique. Vous verrez beaucoup d'articles vantant les vertus de mises en page du répertoire et même squelette de projets que vous pouvez cloner comme un point de départ. J'ai l'impression que c'est plus une question de préférence personnelle qu'une dure exigence. Sûr que c'est agréable d'avoir; mais, sauf si vous savez pourquoi, il ne pas ajouter de la valeur à votre processus de déploiement - il ne faut pas le faire parce que certains blog le recommande sauf si elle fait sens pour votre scénario. Par exemple, pas besoin de créer un setup.py
le fichier si vous n'avez pas de privé PyPi serveur qui fait partie de votre flux de travaux de déploiement.
Comment puis-je configurer les choses d'une manière qui permet à plusieurs sites hébergés
dans un seul serveur?
Il y a deux choses que vous devez faire plusieurs installations de sites:
- Un serveur qui écoute sur l'adresse IP publique sur le port 80 et/ou le port 443 si vous avez SSL.
- Un tas de "processus" qui sont en cours d'exécution le réel django code source.
Les gens utilisent nginx pour le #1, en raison de sa très rapide proxy et il ne vient pas avec la surcharge d'un complet serveur comme Apache. Vous êtes libre de les utiliser Apache si vous êtes à l'aise avec elle. Il n'est pas nécessaire que "pour plusieurs sites, l'utilisation de nginx", vous avez juste besoin d'un service qui est à l'écoute sur ce port, sait comment faire pour rediriger (proxy) de votre processus de l'exécution de la réelle django code.
Pour le #2, il ya quelques façons de commencer ces processus. gevent/uwsgi sont les plus populaires. La seule chose à retenir ici est de ne pas utiliser runserver dans la production.
Ceux-ci sont le minimum absolu exigences. Généralement les gens ajouter une sorte de gestionnaire de processus pour le contrôle de tous les "django serveurs" (#2) en cours d'exécution. Ici, vous verrez upstart
et supervisor
mentionné. Je préfère superviseur comme il n'a pas besoin de prendre plus de l'ensemble du système (contrairement à arriviste). Cependant, encore une fois - ce n'est pas un dur exigence. Vous pourriez parfaitement exécuter un tas de screen
des séances et de l'abîmer. L'inconvénient est, si votre serveur est redémarré, vous devez relancer l'écran des sessions.
Personnellement, je recommanderais:
- Nginx pour le #1
- Faites votre choix entre uwsgi et gunicorn - je utiliser uwsgi.
-
superviseur de la gestion du processus serveur.
- Système individuel comptes (utilisateurs) pour chaque application que vous hébergez.
La raison pour laquelle je recommande #4 est d'isoler les autorisations; encore une fois, pas une obligation.
Pourquoi certaines personnes suggèrent d'utiliser gunicorn_django -b 0.0.0.0:8000 et
d'autres suggèrent gunicorn_django -b 127.0.0.1:8000? J'ai testé le dernier
dans une instance Amazon EC2, mais il ne fonctionne pas alors que le premier a travaillé
sans problème.
0.0.0.0
signifie "toutes les adresses IP" - un méta adresse (qui est, un espace réservé à l'adresse). 127.0.0.1
est une adresse réservée qui pointe toujours vers la machine locale. C'est pourquoi elle est appelée "localhost". Il n'est accessible que pour les processus en cours d'exécution sur le même système.
En général, vous avez le serveur frontal (#1 dans la liste ci-dessus) à l'écoute sur l'adresse IP publique. Vous devez explicitement lier le serveur à une adresse IP.
Toutefois, si pour quelque raison vous êtes sur DHCP ou si vous ne connaissez pas l'adresse IP (par exemple, récemment mise en service du système), vous pouvez dire nginx/apache/tout autre procédé pour lier 0.0.0.0
. Cela devrait être un arrêt temporaire-de l'écart de mesure.
Pour les serveurs de production, vous aurez une adresse IP statique. Si vous avez une adresse IP dynamique (DHCP), vous pouvez les laisser en 0.0.0.0
. Il est très rare que vous aurez DHCP pour vos machines de production.
La liaison gunicorn/uwsgi à cette adresse n'est pas recommandé dans la production. Si vous liez votre backend processus (gunicorn/uwsgi) 0.0.0.0
, il peut devenir accessible "directement", en contournant votre front-end proxy (nginx/apache/etc); quelqu'un pourrait il suffit de demander http://your.public.ip.address:9000/
et accéder à votre demande directement, surtout si votre serveur frontal (nginx) et votre dos en fin de processus (django/uwsgi/gevent) sont en cours d'exécution sur la même machine.
Vous êtes libre de le faire si vous ne voulez pas avoir le souci de faire fonctionner un serveur proxy frontal.
Quelle est la logique derrière le fichier de configuration de nginx? Il ya tellement de nombreuses
des tutoriels en utilisant radicalement différents fichiers de configuration que je suis
confus sur qui est le meilleur. Par exemple, certaines personnes utilisent des "alias
/chemin/vers/static/dossier" et autres "root /chemin/vers/static/dossier".
Peut-être que vous pouvez partager votre préféré fichier de configuration.
La première chose que vous devez savoir à propos de nginx est que c'est pas un serveur web comme Apache ou IIS. C'est un proxy. Donc, vous allez voir les différents termes comme "en amont" et "aval" et plusieurs "serveurs" en cours de définition. Prendre un certain temps et passer par la nginx manuel.
Il ya beaucoup de façons différentes de mettre en place nginx; mais voici une réponse à votre question sur alias
vs root
. root
est explicite directive qui la lie à la racine du document (le "home directory") de nginx. C'est le répertoire, il va regarder lorsque vous faites une demande sans chemin d'accès, comme http://www.example.com/
alias
signifie "mapper un nom dans un répertoire". Alias répertoires ne peut pas être un sous-répertoire de la racine du document.
Pourquoi pouvons-nous créer un lien symbolique entre le site et disponible sites-enabled dans
/etc/nginx?
C'est quelque chose d'unique à debian (et debian-like systèmes comme ubuntu). sites-available
les listes des fichiers de configuration pour tous les hôtes virtuels/sites sur le système. Un lien symbolique à partir de sites-enabled
de sites-available
"active" de ce site ou de l'hôte virtuel. C'est un moyen de séparer les fichiers de configuration et facilement activer/désactiver les hôtes.