Ребят, всем привет.
Ставлю проект на Django. Не могу решить ситуацию. Захожу на сайт, появляется ошибка: The requested URL / was not found on this server. Если я кидаю в общую папку Templates 404.html - отображается эта страница.
Что я сделал:
1) Создал проект на базе Django 1.9.2 и python 3.4.3 в PyCharm.
2) Заказал себе VPS на Cent OS7 и привязал его к хостингу.
3) Создал пользователя с sudo правами: bakotiinii
4) Установил время сервера.
5) Установил EPEL
sudo yum install epel-release
6) Установил PostgreSQL
sudo yum install python-pip python-devel postgresql-server postgresql-devel postgresql-contrib gcc nginx
7) Настроил PostgreSQL
sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo nano /var/lib/pgsql/data/pg_hba.conf
Настраиваем базу для доступа под юзером
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5
Делаем базе автозапуск
sudo systemctl restart postgresql
sudo systemctl enable postgresql
8) Создаем пользователя для базы данных:
sudo su - postgres
psql
CREATE DATABASE myproject;
CREATE USER myprojectuser WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
9) Ставим Python 3.4.3
sudo yum install python34-devel
10) Ставим виртуальное окружением
sudo pip install virtualenv
10) Создаем виртуальное окружение в корне под управлением Python 3.4.3
mkdir ~/apifolder
cd ~/apifolder
mkvirtualenv -p /usr/local/bin/python3.4 djangoen
11) Активируем виртуальное окружение
source djangoen/bin/activate
12) Ставим Django, Gunicorn и управляющий psycopg2
pip install django==1.9.2 gunicorn psycopg2
13) Создаем проект Django в текущей папке (имя проекта то же самое, что и имеет мое в PyCharm):
django-admin.py startproject apifolder .
14) Заменяю папку проекта своим проектом из PyCharm через FTP
15) Вношу изменения в settings.py - подключаю базу, подключаю статику и ставим хосты:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATICFILES_DIRS = (
)
DEBUG = True
ALLOWED_HOSTS = [
'*',
]
16) В моделях проекта используется ImageField, поэтому ставлю Pillow (Сначала зависимые пакеты, потом само Pillow), после чего Django перестает ругаться.
sudo yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel
pip install Pillow
17) Проверяем базу данных, делаем миграцию и собираем статику
cd ~/apifolder
./manage.py makemigrations
./manage.py migrate
./manage.py collectstatic
Деактивируем виртуальное окружение
18) Ставим конфиг Юникорну
sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=bakotiinii
Group=nginx
WorkingDirectory=/home/bakotiinii/apifolder
ExecStart=/home/bakotiinii/apifolder/djangoen/bin/gunicorn --workers 3 --bind unix:/home/bakotiinii/apifolder/apifolder.sock apifolder.wsgi:application
[Install]
WantedBy=multi-user.target
Делаем его перезапуск:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
19) Настраиваю nGinx
sudo nano /etc/nginx/nginx.conf
server {
listen 80;
server_name example.ru www.example.ru;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bakotiinii/apifolder;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/bakotiinii/apifolder/apifolder.sock;
}
}
20) Финальные настройки и запуск:
sudo usermod -a -G bakotiinii nginx
chmod 710 /home/bakotiinii
sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx
______
В итоге получается ситуация, что:
На локалке через runserver - работает.
На боевом сервере
1) Админка работает.
2) База данных работает.
3) Статика отдается.
4) А страницы отдают ошибку, что по таким URL ничего нет.
5) Логи nginx никаких ошибок не дают.
Мой проект имеет несколько приложений, поэтому каждое приложение имеет свой файлик url и папку template (url прицепил через инклуд, а шаблоны привязал через PyCharm - правая кнопка мыши и MarkDirectory as template). Мб в этом какая-то беда?
Например сами ULR:
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^step(?P<step_id>[0-9]+)$', views.step, name='step'),
url(r'^addcomment(?P<step_id>[0-9]+)$', views.addcomment, name='addcomment'),
url(r'^question(?P<question_id>[0-9]+)$', views.question, name='question'),
url(r'^newpage(?P<step_id>[0-9]+)/$', views.new_page,name='newpage'),
url(r'^lastpage(?P<step_id>[0-9]+)/$', views.last_page,name='lastpage'),
url(r'^answerset$', views.answerset, name='answerset'),
url(r'^isperm$', views.isperm, name='isperm'),
]
Update
Добавил
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'bakot/templates/'),
os.path.join(BASE_DIR, 'loginsys/templates/'),
]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media'
],
},
},
]
P.s. TEMPLATE_DIRS был удален с версии 1.8.
Не помогает, почта еще не настроена.
Update - решение
url.py одного из приложения копировался через FTP почему-то без прав. Поэтому копирование отменялось, и создавался стандартный файл с примерами-комментами. Начал ходить по проекта и заметил несовпадение размеров.
P.s. Нужно юзать git!