Задача: Поставить проект на VPS от Reg.ru на базе CentOS:
Что делаю:
P.s. Предварительно в панели хостера связываю доменное имя и VPS через DNSadmin.
P.s.s. Ряд шагов по установке компонентов упущено, так как они имеют отношение к работе необходимых элементов проекта, а не к работе на VPS.
1) Создаю пользователя с sudo правами. - bakotiinii
2) Задаю набор команд:
sudo yum install epel-release
sudo yum install python-pip
sudo yum install wget
sudo pip install virtualenv virtualenvwrapper
echo "export WORKON_HOME=~/Env" >> ~/.bashrc #Все окружения буду сохранять в папку Env
echo "source /usr/bin/virtualenvwrapper.sh" >> ~/.bashrc
source ~/.bashrc
3) Ставлю в корневую папку Python 3.4.3
wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz
tar -xvf Python-3.4.3.tar.xz
cd Python-3.4.3
./configure
make
sudo make install
4) Создаю окружение с питоном 3,4,3
mkvirtualenv -p /usr/local/bin/python3.4 django #Окружение имеет имя django.
5) Создаю проект apifolder, копирую его через FTP с PyCharm.
6) Ставлю базу данных PostgreSQL по данному
туториулу
7) Прописываем в settings.py нашей джанги:
DEBUG = False
ALLOWED_HOSTS = [
'*',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'db',
'USER': 'dbuser',
'PASSWORD': 'dbpassword',
'HOST': 'localhost',
'PORT': '',
}
}
Проверяем все это дело через наше окружение:
python manage.py makemigrations - работает.
python manage.py migration - работает.
python manage.py runsever 0.0.0.0:8080 - работает.
python manage.py collectstatic - не работает, так как еще нет сервера ngix.
8) Ставим uWSGI
sudo yum install python-devel gcc
sudo pip install uwsgi
9) Создаем конфиг:
sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
sudo nano apifolder.ini
################
[uwsgi]
project = apifolder # имя проекта
username = bakotiinii # пользователь
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true
10) Создаем автозапуск:
sudo nano /etc/systemd/system/uwsgi.service
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown bakotiinii:nginx /run/uwsgi'
ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
11) Конфиг Nginx
sudo yum install nginx
sudo nano /etc/nginx/nginx.conf
server {
listen 80;
server_name domen.ru www.domen.ru;
location = favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bakotiinii/apifolder;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/apifolder.sock;
}
}
12) Делаем запуск:
sudo nginx -t
sudo usermod -a -G bakotiinii nginx
chmod 710 /home/bakotiinii
sudo systemctl start nginx
sudo systemctl start uwsgi
Что в итоге:
Доменное имя отдает, что там ничего нет.
А если зайти напрямую по IP, то появляется вот такое окно nginx:
take.ms/5l0Gr
___________________________
Логи:
1)
crit] 7288#0: *52 connect() to unix:/run/uwsgi/apifolder.sock failed (2: No such file or directory) while connecting to upstream
2)
bakot uwsgi: uwsgi socket 0 bound to UNIX address /run/uwsgi/apifolder.sock fd 3
bakot uwsgi: setuid() to 1000
bakot uwsgi: Python version: 2.7.5 (default, Nov 20 2015, 02:00:19) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]
bakot uwsgi: Set PythonHome to /home/bakotiinii/Env/apifolder
bakot uwsgi: ImportError: No module named site
bakot uwsgi: VACUUM: unix socket /run/uwsgi/apifolder.sock removed.
bakot uwsgi: [emperor] unrecognized vassal event on fd 7
bakot uwsgi: [emperor] unrecognized vassal event on fd 5
bakot uwsgi: Fri Feb 12 02:34:01 2016 - [emperor] removed uwsgi instance apifolder.ini
ImportError: No module named site
3)
Там действительно нет такой папки, так как в этой папке находится лишь виртуальное окружение, а сам проект выше:
Виртуальное окружение имеет версию питона 3,4, сам сервер работает под 2,7. Nginx итд - я ставил глобально.