Установка и настройка домена для сайта Django на VPS

👁 25 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

После того, как проект готов, нужно, чтобы им можно пользоваться через доменное имя второго или третьего уровня project.mydomen.ru или mydomen.ru.

На самом деле, нет разницы какого уровня будет домен. В данном примере условимся, что нам нужен субдомен нашего домена выделить под проект на Django. Если он будет третьего уровня, то надо будет дописать в DNS — редакторе регистратора запись CNAME именем project и www.project со значениями mydomen.ru. 

Пример создания субдомена в DNS в панели регистратора домена
Пример создания субдомена в DNS в панели регистратора домена. Обратите внимание на точку в конце значения.

 

Замечание. Не забываем, что если даже NS — сервера вы добавили к вашему домену регистратора, то это не полностью означает, что этот домен уже будет прикреплен к вашему VPS. Вторым шагом после этого является создание со стороны VPS доменной зоны под этот домен и субдомен. Если домен куплен там же, где VPS, то , в большинстве этот процесс должен быть автоматизирован, но не факт.

Далее у нас может быть несколько случаев развития событий:

  • у нас в системе установлена какая-то готовая панель, на подобие VestaCP, в который уже входит нужный инструментарий;
  • нам нужно ставить все сервисы и пакеты с нуля.

Разберем оба варианта. В случае панели управления покажу как это делать с VestaCP.

Замечание. С установкой Nginx и с работой вспомогательных утилит для стабильной работы проекта Django на продакшн мы уже сталкивались в Деплой проекта Django в продакшн с Nginx + Gunicorn + Supervisor. В данном статье повторим путь с уклоном на понимание процесса прикрепления домена к проекту, если нам не нужен VestaCP.

Установка домена под проект Django, используя VestaCP

VestaCP уже содержит сервер Nginx, который нам будет нужен, чтобы перенаправить все запросы к нашему проекту на Django.

1. Создаем новый WEB- сайт в панели VestaCP

Создание нового WEB-проекта
Создание нового WEB-проекта

2. Редактируем конфигурационный файл Nginx по пути /home/<user>/web/conf/web/project.mydomen.ru.nginx.conf

Меняем содержимое, на подобие ниже и не забываем прописывать данные своего проекта. Порт текущего проекта 8001, если у вас другой — меняем на свой

server {
    #Все обращения на 80-м порту Nginx будет проверять
    #на соответствие нашему субдомену проекта
    listen      IP_ADRESS_OF_MY_VPS:80;
    server_name project.mydomen.ru www.project.mydomen.ru;
    error_log  /var/log/apache2/domains/project.mydomen.ru.error.log error;
	
    #Указываем путь к папке, где будут храниться статические данные сайта
    location /static/ {
        root /home/myprojectenv/project/;#Путь к папке проекта
        expires 30d;
    }
	
    #Указываем IP адрес проекта и порт, на котором он запущен.
    location / {
        proxy_pass      http://IP_ADRESS_OF_MY_VPS:8001;
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    #Обработка ошибок
    location /error/ {
        alias   /home/admin/web/project.mydomen.ru/document_errors/;
    }

    location @fallback {
        proxy_pass      http://IP_ADRESS_OF_MY_VPS:8001;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include /home/admin/conf/web/nginx.project.mydomen.ru.conf*;
}

 

3. Перезапускаем сервер Nginx в панели VestaCP

Перзапуск сервера Nginx
Перезапуск сервера Nginx

Далее заходим по адресу project.mydomen.ru и убеждаемся, что по нему открывается наш проект на Django.

 

Установка домена под проект Django, используя только Nginx.

Ставим Nginx

sudo apt-get install nginx

Теперь идем и настраиваем Nginx по пути в файле

cd /etc/nginx/sites-available/

открываем файлик default

nano default

и перепишем некоторые моменты, как ниже

server {
    listen 80;
    server_name project.mydomen.ru;
    access_log  /var/log/nginx/example.log;

    location /static/ {
        root /home/myprojectenv/project/;
        expires 30d;
    }

    location / {
        proxy_pass http://IP_ADRESS_OF_MY_VPS:8001; 
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

сохраняем и выходим.

Выполняем перезапуск Nginx, чтобы изменения вступили в силу

sudo service nginx restart

Заходим по адресу project.mydomen.ru и проверяем. Если не сработало, то читаем статью, которая тесно с этим пунктом связана.

Основные команды и операции в терминале Linux

👁 12 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Команды

Объединение нескольких команд в одну последовательную операцию

$ cmd1 && cmd2 && cmd3

Установка нескольких пакетов за раз

$ apt-get install package1 package2 package3

Навигации

pwd — («Path Working Directory») абсолютный путь до текущей рабочей папки

ls [-a][-l] — («LiSt»)список всех файлов в текущей папке.

  • [-a] — показать все файлы, даже скрытые;
  • [-l] — показать длинную(полную) информацию о файлах;
  • [-la] — комбинация обеих ключей;

cd — («Change Directory»)смена директории.

  • [TAB] — позволяет автодополнять название папки, если такая имеется, при введени неполного имени

Shift + ~ — переход в домашнюю папку;

../.. — то же самое. Переход в домашнюю папку;

cat [filename] — («CATenate») читает данные из файла или стандартного ввода и выводит их на экран.

clear или Ctrl + L — очищает экран.

Работа с файлами и директориями

touch [fname.txt] — создание нового файла.

  • [{fname1,fname2,fname3}.txt] — создание нескольких файлов за раз. Список пишется без пробелов;

mkdir [dname] — («MaKe DIRectory»)создание директории.

rm [fname] — («ReMove»)удаление файла.

rm [-r][dname] — удаление директории с содержимым.

cp [fname1] [fname2] — («CoPy»)копирование файла.

mv [fname1] [fname2] — («MoVe»)перемещение или переименование файла.

Регулярные выражения POSIX / PERL

grep [-inwo][-rlс][-P][-f] [-A 2] [-B 2] [-C 2] [«pattern»] [«filename»]— («Gloval Regular ExPressions») регулярные выражения для использования в обработке данных и файлов

  • [-i] — («Ignore»)фильтр игнорирует регистр;
  • [-n] — («Number»)фильтр выводит номера строк совпадений
  • [-w] — («Word»)фильтр поиска слова целиком. Т.е., ищет при точном совпадении, а не при вхождении
  • [-o] — («Only»)фильтр вывода только строки вхождения
  • [-r] — («Recursive»)фильтр рекурсивного поиска, если файлов много
  • [-l] — («List»)фильтр вывода списка файлов с совпадениями
  • [-c] — («Count»)фильтр вывода количества совпадений в файле
  • [-P] — («Perl»)перевод регулярного выражения в совместимый с языком Perl/Python
  • [-f] — («File»)фильтр, указывающий, что шаблоны или список шаблонов РВ берутся из файла
  • [-A N] — («After»)контекст посде совпадения на N строк
  • [-B N] — («Before»)контекст перед совпадением на N строк
  • [-C N] — («Context»)контекст перед и до совпадения на N строк
  • [«pattern»] — Строка совпадения или шаблон поиска регулярного выражения
  • [«filename»] — файл(«file.txt») или список файлов в директории(folder/*)

Пример 1: grep -Pno «\d{3}-\d{2}-\d{2}» file.txt > log.text — поиск совпадений шаблона номера в файле и запись результата в текстовый файл
Пример 2: rep -Pnof patterns.txt file.txt > log.text — в данном случае операция соответствует первому примеру, но шаблон(ы) берется(утся) из файла «patterns.txt», в котором шаблон записан в виде «\d{3}-\d{2}-\d{2}»

Алиасы

Примечание. Все алиасы хранятся в файле ~/.bashrc и добавляются конец файла по мере необходимости. После каждого добавления нужно обновить этот файла командой . ~/.bashrc или командой source ~/.bashrc

Пример 1: alias activate=’source bin/activate’ — теперь достаточно зайти в папку виртуальной среды и выполнить команду activate, чтобы теперь активировать виртуальную среду.

Установка и работа с базами данных MySQL и PostgreSQL

База данных бывает полезна для поделок и работы в терминале Linux. В роли реляционной БД можно использовать самые известные: MySQL и PostgreSQL.

Установка MySQL

Установка

$ sudo apt-get install mysql-server mysql-client

в процессе установки система затребует пароль для пользователя по умолчанию БД MySQL root и надо будет ее ввести.

Входим в интерпретатор команд SQL

$ mysql -u root -p<password>

где <password> — пароль, который мы вводили для root. После удачного ввода заходим в консоль MySQL, который начинается с mysql>.

Показ списка существующих баз данных

mysql>show databases;

Создание новой базы данных:

mysql>create database my_db character set utf8 collate utf8_unicode_ci;
  • character set — параметр установки кодировки
  • collate — параметр для указания кодировки, при котором будут сравниваться символы. В данном случае кодировка указана как utf8, а сравнивание будет производиться по той же кодировке utf8. *_ci в конце кодировки сравнивания указывает, что сравнивание будет регистронезависимой.

Удаление базы данных

mysql>drop database my_db;

Выход из консоли

mysql>exit;

 

Установка PostgreSQL

Установка

$ sudo apt-get install postgresql

После того, как сервер баз данных установился, нам нужно будет теперь поменять пароль пользователя

$ sudo -u postgres psql

Данная команда говорит системе, чтобы мы зашли в консоль под пользователя БД Postgres по умолчанию, который именуется, как postgres и могли выполнять операции. Далее мы войдем в консоль, который будет начинаться через postgres=#.

Теперь можно менять пароль. Для этого нужно вводить команды через обратный слэш

postgres=# \password

Далее система затребует новый пароль, который нужно будет подтвердить.

Создаем новую базу данных

postgres=# create database my_db;

 

Вывод списка всех БД

postgres=# \l

Удаление БД

postgres=# drop database db_name

 

Работа с CRON

Cron (Command Run ON) — система для автоматического запуска программ и скриптов на сервере в определённое время. Управлять cron нужно с помощью команды ‘crontab’.

Список задач cron для текущего пользователя можно посмотреть через команду

$ crontab -l

флаг -l указывает на то, что нужно вывести список(List) всех задач.

Для создания задач необходимо редактировать файл задач и для этого нужно выполнить команду

$ crontab -e

флаг -e указывает на то, что мы будем редактировать(Edit) список задач. После выполнения данной команды система потребует, чтобы вы из списка выбрали номер редатора, которым будете редактировать задания

Selection    Path                Priority   Status
------------------------------------------------------------
  0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Чтобы потом изменить редактор для cron нужно задать другое значение для параметра EDITOR

$ export EDITOR=/usr/bin/vim.basic

выбираем и идем дальше.

После вышеизложенной операции система откроет файл задач, там будет некоторый закоментированный текст и свободная часть для добавления новых задач

Пример скриншота, как выглядит файл задач cron
Пример скриншота, как выглядит файл задач cron

Чтобы разобраться, как задать время или интервалы исполнения нужно познакомиться с принципом задания значений cron. Ниже представлено описание параметров в их определенной позиции с лева направо

# ┌───────────── минуты (0 - 59)
# │ ┌───────────── часы (0 - 23)
# │ │ ┌───────────── дни в месяцах (1 - 31)
# │ │ │ ┌───────────── месяц (1 - 12)
# │ │ │ │ ┌───────────── день недели (0 - 6) (с понедельника по субботу;
# │ │ │ │ │                                   7 также воскресенье на некоторых системах)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * команда выполнения

 

Замечение. Есть хорошие валидаторы, которые дадут ясное понимание, как работает cron в UNIX — подобном окружении и одним из таких является сервис https://crontab.guru.

Параметры ввремени cron можно задавать по разному и тут важно отличать периодичность выполнения, единоразовое выполнение и выполнение при каждом цикле:

  • */n — выполнить с периодом 1/n;
  • n — выполнить каждый раз в это время;
  • n0, n1 — выполнить каждый раз в n0 и n1;
  • n0-n1 — выполнить всякий раз в интервале с n0 по n1;
  • * — выполнить всегда, при каждом цикле.

Пример 1.

1 0 * * * printf "" > /var/log/apache/error_log

Данная команда будет очищать журнал ошибок Apache в одну минуту полуночи (00:01) каждый день.

Пример 2.

45 23 * * 6 /home/oracle/scripts/export_dump.sh

Этот пример запускает скрипт shell под названием export_dump.sh в 23:45 в каждую субботу.

Пример 3. 

*/15 20 * * 1-5 /home/oracle/scripts/script.sh

Этот пример запускает скрипт shell под названием script.sh в каждые 15 минут 20 часа вечера в каждый будний день с понедельника по пятницу.

Деплой проекта Django в продакшн с Nginx + Gunicorn + Supervisor

👁 92 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

В данном посте рассмотрим один из современных вариантов деплоя готового проекта Django в готовый режим работы. В посте будет рассмотрены моменты настройки и интеграции с Django таких инструментов, как:

  • Nginx — WEB-сервер;
  • Gunicorn — HTTP-сервер Python WSGI;
  • Supervisor — менеджер процессов.

Исходные данные

Для использования данного поста требуются следующие исходные данные по ПО:

  • готовый удаленный сервер Linux в виде VPS/VDS с выделенным IP;
  • установленный и настроенный Python 3 c виртуальными средами и разрабатываемым проектом на Django;

Исходные данные по неймингу:

  • /home/myprojectenv/ — абсолютный путь к папке виртуальной среды;
  • /home/myprojectenv/myproject/ — абсолютный путь к папке проекта на Django;
  • (myprojectenv)user@host: /myprojectenv/ —  вид строки запроса в консоли под активной виртуальной средой Python;
  • 11.22.33.44IP нашего удаленного сервера VDS/VPS;
  • 8000 — порт, на котором будет подвешен наш проект.

 

Установка и настройка Nginx и Gunicorn

Для начала нужно сделать апгрейд

sudo apt-get update
sudo apt-get upgrade

Ставим Nginx

sudo apt-get install nginx

Теперь заходим под виртуальную среду нашего(или вашего) проекта

cd /home/myprojectenv/
source bin/activate

Под активной виртуальной средой ставим Gunicorn

(myprojectenv)user@host: /home/myprojectenv# pip[pip3] install gunicorn

Замечание. Помните про версии pip. Если Python 2.x, то пишем pip, если Python 3.xpip3. Это по дефолту, если у вас не настроено иначе.

Теперь, перед тем, как идти дальше, протестируем удачную установку Gunicorn и интеграцию с проектом Django и для этого выполняем команду

(myprojectenv)user@host: /home/myprojectenv/myproject# gunicorn myproject.wsgi:application --bind 11.22.33.44:8000

Идем в браузер и запускаем по адресу страницу 11.22.33.44:8000 и убеждаемся, что все ок.

Далее настраиваем папку статических файлов и для этого открываем файл настроек проекта в папке /home/myprojectenv/myproject/myproject/settings.py

nano settings.py

Добавляем в этот файл параметр STATIC_ROOT, если его нет, со следующим значением

...
STATIC_ROOT = '/home/myprojectenv/myproject/static/'
...

Сохраняем, выходим и далее выполняем из папки проекта команду

(myprojectenv)user@host: /home/myprojectenv/myproject# python manage.py collectstatic

После чего в папке проекта появится новая папка с именем static.

Теперь идем и настраиваем Nginx по пути в файле

cd /etc/nginx/sites-available/

открываем файлик default

nano default

и перепишем некоторые моменты, как ниже

server {
    listen 80;
    server_name 11.22.33.44; #либо ip, либо доменное имя
    access_log  /var/log/nginx/example.log;

    location /static/ {
        root /home/myprojectenv/myproject/;
        expires 30d;
    }

    location / {
        proxy_pass http://127.0.0.1:8000; 
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

сохраняем и выходим.

Выполняем перезапуск Nginx, чтобы изменения вступили в силу

sudo service nginx restart

 

Активируем нашу среду и заходим в папку проекта для проверки запуска в связке Gunicon + Nginx

(myprojectenv)user@host: /home/myprojectenv/myproject# gunicorn myproject.wsgi:application

В браузере набираем 11.22.33.44:8000 и убеждаемся, что все ок.

Установка и настройка Supervisor

Чтобы ваше приложение стартовало после любого непредвиденного рестарта системы или сбоя, нам нужно использовать в деле supervisor.

Установим supervisor

apt-get install supervisor

Создадим конфигурационный файл для gunicorn в подпапке проекта (myproject/myproject/) рядом с settings.py

cd /home/myprojectenv/myproject/myproject
touch gunicorn.conf.py
nano gunicorn.conf.py

и записываем туда такие данные, которые означают, что данный проект будет запущен на IP и порте 0.0.0.0:8000, что будет означать внешний адрес нашего VPS. Если у вас сервер локальный, то ставим 127.0.0.1

bind = '0:8000'
workers = 3
user = "nobody"

Теперь создаем конфигурационный файл для supervisor

cd /etc/supervisor/conf.d/
touch myproject.conf
nano myproject.conf

и записываем туда такие данные

[program:myproject]
command=/home/myprojectenv/bin/gunicorn myproject.wsgi:application -c /home/myprojectenv/myproject/myproject/gunicorn.conf.py
directory=/home/myprojectenv/myproject
user=nobody
autorestart=true
redirect_stderr=true

 

Запускаем проект через supervisor

supervisorctl restart myproject

В браузере набираем 11.22.33.44:8000 и убеждаемся, что все ок.

Дополнительный тест. Можно также перезагрузить сервер

shutdown -r now

и убедиться, что наш проекта на Django сам автоматом встал и заработал при помощи supervisor.

При использовании Supervisor необходимо использовать его подпроцесс управления supervisorctl. Остальные основные команды supervisor

  • supervisorctl start myproject;
  • supervisorctl reread;
  • supervisorctl update;
  • supervisorctl status myproject.

 

Возможные ошибки использования Supervisor и Gunicorn

Ошибки в файлах конфигурации

Это с большей вероятностью, потому что конфигурационных файлов 2 и нужно, чтобы они были настроены слажено без ошибок. Напомним, что они у нас находятся по путям:

  • Файл конфигурации Gunicorn в пределах текущего проекта /home/myprojectenv/myproject/myproject/gunicorn.conf.py
  • Файл конфигурации проекта в виде управляемого процесса внутри Supervisor /etc/supervisor/conf.d/myproject.conf

 

Ошибка запуска из-за занятости стандартного порта Supervisor

Обычно, эта ошибка выглядит так, при запуске команды запуска supervisorctl start myproject

cloudApp: ERROR (spawn error)

или так, при запуске команды поиска ошибок supervisord -n

Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord

Для решения этой проблемы сначала убиваем процесс Supervisor, который можно сделать несколькими способами.

Первый. Выводим весь список процессов Supervisor и убиваем нужный по PID(в списке он будет после первого)

ps -ef | grep supervisord
sudo kill -9 PID_OUR_PROJECT

или

ps -ef | grep supervisord
kill -s SIGTERM PID_OUR_PROJECT

 

Второй. Убиваем сам supervisord

sudo pkill supervisord

 

Третий. Удаляем файл supervisor.sock и запускаем supervisor обратно

sudo unlink /run/supervisor.sock
sudo /etc/init.d/supervisor start

Теперь перезапускаем проект

supervisorctl start cloudApp
Ошибка ERROR (no such process) при запуске нового процесса

Данная ошибка появляется, когда мы создали новый проект, но он не обновился в системе Supervisot и для решения этой проблемы нам нужно перезаписать все процессы и перезагрузить supervisorctl

supervisorctl reread
supervisorctl reload

 

Если не удается идентифицировать ошибку

Если проблему трудно найти или идентифицировать, то будет полезной использовать команду

supervisord -n

который выведет весь список ошибок в файлах или сервисах, которые мешают запускаться процессу Supervisor.

 

Использованные материалы:

  1. Django + Python3 + Nginx + Gunicorn + DO;
  2. Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL

 

Увеличиваем время соединения по протоколу SSH

👁 28 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Иногда необходимо долго ждать установку или выполнение какого-то пакета или скрипта и время таймаута соединения по умолчанию не хватает и соединение может прерваться в середине процессе. Это делается очень просто прописыванием 3-х параметров в файле /etc/ssh/sshd_config

TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 60

 

Данные параметры уже есть в данном файле, их, просто, нужно раскоментировать и прописать против них новые значения на увеличение времени таймаута соединения SSH.

TCPKeepAlive — установлен в «yes», значит сервер будет периодически пинговать клиента, проверяя жив ли он.
ClientAliveInterval — задает интервал пинга для проверки состояния клиента (в секундах). Параметр работает только для протокола версии 2 (Protocol 2).
ClientAliveCountMax — количество пингов клиента.
Таким образом в моем примере таймаут сессии будет равен 60*300/60 = 300 минут = 5 часов.
После изменения данных параметров перезапускаем сервис ssh

sudo service ssh restart

Построение проекта Django с БД Postgre SQL и импорт данных из SQLite

👁 42 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Допустим, есть у нас такая ситуация, что проект на Django установлен а использованием локальной БД SQLite и нам необходимо это все экспортировать в реляционную БД на примере PostgreSQL.

Реляционные системы управления базами данных являются ключевым компонентом многих веб-сайтов и приложений. Они обеспечивают структурированный способ хранения, организации и доступа к информации.

PostgreSQL или Postgres — это система управления реляционными базами данных, которая обеспечивает реализацию языка запросов SQL. Это популярный выбор для многих небольших и крупных проектов и имеет то преимущество, что он совместим со стандартами и обладает множеством дополнительных функций, таких как надежные транзакции и параллелизм без блокировок чтения.

Установка и настройка PostgreSQL на Ubuntu

Репозитории Ubuntu по умолчанию содержат пакеты Postgres, поэтому их можно установить с помощью apt-системы. Перед этим обновим свой локальный индекс пакета. Затем установим пакет Postgres вместе с пакетом -contrib, который добавит некоторые дополнительные утилиты и функции

sudo apt-get update
sudo apt-get install libpq-dev postgresql postgresql-contrib

Запускаем PostgreeSQL

sudo su - postgres

Командная строка терминала теперь будет начинаться с postgres@yourserver.

Теперь заходим в режим команд SQL и интерфейса PostgreSQL

postgres@yourserver# psql

После команды выше командная строка теперь будет начинаться с postgres=#.

Создаем базу данных для проекта, обратите внимание, что в режиме SQL запрос должен оканчиваться «;»

postgres=# CREATE DATABASE projectdb;

 

Создаем пользователя для БД проекта

postgres=# CREATE USER dbuser WITH PASSWORD 'userpass';

Мы устанавливаем кодировку по умолчанию для UTF-8, которую ожидает Django. Мы также устанавливаем схему изоляции транзакций по умолчанию «read commit», которая блокирует чтение из незафиксированных транзакций. Наконец, мы устанавливаем часовой пояс. По умолчанию наши проекты Django будут настроены на использование UTC

postgres=# ALTER ROLE dbuser SET client_encoding TO 'utf8';
postgres=# ALTER ROLE dbuser SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE dbuser SET timezone TO 'UTC';

 

Теперь все, что нам нужно сделать, это предоставить нашим пользователям права доступа к базе данных, которую мы создали

postgres=# GRANT ALL PRIVILEGES ON DATABASE projectdb TO dbuser;

 

Выходим из режима ввода SQL, чтобы вернуться к сеансу оболочки postgres

\q

Выходим из сеанса оболочки postgres, чтобы вернуться к сеансу оболочки обычного пользователя

exit

Настройка проекта Django на использование

PostgreSQL

Теперь, когда наша база данных настроена, мы можем установить Django. Для большей гибкости мы установим Django и все его зависимости в виртуальной среде Python

Создание и настройка виртуальной среды

Создаем виртуальную среду для хранения зависимостей Python проекта Django, набрав команду

virtualenv myprojectenv

Это установит локальную копию Python и pip[pip3] в каталог myprojectenv

Прежде, чем создать проект Django нужно сначала активировать виртуальную среду, которую мы создали шагом выше

source myprojectenv/bin/activate

После этой команды строка запроса будет похожа на (myprojectenv)user@host.

В окружении проекта устанавливаем пакеты Django и psycopg2, который является бэкэндом для PostgreSQL

(myprojectenv)user@host: /myprojectenv# pip[pip3] install django psycopg2

 

Замечение. Тут еще один момент, связанный с psycopg2. Начиная с версии 2.8 данный пакет будет переименован в psycopg2-binary и поэтому нужно дополнительно установить данный пакет с этим названием

(myprojectenv)user@host: /myprojectenv# pip[pip3] install django psycopg2-binary

В противном случае, может возникнуть предупреждение такого рода

/home/websofter/lib/python3.6/site-packages/psycopg2/__init__.py:144: 
UserWarning: The psycopg2 wheel package will be renamed from release 2.8; 
in order to keep installing from binary please use "pip install psycopg2-binary" instead. 
For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.

Дополнительно про это можно узнать по ссылке.

Создание и настройка проекта Django

Теперь мы можем запустить проект Django в нашей директории myprojectenv. Это создаст дочерний каталог с именем проекта myproject , в котором будет еще одна папка с тем же названием для хранения самого кода и создаст сценарий управления в текущем каталоге. Не забудьте добавить точку в конце команды, чтобы она была правильно настроена

(myprojectenv)user@host: /myprojectenv# pip[pip3] django-admin.py startproject myproject .

 

Теперь нам надо отредактировать файл настроек myproject/myproject/settings.py проекта на то, чтобы проект, вместо базы SQLite, который стоит по умолчанию начал работать с базой Postgre, который мы выше настроили и для этого открываем этот файл настроек и ищем там строки

. . .
ALLOWED_HOSTS = []
. . .
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
. . .

и заменяем это все на

. . .
ALLOWED_HOSTS = ['server-domain_or_IP']
. . .
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'projectdb',
        'USER': 'dbuser',
        'PASSWORD': 'userpass',
        'HOST': 'localhost',
        'PORT': '',
    }
}
. . .

Сохраняем и закрываем этот файл.

Миграция баз данных на использование Postgre и запуск проекта

Теперь, когда настройки Django настроены, мы можем перенести наши структуры данных в нашу базу данных и протестировать сервер.

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py makemigrations
(myprojectenv)user@host: /myprojectenv/myproject# python manage.py migrate

После создания структуры базы данных мы можем создать учетную запись администратора проекта, набрав

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py createsuperuser

Вам будет предложено выбрать имя пользователя, указать адрес электронной почты и выбрать и подтвердить пароль для учетной записи

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py runserver 0.0.0.0:8001

На этом интеграция и запуск закончена. Остается любоваться результатом через адрес сервера и порт 8001, на котором запущен наш проект Django с БД Postgree

http://server_domain_or_IP:8000

 

Импорт данных из SQLite в PostgreSQL

в проекте Django

Окей. Выше мы рассмотрели, как интегрировать проект Django с Postgre, но что если в SQLite есть уже данные, которые нужно перенести в Postgre SQL?

Выгружаем существующие данные из SQLite, причем, в настройках settings.py нужно настроить на использование SQLite

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py dumpdata > datadump.json

Изменяем settings.py на использование Postgres backend. Выше мы это уже рассматривали как делать.

Убедитесь, что вы можете подключиться к PostgreSQL. Затем

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py migrate --run-syncdb<br>

 

Использованные источники:

  1. How To Use PostgreSQL with your Django Application on Ubuntu 14.04
  2. How to migrate Django from SQLite to PostgreSQL

Установка Python 3.6 и настройка виртуальных сред на Ubuntu 18

👁 76 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Установка и работа с virtualenv

Обновляем систему

sudo apt-get update

Ставим Python 3.6 из коробки

apt install python3.6

Теперь, если удачно установилось, то можем проверить версию и место утсновки

python3.6 -v
whereis python3.6
which python3.6

Делаем алиас-ссылку, чтобы Python 3.6 запускался через команду python

alias python=python3.6

Замечание. Команда добавления алиаса выше в идеале должна создать равносильную ссылку команды python с python3. Но, вероятно, что он может не сработать и тогда придется вручную править файл .bashrc

nano ~/.bashrc

и добавляем туда линк

alias python=python3

Файл .bashrc предназначен для задания псевдонимов команд и функций, используемых пользователями оболочки bash.

Ставим пакетный менеджер для Python 3

sudo apt-get install python3-pip

Ставим инструмент виртуальных сред

sudo pip3 install virtualenv

 

Замечание. Если вы используете Python 3.3 или выше, то venv модуль уже включен в стандартную библиотеку Python. Он также, как и virtualenv может создавать и управлять виртулаьными средами, но он поддерживается только в версиях Python 3.x

Создаем среду, активируем и работаем

virtualenv myenv
cd myenv
source bin/acivate

Для деактивации и выхода из текущей виртуальной среды выполняем привычную команду

deactivate

 

Можно обойтись одним лишь базовым инструментом virtualenv для работы с виртуальными средами в Python, но помимо его базовых функций есть возможность использовать расширяющий возможности инструмент под названием virtualenvwrapper, с которым познакомимся ниже.

Установка и работа с virtualenvwrapper

virtualenvwrapper — это набор расширений для virtualenv с дополнительным инструментарием. Расширение включают в себя оболочку для создания и удаления виртуальных сред и, в противном случае, управление рабочим процессом разработки, что упрощает работу над несколькими проектами одновременно без введения конфликтов в их зависимости.

Установка virtualenvwrapper

pip install virtualenvwrapper

Смотрим, где находится virtualenvwrapper.sh

which virtualenvwrapper.sh

Данная команда выведет информацию о пути нахождения типа /usr/local/bin/virtualenvwrapper.sh. Теперь нужно добавить некоторую информацию в конце нашего файла ~ / .bashrc

sudo nano ~/.bashrc

Добавляем в конец

# where to store our virtual envs
export WORKON_HOME=$HOME/virtenvs
# where projects will reside
export PROJECT_HOME=$HOME/Projects-Active
# where is the virtualenvwrapper.sh
source /usr/local/bin/virtualenvwrapper.sh

Сохраним изменения

source ~/.bashrc

Проверяем, что все установилось

workon

Это выведет пустую строку, что будет означать успешность работы

Базовые операции virtualenvwrapper

Создаем виртуальную среду

mkvirtualenv myenv

Если нужно создать сразу с рабочей папкой

mkproject myenv

Можем узнать сколько виртуальных окружений

workon

Для переключения просто набираем

workon myenv

Для выхода

deactiavate

Для удаления виртуального окружения

rmvirtualenv

 

Если вы случайно сломали или удалили MySQL в составе VestaCP на Ubuntu

👁 39 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Восстановление MySQL в Vesta CP

Если проблема возникла по неосторожности, то попробуйте так:

apt-get --purge remove mysql-common
apt-get install mysql-server

 

Удаление и замена MySQL на MariaDB

в Vesta CP

Если MySQL не хочет, то можно пробовать использовать MariaDB. Базы данных при этом сохраняются и автоматически импортируются

sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get install mariadb-server

 

Восстановление сайтов из Backup-ов

Это крайни и долгий процесс, особенно, если у вас на одном серваке много сайтов

Установка Django и запуск на VPS Ubuntu с доступом через домен

👁 69 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Установка Django

Для начала нам нужно установить Python 2.7 или установить Python 3.6 с инструментом virtualenv, при помощи которого создаем виртуальную среду(например myenv) и в активированном режиме выполняем команду установки

(myenv)root@username:/home/myenv# pip3 install django

Замечание. Если мы используем интерпретатор версии 2.x, то пакетный менеджер по умолчанию будет просто pip, а если используется версия 3.x, то он будет называться pip3. В данном примере используется интерпретатор 3.6.

Далее создаем проект Django

(myenv)root@username:/home/myenv# django-admin startproject mysite

Теперь в папке(виртуальной среде) myenv будет новая папка mysite,  в котором будет наш проект наш Django

Заходим в саму папку проекта mysite и мигрируем туда инструменты Django командой

(myenv)root@username:/home/myenv/mysite# python manage.py migrate

 

Замечание по возможным ошибкам. Вероятно, что появится ошибка версий, если помимо Python 3.7 у нас в системе Python 2.7, 3.5, 3.6 … и выглядит это так:

Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "manage.py", line 14, in <module>
) from exc
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

Чтобы это решить нужно либо поменять алиас

alias python=/usr/bin/python3.6

Замечание. Команда добавления алиаса выше в идеале должна создать равносильную ссылку команды python с python3. Но, вероятно, что он может не сработать и тогда придется вручную править файл .bashrc

nano ~/.bashrc

и добавляем туда линк

alias python=python3

Файл .bashrc предназначен для задания псевдонимов команд и функций, используемых пользователями оболочки bash.

Либо запустить команды Django той версией, которая подходит

(myenv)root@username:/home/myenv/mysite# python3.6 manage.py migrate

Даем доступ к нашему проекту из вне, разрешив адрес сервера в файле проекта

mysite
|______mysite
           |______settings.py

и задаем параметр, как адрес нашего VPS

ALLOWED_HOSTS = ["66.54.87.12"]

 

Замечание. Если проект запускается на локальном хостинге, то можно не указывать порт и адрес, а в файле настроек settings.py оставляем все как есть или указываем адрес 127.0.0.1

Запускаем сервер по IP адресу

(myenv)root@username:/home/myenv/mysite# python manage.py runserver 0:8001

Замечание. Цифра 0 означает,что мы запускаем наш сайт по адресу 0.0.0.0:8001 это говорит нам о том, что к нашему проекту отныне можно получить доступ из вне через IP VPS.

Запуск и создание администратора сайта

Теперь зайдя по адресу нашего IP мы увидим страницу приветствия проекта Django

Давайте теперь создадим нового суперпользователя для нашего проекта Django

(myenv)root@username:/home/myenv/mysite# python manage.py createsuperuser

Данная команда далее запросит имя пользователя, электронную почту и пароль, при помощи которых мы сможем войти в панель управления проектом через адрес 66.54.87.12:8001/admin

После удачного входа мы увидим страницу администратора

 

Краткий ликбез по Virtual Environments в Python 2.7

👁 69 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Virtual Environment или виртуальная среда — это инструмент, который позволяет держать и хранить зависимости, требуемые для различных проектов в разделенных хранилищах, которые образуются созданием виртуальных сред. Это может решить проблему, когда проекту X, требуется утилита от версии 1.x, а проекту Y требует эта же утилита, но с версией 4.x. Это позволяет держать и сохранять вашу глобальную директорию пакетов чистым от хаоса и мусора версий утилит и позволяет легко управлять различными версиями утилит в локальной среде.

Для примера, вы работает с проектом, который требует Django 1.3, которому также необходим проект, который требует Django 1.0 и виртуальные среды в Python дают такую возможность.

Инструмент virtualenv

virtualenv — это инструмент, который позволяет создавать изолированные среды выполнения кода Python. virtualenv создает папку, которая содержит все необходимые выполнения, используя пакеты, которые необходимы проекту на Python.

virtualenv устанавливается через pip:

pip install virtualenv

Создание виртуальной среды Python

Создаем виртуальную среду для проекта:

cd my_project_folder
virtualenv venv

Команда virtualenv venv должен создать папку в текущей директории, в котором должны находиться исполняемые файлы Python и копии библиотек pip, которых вы можете использовать для установки других пакетов. Имя виртуальной среды( в нашем случае, это venv) может быть любым. Если не вводить имя, то все эти выполняемые файлы будут находиться в текущей директории без добавления в подпапку.

Это создаст копию Python в любой директории, где запустите эту команду, положит его в папку под именем venv.

Вы также можете использовать версию интерпретатора

virtualenv -p /usr/bin/python2.7 venv

 

Данная команда будет использовать интерпретатор в директории /usr/bin/python2.7

Активация виртуальной среды Python

Перед началом использования виртуальной среды необходимо сначала ее активировать командой:

source venv/bin/activate

Название текущей виртуальной среды должно появиться в правой части командной строки запроса (т.е. (venv) Your-Computer: your_project UserName$), чтобы вы знали, что она сейчас активна. С текущего момента, любой пакет, который вы установите при помощи pip должен быть перемещен в папку venv, который изолирован от глобальной инсталляции Python.

Устанавливаем пакеты как обычно:

pip install requests

Деактивация виртуальной среды Python

Если вы завершили работу с виртуальной средой, то можете сделать выход из нее, задав команду деактивации

deactivate

Это произведет обратный выход из виртаульной среды к интерпретатору системы по умолчанию со всеми его установленными библиотеками.

Удаление виртуальной среды Python

Для удаления виртуальной среды достаточно просто удалить директорию командой

rm -rf venv

Через некоторое время вы, возможно, столкнетесь с множеством виртуальных сред, засоренных в вашей системе, и, возможно, вы забудете их имена или место их размещения.

Дополнительные замечания

Запуская команду virtualenv с опцией —no-site-packages не будут включены пакеты, которые установлены глобально. Это может быть полезно для сохранения списка пакетов в случае, если к нему нужно получить доступ позже. [Это поведение по умолчанию для virtualenv 1.7 и поздних.]

Заморозка пакетов виртуальной среды Python

Чтобы ваша среда была последовательной, рекомендуется «заморозить» текущее состояние пакетов среды. Для этого запустите

pip freeze > requirements.txt

Эта команда создаст файл requirements.txt, который будет содержать простой список пакетов в текущей среде и их соответствующие версии. Тем самым, вы сможете посмотреть список установленных пакетов без требуемого формата, используя “pip list”.

Импорт пакетов виртуальной среды Python

Позже, список в данном файле может облегчить сложности разработчику, если он захочет пересоздать такую же среду, установив похожие пакеты с их версиями и делается это командой

pip install -r requirements.txt

Это может помочь обеспечить согласованность между установками, между развертками и между разработчиками.

Один из важных моментов. Необходимо исключить папку виртуальной среды из контроля исходного кода, добавив его в список игноринга.

Инструмент virtualenvwrapper

virtualenvwrapper предоставляет набор команд, которые делают работу с виртуальными средами более приятным и продуктивным. Он также размещает все ваши виртуальные среды в одном месте.

Для установки(перед этим проверьте, что у вас установлен virtualenv)

pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh

После этих команд все виртуальные среды будут создаваться в глобальной директории /root/Evns/.

(Тут полная инструкция по установка virtualenvwrapper.)

Для Windows. Для пользователей Windows есть специфичная версия под названием virtualenvwrapper-win.

pip install virtualenvwrapper-win

В Windows путь path для WORKON_HOME является %USERPROFILE%/Envs

Создаем среду при помощи команд virtualenvwrapper

Создание виртуальной среды

mkvirtualenv venv

Это создаст папку виртуальной среды venv внутри ~/Envs.

Работа над виртуальной средой при помощи команд virtualenvwrapper

workon venv

Альтернативно вы можете создать проект, который создаст виртуальную среду, а также директорию проекта внутри $PROJECT_HOME

mkproject myproject

virtualenvwrapper предоставляет таб-завершение на именах среды. Это реально помогает вам, когда у вас много сред и есть вероятность забыть их имена

Деактивация при помощи команд virtualenvwrapper

Деактивация по-прежнему остается неизменной

deactivate

 

Удаление при помощи команд virtualenvwrapper

Удаление

rmvirtualenv venv

 

Другие полезные команды virtualenvwrapper

1) Список всех сред

lsvirtualenv

2) Переход в директорию текущей активной среды, так вы сможете увидеть ее site-packages, к примеру

cdvirtualenv

3) Похож, как и выше, но заходить внутрь site-packages  активной текущей среды

cdsitepackages

4) Покажет содержимое директории site-packages

lssitepackages

 

Тут полный список всех остальных полезных команд модуля virtualenvwrapper.

 

Инструмент virtualenv-burrito

С virtualenv-burrito вы можете иметь рабочую комбинированную среду virtualenv + virtualenvwrapper в одной команде.

Инструмент autoenv

Модуль autoenv позволяет при переходе в директорию, которая содержит .env автомагически активировать среду.

Установка в Linux

git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv
echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc

 

Установка в Mac через brew

brew install autoenv

 

Список источников

  1. Virtual Environments

Как установить Python 3.7.0 на Ubuntu, Debian и LinuxMint

👁 203 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

При написании этой статьи Python 3.7.0 — последняя стабильная версия серии 3.7, которую можно установить. Эта статья поможет вам установить Python 3.7.0 в операционную систему Ubuntu и LinuxMint.

Шаг 1 — Требования

Необходимо запустить серию следующих команд, чтобы установить требования для установки интерпретатора языка Python 3.7

sudo apt-get update
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Шаг 2 — Загружаем Python 3.7

Загрузите Python с официального сайта, используя следующую команду

cd /usr/src
wget wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

Теперь извлеките загруженный пакет

sudo tar xzf Python-3.7.0.tgz

Шаг 3 — Компилируем исходники Python

Используйте ниже набор команд для компиляции исходного кода python в вашей системе с помощью altinstall

cd Python-3.7.0
sudo ./configure --enable-optimizations
sudo make altinstall

make altinstall используется для предотвращения замены двоичного файла python по умолчанию /usr/bin/python.

Шаг 4 — Проверяем версию Python

Проверьте последнюю версию, установленную на python, используя команду ниже

python3.7 -V

 

Источники:

  1. How to Install Python 3.7.0 on Ubuntu, Debian and LinuxMint