Первым делом ставим виртуальное окружение
sudo pacman -S python2-pip sudo pip2 install virtualenv virtualenvwrapper mkdir ~/Env echo "export WORKON_HOME=~/Env" >> ~/.bashrc echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2" >> ~/.bashrc echo "source /usr/bin/virtualenvwrapper.sh" >> ~/.bashrc source ~/.bashrc mkvirtualenv firstsite
Из-под виртуального окружения (в которое мы попадаем после mkvirtualenv) ставим необходимые модули и создаем Django-проект:
pip install django psycopg2 gunicorn cd ~ django-admin startproject firstsite
Далее правим настройки проекта:
nano ~/firstsite/firstsite/settings.py
# ... ALLOWED_HOSTS = ['доменные_имена', 'и/или_ip-адрес_проекта'] # ... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'имя_бд', 'USER': 'имя_пользователя_бд', 'PASSWORD': 'пароль_пользователя_бд', 'HOST': 'localhost', 'PORT': '', } } # ... STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') # ...
Выходим из виртуального окружения:
deactivate
Ставим БД PostgreSQL:
sudo pacman -S postgresql
Создаем БД для проекта:
sudo -u postgres psql
CREATE DATABASE имя_бд; CREATE USER имя_пользователя_бд WITH PASSWORD "пароль_пользователя_бд"; ALTER ROLE имя_пользователя_бд SET client_encoding TO 'utf8'; ALTER ROLE имя_пользователя_бд SET default_transaction_isolation TO 'read committed'; ALTER ROLE имя_пользователя_бд SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE имя_бд TO имя_пользователя_бд; \q
Возвращаемся в виртуальное окружение:
workon firstsite
Из-под него продолжаем развертывание проекта:
cd ~/firstsite ./manage.py migrate ./manage.py createsuperuser ./manage.py collectstatic
Проверяем, не допустили ли где ошибку или не пропустили ли чего:
./manage.py runserver 0.0.0.0:8000
Открываем в браузере ip-адрес_нашего_проекта:8000 (главное не забыть указать его в ALLOWED_HOSTS в settings.py):
Выходим из виртуального окружения:
deactivate
Ставим nginx:
sudo pacman -S nginx
Создаем каталог для конфигов виртуалхостов:
sudo mkdir /etc/nginx/conf.d/
И создаем там конфиг для нашего проекта:
nano /etc/nginx/conf.d/firstsite.conf
server { listen 80; server_name доменное_имя_проекта www.доменное_имя_проекта; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/<username>/firstsite; } location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/home/<username>/firstsite/firstsite.sock; } }
Указываем nginx’у читать все конфиги из новосозданного каталога:
sudo nano /etc/nginx/nginx.conf
... http { include /etc/nginx/conf.d/*.conf; ...
Создаем systemd-юнит для gunicorn:
sudo nano /etc/systemd/system/gunicorn-firstsite.service
[Unit] Description=Gunicorn service for firstsite After=network.target [Service] User=<username> Group=http WorkingDirectory=/home/<username>/firstsite ExecStart=/home/<username>/Env/firstsite/bin/gunicorn --workers 3 --bind unix:/home/<username>/firstsite/firstsite.sock firstsite.wsgi:application [Install] WantedBy=multi-users.target
Активируем и запускаем gunicorn-юнит и nginx:
sudo systemctl enable gunicorn-firstsite sudo systemctl start gunicorn-firstsite sudo systemctl enable nginx sudo systemctl start nginx
Проверяем в браузере:
Работает. Вот и славно!