181100
This commit is contained in:
@@ -1,45 +1,50 @@
|
|||||||
## Рабочие коды
|
---
|
||||||
|
title: 'Django сервер и JS приложения'
|
||||||
|
summary: 'В этой статье описан полный цыкл стать от настройки ВМ устновки серверных приложений и их настроек'
|
||||||
|
date: '18 11 2024'
|
||||||
|
draft: false
|
||||||
|
tags:
|
||||||
|
- Python
|
||||||
|
- venv
|
||||||
|
- Django
|
||||||
|
- TS
|
||||||
|
---
|
||||||
|
## Стартовый установщик
|
||||||
|
### Установка необходимых пакетов
|
||||||
```sh
|
```sh
|
||||||
sudo apt-get install -y zsh wget build-essential tree redis-server nginx zlib1g-dev libbz2-dev libreadline-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev python3-dev python3-pip python3-venv python3-pil python3-lxml libxslt-dev python3-libxml2 libffi-dev libssl-dev python3-dev gnumeric libsqlite3-dev libpq-dev libxml2-dev libxslt1-dev libjpeg-dev libfreetype6-dev libcurl4-openssl-dev libgdbm-dev libc6-dev supervisor
|
sudo apt-get install -y zsh wget build-essential tree redis-server nginx \
|
||||||
|
zlib1g-dev libbz2-dev libreadline-dev llvm libncurses5-dev libncursesw5-dev \
|
||||||
|
xz-utils tk-dev liblzma-dev python3-dev python3-pip python3-venv python3-pil \
|
||||||
|
python3-lxml libxslt-dev python3-libxml2 libffi-dev libssl-dev python3-dev \
|
||||||
|
gnumeric libsqlite3-dev libpq-dev libxml2-dev libxslt1-dev libjpeg-dev \
|
||||||
|
libfreetype6-dev libcurl4-openssl-dev libgdbm-dev libc6-dev supervisor
|
||||||
```
|
```
|
||||||
Устанавливаем и включаем по умолчанию `Oh-my-zsh`
|
### Установка и настройка `Oh-my-zsh`
|
||||||
```sh
|
```sh
|
||||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
|
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
|
||||||
zsh
|
zsh
|
||||||
chsh -s $(which zsh)
|
chsh -s $(which zsh)
|
||||||
|
# или для root пользователя
|
||||||
sudo chsh -s $(which zsh)
|
sudo chsh -s $(which zsh)
|
||||||
```
|
```
|
||||||
Устанавливаем и включаем по умолчанию `neofetch`
|
### Установка и настройка `neofetch`
|
||||||
```sh
|
```sh
|
||||||
# Первый запуск для создания ~/.config/neofetch/config.conf
|
# Первый запуск для создания конфигурационного файла ~/.config/neofetch/config.conf
|
||||||
neofetch
|
neofetch
|
||||||
# Далее добавляем в .bashrc в самый конец файла
|
# Добавляем вызов neofetch в файл конфигурации zsh
|
||||||
echo "neofetch" >> ~/.zshrc
|
echo "neofetch" >> ~/.zshrc
|
||||||
# Далее идем редактировать конфиг
|
# Редактируем конфигурацию
|
||||||
nano ~/.config/neofetch/config.conf
|
nano ~/.config/neofetch/config.conf
|
||||||
```
|
```
|
||||||
[Настройка описана вот в этой статье](https://xn----7sbabksvrfvnenyr4r.xn--p1ai/blog/09-graylog/#:~:text=cmd%20%2D%2Dreload-,%D0%9D%D0%B0%D1%81%D1%82%D0%BE%D0%B9%D0%BA%D0%B0%20neofetch,-%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%20%D0%B4%D0%BB%D1%8F)
|
[Настройка описана вот в этой статье](https://xn----7sbabksvrfvnenyr4r.xn--p1ai/blog/09-graylog/#:~:text=cmd%20%2D%2Dreload-,%D0%9D%D0%B0%D1%81%D1%82%D0%BE%D0%B9%D0%BA%D0%B0%20neofetch,-%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%20%D0%B4%D0%BB%D1%8F)
|
||||||
Редактируем сообщение приветствия
|
### Редактируем сообщение приветствия
|
||||||
```sh
|
```sh
|
||||||
sudo nano /etc/motd
|
sudo nano /etc/motd
|
||||||
```
|
```
|
||||||
## Добавляем бекэнд проект
|
## Настройка backend часть проект
|
||||||
Приступаем к установки виртуального окружения
|
|
||||||
```sh
|
При копировании обращайте внимание на `<username>` `project`
|
||||||
python3 -m venv env
|
### 1. Скачиваем и устанавливаем Python:
|
||||||
source env/bin/activate
|
|
||||||
pip install django
|
|
||||||
```
|
|
||||||
Создаем каталог
|
|
||||||
```sh
|
|
||||||
mkdir /var/www/project
|
|
||||||
# даем права на группу
|
|
||||||
sudo chown -R root:users /var/www/project
|
|
||||||
sudo chmod 775 /var/www/project
|
|
||||||
cd /var/www/project
|
|
||||||
```
|
|
||||||
Скачиваем нужную версию python и разворачиваем её
|
|
||||||
```sh
|
```sh
|
||||||
wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz ; \
|
wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz ; \
|
||||||
tar xvf Python-3.11.* ; \
|
tar xvf Python-3.11.* ; \
|
||||||
@@ -51,23 +56,31 @@ sudo make altinstall
|
|||||||
###
|
###
|
||||||
sudo /home/<username>/.python/bin/python3.11 -m pip install -U pip
|
sudo /home/<username>/.python/bin/python3.11 -m pip install -U pip
|
||||||
```
|
```
|
||||||
Разворачиваем виртуальную среду и обновляем его
|
### 2. Создаем рабочий каталог:
|
||||||
|
```sh
|
||||||
|
mkdir /var/www/project
|
||||||
|
# даем права на группу root:users прописываем свои
|
||||||
|
sudo chown -R root:users /var/www/project1
|
||||||
|
sudo chmod 775 /var/www/project1
|
||||||
|
cd /var/www/project1
|
||||||
|
```
|
||||||
|
### 3. Настраиваем виртуальное окружение:
|
||||||
```sh
|
```sh
|
||||||
/home/<username>/.python/bin/python3 -m venv env
|
/home/<username>/.python/bin/python3 -m venv env
|
||||||
source env/bin/activate
|
source env/bin/activate
|
||||||
git clone https://github.com/Project1.git
|
|
||||||
pip install -U pip
|
pip install -U pip
|
||||||
|
git clone https://github.com/Project1.git
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
Создаём связь с БД
|
### Настройка базы данных и запуск проекта
|
||||||
```shell
|
```shell
|
||||||
python.exe manage.py makemigrations accounts media main articles todos tenants teams properties goods documentsflow contracts techfeatures histories comments editors functionaldiagram
|
python.exe manage.py makemigrations accounts media main
|
||||||
python manage.py migrate
|
python manage.py migrate
|
||||||
python manage.py createsuperuser
|
python manage.py createsuperuser
|
||||||
### Уже можем проверить старт приложения
|
### Уже можем проверить старт приложения
|
||||||
python manage.py runserver 0.0.0.0:8000
|
python manage.py runserver 0.0.0.0:8000
|
||||||
```
|
```
|
||||||
Добавляем доступ к порт если есть фаервол
|
### Добавляем доступ к порт если есть `firewall`
|
||||||
```sh
|
```sh
|
||||||
sudo firewall-cmd --permanent --add-port=8000/tcp
|
sudo firewall-cmd --permanent --add-port=8000/tcp
|
||||||
sudo firewall-cmd --permanent --add-port=8001/tcp
|
sudo firewall-cmd --permanent --add-port=8001/tcp
|
||||||
@@ -75,9 +88,13 @@ sudo firewall-cmd --permanent --add-service=https
|
|||||||
sudo firewall-cmd --permanent --add-service=http
|
sudo firewall-cmd --permanent --add-service=http
|
||||||
sudo firewall-cmd --reload
|
sudo firewall-cmd --reload
|
||||||
```
|
```
|
||||||
Устанавливаем и настраиваем `gunicorn`
|
### Устанавливаем и настраиваем `gunicorn`
|
||||||
Нужно создать 2 файла один в директории проекта, второй на уровне env
|
Нужно создать 2 файла один в директории проекта, второй на уровне env, так же нужно установить сам gunicorn если его нет в списках `requirements.txt`
|
||||||
Первый файл `/var/www/project1/gunicorn_config.py`
|
```sh
|
||||||
|
pip install gunicorn
|
||||||
|
```
|
||||||
|
#### Создаем конфигурационные файлы:
|
||||||
|
1. `/var/www/project1/gunicorn_config.py`
|
||||||
```python
|
```python
|
||||||
command = '/var/www/env/bin/gunicorn'
|
command = '/var/www/env/bin/gunicorn'
|
||||||
pythonpath = '/var/www/project1'
|
pythonpath = '/var/www/project1'
|
||||||
@@ -88,18 +105,18 @@ limit_request_fields = 32000
|
|||||||
limit_request_field_size = 0
|
limit_request_field_size = 0
|
||||||
raw_env = 'DJANGO_SETTINGS_MODULE=project1.settings'
|
raw_env = 'DJANGO_SETTINGS_MODULE=project1.settings'
|
||||||
```
|
```
|
||||||
Второй файл
|
2. Скрипт запуска `gunicorn_start.sh`:
|
||||||
```sh
|
```sh
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
source /var/www/env/bin/activate
|
source /var/www/env/bin/activate
|
||||||
source /var/www/env/bin/postactivate
|
source /var/www/env/bin/postactivate
|
||||||
exec gunicorn -c "/var/www/project1/gunicorn_config.py" project1.wsgi
|
exec gunicorn -c "/var/www/project1/gunicorn_config.py" project1.wsgi
|
||||||
```
|
```
|
||||||
Делаем файл исполняемым
|
3. Настройка прав:
|
||||||
```sh
|
```sh
|
||||||
chmod +x gunicorn_start.sh
|
chmod +x gunicorn_start.sh
|
||||||
```
|
```
|
||||||
Устанавливаем и настраиваем `supervisior`
|
### Настраиваем `supervisior`
|
||||||
Создаем файл конфигурации `/etc/supervisior/conf.d/project1.conf`
|
Создаем файл конфигурации `/etc/supervisior/conf.d/project1.conf`
|
||||||
```sh
|
```sh
|
||||||
[program:project1_gunicorn]
|
[program:project1_gunicorn]
|
||||||
@@ -111,7 +128,8 @@ autostart=true
|
|||||||
autorestart=true
|
autorestart=true
|
||||||
redirect_stderr=true
|
redirect_stderr=true
|
||||||
```
|
```
|
||||||
Далее настройка nginx `/etc/nginx/sites-available/default`
|
### Настройка nginx
|
||||||
|
Пример конфигурации `/etc/nginx/sites-available/project1`
|
||||||
```sh
|
```sh
|
||||||
server {
|
server {
|
||||||
server_name example.com;
|
server_name example.com;
|
||||||
@@ -165,11 +183,13 @@ server {
|
|||||||
return 301 https://$host$request_uri;
|
return 301 https://$host$request_uri;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Далее перезагружаем nginx
|
Активируем конфигурацию:
|
||||||
```sh
|
```sh
|
||||||
sudo service nginx restart
|
sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/
|
||||||
|
sudo nginx -t && sudo service nginx restart
|
||||||
```
|
```
|
||||||
Далее для корректной работы нужно установить сертификат LetsEncrypt ssl, установка будет с помощью `certbot`
|
### Установка SSL с `certbot`
|
||||||
|
Для корректной работы нужно установить сертификат LetsEncrypt ssl, установка будет с помощью `certbot`
|
||||||
[Инструкция с официального сайта]([Инструкции Certbot | Certbot](https://certbot.eff.org/instructions?ws=nginx&os=pip))
|
[Инструкция с официального сайта]([Инструкции Certbot | Certbot](https://certbot.eff.org/instructions?ws=nginx&os=pip))
|
||||||
```sh
|
```sh
|
||||||
sudo apt update
|
sudo apt update
|
||||||
@@ -180,35 +200,35 @@ sudo /opt/certbot/bin/pip install certbot certbot-nginx
|
|||||||
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
|
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
|
||||||
sudo certbot --nginx
|
sudo certbot --nginx
|
||||||
```
|
```
|
||||||
Далее отвечаем на все вопросы, вот список особо интересных
|
#### Добавляем авто перевыпуск сертификата
|
||||||
Добавляем авто перевыпуск сертификата
|
|
||||||
```
|
```
|
||||||
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
|
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
|
||||||
```
|
```
|
||||||
## добавляем фронтенд проект
|
## Настройка frontend часть проект
|
||||||
|
1. Скачиваем проект:
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/Project2.git
|
git clone https://github.com/Project2.git
|
||||||
cd project2
|
cd project2
|
||||||
```
|
```
|
||||||
Устанавливаем `npm`
|
2. Устанавливаем `npm`
|
||||||
```sh
|
```sh
|
||||||
sudo apt install -y npm
|
sudo apt install -y npm
|
||||||
```
|
```
|
||||||
Устанавливаем библиотеки из проекта
|
3. Устанавливаем библиотеки из проекта
|
||||||
```sh
|
```sh
|
||||||
npm install
|
npm install
|
||||||
```
|
```
|
||||||
Стартуем проект в режиме разработчика
|
4. Стартуем проект в режиме разработчика
|
||||||
```sh
|
```sh
|
||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
И опять возвращаемся к шагу добавления порта в фаервол
|
### Возвращаемся к добавления порта в `firewall`
|
||||||
```sh
|
```sh
|
||||||
sudo firewall-cmd --permanent --add-port=8002/tcp
|
sudo firewall-cmd --permanent --add-port=8002/tcp
|
||||||
sudo firewall-cmd --reload
|
sudo firewall-cmd --reload
|
||||||
```
|
```
|
||||||
Создаем новый файл конфигурации для nginx
|
### Создаем новый файл конфигурации для nginx
|
||||||
`/etc/nginx/sites-available/example`
|
`/etc/nginx/sites-available/project2`
|
||||||
```sh
|
```sh
|
||||||
server {
|
server {
|
||||||
listen 443;
|
listen 443;
|
||||||
@@ -216,11 +236,11 @@ server {
|
|||||||
charset utf-8;
|
charset utf-8;
|
||||||
|
|
||||||
# Оптимизация SSL
|
# Оптимизация SSL
|
||||||
#ssl_session_cache shared:SSL:10m;
|
ssl_session_cache shared:SSL:10m;
|
||||||
#ssl_session_timeout 10m;
|
ssl_session_timeout 10m;
|
||||||
#ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
#ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
#ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
|
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
|
||||||
|
|
||||||
# HTTP headers для безопасности
|
# HTTP headers для безопасности
|
||||||
add_header X-Content-Type-Options nosniff;
|
add_header X-Content-Type-Options nosniff;
|
||||||
@@ -266,15 +286,16 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
Далее определяем оба файла настройка nginx
|
### Активируем конфигурацию:
|
||||||
```sh
|
```sh
|
||||||
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
|
sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/
|
||||||
sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org
|
sudo nginx -t && sudo service nginx restart
|
||||||
|
# или используем nginx -s reload
|
||||||
sudo nginx -t && sudo nginx -s reload
|
sudo nginx -t && sudo nginx -s reload
|
||||||
# Добавляем сертификат на новый домен
|
# Добавляем сертификат на новый домен
|
||||||
sudo certbot --nginx
|
sudo certbot --nginx
|
||||||
```
|
```
|
||||||
Устанавливаем приложения для постойного обновления pm2
|
### Устанавливаем приложения для управления проектом pm2
|
||||||
```sh
|
```sh
|
||||||
sudo npm i pm2 -g
|
sudo npm i pm2 -g
|
||||||
```
|
```
|
||||||
@@ -292,8 +313,7 @@ module.exports = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Что бы после перезагрузки проект сам включался нужно добавить команду
|
### Включаем автозагрузку проекта
|
||||||
```sh
|
```sh
|
||||||
pm2 startup
|
pm2 startup
|
||||||
```
|
```
|
||||||
|
|
||||||
Reference in New Issue
Block a user