Django 5 для начинающих

Прогресс по курсу:  9/1004

9.2 Установка виртуального окружения, Gunicorn и списка зависимостей
5 из 16 шагов пройдено
0 из 33 баллов  получено

Настройка Django, создание статических файлов

 

Теперь необходимо настроить наш проект для работы на сервере.
Для этого перейдём в директорию /var/www/mysite_03/mysite и отредактируем файл настроек settings.py:

cd /var/www/mysite_03/mysite
vi settings.py

Чтобы отредактировать файл в vi, необходимо переключить его из командного режима в режим редактирования нажатием клавиши I или Insert, в последней строке должна появится надпись -- INSERT --. Выход из режима редактирования осуществляется нажатием клавиши Esc.


Отредактируем эту строку:

ALLOWED_HOSTS = ['django-blog.my-domain.ru']

Примечание: django-blog.my-domain.ru необходимо заменить на ваше доменное имя.


И добавим следующие строки:

CSRF_TRUSTED_ORIGINS = ['http://django-blog.my-domain.ru', 'https://django-blog.my-domain.ru']

Примечание: django-blog.my-domain.ru необходимо заменить на ваше доменное имя.

STATIC_ROOT = BASE_DIR / 'static'

Сохраняем файл(Нажимаем Esc и вводим :wq, нажимаем Enter).


Затем отредактируем файл urls.py, выполняем:

vi urls.py


Добавим эту строку в конец файла:

                + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Примечание: Gunicorn будет выдавать статичные файлы только при включенном режиме отладки(DEBUG = True) в файле settings.py. В дальнейшем, эта работа будет переложена на веб-сервер NGINX.


Теперь можно создать статичные файлы, для этого необходимо перейти в директорию проекта и создать директорию с именем static для статичных файлов:

cd ..
mkdir static
ls -la


А затем необходимо активировать виртуальное окружение:

source env/bin/activate


Запускаем процесс создания статичных файлов, выполняем:

python3 manage.py collectstatic


Проверяем результат:

ls -la static
ls -la static/admin
ls -la static/admin/img

Появились директории со статичными файлами.


Статичные файлы созданы, теперь можно деактивировать виртуальное окружение, выполним:

deactivate


И в дополнение ко всему сменим владельца директории media, чтобы была возможность загружать файлы через сайт.

chown -R www: media
ls -la


Теперь можно перезапустить службу Gunicorn, выполняем:

systemctl restart gunicorn


Проверяем результат, снова откроем наш сайт в браузере: http://<имя_вашего_домена>:8001:


Ошибка изменилась, но сайт так и не работает нормально - это потому что не установлена БД, установим её в следующем шаге.


  • Комментариев
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

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

@Шамбер_Егор, нет, нормальная ошибка, файл sqlite ни на что не влияет, она же не подключена в настройках.

@Шамбер_Егор, ошибка другая, потому что хост и порт бд уже указаны в файле настроек, когда я делал скрин, то там их не было. Можно переходить к установке бд.

Знаю, у меня очень много проблем, и вот снова, после настройки настроеек вылезла надпись "internal server error", прикладываю ниже скрины 
P.s. debug = true

Изменен Дмитрий Селезнев

@Маркелов_Александр

@Маркелов_Александр, остановите Gunicorn(systemctl stop gunicorn), а затем запустите встроенный вебсервер(виртуальное окружение должно быть активировано!):

python manage.py runserver 0.0.0.0:8001

 После этого в консоли должна появиться ошибка, сделайте её скрин.

@Дмитрий_Селезнев

@Маркелов_Александр, похоже проблема с отступом в urls.py, перед строкой: + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT).

Попробуйте стереть все отступы перед ней и выровнять её пробелами. Затем снова запустить встроенный вебсервер.

@Маркелов_Александр, стирайте от символа + до скобки предыдущей строки, там символа \n не доложно быть, а потом выравнивайте пробелами.

@Дмитрий_Селезнев, я сделал несколькими способами, я удалил все перед строкой, и пробелами заполнил табуляцию, выдавало ошибку, попробовал через таб, тоже выдавал ошибку, попробовал вообще без ничего, все равно выдает ошибку

@Дмитрий_Селезнев, все, получилось, спасибо большое!

Опечатка в строке

ls -la static/admin/images

Должно быть ls -la static/admin/img

@Alexey_Kuzmenko, спасибо, исправил.

После изменения файла settings.py, Ошибка Джанги сменилась на вот такую. В чем может быть проблема?


@Кислинский_Роман, это из-за того что отладка выключена(DEBUG = False), включите и причина станет ясна.

@Дмитрий_Селезнев, У меня отладка включена)

@Кислинский_Роман, а Gunicorn перезагружали?

@Дмитрий_Селезнев, Да, вроде все по инструкции делал. До этого шага ошибка именно от Джанги была. А как в settings залез, то вот такое чудо) Сейчас еще раз все перепроверю

@Кислинский_Роман, похоже на неудачное редактирование urls.py, может скобка в конце потеряна или что-нить подобное.

@Дмитрий_Селезнев, Спасибо, разобрался. Оказывается, как на скрине расположение + static в urls у меня ошибку пробрасывало в отступе)

После всего сделанного на странице сайта появилась ошибка "Internal Server Error". Всё делал по инструкции и DEBUG стоит на TRUE.

@Никита_Совалин, сначала остановите службу gunicorn:

systemctl stop gunicorn

Затем запустите стандартный сервер Django, в директории проекта, виртуальное окружение должно быть активировано:

python manage.py runserver 0.0.0.0:8000

 В консоли будет видно в чём ошибка, остановка сервера так-же, по Ctrl+C.

@Дмитрий_Селезнев, такое получается 

@Никита_Совалин, это необходимо на своем сервере запускать - команды в PuTTY вводить, и сайт будет доступен по адресу http://ip_адрес_вашего_сервера:8000, а не по http://0.0.0.0:8000.

@Дмитрий_Селезнев, Извините пожалуйста, но я действительно не понимаю в чём ошибка

@Никита_Совалин, не нужно извинятся. Ошибка очень простая - не установлен Django, вероятно была ошибка при установке зависимостей из файла requirements.txt. Необходимо переустановить их, если будет ошибка при установке, то можно взять содержимое файла зависимостей с гитхаба: https://github.com/Permin0ff/Course_mysite_04/blob/master/requirements.txt

Изменен Дмитрий Селезнев

@Никита_Совалин, удалось ли исправить ошибку? Если нет, то загрузите данные для доступа на сервер, по ссылке https://mega.nz/filerequest/rANtUqzWHQ4, я посмотрю и исправлю.

@Дмитрий_Селезнев, Я сравнил свой список зависимостей и тот что с гитхаба, и они вроде одинаковые. Я загрузил данные доступа к серверу.

@Никита_Совалин, сейчас посмотрю.

@Никита_Совалин, в файле urls.py проекта (mysite/urls.py) не хватало импорта (from django.conf import settings, from django.conf.urls.static import static), я его добавил, теперь работает.

Там ещё части маршрутов не хватает, видимо забыли добавить, когда проходили. Посмотрите для примера тут: https://github.com/Permin0ff/Course_mysite_04/blob/master/mysite/urls.py.

И забудьте добавить свой домен в ALLOWED_HOSTS.

Так-же я заметил что в файле настроек не хватает содержимого, после строки LOGIN_REDIRECT_URL = "/", нет ничего. Вот примерно так там должно быть https://github.com/Permin0ff/Course_mysite_04/blob/master/mysite/settings.py#L153C1-L153C25.

Кроме это не хватает директории media, она должна быть в архиве проекта но её там нет, следует её создать:

mkdir media
chown -R www: media

@Дмитрий_Селезнев, Здравствуйте, дико извиняюсь за то, что так долго не отвечал, не было возможности. Спасибо, всё теперь работает как надо, бесконечно благодарен!

@Никита_Совалин, я рад что всё получилось.

root@26418:/var/www/mysite# ls -la
total 164
drwxr-xr-x 10 root root  4096 Oct 14 10:49 .
drwxr-xr-x  6 root root  4096 Oct 12 19:46 ..
drwxr-xr-x  4 root root  4096 Oct 11 20:38 accounts
drwxr-xr-x  6 root root  4096 Oct  8 12:10 blog
drwxr-xr-x  4 root root  4096 Oct 11 20:56 blog_api
-rw-r--r--  1 root root   326 Oct  5 20:52 .env
drwxr-xr-x  5 root root  4096 Oct 12 19:34 env
-rwxr-xr-x  1 root root   125 Oct 12 20:12 gunicorn.sh
-rw-r--r--  1 root root   684 Oct  1 11:33 manage.py
drwxr-xr-x  4 root root  4096 Oct 11 20:50 media
drwxr-xr-x  3 root root  4096 Oct 14 11:01 mysite
-rw-r--r--  1 root root 99972 Oct 12 19:54 mysite.zip
-rw-r--r--  1 root root  1746 Oct 12 20:51 requirements.txt
-rw-r--r--  1 root root  6281 Oct 11 20:47 schema.yml
drwxr-xr-x  2 root root  4096 Oct 14 10:49 static
drwxr-xr-x  4 root root  4096 Oct  8 11:53 templates
root@26418:/var/www/mysite# source env/bin/activate
(env) root@26418:/var/www/mysite# python manage.py collectstatic
-bash: python: command not found
(env) root@26418:/var/www/mysite#
 

Не находит команду collectstatis. Что может быть?

@Григорий_Кожанов, выполните команду:

ls -la /var/www/mysite/env/bin

И выложите сюда её вывод.

@Дмитрий_Селезнев

root@26418:~# ls -la /var/www/mysite/env/bin
total 44
drwxr-xr-x 2 root root 4096 Oct 12 19:34 .
drwxr-xr-x 5 root root 4096 Oct 12 19:34 ..
-rw-r--r-- 1 root root 1987 Oct 12 19:34 activate
-rw-r--r-- 1 root root  913 Oct 12 19:34 activate.csh
-rw-r--r-- 1 root root 2193 Oct 12 19:34 activate.fish
-rw-r--r-- 1 root root 9033 Oct 12 19:34 Activate.ps1
-rwxr-xr-x 1 root root  239 Oct 12 19:34 pip
-rwxr-xr-x 1 root root  239 Oct 12 19:34 pip3
-rwxr-xr-x 1 root root  239 Oct 12 19:34 pip3.10
lrwxrwxrwx 1 root root    7 Oct 12 19:34 python -> python
lrwxrwxrwx 1 root root   16 Oct 12 19:34 python3 -> /usr/bin/python3
lrwxrwxrwx 1 root root    7 Oct 12 19:34 python3.10 -> python3
root@26418:~#


Получилось. Нужно было ввести команду: python3 manage.py collectstatic

Cпасибо за оперативность.