Установка Django
virtualenv
Устанавливаем pip и virtualenv:
sudo apt-get update sudo apt-get install python3-pip sudo pip3 install virtualenv
Создаём новое виртуальное окружение:
mkdir ~/newproject cd ~/newproject virtualenv newenv
Если вам нужно будет удалить виртуальное окружение, достаточно сделать
rm -rf ~/newproject/newenv/.
Теперь активировать окружение можно с помощью команды, запущенной из директории newproject.
source newenv/bin/activate
Вы увидите, что после этой команды изменится приглашение интерпретатора bash: в начале появится (newenv).
Django
Установить Django в виртуальное окружение(не используемpip3, несмотря на третий Python!):
pip install django psycopg2
Для выхода из окружения (работает только в виртуальном окружении!):
deactivate
Создаём Django-проект:
django-admin.py startproject myproject cd ~/newproject
Далее устанавливаем нужную базу данных. Выбирайте одну из двух наиболее популярных:
PostgreSQL или MySQL
PostgreSQL
Устанавливаем пакеты
sudo apt-get update sudo apt-get install libpq-dev postgresql postgresql-contrib
Запускаем консоль PostgreSQL
sudo -u postgres psql
CREATE DATABASE myproject; CREATE USER myprojectuser WITH PASSWORD 'password'; ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed'; ALTER ROLE myprojectuser SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
Некоторые приложения могут устанавливать расширения (extension) для PostgreSQL. Для этого нужно дать права суперпользователя базы новому пользователю:
ALTER ROLE myprojectuser superuser;
Теперь можно выйти из консоли PostgreSQL
\q
MySQL
pip install mysql-python pip install mysqlclient
Доступ к базе данных
Меняем настройки для доступа к базе данных. В settings.py прописываем:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': 5432,
}
}
Далее, стандартные действия:
python manage.py makemigrations python manage.py migrate python manage.py collectstatic python manage.py createsuperuser
После чего следует отобрать права суперпользователя для пользователя базы данных (если вы их выдавали).
sudo -u postgres psql ALTER ROLE myprojectuser nosuperuser; \q
nginx
Устанавливаем свежий nginx
nginx=stable sudo add-apt-repository ppa:nginx/$nginx sudo apt-get update sudo apt-get install nginx
Конфигурируем наш сервер
nano /etc/nginx/sites-available/testforum
server {
server_name pythonworld.club; # Подставьте свой домен
listen 80;
location /.well-known {
root /var/www/html; # Понадобится для letsencrypt
}
# Статические файлы
location = /favicon.ico {
alias /home/steve/newproject/testforum/static/favicon.ico;
}
location = /robots.txt {
alias /home/steve/newproject/testforum/static/robots.txt;
}
location /static/ {
root /home/steve/newproject/testforum/;
}
location /media/ {
root /home/steve/newproject/testforum/;
}
# Взаимодействуем с Django-приложением через unix-сокет
location / {
include proxy_params;
proxy_pass http://unix:/home/steve/newproject/forum.sock;
}
}
sudo ln -s /etc/nginx/sites-available/testforum /etc/nginx/sites-enabled
gunicorn
Вернёмся в виртуальное окружение (если вы из него выходили), и установим gunicorn
pip install gunicorn
Создадим файл конфигурации для gunicorn
sudo nano /etc/systemd/system/gunicorn.service
[Unit] Description=gunicorn daemon After=network.target [Service] User=steve Group=www-data WorkingDirectory=/home/steve/newproject/testforum/ ExecStart=/home/steve/newproject/newenv/bin/gunicorn --access-logfile - --error-logfile error.log --workers 2 --bind unix:/home/steve/newproject/forum.sock testforum.wsgi:application [Install] WantedBy=multi-user.target
Теперь мы можем запустить gunicorn, а далее он будет автоматически запускаться при загрузке.
sudo systemctl start gunicorn sudo systemctl enable gunicorn
memcached
sudo apt-get install memcached libmemcached-dev sudo nano /etc/memcached.conf
# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory -m 256 # Ставим побольше, например 256Мб # Default connection port is 11211 #-p 11211 Комментируем, так как хотим связать с помощью UNIX-сокета # Run the daemon as root. The start-memcached will default to running as root if no # -u command is present in this config file -u memcache # Specify which IP address to listen on. The default is to listen on all IP addresses # This parameter is one of the only security measures that memcached has, so make sure # it's listening on a firewalled interface. #-l 127.0.0.1 Также комментируем # А UNIX-сокеты добавляем -s /tmp/memcached.sock -a 0766
Устанавливаем Python библиотеку (в виртуальное окружение) для связывания Django и memcached
pip install pylibmc
В settings.py Django-проекта добавляем
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '/tmp/memcached.sock',
}
}
И, наконец, перезапускаем memcached
:
sudo systemctl restart memcached