Академический Документы
Профессиональный Документы
Культура Документы
2023
Сервер можно установить локально на виртуальной машине (VMWare или VirtualBox) или
возспользоваться облачным сервером (например, Yandex Cloud)
locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
...
Чтобы работать с данными на русском языке, значением переменных LC_CTYPE и LC_COLLATE должно
быть ru_RU.UTF-8. Если сервер настроен иначе — установите русскую локализацию с помощью
встроенной утилиты dpkg-reconfigure:
1 / 11
Установка проекта на сервере.md 08.04.2023
sudo reboot
Устанавливаем их командой:
ssh-keygen
cat ~/.ssh/id_rsa.pub
Клонирование проекта
Для дальнейшей работы будем использовать проект hw05_final
2 / 11
Установка проекта на сервере.md 08.04.2023
изменим права на папку /develop, что бы члены группы developers могли в ней работать
проверяем, что все прошло успешно командой ls -la /develop. Результат должен быть
примерно такой:
Переходим в созданный каталог develop и клонируем наш проект hw05_final с GitHub через SSH
ссылку
3 / 11
Установка проекта на сервере.md 08.04.2023
source ./venv/bin/activate
!!! Все дальнейнейшие действия с python в рамках проекта проводятся при АКТИВНОМ
виртуальном окружении !!!
Настройка БД PostgreSQL
1. Запускаем postgresql
2. Создаем БД
4 / 11
Установка проекта на сервере.md 08.04.2023
\l
Примерный результат
ru_RU.UTF- ru_RU.UTF-
postgres postgres UTF8
8 8
ru_RU.UTF- ru_RU.UTF-
template0 postgres UTF8 =c/postgres postgres=CTc/postgres
8 8
ru_RU.UTF- ru_RU.UTF-
template1 postgres UTF8 =c/postgres postgres=CTc/postgres
8 8
6. Выходим из postgresql
\q
Настройки проекта
1. В папке с файлом settings.py создаем файл .env для хранения настроек следующего
содержания:
# ...директория_проекта/yatube/yatube/.env
# Укажите, что используете postgresql
DB_ENGINE=django.db.backends.postgresql
# Укажите имя созданной базы данных
DB_NAME=yatube
# Укажите имя пользователя
POSTGRES_USER=yatube_user
# Укажите пароль для пользователя
POSTGRES_PASSWORD=xxxyyyzzz
# Укажите localhost
DB_HOST=127.0.0.1
# Укажите порт для подключения к базе
DB_PORT=5432
5 / 11
Установка проекта на сервере.md 08.04.2023
load_dotenv()
...
DATABASES = {
'default': {
'ENGINE': os.getenv('DB_ENGINE', 'django.db.backends.postgresql'),
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('POSTGRES_USER'),
'PASSWORD': os.getenv('POSTGRES_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': os.getenv('DB_PORT')
}
}
4. Выполняем миграции
!!! Обратите внимание, что STATICFILES_DIRS не должна содержать папку, на которую указывает
STATIC_ROOT. Саму в себя папку не получится скопировать. Рекомендуют при разработке все свои
статические файлы держать в другой папке, например, asserts (STATICFILES_DIRS =
[os.path.join(BASE_DIR, 'asserts')]) !!!
6 / 11
Установка проекта на сервере.md 08.04.2023
запускаем python manage.py collectstatic. Вся статика будет собрана в каталог static/
проекта
Настройки gunicorn
[Unit]
# это текстовое описание юнита, пояснение для разработчика
Description=gunicorn daemon
[Service]
# от чьего имени запускать процесс:
# укажите имя, под которым вы подключались к серверу
User=<ваш логин>
[Install]
# группировка юнитов
WantedBy=multi-user.target
2. Запускаем gunicorn
7 / 11
Установка проекта на сервере.md 08.04.2023
Настройка nginx
1. Настраиваем файрвол
2. Запускаем файрвол
3. Запускаем nginx
root /develop/hw05_final/yatube/;
}
# медиа файлы
location /media/ {
# root /home/<имя_пользователя>/<название_проекта>/<папка_где_manage.py>/;
root /develop/hw05_final/yatube/;
}
sudo nginx -t
Запуск проекта
Выполняем следующие команды:
mkdir /develop/cert
cd /develop/cert
9 / 11
Установка проекта на сервере.md 08.04.2023
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out
domain.crt
Обязательно заполнять только Common Name (e.g. server FQDN or YOUR name). Если создаем
сертификат для сайта, то в этом поле нужно указать домен этого сайта.
4. Настраиваем nginx для работы по HTTPS В раздел server файла настроек nginx
/etc/nginx/sites-enabled/default после listen 80 добавляем следующие строки
5. Перезапускаем nginx
6. Пробуем зайти на сайт по протоколу HTTPS. Скорее всего браузер и антивирус будут ругаться на
то, что сертификат невозможно проверить. Игнорируем этот запрос (ведь мы сами создали этот
сертификат) и продолжаем работу.
!!! Перед автоматической настройкой сертификата в фале настроек nginx в строке server_name
вместо IP адреса указать доменное имя !!!
Сертификат будем получать от бесплатного сервера Let’s Encrypt c помощью специального пакета
certbot
1. Устанавливаем certbot
10 / 11
Установка проекта на сервере.md 08.04.2023
2. Получение сертефиката
В процессе оформления сертификата вам нужно будет указать свою электронную почту и ответить на
несколько вопросов.
“Enter email address” (англ. «введите почту»). Почта нужна для предупреждений, что сертификат
пора обновить.
“Please read the Terms of Service...” (англ. «прочитайте правила сервиса»). Прочитайте правила по
ссылке, введите y и нажмите Enter.
“Would you be willing to share your email address with the Electronic Frontier Foundation?” (англ.
«хотите ли вы поделиться своей почтой с Фондом электронных рубежей»). Отметьте на своё
усмотрение y (да) или n (нет) и нажмите Enter.
“Please enter the domain name(s) you would like on your certificate” (англ. «пожалуйста, введите
доменные имена, которые вы хотели бы видеть в своем сертификате»). Введите добавленное в
проект доменное имя, нажмите Enter.
certbot отправит ваши данные на сервер Let's Encrypt и там будет выпущен сертификат, который
автоматически сохранится на вашем сервере. Также будет изменена конфигурация nginx: добавятся
нужные настройки и будут прописаны пути к сертификату.
3. Перезапускаем nginx
4. Обновление сертификата Бесплатный сертификат нужно обновлять минимум раз в три месяца.
Certbot делает это по умолчанию, если вы не меняли стандартных настроек. Убедиться, что всё
обновляется, можно с помощью команды:
sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx
start"
11 / 11