Разполагането на Django в производствена среда за първи път може да бъде обезсърчаваща задача. Често разработчиците ще стартират екземпляр на Linux в облака за тяхната производствена среда.
В този урок ще ви покажем как да стартирате Django в производство, като използвате нов екземпляр на Ubuntu.
Ще приемем, че цялото ви редактиране се извършва на сървъра и че изпълнявате командите като root.
За този урок използваме Ubuntu 18.04.2 LTS
Създаване на потребител за проекта
Ще създадем нов потребител, django, за стартиране на нашето приложение. Това осигурява малка полза за сигурността.
За да създадете новия потребител:
useradd -m djangoThe -m флаг
създава нова домашна директория: / home / django.
Настройка на средата на Python
Първо, първо: актуализирайте списъците си с apt-get update
Ubuntu 18.04 кораби с Python 3.6, но не се доставя с pip, което ще трябва да инсталирате вашите зависимости.
apt-get инсталирайте python3-pipСега, когато имаме pip, нека създадем виртуална среда. Виртуалната среда помага да се избегнат конфликти с Python пакетите, използвани от Linux.
pip3 инсталирайте virtualenvcd / home / django
virtualenv env
Сега сте създали виртуален Python 3.6 среда в / home / django / env
папка, която може да се активира със следната команда: Сега, когато имаме pip, нека създадем виртуална среда. Виртуалната среда помага да се избегнат конфликти с Python пакетите, използвани от Linux.
Настройване на проекта Django
За този урок ще създадем временен проект на Django. Ако разполагате свой собствен код, вместо това ще трябва да го качите на сървъра. Ще работим в домашната директория / home / django.Настройване на проекта Django
Нека създадем проекта Django:
cd / home / djangoизточник env / bin / активиране
pip инсталирайте django
django-admin startproject урок
Проверете дали нещата работят, като изпълните:
CD урокpython управлява.py runserver 0.0.0.0:80
Нашият екземпляр на Ubuntu работи на 178.128.229.34, така че ще се свържем с http: // 178.128.229.34.Проверете дали нещата работят, като изпълните:
Вероятно ще видите нещо подобно:
За да поправим това, ще редактираме / home / django / tutorial / tutorial / settings.py
. намирам ALLOWED_HOSTS = []
и го настройте на:
„178.128.229.34 '# заменете това с IP адреса на вашия сървър
или името на домейна, което използвате за свързване
]
Сега да се върнем към http: // 178.128.229.34:
Страхотен! Ние сме онлайн!
Настройване на PostgreSQL, базата данни
По подразбиране Django използва база данни SQLite3. За съжаление, SQLite3 не позволява едновременни записи. Ако вашият уебсайт някога има само един потребител, който редактира данни, а останалите посетители просто четат страници, това може да е подходящо. Но ако имате няколко души, които редактират данни едновременно, вероятно ще искате да използвате различен бекенд.
Общият избор са PostgreSQL и Mysql. Ще използваме PostgreSQL за този урок.
Започнете с инсталиране на PostgreSQL:
apt-get инсталирайте postgresqlСлед това стартирайте psql, черупка на базата данни. По подразбиране само потребителят на postgres може да се свърже с базата данни, така че първо ще трябва да се удостоверим като този потребител:
su - postgrespsql
След това се нуждаем от база данни и потребител за достъп до нея:
създаване на урок за база данни;създайте потребител tutorial_user с криптирана парола 'tutorial_password';
предоставяне на всички привилегии на урок за база данни на tutorial_user;
Сега въведете exit или натиснете два пъти Ctrl-D: веднъж, за да излезете от psql, и веднъж, за да излезете от черупката на postgresuser.
Страхотен! Сега разполагаме с нашата база данни и потребител. Нека проверим дали можем да влезем в нашата база данни.
Ще се опитаме да отворим черупка на базата данни, този път влизайки в базата данни, която създадохме с потребителя, който създадохме:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WВ подканата въведете паролата, която създадохме: tutorial_password.
Ако видите черупка на база данни, постигнахте успех. Ако видите грешки, ще трябва да се върнете назад и да разберете какво не е наред.
Свързване на Django към базата данни
За да свържем Django с базата данни, първо трябва да инсталираме адаптера Python PostgreSQL:
pip инсталирайте psycopg2-двоичен файлТогава, нека се отворим / home / django / tutorial / tutorial / settings.py
и конфигурирайте връзката.
Намерете текущата си връзка с база данни; ако не сте го модифицирали, може да изглежда по следния начин:
БАЗИ ДАННИ ='по подразбиране':
'ENGINE': 'django.db.бекендове.sqlite3 ',
„ИМЕ“: os.път.присъединяване (BASE_DIR, 'db.sqlite3 '),
За да се свържем с PostgreSQL, ще го заменим със следното:
БАЗИ ДАННИ ='по подразбиране':
'ENGINE': 'django.db.бекендове.postgresql_psycopg2 ',
'NAME': 'урок',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
„HOST“: „127.0.0.1 ',
„ПОРТ“: „5432“,
Нека тестваме връзката:
cd / home / django / tutorialpython управлява.py runserver 0.0.0.0:80
Бихте могли отново да посетите вашия уебсайт (за нас на http: // 178.128.229.34 /, но заменете това с вашия IP или име на хост).
Ако всичко е наред, можем да продължим.
Настройване на nginx, уеб сървъра
Когато тичаш python управлява.py runserver
, използвате сървъра за разработка на Django. Това е чудесно за локално развитие, но както при SQLite3, всъщност не е подходящо за производство.
Общият избор за производствени уеб сървъри са nginx и Apache. За този урок ще използваме nginx.
Инсталирайте nginx, като използвате следното:
apt-get инсталирайте nginxСега, ако всичко е работило добре, nginx трябва да работи на порт 80. Продължете и проверете вашия уебсайт; трябва да видиш:
Страхотно, така че nginx работи и работи! След това ще трябва да го конфигурираме за комуникация с Django. Отворете конфигурационния файл nginx, намиращ се на / etc / nginx / sites-available / default. Нека заменим файла със следното:
django нагоре по веригатасървър 127.0.0.1: 8000;
сървър
слушайте 80;
местоположение /
try_files $ uri @send_to_django;
местоположение @send_to_django
proxy_set_header Хост $ http_host;
proxy_redirect изключен;
proxy_pass http: // django;
Тествайте конфигурационния файл, като стартирате nginx -t. Ако всичко е наред, можем да презаредим, като стартираме nginx -s reload.
Сега, ако посетите вашия сайт, ще видите следното:
Всеки път, когато видите това, това означава, че nginx не е успял да предаде заявката на процеса нагоре. В момента това е така, защото се опитва да предаде заявката на 127.0.0.1: 8000, но няма процес за слушане на този адрес.
Нека да стартираме сървъра за разработка на Django и да опитаме отново:
cd / home / django / tutorialpython управлява.py runserver 127.0.0.1: 8000
и отново посетете уебсайта си. Трябва да видите вашето приложение Django.
Монтиране на Django на Gunicorn
Не забравяйте, че не искаме да използваме нашия сървър за разработка на Django в производството. Вместо това ще използваме сървър за интерфейс на уеб сървър (WSGI), за да стартираме Django. Nginx ще предаде заявката на WSGI сървъра, който изпълнява Django.
Общият избор за WSGI сървър е Gunicorn и uWSGI. За този урок ще използваме Gunicorn.
Нека инсталираме Gunicorn:
pip инсталирайте gunicornСлед това можем да започнем gunicorn, както следва:
cd / home / django / tutorialурок за gunicorn.wsgi
Сега трябва да можете да посетите уебсайта си и да видите как приложението ви работи правилно.
Стартиране на Gunicorn като услуга
Има няколко проблема с пускането на gunicorn като този:
- Ако затворим сесията на SSH, процесът на оръжието ще спре.
- Ако сървърът се рестартира, процесът на gunicorn няма да започне.
- Процесът се изпълнява като root. Ако хакерите намерят експлойт в кода на нашето приложение, те ще могат да изпълняват команди като root. Ние не искаме това; но затова създадохме djangouser!
За да разрешим тези проблеми, ще стартираме Gunicorn като системна услуга.
cd / home / djangomkdir bin
cd / home / django / bin
докоснете старт сървър.ш
В стартовия сървър.ш:
cd / home / djangoизточник env / bin / активиране
CD урок
урок за gunicorn.wsgi
Сега можете да тествате скрипта:
cd / home / django / binbash start-server.ш
# посетете уебсайта си, той трябва да работи
Сега създаваме системната услуга за Gunicorn. Създайте / etc / systemd / system / gunicorn.услугата следва:
[Мерна единица]Описание = Gunicorn
След = мрежа.мишена
[Обслужване]
Тип = просто
Потребител = django
ExecStart = / home / django / bin / start-server.ш
Рестартиране = при неизправност
[Инсталирай]
WantedBy = многопотребителски.мишена
Сега, нека активираме услугата и я стартираме
systemctl активира gunicornsystemctl старт gunicorn
В момента трябва да можете да видите уебсайта си.
Можем да изключим gunicorn, както следва:
systemctl стоп gunicornИ трябва да видите 502 Bad Gateway.
И накрая, нека проверим цикъла на зареждане:
systemctl старт gunicornРестартирай сега
Когато машината ви се върне онлайн, трябва да видите, че уебсайтът ви работи.
Статични файлове
Ако посетите администраторския панел на Django на вашия уебсайт на адрес / admin / (за нас това е http: // 178.128.229.34 / admin /), ще забележите, че статичните файлове не се зареждат правилно.
Ще трябва да създадем нова папка за статични файлове:
cd / home / djangomkdir статичен
След това казваме на Django, че трябва да постави статичните файлове, като редактира / home / django / tutorial / tutorial / settings.py и добавяне:
STATIC_ROOT = '/ home / django / static /'Сега можем да съберем статичните файлове:
cd / home / djangoизточник env / bin / активиране
CD урок
python управлява.py collectstatic
И накрая, трябва да кажем на nginx да обслужва тези статични файлове.
Нека отворим / etc / nginx / sites-available / default и добавим следното директно над твоето местоположение / блок:
местоположение / статично /root / home / django;
try_files $ uri = 404;
Целият файл сега трябва да изглежда така:
django нагоре по веригатасървър 127.0.0.1: 8000;
сървър
слушайте 80;
местоположение / статично /
root / home / django;
try_files $ uri = 404;
местоположение /
try_files $ uri @send_to_django;
местоположение @send_to_django
proxy_set_header Хост $ http_host;
proxy_redirect изключен;
proxy_pass http: // django;
Можем да презаредим файла, като използваме nginx -s reload
И вуаля! Сега вашите статични файлове ще работят напълно.
Заключение
В този момент приложението ви Django работи правилно. Ако имате някои специални изисквания, може да се наложи да настроите кеш като Redis или опашка за съобщения като Rabbit MQ. Може да искате да настроите непрекъснато разгръщане, тъй като процедурата за разгръщане може да отнеме известно време.
Друга важна стъпка е да предприемете подходящите стъпки за осигуряване на вашата машина на Ubuntu. В противен случай може да откриете, че сървърът ви се държи неправилно!
Късмет!