snfesh Posted May 20, 2022 Share #1 Posted May 20, 2022 (edited) Не нашёл в интернете простого решения вопроса, а именно: Запуск проекта 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 поменять путь к python на python из нашего виртуального окружения #!/volume1/web/django-sites/venv/bin/python3 Раскомментировать строку 36 и прописать путь к нашему проекту Django sys.path.append("/volume1/web/django-sites/first-project") И в строке 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. Должно получиться вот так: Далее нажимаем ОК и виртуальный хост должен быть создан. Если всё сделано верно, при переходе на свой домен, вы должны увидеть страницу приветствия Django. Edited May 20, 2022 by snfesh 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.