сервер Apache2(mod_wsgi) для Django
Настройка на Debian, заходим на сервер по ssh и убедимся, что у нас установлен не ниже Python 3.9.2
☯
Terminal:
⌕
≡
✕
django@itdid:~$ python3 -V Python 3.9.2
Обновим систему
Устанавливаем пакеты python3-pip, python3-venv, apache2, libapache2-mod-wsgi-py3
включаем модуль wsgi
Проверим какие модули установлены:
должны увидеть wsgi_module (shared)
1)создаём каталог для проекта в корневом каталоге сервера /var/www/html/. Для этого у вашего пользователя должны быть соответствующие права. Можно назначить владельцем каталога /var/www/html/ вашего пользователя, и группу www-data. С правами drwxr-x---
Cоздадим здесь подкаталог django_project
И зайдем в него.
Создаём виртуальное окружение в этом каталоге, в подкаталог например new_env, командой:
активируем виртуальное окружение командой, с указанием правильного пути, в зависимости от названия вашего каталога с окружением
☯
Terminal:
⌕
≡
✕
django@itdid:/var/www/html/django_project$ source /var/www/html/django_project/new_env/bin/activate
(new_env) django@itdid:/var/www/html/django_project$
Устанавливаем нужные пакеты в этом активном окружении, сначала посмотрим какие пакеты уже у нас здесь есть.
установим нужные пакеты например пакет django
после установки всех нужных для вашего проекта пакетов снова убедитесь, что всё встало как надоpip list
создаём проект с желаемым нам именем допустим webprogram
для дальнейшего удобства переносим содержимое созданного каталога на уровень выше, чтобы избавиться от вложенного одноимённого каталога и вынести основной файл управления manage.py на текущий верхний уровень каталога проекта.
Для этого сначала переименуем существующий верхний каталог в этом случае webprogram, и вытащим из него содержимое на уровень выше.
копируем содержимое на уровень выше
и удалим лишний, теперь уже пустой каталог
Конфигурация будет производиться для такой структуры каталогов проекта.
И сейчас всё готово, чтобы проверить работу внутреннего сервера от django, указываем свой внешний ip адрес и порт разработки стандартно 8000, в команде:
Должны увидеть наподобие этого:
☯
Terminal:
⌕
≡
✕
(env) django@1190519-ct81376:/var/www/html/django_project$ python manage.py runserver 111.111.111.111:8000
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 14, 2023 - 19:40:08
Django version 4.1.5, using settings 'podariderevo.settings'
Starting development server at http://111.111.111.111:8000/
Quit the server with CONTROL-C.
входим с браузера должны увидеть приветственную страницу django, с ракетой летящей вверх, по этому же адресу:
Этот штатный веб сервер Django предназначен для разработки, её уже можно вести на этом сервере. Базы данных этого проекта инкапсулированы по умолчанию будет в db.sqlite3, поэтому на данном этапе разработчику необязательно даже настраивать свой сервер баз данных.
ссылка где мы будем настраивать свой сервер баз данных Postgresql
И только теперь есть смысл настраивать сам web-server. Прерываем работу локального вебсервера сочетанием клавиш Ctrl+C
Деактивируем виртуальное окружение, команда:
Создаём конфигурацию сервера Apache
Активируем необходимые модули apache, для последующей настройки проксирования портов.
Теперь создадим свой файл конфигурации my-syte.conf на базе дефолтного конфигурационного файла apache2, по умолчанию 000-default.conf
чтобы наш сервер работал только для проекта django через wsgi настроим его на 82 порт.
А в дефолтной конфигурации сервера настроим переадресацию с 80 порта, на 82, открываем его сейчас в редакторе:
И первым делом после начала дерективы VirtualHost, в конфигурации которая слушает 80-й порт, вставляем команды переадресации на 82 порт.В результате получим вот, что:
☯
Terminal:
⌕
≡
✕
django@itdid:/etc/apache2/sites-available$ cat 000-default.conf <VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPreserveHost on ProxyPass / http://127.0.0.3:82/ ProxyPassReverse / http://127.0.0.3:82/ ServerAdmin webmaster@localhost DocumentRoot /var/www/html </VirtualHost>
Теперь в файле /etc/hosts добавляем запись
127.0.1.3:82
☯
Terminal:
⌕
≡
✕
django@itdid:/etc/apache2/sites-available$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.3:82 85.92.111.118
И берёмся уже за свой файл конфигурации, где указываем слушать 82 порт. В итоге он должен иметь такой вид.
☯
Terminal:
⌕
≡
✕
django@1190519-ct81376:/etc/apache2/sites-available$ cat /etc/apache2/sites-available/my-site.conf Listen 82 <VirtualHost *:82> # Описание сервера ServerAdmin django@itdid.ru # домен сайта ServerName 111.111.111.111 DocumentRoot /var/www/html/django_project # ErrorLog /home/django/webporgram/logs/error_log # CustomLog /home/django/webprogram/logs/access_log common ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /static /var/www/html/django_project/static <Directory /var/www/html/django_project/static> Require all granted </Directory> Alias /images /var/www/html/django_project/static/images <Directory /var/www/html/django_project/static/images> Require all granted </Directory> #указываем полный путь к нашему проекту <Directory /var/www/html/django_project/webprogram> <Files wsgi.py> Require all granted </Files> </Directory> #указываем путь к виртуальному окружению и присваиваем любое имя группы этому #процессу например my_name_process WSGIDaemonProcess my_name_process lang='en_US.UTF-8' locale='en_US.UTF-8' python-path=/var/www/html/django_project python-home=/var/www/html/django_project/new_env #обязательно добавляем lang='en_US.UTF-8' locale='en_US.UTF-8' чтобы logger django #не выбрасывал ошибку --Logging error --- UnicodeEncodeError: 'ascii' codec can't #encode characters при логировании на русском языке WSGIProcessGroup my_name_process #файл wsgi.py создаётся django при создании проекта автоматически, указываем путь к нему WSGIScriptAlias / /var/www/html/django_project/webprogram/wsgi.py </VirtualHost>
проверяем конфигурацию на соответствие ошибок
sudo apachectl configtest
И берёмся уже за свой файл конфигурации, где указываем слушать 82 порт. В итоге он должен иметь такой вид.
☯
Terminal:
⌕
≡
✕
django@1190519-ct81376:/etc/apache2/sites-available$ sudo apachectl configtest [sudo] password for django: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 1190519-ct81376.tw1.ru. Set the 'ServerName' directive globally to suppress this message Syntax OKывафывафыва
Чтобы убрать предупреждение AH00558: apache2 добавим дериктиву 'ServerName' указав ip сервера, в конец файла/etc/apache2/apache2.conf
в случае этого примера, это будет так:
Перезапускаем сервер и снова проверяем конфигурацию, предупреждение должно уйти.
☯
Terminal:
⌕
≡
✕
django@itdid:/etc/apache2/sites-available$ sudo apachectl configtest Syntax OK
Увидев что синтаксис без ошибок, добавляем нашу конфигурацию с помощью утилиты a2ensite
В соответствии с нашей конфигурацией, проверять логи сервера будем здесь sudo cat /var/log/apache2/error.log и здесь sudo cat /var/log/apache2/access.log
Снова сделайте рестарт web сервера, и проверяйте вход с браузера на сайт вашего проекта.
-
- Roman Sakhno
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.