Sanitize deployment docs
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
7. Сконфигурируем будущую компиляцию на размещение готовой версии Python в папку `~/opt/python-3.8.6`
|
7. Сконфигурируем будущую компиляцию на размещение готовой версии Python в папку `~/opt/python-3.8.6`
|
||||||
8. Компилируем Python (в том числе будут запущены тесты)
|
8. Компилируем Python (в том числе будут запущены тесты)
|
||||||
9. Устанавливаем Python 3.8.6
|
9. Устанавливаем Python 3.8.6
|
||||||
<notification_email>
|
Контакт для уведомлений: <notification_email>
|
||||||
|
|
||||||
```
|
```
|
||||||
cd ~
|
cd ~
|
||||||
@@ -25,7 +25,7 @@ make
|
|||||||
make install
|
make install
|
||||||
```
|
```
|
||||||
|
|
||||||
В результате установлена нужная нам версия python установлена в папку `~/opt/python-3.8.6` (`/home/<username>/opt/python-3.8.6`)
|
В результате установлена нужная нам версия python установлена в папку `~/<site_root>` (`/home/<hosting_user>/opt/python-3.8.6`)
|
||||||
|
|
||||||
Теперь нужно назначить эту версию как `system default`, добавив к переменной `$PATH` (временно):
|
Теперь нужно назначить эту версию как `system default`, добавив к переменной `$PATH` (временно):
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ export PATH=$HOME/opt/python-3.8.6/bin:$PATH
|
|||||||
```
|
```
|
||||||
|
|
||||||
------------------------------
|
------------------------------
|
||||||
_Также можно добавить эту строку в файл `.bashrc` и/или `.bash_profile` в домашней директории `/home/<username>.` Это нужно, чтобы сделать так, чтобы этот python всегда заменял версию которая есть на сервере._
|
_Также можно добавить эту строку в файл `.bashrc` и/или `.bash_profile` в домашней директории `/home/<hosting_user>`. Это нужно, чтобы сделать так, чтобы этот python всегда заменял версию которая есть на сервере._
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
@@ -59,16 +59,16 @@ python ~/tmp/get-pip.py
|
|||||||
pip3 install virtualenv
|
pip3 install virtualenv
|
||||||
```
|
```
|
||||||
|
|
||||||
Через панель управления хостингом __Domains -> Manage Domains -> Add Hosting to a Domain/Sub-Domain__ создадим поддомен __cadpoint.ru__ (без создания нового пользователя). В нашем домашнем каталоге будет создана папка `cadpoint.ru`. В этой папке будет лежать `passenger_wsgi.py`, также есть папка `public` в которой будут лежать статичные файлы не требующие обработки CGI (media, static и пр.)
|
Через панель управления хостингом __Domains -> Manage Domains -> Add Hosting to a Domain/Sub-Domain__ создадим поддомен __cadpoint.ru__ (без создания нового пользователя). В нашем домашнем каталоге будет создана папка `~/<site_root>`. В этой папке будет лежать `passenger_wsgi.py`, также есть папка `public` в которой будут лежать статичные файлы не требующие обработки CGI (media, static и пр.)
|
||||||
|
|
||||||
Теперь создадим виртуальное окружение в папке нашего сайта (`$HOME/cadpoint.ru`):
|
Теперь создадим виртуальное окружение в папке нашего сайта (`$HOME/<site_root>`):
|
||||||
```
|
```
|
||||||
virtualenv -p python3 $HOME/cadpoint.ru/env
|
virtualenv -p python3 $HOME/<site_root>/env
|
||||||
```
|
```
|
||||||
|
|
||||||
Активируем созданное виртуальное окружение:
|
Активируем созданное виртуальное окружение:
|
||||||
```
|
```
|
||||||
source $HOME/cadpoint.ru/env/bin/activate
|
source $HOME/<site_root>/env/bin/activate
|
||||||
```
|
```
|
||||||
|
|
||||||
Проверить, что теперь мы работаем в виртуальном окружении можно дав команды:
|
Проверить, что теперь мы работаем в виртуальном окружении можно дав команды:
|
||||||
@@ -138,7 +138,7 @@ python -c "import django; print(django.get_version())"
|
|||||||
|
|
||||||
Далее нам надо скопировать статические файлы админки Django в папку статических файлов хостинга:
|
Далее нам надо скопировать статические файлы админки Django в папку статических файлов хостинга:
|
||||||
```
|
```
|
||||||
cd ~/cadpoint.ru/dicquo
|
cd ~/<site_root>/dicquo
|
||||||
python manage.py collectstatic
|
python manage.py collectstatic
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -147,10 +147,10 @@ python manage.py collectstatic
|
|||||||
Для исполнения Python на хостинге DreamHost используется CGI-механизм Passenger. Чтобы его настроить для нашего проекта в папке сайта `~/cadpoint.ru` нужно разметить файл `passenger_wsgi.py` следующего содержания ([см. документацию DreamHost](https://help.dreamhost.com/hc/en-us/articles/360002341572-Creating-a-Django-project)):
|
Для исполнения Python на хостинге DreamHost используется CGI-механизм Passenger. Чтобы его настроить для нашего проекта в папке сайта `~/cadpoint.ru` нужно разметить файл `passenger_wsgi.py` следующего содержания ([см. документацию DreamHost](https://help.dreamhost.com/hc/en-us/articles/360002341572-Creating-a-Django-project)):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#!/home/<hosting_user>/cadpoint.ru/env/bin/python3
|
#!/home/<hosting_user>/<site_root>/env/bin/python3
|
||||||
|
|
||||||
import sys, os
|
import sys, os
|
||||||
INTERP = "/home/<hosting_user>/cadpoint.ru/env/bin/python3"
|
INTERP = "/home/<hosting_user>/<site_root>/env/bin/python3"
|
||||||
#INTERP is present twice so that the new python interpreter
|
#INTERP is present twice so that the new python interpreter
|
||||||
#knows the actual executable path
|
#knows the actual executable path
|
||||||
if sys.executable != INTERP:
|
if sys.executable != INTERP:
|
||||||
@@ -187,4 +187,3 @@ touch ~/cadpoint.ru/tmp/restart.txt
|
|||||||
## Дополнительно
|
## Дополнительно
|
||||||
|
|
||||||
Стоит включить ssl-сертификат для сайта. В панели управления DreamHost __Domains --> SSL/TLS Certificates__
|
Стоит включить ssl-сертификат для сайта. В панели управления DreamHost __Domains --> SSL/TLS Certificates__
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
## 1: Создание пользователя
|
## 1: Создание пользователя
|
||||||
|
|
||||||
Изначально есть только root-доступ. Если мы залогированы под **root**, то следует создать пользователя от имени
|
Изначально есть только root-доступ. Если мы залогированы под **root**, то следует создать пользователя от имени
|
||||||
которого мы будем осуществлять все действия (позже root-доступ будет закрыт). Создадим пользователя **web**:
|
которого мы будем осуществлять все действия (позже root-доступ будет закрыт). Создадим пользователя **<ssh_user>**:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo useradd -c 'WEB-user' -m <ssh_user>
|
sudo useradd -c 'WEB-user' -m <ssh_user>
|
||||||
@@ -21,7 +21,7 @@ nano /etc/sudoers
|
|||||||
|
|
||||||
и после строки `root ALL=(ALL:ALL) ALL` добавим в него строку:
|
и после строки `root ALL=(ALL:ALL) ALL` добавим в него строку:
|
||||||
```editorconfig
|
```editorconfig
|
||||||
web ALL=(ALL:ALL) ALL
|
<ssh_user> ALL=(ALL:ALL) ALL
|
||||||
```
|
```
|
||||||
|
|
||||||
Сохраняем конфигурационный файл `Ctrl+O` и `Enter`, а выходим из редактора `Ctrl+X`.
|
Сохраняем конфигурационный файл `Ctrl+O` и `Enter`, а выходим из редактора `Ctrl+X`.
|
||||||
@@ -34,7 +34,7 @@ web ALL=(ALL:ALL) ALL
|
|||||||
logout
|
logout
|
||||||
```
|
```
|
||||||
|
|
||||||
Теперь можно залогироваться от имени пользователя **web**.
|
Теперь можно залогироваться от имени пользователя **<ssh_user>**.
|
||||||
|
|
||||||
Установим командную оболочку bash для пользователя:
|
Установим командную оболочку bash для пользователя:
|
||||||
```shell
|
```shell
|
||||||
@@ -64,7 +64,7 @@ Port 2002
|
|||||||
```
|
```
|
||||||
|
|
||||||
Так же дописываем в конце следующие две строки в которых и запрещаем ssh-вход
|
Так же дописываем в конце следующие две строки в которых и запрещаем ssh-вход
|
||||||
пользователя **root** и разрешаем доступ нашему пользователю **web**:
|
пользователя **root** и разрешаем доступ нашему пользователю **<ssh_user>**:
|
||||||
```
|
```
|
||||||
DenyUsers root
|
DenyUsers root
|
||||||
AllowUsers <ssh_user>
|
AllowUsers <ssh_user>
|
||||||
@@ -585,10 +585,10 @@ sudo service mysql status
|
|||||||
sudo mysql
|
sudo mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
Создаём пользователя `web`, зададим ему пароль и дадим привилегии на все:
|
Создаём пользователя `<ssh_user>`, зададим ему пароль и дадим привилегии на все:
|
||||||
```mysql
|
```mysql
|
||||||
CREATE USER 'web'@'localhost' IDENTIFIED BY '*********************';
|
CREATE USER '<ssh_user>'@'localhost' IDENTIFIED BY '*********************';
|
||||||
GRANT ALL PRIVILEGES ON *.* TO 'web'@'localhost';
|
GRANT ALL PRIVILEGES ON *.* TO '<ssh_user>'@'localhost';
|
||||||
```
|
```
|
||||||
|
|
||||||
Создаем базу данных `django_cadpoint` для нашего сайта:
|
Создаем базу данных `django_cadpoint` для нашего сайта:
|
||||||
@@ -686,7 +686,7 @@ Accept-Ranges: bytes
|
|||||||
сжаты по своей природе и большого результата при сжатии GZIP можно не
|
сжаты по своей природе и большого результата при сжатии GZIP можно не
|
||||||
ожидать.
|
ожидать.
|
||||||
|
|
||||||
Настроем модуль GZIP в NGINX. Для этого открываем на редактирование
|
Настроим модуль GZIP в NGINX. Для этого открываем на редактирование
|
||||||
конфигурационный файл nginx `/etc/nginx/nginx.conf`:
|
конфигурационный файл nginx `/etc/nginx/nginx.conf`:
|
||||||
```shell
|
```shell
|
||||||
sudo nano /etc/nginx/nginx.conf
|
sudo nano /etc/nginx/nginx.conf
|
||||||
@@ -873,10 +873,10 @@ zip -9 -r cadpoint.zip public/ rsvo_new/ config/
|
|||||||
|
|
||||||
Копируем архив по ssh на нашу виртуалку (masterhost или nic.ru)
|
Копируем архив по ssh на нашу виртуалку (masterhost или nic.ru)
|
||||||
```shell
|
```shell
|
||||||
scp -P 2002 cadpoint.zip <ssh_user>@<server_ip>:~/cadpoint
|
scp -P 2002 cadpoint.zip <ssh_user>@<server_ip>:~/<project_root>
|
||||||
```
|
```
|
||||||
|
|
||||||
Возвращаемся на нашу виртуалку хостера и разархивируем:
|
Возвращаемся на нашу виртуалку хостинга и разархивируем:
|
||||||
```shell
|
```shell
|
||||||
cd ~/cadpoint
|
cd ~/cadpoint
|
||||||
unzip cadpoint.zip
|
unzip cadpoint.zip
|
||||||
@@ -1004,8 +1004,8 @@ upstream cadpoint-django {
|
|||||||
|
|
||||||
# конфигурируем сервер
|
# конфигурируем сервер
|
||||||
server {
|
server {
|
||||||
# server_name <server_ip>; # доменное имя сайта
|
# server_name <server_ip>; # доменное имя сайта
|
||||||
server_name cadpoint.ru; # доменное имя сайта
|
server_name cadpoint.ru; # доменное имя сайта
|
||||||
listen 80;
|
listen 80;
|
||||||
charset utf-8; # кодировка по умолчанию
|
charset utf-8; # кодировка по умолчанию
|
||||||
access_log /home/<ssh_user>/cadpoint/logs/cadpoint-access.log; # логи с доступом
|
access_log /home/<ssh_user>/cadpoint/logs/cadpoint-access.log; # логи с доступом
|
||||||
@@ -1418,22 +1418,25 @@ nano ~/cadpoint/config/cadpoint.conf
|
|||||||
|
|
||||||
где:
|
где:
|
||||||
* one — имя зоны настроеной в /etc/nginx/nginx.conf (для всех сайтов сервера) в блоке `http {…}`;
|
* one — имя зоны настроеной в /etc/nginx/nginx.conf (для всех сайтов сервера) в блоке `http {…}`;
|
||||||
* burst — максимальный всплеск активности, можно регулировать до какого значения запросов в секунду может быть всплеск запросов;
|
* burst — максимальный всплеск активности, можно регулировать до какого значения запросов
|
||||||
* nodelay — незамедлительно, при достижении лимита подключений, выдавать код 503 (Service Unavailable) для этого IP.
|
* в секунду может быть всплеск запросов;
|
||||||
|
* nodelay — незамедлительно, при достижении лимита подключений, выдавать код 503
|
||||||
|
* (Service Unavailable) для этого IP.
|
||||||
|
|
||||||
Строку `limit_req zone=one burst=5 nodelay;` можно добавить как непосредственно в блок `server {…}`, и тогда будет ограничиваться число запросов ко всем файлам сайта, так и в расположенные в нем блоки `location … {…}`. Целесообразнее ограничить число запросов к `uwsgi_pass`, т.к. он отвечает только за странички сайта (без статики... статика может быть запрощена клиентом довольна, т.к. одна страничка может содержать внутри себя много встроенных картинок, стилей и скриптов).
|
Строку `limit_req zone=one burst=5 nodelay;` можно добавить как непосредственно в блок `server {…}`, и тогда будет ограничиваться число запросов ко всем файлам сайта, так и в расположенные в нем блоки `location … {…}`. Целесообразнее ограничить число запросов к `uwsgi_pass`, т.к. он отвечает только за странички сайта (без статики... статика может быть запрощена клиентом довольна, т.к. одна страничка может содержать внутри себя много встроенных картинок, стилей и скриптов).
|
||||||
|
|
||||||
Таким образом наш блок `location … {…}` будет выглядеть так:
|
Таким образом наш блок `location … {…}` будет выглядеть так:
|
||||||
```nginx configuration
|
```nginx configuration
|
||||||
location / {
|
location / {
|
||||||
uwsgi_pass cadpoint-django; # upstream обрабатывающий обращений
|
uwsgi_pass cadpoint-django; # upstream обрабатывающий обращений
|
||||||
include uwsgi_params; # конфигурационный файл uwsgi;
|
include uwsgi_params; # конфигурационный файл uwsgi;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
limit_req zone=one burst=5 nodelay;
|
limit_req zone=one burst=5 nodelay;
|
||||||
fastcgi_keep_conn on;
|
fastcgi_keep_conn on;
|
||||||
uwsgi_read_timeout 1800;
|
uwsgi_read_timeout 1800;
|
||||||
uwsgi_send_timeout 200;
|
uwsgi_send_timeout 200;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Баним ботов и подозрительную активность
|
### Баним ботов и подозрительную активность
|
||||||
|
|||||||
Reference in New Issue
Block a user