Django - Урок 044. Установка и настройка Django на Mac OS

Mac, Homebrew, Nginx, MacOS, Python, Apple, Django

Содержание

Предлагаю рассмотреть процесс установки и настройки проекта Django на Mac OS X на основе существующего проекта.

Некоторые шаги будут похожи на те, которые уже выполнялись в статье по настройке Django для Ubuntu .

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

  1. Установка python 3
    brew install python3
  2. Установка pip
    sudo easy_install pip
  3. Установка virtualenv для создания виртуальных окружений
    sudo pip3 install virtualenv
  4. Установка виртуального окружения для проекта
    virtualenv project_env --python=python3
  5. Переходим в каталог виртуальной среды проекта и клонируем репозиторий.
    cd project_env
      git clone git@bitbucket.org:MyUser/project.git
  6. Также клонируем подмодули, если в вашем проекте используются git submodule
    cd project
      git submodule init
      git submodule update
  7. Надеюсь, что вы используете requirements.txt файл, поскольку настал момент для установки всех необходимых в проекте пакетов
    pip install -r requirements.txt

Установка необходимой версии Python

В том случае, если вам требуется какая-то конкретная версия python, например, в том случае когда репозитории вашего production сервера не имеют последней версии, то необходимо настроить вашу Mac OS X специально для работы с необходимой версией.

brew install pyenv
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
brew install zlib
pyenv install 3.6.7

Если вам не удаётся установить python и возникает следующая ошибка

BUILD FAILED (OS X 10.14.4 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274
Results logged to /var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274.log

Last 10 log lines:
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

то создаём файл .zshrc со следующим содержимым

# For compilers to find zlib you may need to set:
export LDFLAGS="${LDFLAGS} -L/usr/local/opt/zlib/lib"
export CPPFLAGS="${CPPFLAGS} -I/usr/local/opt/zlib/include"

# For pkg-config to find zlib you may need to set:
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH} /usr/local/opt/zlib/lib/pkgconfig"

Далее выполняем оставшиеся действия

source .zshrc
pyenv install 3.6.7

Проверим доступные версии python

pyenv versions

Настроим требуемую версию python

pyenv local 3.6.7
pyenv global 3.6.7

Проверим версию python, которая теперь используется в вашей Mac OS X.

python --version

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

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

  1. Удаление предыдущей версии Postgres
    brew uninstall --force postgresql
  2. Удаление всех файлов Postgres
    rm -rf /usr/local/var/postgres
  3. Установка Postgres с использованием Homebrew
    brew install postgres
  4. Установка PostGIS с использованием Homebrew
    brew install postgis
  5. Запуск сервера PostgreSQL. Может потребоваться запускать данную команду каждый раз, когда будете заниматься разработкой сайта.
    pg_ctl -D /usr/local/var/postgres start
  6. Создание базы данных проекта. Многие из этих шагов мы уже проходили в самой первой статье по настройке Django на компьютере под управлением ОС
    psql postgres
      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;
      \q

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

Для раздачи статического контента у меня используется Nginx, поэтому и на development машине также установим Nginx.

brew install nginx
sudo brew services start nginx

Настройка конфигурации Nginx

На данном шаге необходимо настроить Nginx сервер. Для чего нужно отредактировать файл nginx.conf, а также создать файл настроек вашего сервера в каталоге servers.

nano /usr/local/etc/nginx/nginx.conf

Удалим содержимое файла и добавим следующую информацию.

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    include servers/*;
}

Далее создадим файл myproject

touch /usr/local/etc/nginx/servers/myproject

И добавляем содержимое, которое будет выглядеть следующим образом.

server {
    listen 80;
    server_name 111.222.333.44; # здесь прописать или IP-адрес или доменное имя сервера

    location /static/ {
        root /Users/<user>/myprojectenv/myproject/myproject/;
        expires 30d;
    }

    location /media/ {
        root /Users/<user>/myprojectenv/myproject/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 brew services restart nginx

Заключение

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

Для Django рекомендую VDS-сервера хостера Timeweb .

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
АС
26 мая 2020 г. 12:29
Артём Сун-Дун-Чан

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
МН
25 мая 2020 г. 12:33
Митя Нагибин

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
f
25 мая 2020 г. 6:05
falcon

C++ - Тест 001. Первая программа и типы данных

  • Результат:66баллов,
  • Очки рейтинга-1
Последние комментарии
28 мая 2020 г. 16:14
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Ну в моём примере, который в статье сработало так model->setData(model->index(1, 1), 7); Поскольку model->index(1, 0) - это индекс колонки id, которая скрыта, поэтому…
МА
28 мая 2020 г. 16:08
Михаил А

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Спасибо, завтра првоерю. А model->setData(model->index(1, 0), 7); Тоже заработало?
28 мая 2020 г. 16:06
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Да, метод data всё-таки влиял, я переписал его так и заработало удаление QVariant TableModel::data(const QModelIndex &idx, int role) const{ if (role == Qt::BackgroundColorRole) {…
28 мая 2020 г. 15:49
Евгений Легоцкой

Django - Урок 011. Добавление комментариев на сайт с Django

Он более функциональный и его функционал объективно лучше поддерживается Django. Из первого, что приходит на ум: Это наличие полей типа Array Поддержка полей для JSON …
28 мая 2020 г. 15:42
progammist

Django - Урок 011. Добавление комментариев на сайт с Django

а в чем явное преимущество postgresql над mysql?)
Сейчас обсуждают на форуме
RG
28 мая 2020 г. 19:21
Rovshan Gurbanov

Сборка под старые версии Android

У меня SDK почти все версии есть, NDK есть версии 10, 17, 21. Но собирается приложение только с NDK v21 под Android версии 7.0 и выше Версия Qt у меня 5.14.2
28 мая 2020 г. 8:58
Евгений Легоцкой

Освобождение памяти QMainWindow::setCentralWidget

Да, соглашусь. Просто удаление происходит позже, а не сразу.
28 мая 2020 г. 6:43
Михаиллл

При подключении к git как указать пароль?

Нужно сделать ssh-keygen и потом полученый из файла код скопировать в ssh ключ в бикбакете
F
28 мая 2020 г. 2:42
Fidan

QML

Да, проблема ушла, спасибо.
1 мая 2020 г. 9:19
Михаиллл

Как в Qt в qmenu добавить scrollarea

Вот это наследованный класс меню. Но посути это обычное меню. #pragma once#include <QtWidgets>class TransMenu : public QMenu { Q_OBJECTpublic: TransMenu(QWidget* parent = …
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB