Процесс установки интерпретатора Python, фреймворка Django, базы данных PostgreSQL и HTTP прокси NGINX на сервере Ubuntu 20.04.
Исходные данные
Установка будет производится на удаленном сервере, но то же самое можно развернуть и на localhost. Вместо 111.111.111.111 укажите свой IP адрес в интернете.
Свежеустановленный сервер Ubuntu 20.04 LTS.
Проведена первичная настройка сервера.
Установим Python на сервер
Перед любой установкой обновим пакеты операционной системы:
Устанавливаем питон:
Создадим симлинк для обращения по команде pip вместо pip3:
pip install --upgrade pip
PostgreSQL
Установим PostgreSQL на сервер:
Следом устанавливаем пакет psycopg2, который является python-postgreSQL адаптером:
Создаем и настраиваем пользователя и базу данных в PostgreSQL.
Создаем виртуальную среду и устанавливаем Django
Заходим в папку пользователя. Отсюда будем работать дальше.
Создаем виртуальную среду в директории myproject:
virtualenv --python=python3 myproject/
Перейдем в эту директорию и активируем среду:
source bin/activate
Теперь в этом окружении установим Django и gunicorn:
Запустим новый проект с PostgreSQL
Запустим проект hello_django следующей командой:
Это создаст новую директорию hello_django с файлами питона.
Отредактировуем там файл конфигурации setting.py:
Пропишем свои данные.
Найдем строку и запишем туда свой IP:
Следом впишем настройки нашей БД:
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'ploshadka',
'USER': 'ploshadka',
'PASSWORD': 'пароль',
'HOST': 'localhost',
'PORT': '',
}
}
и в конце где
добавить строку:
STATIC_ROOT = '/home/ploshadka/static/'
Сохраняем файл и выходим.
Сделаем миграцию данных в таблицу PostgreSQL
Мы должны находится в директории с файлом manage.py:
Там запускаем миграцию:
Создадим супер пользователя. Он будет использоваться для входа на нашем сайте:
Дальше выбираем имя для пользователя проекта, email и пароль.
Собираем наш проект в статические файлы:
Иногда встречается ошибка:
В этом случае стоит выйти, заново зайти и повторить:
cd /home/ploshadka/myproject/
source bin/activate
cd hello_django
python manage.py collectstatic
В случае успеха будет создана папка static и появится сообщение:
Откроем порт для Firewall на котором будет запущен проект:
Запустим наш проект:
Ошибки вида:
Command ‘python’ not found, did you mean:
command ‘python3’ from deb python3
command ‘python’ from deb python-is-python3
Могут возникнуть, если вы вышли из рабочей области. Заходим заново и запускаем:
source bin/activate
cd hello_django/
python manage.py runserver 111.111.111.111:8080
Теперь можно зайти на страницу:
Где увидим предустановленную страницу Django:
В административную панель:
После авторизации попадаем в админку:
Настраиваем работу Django с HTTP-сервером Gunicorn
Перейдем в наш проект, чтобы использовать gunicorn для загрузки модуля WSGI:
gunicorn -b 111.111.111.111:8080 hello_django.wsgi:application
Ошибки вида:
[67658] [ERROR] Exception in worker process
Traceback (most recent call last):
File
…
lib/python3.8/site-packages/gunicorn/util.py», line 358, in import_app
mod = importlib.import_module(module)
File «/usr/lib/python3.8/importlib/__init__.py», line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File ««, line 1014, in _gcd_import
File ««, line 991, in _find_and_load
File ««, line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named ‘hello_django.wsgi’
[2020-05-24 22:44:37 +0200] [67658] [INFO] Worker exiting (pid: 67658)
[2020-05-24 22:44:37 +0200] [67656] [INFO] Shutting down: Master
[2020-05-24 22:44:37 +0200] [67656] [INFO] Reason: Worker failed to boot.
(myproject) root@nomerdoma1:/home/ploshadka/myproject#
Возникнут, если пытаться связать не ту директорию. Это должна быть директория, где находится файл settings.py.
В случае успешного запуска в консоли появится:
[2020-05-24 22:50:00 +0200] [67705] [INFO] Starting gunicorn 20.0.4
[2020-05-24 22:50:00 +0200] [67705] [INFO] Listening at: http://111.111.111.111:8080 (67705)
[2020-05-24 22:50:00 +0200] [67705] [INFO] Using worker: sync
[2020-05-24 22:50:00 +0200] [67707] [INFO] Booting worker with pid: 67707
Можем снова перейти на сайт и протестировать.
Настройка Django завершена. Теперь можно выйти из виртуальной среды:
Настраиваем systemd
Настроем systemd для автоматизации запуска и остановку приложения Django.
Для этого создадим и настроим файл systemd для Gunicorn:
Вставим:
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/ploshadka/myproject/hello_django
ExecStart=/home/ploshadka/myproject/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ploshadka/myproject/hello_django/myproject.sock hello_django.wsgi:application
[Install]
WantedBy=multi-user.target
Сохраняем и выходим. Если ранее уже был запущен gunicorn.service и это повторное редактирование, то перед следующей командой запустите:
sudo systemctl restart gunicorn
Теперь можем запустить «Зеленого Единорога»:
sudo systemctl enable gunicorn
Проверим статус сервера:
При успешном запуске в директории hello_django там где manage.py появится файл myproject.sock.
Nginx
Установим дополнительные инструменты:
Создадим и отредактируем файл:
Вставим следующее:
listen 80;
server_name 111.111.111.111;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ploshadka;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ploshadka/myproject/hello_django/myproject.sock;
}
}
Связываем этот файл с каталогом сайтов:
Проверим конфигурацию nginx на наличие ошибок:
Если ошибок нет:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
При отсутствии ошибок:
Если нам больше не нужен сервер разработки, порт 8000, то удалим его, чтобы перенаправить весь трафик на порт 80:
sudo ufw allow 'Nginx Full'
На этом установка завершена. Теперь наш сервер работает автономно. А по адресу нашего сайта мы увидим всё ту же взлетающую ракету:
Напоследок
Для того чтобы изменения в файле settings.py стали видны, перезапускаем «единорога»: