Salut, j'essaie de faire de Bootcamp un réseau social pour les chercheurs de mon université. Cependant, en raison de certaines contraintes, je ne peux actuellement pas utiliser caddy comme proxy inverse pour le déploiement. Au lieu de cela, j'utilise nginx. Si possible, pouvez-vous me donner des indications sur les paramètres que je dois spécifier pour l'environnement de production. J'ai vu le fichier env.example mais comme le projet est nouveau pour moi, je ne sais pas comment tout se connecte les uns aux autres. Je suis bloqué avec l'erreur suivante
manage.py runworker: error: the following arguments are required: channels
Toute aide est appréciée.
Salut,
Je n'utilise pas de caddie. J'utilise gunicorn pour tous mes projets Django.
Avez-vous installé toutes les exigences ?
canaux>=2.1.1 # https://github.com/django/channels
canaux-redis>=2.2.1 # https://github.com/django/channels_redis
Vous pouvez vérifier via la console
$ python -c "import channels"
$ echo $?
0 signifie, exister
1 signifie que le module n'existe pas dans le système
canaux est installé. Je rencontre un autre problème maintenant. Voici mon fichier docker et .env. Je rencontre un problème avec le service des travailleurs. Pas sûr de ce qu'il fait. J'apprécie vraiment votre aide, votre projet est très intéressant et peut aider de nombreuses personnes dans mon université s'il entre en production.
Voici le journal des erreurs.
worker_1 | /usr/local/lib/python3.6/site-packages/daphne/server.py:13: UserWarning: Something has already installed a non-asyncio Twisted reactor. Attempting to uninstall it; you can fix this warning by importing daphne.server early in your codebase or finding the package that imports Twisted and importing it later on.
worker_1 | UserWarning,
django_1 | DEBUG 2019-10-17 21:28:37,751 base 1 140450066271560 Configuring Raven for host: https://sentry.io
worker_1 | DEBUG 2019-10-17 21:28:35,663 base 1 140638836505928 Configuring Raven for host: https://sentry.io
worker_1 | Running worker for channels ['channels', 'notifications']
worker_1 | DEBUG 2019-10-17 21:28:36,297 base 1 140638836505928 Sending message of length 5534 to https://sentry.io/api/1782977/store/
worker_1 | Traceback (most recent call last):
worker_1 | File "manage.py", line 30, in <module>
worker_1 | execute_from_command_line(sys.argv)
worker_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
worker_1 | utility.execute()
worker_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
worker_1 | self.fetch_command(subcommand).run_from_argv(self.argv)
worker_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
worker_1 | self.execute(*args, **cmd_options)
worker_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
worker_1 | output = self.handle(*args, **options)
worker_1 | File "/usr/local/lib/python3.6/site-packages/channels/management/commands/runworker.py", line 46, in handle
worker_1 | worker.run()
worker_1 | File "/usr/local/lib/python3.6/site-packages/asgiref/server.py", line 60, in run
worker_1 | event_loop.run_until_complete(self.handle())
worker_1 | File "/usr/local/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
worker_1 | return future.result()
worker_1 | File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in handle
worker_1 | [listener.result() for listener in listeners]
worker_1 | File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in <listcomp>
worker_1 | [listener.result() for listener in listeners]
worker_1 | File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 37, in listener
worker_1 | message = await self.channel_layer.receive(channel)
worker_1 | File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 461, in receive
worker_1 | return (await self.receive_single(channel))[1]
changer dans votre env
REDIS_URL=redis://127.0.0.1:6379
Pouvez-vous me montrer comment configurer le service de travail ? Et pourquoi en avons-nous besoin ? Nouveau dans ce projet, donc je ne sais pas où chercher cette information
euh, c'est beaucoup. Cela ne se fait pas en quelques minutes...
Tout d'abord, veuillez vérifier si vous avez installé toutes les exigences sur votre environnement de serveur
pip install -U -r requirements/production.txt
Deuxièmement, votre projet travaille-t-il au niveau local ?
Configurer un projet n'est pas possible sans tous les fichiers. Et je ne suis pas le meilleur pour le configurer. Je peux vérifier ma configuration et partager, mais ce n'est PAS testé et approuvé pour bootcamp. Peut-être avez-vous besoin de paramètres supplémentaires.
Je lance le service à l'aide de docker compose. Le déploiement local fonctionne bien, mais production.yml est une chose totalement différente. J'implique redis, daphne, postgres. Si vous avez un fichier docker-compose à portée de main quelque part, veuillez le partager. Merci
Obtenez Outlook pour iOS https://aka.ms/o0ukef
De : samazaphikel [email protected]
Envoyé : jeudi 17 octobre 2019 17:03:30
À : vitorfs/bootcamp [email protected]
Cc : Tri Minh Pham [email protected] ; Auteur [email protected]
Objet : Re : [vitorfs/bootcamp] Aide à la mise en place de la production. (#193)
euh, c'est beaucoup. Cela ne se fait pas en quelques minutes...
Tout d'abord, veuillez vérifier si vous avez installé toutes les exigences sur votre environnement de serveur
pip install -U -r requirements/production.txt
Deuxièmement, votre projet travaille-t-il au niveau local ?
Configurer un projet n'est pas possible sans tous les fichiers. Et je ne suis pas le meilleur pour le configurer. Je peux vérifier ma configuration et partager, mais ce n'est PAS testé et approuvé pour bootcamp. Peut-être avez-vous besoin de paramètres supplémentaires.
-
Vous recevez ceci parce que vous avez créé le fil.
Répondre à cet e - mail directement, voir sur GitHub https://github.com/vitorfs/bootcamp/issues/193?email_source=notifications&email_token=ADEK4AB5JEUP5LQ4APTJ6ITQPDOLFA5CNFSM4JB4YOCKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBRVI2A#issuecomment-543380584 ou désabonnement https://github.com/notifications/unsubscribe- auth/ADEK4ADBCG24WLWIT3IM6OLQPDOLFANCNFSM4JB4YOCA .
Dans mon cas, IM en utilisant python 3.7.1 sur la machine serveur Ubuntu
Configuration optionnelle de la version Python
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1
Avec cette commande, python 3.7.1 est ma première priorité
Tout d'abord, installez l'environnement sur la machine
sudo -H pip3 install virtualenv
cd /home/pages
pour changer dans le bon dossier
mkdir bootcamp
pour créer le dossier du projet
cd bootcamp/
créer un environnement
virtualenv bootcampenv
Activez votre environnement
source bootcampenv/bin/activate
installer gunicorn
pip3 install gunicorn
retourner au répertoire des pages
cd ..
et créer un dossier pour le projet bootcamp
django-admin startproject bootcampprojectdir
cd bootcampprojectdir
Et installer les exigences
pip install -U -r requirements/production.txt
Si vous utilisez différentes bases de données ou quelque chose du genre, lancez la migration et collectez les données statiques
Mettre à jour le pare-feu pour autoriser le port 8000
sudo ufw allow 8000
créer gunicorn wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi
créer un socket système
sudo nano /etc/systemd/system/gunicorn.socket
[Unité]
Description=gunicorn.sock[Prise]
ListenStream=/run/gunicorn.sock[Installer]
WantedBy=sockets.target
créer un service
sudo nano /etc/systemd/system/gunicorn.service
[Unité]
Description=démon gunicorne
Requiert=gunicorn.socket
Après=network.target[Service]
Utilisateur=pages
Groupe=www-données
WorkingDirectory=/home/pages/bootcampprojectdir/bootcampenv/bin/gunicorn
--access-logfile -
--travailleurs 3
--bind unix:run/gunicorn.sock
settings.wsgi.application[Installer]
WantedBy=multi-user.target
tout activer
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
vérifie ça
file /run/gunicorn.sock
Quand vous n'avez pas d'erreur, alors tout va bien
Vérifier l'état
sudo systemctl status gunicorn.socket
vérifier le service
curl --unix-socket /run/gunicorn.sock localhost
Lorsque vous ne voyez pas le code HTML, quelque chose avec le gunicorn.service
assurez-vous que le service est en cours d'exécution
sudo systemctl status gunicorn
Quand tout va bien, la prochaine étape NGinx passe à gunicorn
installer nginx
sudo apt install nginx
créer un site dans nginx
créer un service
sudo nano /etc/nginx/sites-available/bootcampproject
serveur {
écouter 80 ;
nom_serveur 99.99.99.99location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/pages/bootcampprojectdir; }
emplacement / {
inclure proxy_params ;
proxy_pass http://unix :/run/gunicorn.sock;
}
}
enregistrer et copier ce fichier sur les sites activés
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled
et vérifier la configuration de nginx
sudo nginx -t
En cas d'absence d'erreur, redémarrez nginx
sudo systemctl restart nginx
ajoutez des ports de pare-feu nginx, mais supprimez d'abord le port 8000 du test
sudo ufw delete allow 8000
ajouter nginx
sudo ufw allow 'Nginx Full'
Salut @phamminhtris, je suis heureux que vous utilisiez le projet et que vous le trouviez utile. Il existe deux manières principales de déployer le projet dans un environnement de production. Le premier utiliserait Docker, mais il a ses inconvénients, et il nécessite évidemment une bonne connaissance de Docker et de docker-compose
. Je suis loin d'être un expert et c'est pourquoi je ne l'utilise que pour le développement, mais peut-être pouvez-vous trouver quelque chose d'utile ici .
L'autre façon est d'implémenter le projet tel qu'il est, ce qui est "plus facile" (ou du moins vous pouvez trouver plus de ressources et de guides pour le déployer), n'oubliez pas de charger votre fichier .env
avec les variables requises, vous pouvez utiliser l'exemple de version inclus pour comprendre comment les déclarer.
Est-ce suffisant d'utiliser simplement gunicorn comme seul serveur ? J'ai vu que certaines fonctionnalités nécessitaient un serveur d'applications ASGI comme Daphne pour servir le trafic de socket Web. S'il vous plait corrigez moi si je me trompe. Merci pour votre aimable aide. Appréciez vraiment cela.
Nginx est l'endroit où les demandes provenant d'Internet arrivent en premier. Il peut les gérer très rapidement et est généralement configuré pour ne laisser passer que les demandes qui doivent vraiment arriver à votre application Web.
Gunicorn traduit les demandes qu'il reçoit de Nginx dans un format que votre application Web peut gérer et s'assure que votre code est exécuté en cas de besoin.
Chacun peut faire quelque chose, ce que l'autre ne peut pas faire.
Nginx est un serveur Web et un proxy inverse. Il est hautement optimisé pour tout ce qu'un serveur Web doit faire.
Prendre soin du routage des noms de domaine (décide où les demandes doivent aller, ou si une réponse d'erreur est en ordre)
Servir des fichiers statiques
Traiter de nombreuses demandes qui arrivent à la fois
Gérer les clients lents
Transfère les demandes qui doivent être dynamiques à Gunicorn
Terminer SSL (https se produit ici)
Économisez des ressources de calcul (CPU et mémoire) par rapport à votre code Python
Et bien plus encore, si vous le configurez pour cela (load balancing, mise en cache, …)
Guncorne
Une fois que Nginx décide qu'une demande particulière doit être transmise à Gunicorn (en raison des règles avec lesquelles vous l'avez configuré).
Gunicorn est hautement optimisé et possède de nombreuses fonctionnalités pratiques.
Exécution d'un pool de processus/threads de travail (exécution de votre code !)
Traduit les demandes provenant de Nginx pour qu'elles soient compatibles WSGI
Traduire les réponses WSGI de votre application en réponses http appropriées
Appelle réellement votre code Python lorsqu'une requête arrive
Gunicorn peut parler à de nombreux serveurs Web différents
Gunicorn n'est qu'un des nombreux serveurs WSGI valides. Votre application ne se soucie pas de celle que vous utilisez, et Nginx s'en fiche non plus.
Je comprends ce qui précède. Cependant, ce projet est assez particulier en terme de protocole. Il sert de notification via websocket et, à ma connaissance, nous aurons besoin de plus qu'un gunicorn et un nginx ordinaires pour piloter l'application ? Lorsque je lance le docker local compose, je remarque que /notifications ne semble pas fonctionner. Je sais que je demande beaucoup mais j'apprécie vraiment votre temps et vos efforts pour m'aider @samazaphikel. J'essaierai la configuration locale (pas de docker-compose, docker) juste nu ubuntu et voir si cela fonctionne. Merci à tous
Guide très utile. Fermeture.
Commentaire le plus utile
Dans mon cas, IM en utilisant python 3.7.1 sur la machine serveur Ubuntu
Configuration optionnelle de la version Python
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1
Avec cette commande, python 3.7.1 est ma première priorité
Tout d'abord, installez l'environnement sur la machine
sudo -H pip3 install virtualenv
cd /home/pages
pour changer dans le bon dossiermkdir bootcamp
pour créer le dossier du projetcd bootcamp/
créer un environnement
virtualenv bootcampenv
Activez votre environnement
source bootcampenv/bin/activate
installer gunicorn
pip3 install gunicorn
retourner au répertoire des pages
cd ..
et créer un dossier pour le projet bootcamp
django-admin startproject bootcampprojectdir
cd bootcampprojectdir
Et installer les exigences
pip install -U -r requirements/production.txt
Si vous utilisez différentes bases de données ou quelque chose du genre, lancez la migration et collectez les données statiques
Mettre à jour le pare-feu pour autoriser le port 8000
sudo ufw allow 8000
créer gunicorn wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi
créer un socket système
sudo nano /etc/systemd/system/gunicorn.socket
créer un service
sudo nano /etc/systemd/system/gunicorn.service
tout activer
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
vérifie ça
file /run/gunicorn.sock
Quand vous n'avez pas d'erreur, alors tout va bien
Vérifier l'état
sudo systemctl status gunicorn.socket
vérifier le service
curl --unix-socket /run/gunicorn.sock localhost
Lorsque vous ne voyez pas le code HTML, quelque chose avec le gunicorn.service
assurez-vous que le service est en cours d'exécution
sudo systemctl status gunicorn
Quand tout va bien, la prochaine étape NGinx passe à gunicorn
installer nginx
sudo apt install nginx
créer un site dans nginx
créer un service
sudo nano /etc/nginx/sites-available/bootcampproject
enregistrer et copier ce fichier sur les sites activés
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled
et vérifier la configuration de nginx
sudo nginx -t
En cas d'absence d'erreur, redémarrez nginx
sudo systemctl restart nginx
ajoutez des ports de pare-feu nginx, mais supprimez d'abord le port 8000 du test
sudo ufw delete allow 8000
ajouter nginx
sudo ufw allow 'Nginx Full'