Django
Rozlokowanie
Szukaj…
Uruchamianie aplikacji Django z Gunicorn
Zainstaluj gunicorn
pip install gunicorn
Z folderu projektu django (ten sam folder, w którym znajduje się manage.py), uruchom następującą komendę, aby uruchomić bieżący projekt django z gunicorn
gunicorn [projectname].wsgi:application -b 127.0.0.1:[port number]
Możesz użyć opcji
--env
, aby ustawić ścieżkę ładowania ustawieńgunicorn --env DJANGO_SETTINGS_MODULE=[projectname].settings [projectname].wsgi
lub uruchom jako proces demona za pomocą opcji
-D
Po pomyślnym uruchomieniu gunicorn w konsoli pojawią się następujące wiersze
Starting gunicorn 19.5.0
Listening at: http://127.0.0.1:[port number] ([pid])
....
(inne dodatkowe informacje o serwerze gunicorn)
Wdrażanie za pomocą Heroku
Pobierz Heroku Toolbelt .
Przejdź do katalogu głównego źródeł aplikacji Django. Będziesz potrzebował tk
Wpisz
heroku create [app_name]
. Jeśli nie podasz nazwy aplikacji, Heroku losowo ją wygeneruje. Twój adres URL aplikacji tohttp://[app name].herokuapp.com
Utwórz plik tekstowy o nazwie
Procfile
. Nie umieszczaj rozszerzenia na końcu.web: <bash command to start production server>
Jeśli masz proces roboczy, możesz go również dodać. Dodaj kolejny wiersz w formacie:
worker-name: <bash command to start worker>
Dodaj wymagania.txt.
- Jeśli używasz środowiska wirtualnego, uruchom
pip freeze > requirements.txt
- W przeciwnym razie uzyskaj wirtualne środowisko! . Możesz także ręcznie wyświetlić listę potrzebnych pakietów Pythona, ale nie zostaną one omówione w tym samouczku.
Czas na wdrożenie!
-
git push heroku master
Heroku potrzebuje repozytorium git lub folderu dropbox do wdrażania. Możesz również skonfigurować automatyczne przeładowywanie z repozytorium GitHub na
heroku.com
, ale nie omówimy tego w tym samouczku.-
heroku ps:scale web=1
Skaluje to liczbę „dynos” do jednego. Możesz dowiedzieć się więcej o dynos tutaj.
-
heroku open
lub przejdź dohttp://app-name.herokuapp.com
Wskazówka:
heroku open
otwiera adres URL twojej aplikacji heroku w domyślnej przeglądarce.-
Dodaj dodatki . Musisz skonfigurować aplikację Django do łączenia się z bazami danych udostępnianymi w Heroku jako „dodatki”. Ten przykład nie obejmuje tego, ale inny przykład jest w trakcie wdrażania baz danych w Heroku.
Proste zdalne wdrożenie fabfile.py
Fabric to biblioteka Pythona (2.5–2.7) i narzędzie wiersza polecenia do usprawnienia korzystania z SSH do wdrażania aplikacji lub zadań administracyjnych w systemie. Pozwala wykonywać dowolne funkcje Pythona za pomocą wiersza poleceń.
Zainstaluj materiał za pomocą pip install fabric
Utwórz fabfile.py
w swoim katalogu głównym:
#myproject/fabfile.py
from fabric.api import *
@task
def dev():
# details of development server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def release():
# details of release server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def run():
with cd('path/to/your_project/'):
with prefix('source ../env/bin/activate'):
# activate venv, suppose it appear in one level higher
# pass commands one by one
run('git pull')
run('pip install -r requirements.txt')
run('python manage.py migrate --noinput')
run('python manage.py collectstatic --noinput')
run('touch reload.txt')
Aby uruchomić plik, po prostu użyj polecenia fab
:
$ fab dev run # for release server, `fab release run`
Uwaga: nie możesz skonfigurować kluczy ssh dla github i po prostu ręcznie wpisać login i hasło, podczas gdy fabfile działa tak samo z kluczami.
Korzystanie z szablonu startowego Heroku Django.
Jeśli planujesz hostować swoją stronę Django na Heroku, możesz rozpocząć swój projekt za pomocą szablonu startowego Heroku Django:
django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile YourProjectName
Posiada gotową do produkcji konfigurację plików statycznych, ustawień bazy danych, Gunicorn itp. Oraz Ulepszenia funkcji statycznego wyświetlania plików Django za pośrednictwem WhiteNoise. Pozwoli ci to zaoszczędzić czas, wszystko jest gotowe do hostowania na Heroku, po prostu zbuduj swoją stronę internetową na szczycie tego szablonu
Aby wdrożyć ten szablon na Heroku:
git init
git add -A
git commit -m "Initial commit"
heroku create
git push heroku master
heroku run python manage.py migrate
Otóż to!
Instrukcje wdrażania Django. Nginx + Gunicorn + Supervisor on Linux (Ubuntu)
Trzy podstawowe narzędzia.
- nginx - darmowy, otwarty serwer HTTP o wysokiej wydajności i zwrotny serwer proxy o wysokiej wydajności;
- gunicorn - „Zielony jednorożec” to serwer HTTP Python WSGI dla systemu UNIX (potrzebny do zarządzania serwerem);
- supervisor - system klient / serwer, który pozwala użytkownikom monitorować i kontrolować wiele procesów w systemach operacyjnych typu UNIX. Używany, gdy aplikacja lub system ulega awarii, ponownie uruchamia django / celery / celery cam itp .;
Aby to uprościć, załóżmy, że twoja aplikacja znajduje się w tym katalogu: /home/root/app/src/
i będziemy używać użytkownika root
(ale powinieneś utworzyć osobnego użytkownika dla swojej aplikacji). Również nasze środowisko wirtualne będzie znajdować się w /home/root/app/env/
path.
NGINX
Zacznijmy od nginx. Jeśli nginx nie jest jeszcze zainstalowany na komputerze, zainstaluj go za pomocą sudo apt-get install nginx
. Później musisz utworzyć nowy plik konfiguracyjny w katalogu nginx /etc/nginx/sites-enabled/yourapp.conf
. Jeśli istnieje plik o nazwie default.conf
- usuń go.
Poniżej kod do pliku conf nginx, który spróbuje uruchomić twoją usługę przy użyciu pliku gniazda; Później będzie konfiguracja gunicorn. Plik gniazda służy tutaj do komunikacji między nginx a gunicorn. Można to również zrobić za pomocą portów.
# your application name; can be whatever you want
upstream yourappname {
server unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}
server {
# root folder of your application
root /home/root/app/src/;
listen 80;
# server name, your main domain, all subdomains and specific subdomains
server_name yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
charset utf-8;
client_max_body_size 100m;
# place where logs will be stored;
# folder and files have to be already located there, nginx will not create
access_log /home/root/app/src/logs/nginx-access.log;
error_log /home/root/app/src/logs/nginx-error.log;
# this is where your app is served (gunicorn upstream above)
location / {
uwsgi_pass yourappname;
include uwsgi_params;
}
# static files folder, I assume they will be used
location /static/ {
alias /home/root/app/src/static/;
}
# media files folder
location /media/ {
alias /home/root/app/src/media/;
}
}
GUNICORN
Teraz nasz skrypt GUNICORN, który będzie odpowiedzialny za uruchamianie aplikacji django na serwerze. Pierwszą rzeczą jest instalacja gunicorn w środowisku wirtualnym za pomocą pip install gunicorn
.
#!/bin/bash
ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/root/app/env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name root \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
aby móc uruchomić skrypt startowy gunicorn, musi mieć włączony tryb wykonywania
sudo chmod u+x /home/root/app/src/gunicorn_start
teraz będziesz mógł uruchomić serwer gunicorn za pomocą ./gunicorn_start
KIEROWNIK
Jak powiedziano na początku, chcemy, aby nasza aplikacja została uruchomiona ponownie, gdy przełożony nie powiedzie się. Jeśli superwizor nie jest jeszcze zainstalowany na serwerze, zainstaluj sudo apt-get install supervisor
.
Najpierw zainstaluj nadzorcę. Następnie utwórz plik .conf
w katalogu głównym /etc/supervisor/conf.d/your_conf_file.conf
zawartość pliku konfiguracyjnego:
[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true
Krótkie streszczenie [program:youappname]
jest wymagane na początku, będzie to nasz identyfikator. stdout_logfile
to plik, w którym będą przechowywane dzienniki, zarówno dostępu, jak i błędów.
Po wykonaniu tej czynności musimy powiedzieć naszemu przełożonemu, że właśnie dodaliśmy nowy plik konfiguracyjny. Aby to zrobić, istnieje inny proces dla różnych wersji Ubuntu.
W przypadku Ubuntu version 14.04 or lesser
, po prostu uruchom następujące polecenia:
sudo supervisorctl reread
-> sudo supervisorctl reread
czyta wszystkie pliki konfiguracyjne w katalogu superwizora powinno to zostać wydrukowane: twoja nazwa aplikacji: dostępna
sudo supervisorctl update
-> aktualizuje superwizora do nowo dodanych plików konfiguracyjnych; powinien wydrukować swoją nazwę aplikacji: dodana grupa procesów
W przypadku Ubuntu 16.04
Run:
sudo service supervisor restart
i aby sprawdzić, czy aplikacja działa poprawnie, po prostu uruchom
sudo supervisorctl status yourappname
Powinno to wyświetlić:
yourappname RUNNING pid 18020, uptime 0:00:50
Aby zobaczyć demonstrację tej procedury na żywo, przejrzyj ten film .
Wdrażanie lokalne bez konfigurowania apache / nginx
Zalecany sposób wdrożenia produkcyjnego wymaga użycia Apache / Nginx do obsługi zawartości statycznej. Dlatego też, gdy DEBUG
jest fałszywy, a zawartość nośnika nie ładuje się. Możemy jednak załadować zawartość statyczną podczas wdrażania bez konieczności konfigurowania serwera Apache / Nginx dla naszej aplikacji przy użyciu:
python manage.py runserver --insecure
Jest to przeznaczone wyłącznie do wdrażania lokalnego (np. LAN) i nigdy nie powinno być używane w środowisku produkcyjnym i jest dostępne tylko wtedy, gdy aplikacja staticfiles
znajduje się w ustawieniu INSTALLED_APPS
projektu.