Развёртывание Django веб-проекта на облачном сервере AWS EC2, Linode или Digital Ocean
Настройка сервера
Вы можете использовать AWS EC2, Linode или Digital Ocean для использования этой инструкции.
-
Шаг 1: Создайте аккаунт AWS или другой.
-
Шаг 2: Используйте терминал как ssh клиент, чтобы залогиниться как root и запустите:
ssh root@IP
apt update && apt upgrade -y
-
Шаг 3: Назначьте hostname для сервера. Я использовал linuxmachine-server. Вы можете использовать что угодно.
hostnamectl set-hostname linuxmachine-server
-
Шаг 4: Свяжите host ip (Public IPv4 address на AWS) и hostname
запуститеnano /etc/hosts
и добавьте ваш server ip, нажмите Tab и добавьте ваш hostname (из Шага 3) -
Шаг 5: Установите некоторые зависимости
запустититеsudo apt install ufw
(ufw - простой firewall) -
Шаг 6 (при необходимости): Создайте обычного пользователя и назначьте ему права sudo
запуститеadduser USERNAME
придумайте любое имя пользователя. Введите пароль для нового пользователя и пропустите остальные вопросы
разлогиньтесь как root, набравexit
и залогиньтесь с новым именем пользователя:ssh username@IP
-
Шаг 7: Установите некоторые правила для файервола и включите его
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow 8000
sudo ufw enable
sudo ufw status
(проверьте, чтобы убедиться, что фаервол запущен и работает)
-
Шаг 8 (при необходимости): Установите ssh ключи на вашу локальную машину (компьютер)
запуститеssh-keygen -b 4096
оставьте значения по умолчанию
запуститеssh-copy-id username@IP
чтобы отправить их на сервер
необязательно: Если у вас несколько пар ssh ключей, тогда запуститеssh-add ~/.ssh/{name of ssh key}
-
Шаг 9: Отключите авторизацию root и авторизацию по паролю
запуститеsudo nano /etc/ssh/sshd_config
Установите для параметра «PermitRootLogin» значение «No» и раскомментируйте «PasswordAuthentication» и установите значение «No» -
Шаг 10: Перезагрузите сервер
запуститеsudo reboot
Разворачивание Django проекта на сервере
-
Шаг 11 (при необходимости): Переключитесь на ваше виртуальное окружение
запуститеvirtualenv venv -p python3
запуститеsource venv/bin/activate
Вы должны видеть что-то вроде (venv) в строке терминала -
Шаг 12 (при необходимости): Отправьте Django проект с локального компьютера на сервер
запуститеscp -r {local path to project folder} username@IP:~/
-
Шаг 13: Обновите settings.py. Переместитесь в settings.py в вашей папке проекта
установитеDebug=False
обновитеAllowed_Hosts =['Add Your IP or Domain Name']
при необходимости: Добавьте static root с помощью следующей строкиSTATIC_ROOT = os.path.join(BASE_DIR, ‘static')
в файл settings.py -
Шаг 14 (при необходимости): Вернитесь в директорию, где находится manage.py
запуститеpython manage.py collectstatic
-
Шаг 15 (при необходимости): Устаносите Gunicorn и Nginx
запуститеpip install gunicorn
запуститеsudo apt install nginx libpq-dev
-
Шаг 16 (при необходимости): Проверьте, может ли gunicorn захостить ваш Django проект. Измените ProjectName на то, как называется ваш проект.
запуститеgunicorn --bind 0.0.0.0:8000 ProjectName.wsgi
-
Шаг 17 (при необходимости): Отключите venv и создайте gunicorn systemd файл
запуститеdeactivate
. (venv) в строке терминала должно исчезнуть
запуститеsudo nano /etc/systemd/system/gunicorn.service
Вставьте следующее в файл и не забудьте заменить на свои: путь к папке проекта, username и название проекта соответственно:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=username
Group=www-data
WorkingDirectory= //
/home/username/ProjectName
ExecStart= //
/home/username/venv/bin/gunicorn --access-logfile - --workers 3 //
--bind unix:/home/username/ //
ProjectName/ProjectName.sock
ProjectName.wsgi:application
[Install]
WantedBy=multi-user.target
[ ! ] ... WorkingDirectory= //
... — уберите эти псевдопереносы строк и с помощью backspace поднимите строки наверх [ ! ]
- Шаг 18 (при необходимости): Запустите следующие команды, чтобы включить gunicorn:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
sudo systemctl daemon-reload
sudo systemctl restart gunicorn
- Шаг 19 (при необходимости): Настройте NGINX с GUNICORN
запуститеsudo nano /etc/nginx/sites-available/ProjectName
Вставьте следующее в файл и не забудьте заменить на свои: IP, username, путь к папке и название проекта
server {
listen 80;
server_name IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/username/ProjectName;
}
location / {
include proxy_params;
proxy_pass //
http://unix:/home/username/ //
ProjectName/ProjectName.sock;
}
}
[ ! ] ... proxy_pass //
... — уберите эти псевдопереносы строк и с помощью backspace поднимите строки наверх [ ! ]
- Шаг 20 (при необходимости): Ссылка(Link) и тестирование(Test) конфига nginx
Link: sudo ln -s /etc/nginx/sites-available/ProjectName /etc/nginx/sites-enabled
Test: sudo nginx -t
-
Шаг 21 (при необходимости): Измените правила UFW
sudo ufw delete allow 8000
sudo ufw allow 'Nginx Full'
-
Шаг 22 (при необходимости): Перезагрузите Nginx и Gunicorn
sudo systemctl restart gunicorn
sudo systemctl restart nginx
Теперь посетите ip и посмотрите на ваш веб-сайт на облачном сервере.