Jump to content
XPEnology Community

Установка и настройка Django на Web Station


Recommended Posts

Не нашёл в интернете простого решения вопроса, а именно: Запуск проекта Django на Synology в связке с пакетами Web Station, Apache 2.4 и модулем mod_cgid на последний. Поэтому решил написать свой метод решения данного вопроса.

 

Начнём с того, почему это стало проблемой и почему нужна эта инструкция. Всё потому, что Django официально не поддерживает CGI, ему требуется WSGI, FastCGI, SCGI или AJP. Я не нашёл вменяемого способа как установить вышеуказанные модули на Synology и подключить их к Apache, который используется в Web Station. Если кто подскажет как это сделать без docker, виртуальных машин и установки каких-то неофициальных пакетов, прошу присоединяться к теме.

 

Метод, описанный в данной теме, позволяет использовать CGI как прослойку для запуска встроенного в Django модуля WSGI, то есть дополнительная установка и подключение каких-либо модулей к Apache не требуется, запуск дополнительного веб-сервера через Python3 не требуется и так далее со всеми вытекающими. Но скорость запуска проекта может быть ниже из-за использования CGI вместо стандартного WSGI, надо учитывать.

 

Итак, начнём установку и запуск первого проекта Django на нашем Synology. Для этого идем следующим образом:

1. Устанавливаем пакеты Python3, Apache 2.4 и Web Station из центра пакетов.

2. Подключаемся к серверу по SSH:

ssh -l ЛОГИН -p НОМЕР_ПОРТА АДРЕС_СЕРВЕРА

3. Определяемся где у нас будет находиться проект. По умолчанию, Web Station создаёт папку /volume1/web/, куда можно сразу загружать проект. Но если у вас планируется хостить на сервере более 1 сайта на движках, то лучше создать новую папку внутри указанной выше папки, например, django-sites.

mkdir /volume1/web/django-sites

4. Установим PIP - менеджер пакетов для Python. По умолчанию, он не установлен в DSM.

sudo python3 -m ensurepip

5. Далее мы будем действовать уже в виртуальном окружении Python, чтобы исключить каких-либо конфликтов и не забивать системный Python ненужными ей пакетами. Для этого создадим виртуальное окружение внутри ранее созданной папки и активируем созданное виртуальное окружение

python3 -m venv /volume1/web/django-sites/venv
source /volume1/web/django-sites/venv/bin/activate

6. Если вы всё сделали верно, то увидите перед именем пользователя надпись (venv). Это означает, что вы находитесь в виртуальном окружении, которое мы создали. Теперь установим Django

python3 -m pip install Django

7. Далее перейдём в каталог с проектами и создадим наш первый проект Django под названием, например, first_project

cd /volume1/web/django-sites/
django-admin startproject first_project

8. Проект создан, должна была появиться папка /volume1/web/django-sites/first_project, внутри которой расположены файлы Django. Теперь нам необходимо заставить CGI запускать WSGI и наш проект Django. Знаю, что в PIP есть пакет django-cgi, который позволяет это делать, но моей задачей было запустить Django версии 2.2, а этот пакет требует Django версии 3. Зато нашёл на просторах Github другой проект django-cgi, который работает в теории с любой версией Django (тестировалось на версии 2.2 и 4.0). Так как мы использует Python3, то и файл django.cgi нам нужен именно от этой версии. Скачаем django.cgi и загрузим в наш проект. Я для его скрытности загрузил его чуть глубже, чем можно было бы.

wget https://raw.githubusercontent.com/chibiegg/django-cgi/master/django-python3.cgi -O /volume1/web/django-sites/first_project/first_project/django.cgi

9. Далее отредактируем скачанный файл /volume1/web/django-sites/first_project/first_project/django.cgi любым удобным вам способом. Нам необходимо сделать следующее:

  1. В строке 1 поменять путь к python на python из нашего виртуального окружения
    #!/volume1/web/django-sites/venv/bin/python3

     

  2. Раскомментировать строку 36 и прописать путь к нашему проекту Django

    sys.path.append("/volume1/web/django-sites/first-project")

     

  3. И в строке 97 изменить в переменной среды DJANGO_SETTINGS_MODULE наименование проекта на наше

    os.environ['DJANGO_SETTINGS_MODULE'] = 'first_project.settings'

     

10. Теперь в файле /volume1/web/django-sites/first_project/first_project/settings.py в строке 28 укажем, что сайт может быть открыт под любым доменом. При необходимости, укажите только нужный домен.

ALLOWED_HOSTS = ['*']

11. Далее создадим файл .htaccess в папке /volume1/web/django-sites/first_project/, в котором укажем, что любые запросы должны идти через django.cgi. Содержимое файла должно быть следующим:

RewriteEngine On
RewriteBase /
RewriteRule ^(first_project/django\.cgi/.*)$ - [L]
RewriteRule ^(.*)$ first_project/django.cgi/$1 [L]

12. На этом настройка Django закончена и осталось только настроить Web Station. Поэтому мы можем выйти из виртуального окружения и отключиться от SSH.

deactivate
exit

13. Теперь открываем DSM, далее Web Station, идём на вкладку "Виртуальный хост" и нажимаем Создать. Появится окно создания виртуального хоста. В имя хоста вводим доступный серверу домен, например, test.site.ru. В качестве Внутреннего сервера HTTP выбираем Apache 2.4. Должно получиться вот так:

image.thumb.png.05e73968bf64fd1a17e435559d726add.png

Далее нажимаем ОК и виртуальный хост должен быть создан.

Если всё сделано верно, при переходе на свой домен, вы должны увидеть страницу приветствия Django.

image.thumb.png.243ad3e5d4c41a0b9cc41d1e39d93a47.png

Edited by snfesh
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...