This commit is contained in:
2024-11-19 15:35:13 +03:00
parent 64e90bb8e2
commit bccbdb9bf3

View File

@@ -1,45 +1,50 @@
## Рабочие коды
---
title: 'Django сервер и JS приложения'
summary: 'В этой статье описан полный цыкл стать от настройки ВМ устновки серверных приложений и их настроек'
date: '18 11 2024'
draft: false
tags:
- Python
- venv
- Django
- TS
---
## Стартовый установщик
### Установка необходимых пакетов
```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 -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
zsh
chsh -s $(which zsh)
# или для root пользователя
sudo chsh -s $(which zsh)
```
Устанавливаем и включаем по умолчанию `neofetch`
### Установка и настройка `neofetch`
```sh
# Первый запуск для создания ~/.config/neofetch/config.conf
# Первый запуск для создания конфигурационного файла ~/.config/neofetch/config.conf
neofetch
# Далее добавляем в .bashrc в самый конец файла
# Добавляем вызов neofetch в файл конфигурации zsh
echo "neofetch" >> ~/.zshrc
# Далее идем редактировать конфиг
# Редактируем конфигурацию
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)
Редактируем сообщение приветствия
### Редактируем сообщение приветствия
```sh
sudo nano /etc/motd
```
## Добавляем бекэнд проект
Приступаем к установки виртуального окружения
```sh
python3 -m venv env
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 и разворачиваем её
## Настройка backend часть проект
При копировании обращайте внимание на `<username>` `project`
### 1. Скачиваем и устанавливаем Python:
```sh
wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz ; \
tar xvf Python-3.11.* ; \
@@ -51,23 +56,31 @@ sudo make altinstall
###
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
/home/<username>/.python/bin/python3 -m venv env
source env/bin/activate
git clone https://github.com/Project1.git
pip install -U pip
git clone https://github.com/Project1.git
pip install -r requirements.txt
```
Создаём связь с БД
### Настройка базы данных и запуск проекта
```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 createsuperuser
### Уже можем проверить старт приложения
python manage.py runserver 0.0.0.0:8000
```
Добавляем доступ к порт если есть фаервол
### Добавляем доступ к порт если есть `firewall`
```sh
sudo firewall-cmd --permanent --add-port=8000/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 --reload
```
Устанавливаем и настраиваем `gunicorn`
Нужно создать 2 файла один в директории проекта, второй на уровне env
Первый файл `/var/www/project1/gunicorn_config.py`
### Устанавливаем и настраиваем `gunicorn`
Нужно создать 2 файла один в директории проекта, второй на уровне env, так же нужно установить сам gunicorn если его нет в списках `requirements.txt`
```sh
pip install gunicorn
```
#### Создаем конфигурационные файлы:
1. `/var/www/project1/gunicorn_config.py`
```python
command = '/var/www/env/bin/gunicorn'
pythonpath = '/var/www/project1'
@@ -88,18 +105,18 @@ limit_request_fields = 32000
limit_request_field_size = 0
raw_env = 'DJANGO_SETTINGS_MODULE=project1.settings'
```
Второй файл
2. Скрипт запуска `gunicorn_start.sh`:
```sh
#!/bin/bash
source /var/www/env/bin/activate
source /var/www/env/bin/postactivate
exec gunicorn -c "/var/www/project1/gunicorn_config.py" project1.wsgi
```
Делаем файл исполняемым
3. Настройка прав:
```sh
chmod +x gunicorn_start.sh
```
Устанавливаем и настраиваем `supervisior`
### Настраиваем `supervisior`
Создаем файл конфигурации `/etc/supervisior/conf.d/project1.conf`
```sh
[program:project1_gunicorn]
@@ -111,7 +128,8 @@ autostart=true
autorestart=true
redirect_stderr=true
```
Далее настройка nginx `/etc/nginx/sites-available/default`
### Настройка nginx
Пример конфигурации `/etc/nginx/sites-available/project1`
```sh
server {
server_name example.com;
@@ -165,11 +183,13 @@ server {
return 301 https://$host$request_uri;
}
```
Далее перезагружаем nginx
Активируем конфигурацию:
```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))
```sh
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 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
```
## добавляем фронтенд проект
## Настройка frontend часть проект
1. Скачиваем проект:
```sh
git clone https://github.com/Project2.git
cd project2
```
Устанавливаем `npm`
2. Устанавливаем `npm`
```sh
sudo apt install -y npm
```
Устанавливаем библиотеки из проекта
3. Устанавливаем библиотеки из проекта
```sh
npm install
```
Стартуем проект в режиме разработчика
4. Стартуем проект в режиме разработчика
```sh
npm run dev
```
И опять возвращаемся к шагу добавления порта в фаервол
### Возвращаемся к добавления порта в `firewall`
```sh
sudo firewall-cmd --permanent --add-port=8002/tcp
sudo firewall-cmd --reload
```
Создаем новый файл конфигурации для nginx
`/etc/nginx/sites-available/example`
### Создаем новый файл конфигурации для nginx
`/etc/nginx/sites-available/project2`
```sh
server {
listen 443;
@@ -216,11 +236,11 @@ server {
charset utf-8;
# Оптимизация SSL
#ssl_session_cache shared:SSL:10m;
#ssl_session_timeout 10m;
#ssl_protocols TLSv1.2 TLSv1.3;
#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_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
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";
# HTTP headers для безопасности
add_header X-Content-Type-Options nosniff;
@@ -266,15 +286,16 @@ server {
}
```
Далее определяем оба файла настройка nginx
### Активируем конфигурацию:
```sh
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org
sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/
sudo nginx -t && sudo service nginx restart
# или используем nginx -s reload
sudo nginx -t && sudo nginx -s reload
# Добавляем сертификат на новый домен
sudo certbot --nginx
```
Устанавливаем приложения для постойного обновления pm2
### Устанавливаем приложения для управления проектом pm2
```sh
sudo npm i pm2 -g
```
@@ -292,8 +313,7 @@ module.exports = {
]
}
```
Что бы после перезагрузки проект сам включался нужно добавить команду
### Включаем автозагрузку проекта
```sh
pm2 startup
```