Меню Рубрики

Установка django на vds

Предложение от 8host.com

Развёртывание локального приложения Django на VPS

Для выполнения данного руководства нужен предварительно настроенный сервер (Debian 7 или Ubuntu).

Кроме того, необходимо подготовить сервер к размещению приложений Django, настроив сервер баз данных, веб-сервер и виртуальную среду (virtualenv). Об этом можно прочесть здесь.

1: Обновление пакетов

Прежде чем приступить к развёртыванию, нужно обновить список пакетов системы. Подключитесь к VPS и запустите:

sudo apt-get update
sudo apt-get upgrade

Первая команда загрузит все доступные обновления для пакетов, управляемых при помощи apt-get. Вторая команда установит обновления. После запуска этих команд система попросит подтвердить установку загруженных пакетов; для этого нажмите y и enter.

2: Настройка virtualenv

Примечание: Если вы выполнили все предварительные требования, виртуальное окружение уже должно быть настроено. В таком случае переходите к следующему разделу.

Виртуальное окружение, или virtualenv, необходимо для хранения индивидуальных пакетов Python и файлов проекта.

Примечание: Если вы не хотите использовать virtualenv, просто создайте каталог для проекта и перейдите к следующему разделу.

Чтобы создать виртуальное окружение, запустите следующую команду, указав путь к своему проекту:

Теперь нужно включить virtualenv, а затем установить в окружение Django и другие пакеты при помощи pip. Для этого используйте команды:

source /opt/myproject/bin/activate
pip install django

После этого нужно создать базу данных для проекта.

3: Создание БД

Примечание: В данном руководстве используется PostgreSQL. Если вы используете другую СУБД, обратитесь к её документации.

Чтобы создать БД, запустите PostgreSQL:

Командная строка терминала покажет:

Запустите следующую команду, заменив условное имя БД своим именем:

Затем создайте пользователя для этой БД:

После этого программа запросит некоторые данные: имя нового пользователя, пароль и его подтверждение и т.п. На последние три вопроса нужно ответить n и нажать enter; это ограничит права пользователя. Откройте интерфейс командной строки PostgreSQL:

Затем передайте новому пользователю права на БД:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

4: Настройка VPS

Создайте новый конфигурационный файл для сайта.

Примечание: В руководстве используется веб-сервер NGINX. Если вы используете другой веб-сервер, обратитесь за инструкциями к его документации.

Запустите следующую команду, которая создаст конфигурационный файл и откроет его для редактирования. Замените условное имя проекта myproject именем своего проекта:

sudo nano /etc/nginx/sites-available/myproject

Затем внесите в файл такой код:

server <
server_name yourdomainorip.com;
access_log off;
location /static/ <
alias /opt/myenv/static/;
>
location / <
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P ‘CP=»ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV»‘;
>
>

Сохраните и закройте файл. Этот код настраивает NGINX для обслуживания контента из каталога yourdomainorip.com/static/ проекта Django. Любой запрос к yourdomainorip.com будет передан на локальный хост через порт 8001 (где запущен Gunicorn или другой сервер приложений). Остальные настройки передают имя хоста и IP запроса серверу Gunicorn; без этих строк IP-адрес запросов будет 127.0.0.1, а именем хоста будет имя VPS.

Теперь нужно создать символьную ссылку в каталоге /etc/nginx/sites-enabled, указывающую на этот конфигурационный файл. Так веб-сервер NGINX распознаёт включенные сайты. Перейдите в этот каталог:

sudo ln -s ../sites-available/myproject

sudo service nginx restart

Во время перезагрузки может возникнуть следующая ошибка:

server_names_hash, you should increase server_names_hash_bucket_size: 32

Её можно исправить с помощью файла /etc/nginx/nginx.conf. Откройте этот файл и раскомментируйте следующую строку:

Теперь можно переместить файлы проекта на сервер.

5: Перемещение локального проекта Django на сервер

Здесь есть несколько вариантов: FTP, SFTP, SCP, Git, SVN; рассмотрим использование Git для перемещения локального проекта на виртуальный выделенный сервер.

Найдите каталог, в котором находится virtualenv (или каталог, в котором размещён проект) и откройте его:

В нём создайте каталог для хранения файлов проекта:

Конечно, сначала может показаться, что два каталога с одинаковыми именами — это слишком много, но на самом деле в этом случае просто совпадают имена виртуального окружения и проекта.

Перейдите в новый каталог:

Если проект уже находится в репозитории Git, просто убедитесь в том, что сообщения о коммитах для кода были отправлены, а файлы перемещены. Для этого используйте следующую команду локально (для Mac — в терминале, для ПК — в командной строке).

Если на экране не появилось файлов, значит, все файлы отправлены. Подключитесь к серверу и установите Git.

На все вопросы программы нажмите yes и enter. После установки Git переместите файлы проекта в созданный ранее каталог:

git clone https://webaddressforyourrepo.com/path/to/repo .

При использовании Github или Bitbucket для размещения Git используйте кнопку clone.

Примечание: Эта команда обязательно должна заканчиваться символом точки. В противном случае Git создаст каталог с репозиторием в каталоге проекта.

Читайте также:  Установки компрессорные передвижные давлением 9800 кпа

Вместо Git для передачи файлов в каталог проекта можно использовать FTP или другой протокол обмена.

6: Установка и настройка сервера приложений

Примечание: Если вы выполнили все предварительные требования, пропустите этот раздел.

Теперь нужно установить сервер приложений и настроить его для прослушивания порта 8001. В руководстве используется Gunicorn. Чтобы установить этот сервер, включите виртуальное окружение:

После завершения установки направьте запросы к домену или ip на порт 8001:

gunicorn_django —bind yourdomainorip.com:8001

Затем нажмите ctrl + z and и введите bg, чтобы перевести процесс в фоновый режим (это опционально).

Примечание: Подробнее о настройке Gunicorn можно прочитать здесь.

7: Настройка приложения

Теперь нужно настроить производство приложения. Для этого нужно отредактировать файл settings.py приложения Django.

sudo nano /opt/myproject/myproject/settings.py

Примечание: Путь к этому файлу может отличаться; в случае необходимости отредактируйте путь.

В этом файле установите следующее значение для опции DEBUG:

Эта настройка будет выводить пользователям страницы ошибок 404 и 500 вместо станиц с отладочной информацией.

Затем отредактируйте настройки БД, указав имя БД, имя пользователя и пароль:

DATABASES = <
‘default’: <
‘ENGINE’: ‘django.db.backends.psycopg2’, # Add ‘postgresql_psycopg2’, ‘mysql’, ‘sqlite3’ or ‘oracle’.
‘NAME’: ‘mydb’, # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
‘USER’: ‘myuser’,
‘PASSWORD’: ‘password’,
‘HOST’: », # Empty for localhost through domain sockets or ‘127.0.0.1’ for localhost through TCP.
‘PORT’: », # Set to empty string for default.
>
>

После этого отредактируйте настройки статических файлов:

STATIC_ROOT = ‘/opt/myproject/static/’
STATIC_URL = ‘/static/’

Сохраните и закройте файл. Теперь нужно только собрать статические файлы. Перейдите в каталог manage.py, в котором хранится скрипт, и запустите:

python manage.py collectstatic

Эта команда соберет статические файлы в каталог, заданный ранее в файле settings.py.

Теперь приложение развёрнуто и находится на стадии производства.

источник

Установка Django-проекта на VPS (centOS 7) [Для новичков]

Хочу поделиться практическим опытом по установке готового проекта на Django на VPS от Reg.ru. Данное руководство рассчитано на новичков, оно содержит ряд не самых лучших решений, но с ним вы сможете запустить своей проект на Django в течение часа.

Инструкция не содержит настроек безопасности. Она была создана на базе англоязычных инструкций и боли, много боли (ссылки в конце статьи). Инструкция актуальна для настроек: centOS 7, Django 1.9.2 и Python 3.4.3

Ремарка: благодарю Филиппа Торчинского за предоставление продакт-версии PyCharm для создания проекта на Django.

Что у нас есть

Мы имеем готовый проект на Django в среде разработки PyCharm для локального компьютера. Т.е. settings.py имеет базу данных sqlite3, битые пути к статите и пустой ALLOWED_HOSTS. Это нормально.

Мы начинаем

Этап 1

Покупаем доменное имя на сайте Reg.ru. Стандартная процедура, ничего необычного.

Покупаем на Reg.ru VPS H-XEN-2 с виртуализацией XEN. Это нужно для того, чтобы не иметь проблем с конфигурацией ядра и распределением нагрузки. В качестве операционной системы выбираем CentOS 7. Тариф достаточно слабый, поэтому лучу взять её, нежели Ubuntu. Debian не берется, так как его сложнее настроить.

После покупке VPS нам придет письмо cо всеми данными. Там же нам предложат связать VPS и домен. В качестве решения вам предложат использовать панель управления DNSAdmin. Однако по какой-то причине эта штука не работает, поэтому пропускаем и переходим в панель управления Reg.ru в настройки вашего доменного имени.

— Ваш домен — DNS-Сервера. Ставим настройки согласно скриншоту:

— Ваш домен — Управление зоной — добавить запись «A» Например: (Ip-меняем на ваш)

Готово, мы привязали доменное имя к хостингу. На обновление потребуется какое-то время.

Этап 2

Для работы с CentOS 7 нам понадобится программа: PuTTY. Скачиваем запускам и приступаем к работе.

Первичная настройка хостига.

Для начала нам нужно будет добавить еще одного пользователя и назначить для него права на изменения конфигов. Это делается для того, чтобы вы по ошибке через root-пользователя не сломали всю систему.

1) подключаемся через PuTTY через root-пользователя и набираем следующие команды:

— добавляем юзера: adduser habrauser

— добавляем юзеру пароль: passwd habrauser

— добавляем пользователю habrauser права: gpasswd -a habrauser wheel

— отключаемся от сеанса под root-пользователем: exit

После этого мы сможем запускать команды пользователем habrauser от имени администратора через приставку sudo

2) Подключаемся через PuTTY под пользователем habrauser и набираем следующие команды:

— Ставим тайм-зону серверу: sudo timedatectl set-timezone Europe/Moscow

— Подтверждаем: sudo timedatectl

— Ставим синхронизатор времени: sudo yum install ntp

Читайте также:  Установка подвесного унитаза смета

— Ставим автозапуск синхронизатора:
sudo systemctl start ntpd
sudo systemctl enable ntpd

Этап 3

— Ставим необходимые дополнительные пакеты для centOS 7

sudo yum install epel-release

sudo yum install python-pip python-devel postgresql-server postgresql-devel postgresql-contrib gcc nginx

Теперь мы сможем использовать pip, чтобы ставить необходимые питон пакеты.

— Ставим редактор
sudo yum install nano

sudo postgresql-setup initdb

— Запускаем сервис PostgreSQL:

sudo systemctl start postgresql

— Открываем конфигурационный файл:

sudo nano /var/lib/pgsql/data/pg_hba.conf

— Редактируем так, чтобы база работала с авторизированными пользователями.

# TYPE DATABASE USER ADDRESS METHOD

# «local» is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5

Чтобы сохранить файл, нам нужно нажать ctrl+O, далее enter и yes. Чтобы выйти нажимаем ctrl+X.

sudo systemctl restart postgresql

sudo systemctl enable postgresql

Создание базы данных PostgreSQL:

— создаем базу данных habradb:

— создаем пользователя баз данных:

CREATE USER user WITH PASSWORD ‘password’;

— даем пользователю user права на использование базы данных habradb:

GRANT ALL PRIVILEGES ON DATABASE habradb TO user;

— завершаем сеанс работы с базой:

Этап 4

Наш проект рассчитан на использование Python3.4.3, поэтому мы будем ставить в виртуальное окружение именно его.

sudo yum install python34-devel

— ставим виртуальное окружение:

sudo pip install virtualenv

— создаем в корне системы папку проекта apifolder (укажите такое название, которое у вас используется в самом проекте в PyCharm):

-создаем виртуальное окружение djangoen с питоном python 3.4.3

mkvirtualenv -p /usr/bin/python3.4 djangoen

p.s. чтобы правильно указать путь к питону, можно использовать команду which python3.4

— активируем виртуальное окружение и входим в него

— ставим джангу, юникорн и обработчик базы

pip install django gunicorn psycopg2

Чтобы поставить другую версию django, используйте команду: pip install django==1.9.2 #указав нужную версию

Этап 5

начинаем создавать наш проект Django:

— Создаем проект Django в текущей папке (имя проекта то же самое, что и имеет мое в PyCharm):

django-admin.py startproject apifolder . # точка говорит нам о том, что мы ставим в текущую папку, в данном случае в папку apifolder.

— Копируем наш проект с локальной машины.

По идее проект нужно пушами копировать с вашего репозитория git, но если вы не знаете, что такое git, пуш и так далее, то есть более примитивный способ.

  • Подключаемся вашему серверу через SFTP: инструкция
  • Открываем папку home/habrauser/apifolder
  • Открываем ваш проект на локальной машине
  • Обычным перетаскиваем дополняем и заменяем файлы созданного ранее проекта apifolder, вашим проектом c локальной машины (его имя также должно быть apifolder, либо то, что вы задали ранее).

— Открываем файл settings.py и вносим в него изменения

Либо можно изменять его конфиг в IDE, а потом обновить его через SFTP.

DATABASES = <
‘default’: <
‘ENGINE’: ‘django.db.backends.postgresql’, # так должно быть с версии django 1,8 и выше.
‘NAME’: ‘habradb’,
‘USER’: ‘user’,
‘PASSWORD’: ‘password’,
‘HOST’: ‘localhost’,
‘PORT’: »,
>
>

#Предполагается, что у вас папка static будет лежать в корне проекта, а не в каждом отдельном приложении.

STATIC_URL = ‘/static/’
MEDIA_URL = ‘/media/’
STATIC_ROOT = os.path.join(BASE_DIR, «static»)
MEDIA_ROOT = os.path.join(BASE_DIR, «media»)
STATICFILES_DIRS = (
)

#Это пригодится вам для отладки. ALLOWED_HOSTS в самом конце нужно будет сменить на ваш домен.

— Ставим релевантные пакеты. Например, в моем случае, чтобы проект поддерживал модель ImageFiled, мне нужно было установить Pillow

sudo yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel

— Проверяем базу данных, делаем миграцию (Статику пока собрать не получится, так как у нас её еще ничего не отдает).

/apifolder
./manage.py makemigrations
./manage.py migrate

Иногда эти команды не работают, и нужно использовать: python manage.py makemigrations
итд

Также можно создать пользователя

— Запускаем проект и проверяем его работу:

./manage.py runserver 0.0.0.0:8000

Сайт будет доступен по адресу: server_domain_or_IP:8000

— чекаем все моменты и делаем отладку. Если на этом этапе не проверить все странички, админку и прочее, то в дальнейшем может появиться много проблем. Чаще всего забываются какие-то мелочи: пакеты, url, локальные конфиги.

Этап 6

sudo nano /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=habrauser
Group=nginx
WorkingDirectory=/home/habrauser/apifolder
ExecStart=/home/habrauser/apifolder/djangoen/bin/gunicorn —workers 3 —bind unix:/home/habrauser/apifolder/apifolder.sock apifolder.wsgi:application

— запускаем юникорн и делаем ему автозапуск:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

sudo nano /etc/nginx/nginx.conf

sudo nano /etc/nginx/nginx.conf

server <
listen 80 default_server;

server <
listen 80;
server_name example.ru www.example.ru;

Читайте также:  Установки для вдавливания шпунта ларсен

location = /favicon.ico < access_log off; log_not_found off; >
location /static/ <
root /home/habrauser/apifolder;
>

location / <
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/habrauser/apifolder/apifolder.sock;
>
>

sudo usermod -a -G habrauser nginx

— проверяем конфиг nginx (должно отдать две успешные строки):

sudo systemctl start nginx

sudo systemctl enable nginx

Этап 7

Основная часть работы сделана, теперь нам нужно собрать статику и перезагрузить машину:

— ставим в файлике setting.py ALLOWED_HOSTS = ваш домен, и DEBUG = False

— перезагружаем сервер: reg.ru — мои хостинг и услуги — ваш VPS — Перезагрузить сервер

Иногда одного раза не хватает (не все начинает работать так, как нужно), поэтому приходится грузить несколько раз.

источник

BreakingCode

Развертывание django на VDS используя Apache, mod_wsgi, Django, MySQL, Virtualenv в Ubuntu\Debian

Инструкция запуска django-сайта на VDS\VPS используя Apache, mod_wsgi, Django, MySQL, Virtualenv в Ubuntu или Debian.
Использовал на таких версиях ПО: Ubuntu 14.04.4 LTS \ Debian 8.1, Apache 2.4.7, Python 2.7.6

Добавляем пользователя, от лица которого будем развертывать сервер:

Вводим пароль, остальные данные пользователя можно не заполнять.
Переходим в папку пользователя, создаем виртуальное окружение, активируем его, устанавливаем все необходимые пакеты:

Создаем папку с проектом и создаем джанго проект или копируем проект с гита:

Получилась такая структура папок:
/home/u2django/mysite/static
/home/u2django/mysite/media
/home/u2django/mysite/manage.py
/home/u2django/mysite/project/settings.py
/home/u2django/mysite/logs

Пока отложим работу с файлами сайта, займемся настройкой апача. Можно выйти из окружения командой deactivate.
В каталоге /etc/apache2/sites-available создаем файл НАЗВАНИЕ_САЙТА.conf :

Добавим в этот файл следующий код:

В самом начале оставил закоменченным WSGIPythonPath. Он нужен если мы хотим использовать виртуальное окружение и не хотим использовать режим демона. А режим демона нужен для работы нескольких джанго сайтов. Если это не нужно, то можно удалить параметры WSGIDaemonProcess и WSGIProcessGroup.

Перейдем в каталог /home/u2django/mysite/ и создадим там файл django.wsgi , и добавим в этот файл следующий код:

Так как мы все делали от рута, настроим владельцем проекта добавленного в начале пользователя. Право на чтение для www-data необходимо для корректной отдачи статики.

Включаем виртуальный хост, и перезагрузка Apache

Далее заходим на сайт и проверяем что у нас вышло. Т.к. мы еще не сделали миграции, не подключили бд то скорее все будет ошибка 500. Более подробно об ошибке можно найти тут /home/u2django/mysite/logs в файле error_log.
Если при заходе на сайт висит ошибка доступа 403, то скорее всего что-то не так написали в файле mysite.conf или плохо настроили права chown для пользователя. Надо перепроверить и перезагрузить апач.

Далее создаем базу, подключаем ее к проекту, делаем миграции.

Для создания базы зайдем в MySql:

И создадим новую базу данных и нового пользователя, и добавим пользователю права пользоваться базой:

После миграций необходимо выполнить collectstatic — собрать все статичные файлы в папку mysite/staic/

Проверяем сайт. Должно все работать. Если выпадает ошибка 500 ну или какая другая, то смотрим файл в логах
/home/u2django/mysite/logs/error_log. Скорее всего там сказано в чем проблема.

Ошибки\Проблемы

при выполнении service apache2 reload вываливается ошибка:
Job for apache2.service failed. See ‘systemctl status apache2.service’ and ‘journalctl -xn’ for details.

Как тут и сказано следует выполнить команду:

Среди прочих строчек может присутствовать такая:
Invalid command ‘WSGIScriptAlias’, perhaps misspelled or defined by a module not included in the serv…iguration

Нужно включить wsgi mod в Apache:

Если при этом появляется ошибка ERROR: Module mod-wsgi does not exist!
Выполнить следующие команды:

Если включение a2enmod wsgi не проканывает, то зайти в папку /etc/apache2/mods-available и посмотреть есть ли там файл wsgi.load, если нет то создать. В файле написать:

предварительно удостоверившись что файл /usr/lib/apache2/modules/mod_wsgi.so существует. У меня вместо него был файл mod_wsgi.so-2.7, поэтому в файле wsgi.load должна быть такая строка:

Еще при выполнении systemctl status apache2.service Среди прочих строчек может присутствовать такая:
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
— значит чем-то занят 80-й порт.
нужно выполнить команду:

если она покажет что-то вроде:

т.е. строки содержащие порт :80.
То нужно убить процессы занимающие этот порт:

Конечно удостоверившись что эти процессы точно не нужны. В данном случае мы не используем nginx.

Ошибка при добавлении файла-картинки к материалу:

OSError at /admin/core/news/add/
[Errno 13] Permission denied: ‘/home/u2django/mysite/media/news/images/image.jpg’

Значит нет прав на добавление файла в нужную папку. Дадим 770 всем папкам в media:

За основу взята статья и видеоурок и еще немного отсюда.

источник

Добавить комментарий

Adblock
detector