Установка 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