Skip to content

Instantly share code, notes, and snippets.

@MachineLearningIsEasy
Created April 30, 2020 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MachineLearningIsEasy/be1a8a695f871f43f80df9f0cccccb00 to your computer and use it in GitHub Desktop.
Save MachineLearningIsEasy/be1a8a695f871f43f80df9f0cccccb00 to your computer and use it in GitHub Desktop.
Инструкция по настройке Django-приложения на сервере
1. Подключаем услугу VPS c операционной системой Ubuntu (например, на reg.ru).
2. Проверяем подключение по SSH (в терминале: ssh root@ip).
3. Проверяем подключение по ftp (выбираем ftp-клиента исходя из своей операционной системы и вкуса).
4. Устанавливаем нужную версию интерпретатора python согласно инструкции через ssh.
https://tecadmin.net/install-python-3-8-ubuntu/
5. В проекте на локальном компьютере сохраняем нужные для работы проекта библиотеки.
При работе в виртуальном окружении:
pip freeze > requirements.txt
При работе в общей среде:
создаем файл с зависимостями вручную (иначе будут много лишних библиотек), либо ставим виртуальное окружение, в него добавляем все нужные библиотеки и попадаем в условия предыдущего пункта.
6. Переносим проект в директорию /root (или /home) на сервер с помощью ftp-клиента.
Проверяем, что права на директории 755!
7. Создаем виртуальное окружение в папке с проектом на сервере через ssh.
python3.8 -m venv my_project
8. Активируем интерпретатор в виртуальном окружении.
source my_project/bin/activate
9. Устанавливаем требуемые библиотеки.
pip install -r requirements.txt
10. Проверяем работу Django-приложения (в виртуальном окружении):
python3.8 manage.py runserver
11. Если проект запустился и нет ошибок, то ctrl-C, пока все по плану!
12. Устанавливаем PostgreSQL и создаем базу для проекта на Django.
Через SSH:
sudo apt-get install postgresql postgresql-contrib
sudo -u postgres psql
CREATE DATABASE django_db;
CREATE USER django with NOSUPERUSER PASSWORD '123456';
GRANT ALL PRIVILEGES ON DATABASE django_db TO django;
ALTER ROLE django SET CLIENT_ENCODING TO 'UTF8';
ALTER ROLE django SET default_transaction_isolation TO 'READ COMMITTED';
ALTER ROLE django SET TIME ZONE 'Europe/Moscow';
13. В файле settings изменить настройки доступа к базе:
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# },
'default': {
'NAME': 'django_db',
'ENGINE': 'django.db.backends.postgresql',
'USER': 'django',
'PASSWORD': '123456',
'HOST': 'localhost'
}
}
14. Устанавливаем коннектер для PostgreSql (psycopg2).
Через SSH (в виртуальном окружении):
pip install psycopg2-binary
15. Выполняем миграции в новую базу:
Через SSH (в виртуальном окружении):
python3.8 manage.py makemigrations
python3.8 manage.py migrate
16. Если проект запустился и нет ошибок, то ctrl-C, пока все по плану!
17. Установка gunicorn (в виртуальном окружении):
pip install gunicorn
18. Тестовый запуск проекта
gunicorn your_project.wsgi
19. Регистрируем gunicorn как сервис
sudo apt install nano
sudo nano /etc/systemd/system/gunicorn.service
В файл добавляем текст:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=***
ExecStart=***/my_project_env/bin/gunicorn --access-logfile - --workers 3 --bind unix:***/your_project.sock your_project.wsgi
[Install]
WantedBy=multi-user.target
your_project - имя Вашего проекта (django_test в демонстрационном примере)
*** - директория проекта (/root/django_test в демонстрационном примере)
20. Регистрируем и запускаем сервис gunicorn
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn ( либо service gunicorn status) - должен быть active
21. Устанавливаем nginx в систему
sudo apt install nginx
22. Проверяем статус nginx
service nginx status (после вбиваем ip в браузере, видим приветственную страницу nginx)
23. Перенаправляем запросы на сервис gunicorn
cd /etc/nginx/sites-available/
nano default
24. Меняем содержимое файла на
server {
listen 80;
server_name your_ip;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /root/django_test;
}
location /media/ {
root /root/django_test;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/blog/blog.sock;
}
}
25. В директории проекта выполнить команду (в виртуальном окружении):
python manage.py collectstatic
25. Перезапускаем gunicorn и nginx с новыми настройками
service gunicorn restart
service nginx restart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment