Bootstrap

сервер Apache2(mod_wsgi) для Django

сервер Apache2(mod_wsgi) для Django

Настройка на Debian, заходим на сервер по ssh и убедимся, что у нас установлен не ниже Python 3.9.2

Terminal:

django@itdid:~$ python3 -V
Python 3.9.2

Обновим систему


sudo apt-get update

sudo apt-get -y upgrade

Устанавливаем пакеты python3-pip, python3-venv, apache2, libapache2-mod-wsgi-py3


sudo apt-get install python3-pip python3-venv apache2 libapache2-mod-wsgi-py3

включаем модуль wsgi


sudo a2enmod wsgi

Проверим какие модули установлены:


sudo apachectl -M

должны увидеть wsgi_module (shared)

1)создаём каталог для проекта в корневом каталоге сервера /var/www/html/. Для этого у вашего пользователя должны быть соответствующие права. Можно назначить владельцем каталога /var/www/html/ вашего пользователя, и группу www-data. С правами drwxr-x---

Cоздадим здесь подкаталог django_project


mkdir /var/www/html/django_project

И зайдем в него.


cd /var/www/html/django_project

Создаём виртуальное окружение в этом каталоге, в подкаталог например new_env, командой:


python3 -m venv new_env

активируем виртуальное окружение командой, с указанием правильного пути, в зависимости от названия вашего каталога с окружением


source /var/www/html/django_project/new_env/bin/activate

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$

Устанавливаем нужные пакеты в этом активном окружении, сначала посмотрим какие пакеты уже у нас здесь есть.


pip list

установим нужные пакеты например пакет django


pip install django

после установки всех нужных для вашего проекта пакетов снова убедитесь, что всё встало как надоpip list

создаём проект с желаемым нам именем допустим webprogram


django-admin startproject webprogram

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

Для этого сначала переименуем существующий верхний каталог в этом случае webprogram, и вытащим из него содержимое на уровень выше.


mv webprogram webprogram_

копируем содержимое на уровень выше


mv webprogram_/webprogram ./

и удалим лишний, теперь уже пустой каталог


rm -f  webprogram_

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

И сейчас всё готово, чтобы проверить работу внутреннего сервера от django, указываем свой внешний ip адрес и порт разработки стандартно 8000, в команде:


python manage.py runserver  111.111.111.111: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, с ракетой летящей вверх, по этому же адресу:

http://111.111.111.111:8000

Этот штатный веб сервер Django предназначен для разработки, её уже можно вести на этом сервере. Базы данных этого проекта инкапсулированы по умолчанию будет в db.sqlite3, поэтому на данном этапе разработчику необязательно даже настраивать свой сервер баз данных.

ссылка где мы будем настраивать свой сервер баз данных Postgresql


И только теперь есть смысл настраивать сам web-server. Прерываем работу локального вебсервера сочетанием клавиш Ctrl+C

Деактивируем виртуальное окружение, команда:


deactivate 

Создаём конфигурацию сервера Apache

Активируем необходимые модули apache, для последующей настройки проксирования портов.


 sudo a2enmod proxy

 sudo a2enmod proxy_http

 sudo systemctl restart apache2

Теперь создадим свой файл конфигурации my-syte.conf на базе дефолтного конфигурационного файла apache2, по умолчанию 000-default.conf


sudo cp/etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/my-syte.conf


чтобы наш сервер работал только для проекта django через wsgi настроим его на 82 порт.
А в дефолтной конфигурации сервера настроим переадресацию с 80 порта, на 82, открываем его сейчас в редакторе:


sudo vim /etc/apache2/sites-available/000-default.conf

И первым делом после начала дерективы 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


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


sudo nano /etc/apache2/apache2.conf

в случае этого примера, это будет так:

ServerName 111.111.111.111

Перезапускаем сервер и снова проверяем конфигурацию, предупреждение должно уйти.


sudo systemctl restart apache2

Terminal:

django@itdid:/etc/apache2/sites-available$ sudo apachectl configtest
Syntax OK

Увидев что синтаксис без ошибок, добавляем нашу конфигурацию с помощью утилиты a2ensite


sudo a2ensite my-site.conf

В соответствии с нашей конфигурацией, проверять логи сервера будем здесь sudo cat /var/log/apache2/error.log и здесь sudo cat /var/log/apache2/access.log

Снова сделайте рестарт web сервера, и проверяйте вход с браузера на сайт вашего проекта.

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: