Установка 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
Читать по теме
Интересные статьи