diff --git a/src/content/blog/Django server установка и настройка.md b/src/content/blog/12-Django-server-install.md similarity index 63% rename from src/content/blog/Django server установка и настройка.md rename to src/content/blog/12-Django-server-install.md index 2fee82e..8e59468 100644 --- a/src/content/blog/Django server установка и настройка.md +++ b/src/content/blog/12-Django-server-install.md @@ -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 часть проект + +При копировании обращайте внимание на `` `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//.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//.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 -``` - +``` \ No newline at end of file