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 ```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
``` ```