From 64e90bb8e2e9784306af3b1af48ace92e68a4272 Mon Sep 17 00:00:00 2001 From: krasi Date: Fri, 15 Nov 2024 15:12:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?src/content/blog=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...τムひーミスミセミイミコミー ミク ミスミームムびミセミケミコミー.md | 299 ++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 src/content/blog/Django server ムτムひーミスミセミイミコミー ミク ミスミームムびミセミケミコミー.md diff --git a/src/content/blog/Django server ムτムひーミスミセミイミコミー ミク ミスミームムびミセミケミコミー.md b/src/content/blog/Django server ムτムひーミスミセミイミコミー ミク ミスミームムびミセミケミコミー.md new file mode 100644 index 0000000..2fee82e --- /dev/null +++ b/src/content/blog/Django server ムτムひーミスミセミイミコミー ミク ミスミームムびミセミケミコミー.md @@ -0,0 +1,299 @@ +## ミミーミアミセムミクミオ ミコミセミエム + +```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 +``` +ミ」ムムひーミスミーミイミサミクミイミーミオミシ ミク ミイミコミサム紗ミーミオミシ ミソミセ ムσシミセミサムミーミスミクム `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) +sudo chsh -s $(which zsh) +``` +ミ」ムムひーミスミーミイミサミクミイミーミオミシ ミク ミイミコミサム紗ミーミオミシ ミソミセ ムσシミセミサムミーミスミクム `neofetch` +```sh +# ミ渙オムミイム巾ケ ミキミーミソムτミコ ミエミサム ムミセミキミエミーミスミクム ~/.config/neofetch/config.conf +neofetch +# ミ頒ーミサミオミオ ミエミセミアミーミイミサム紹オミシ ミイ .bashrc ミイ ムミーミシム巾ケ ミコミセミスミオム ムミーミケミサミー +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 ミク ムミーミキミイミセムミームミクミイミーミオミシ ミオム +```sh +wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz ; \ +tar xvf Python-3.11.* ; \ +cd Python-3.11.10 ; \ +mkdir ~/.python ; \ +./configure --enable-optimizations --prefix=/home//.python ; \ +make -j8 ; \ +sudo make altinstall +### +sudo /home//.python/bin/python3.11 -m pip install -U pip +``` +ミミーミキミイミセムミームミクミイミーミオミシ ミイミクムムびσーミサム糊スムτ ムムミオミエム ミク ミセミアミスミセミイミサム紹オミシ ミオミウミセ +```sh +/home//.python/bin/python3 -m venv env +source env/bin/activate +git clone https://github.com/Project1.git +pip install -U pip +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 manage.py migrate +python manage.py createsuperuser +### ミ」ミカミオ ミシミセミカミオミシ ミソムミセミイミオムミクムび ムムひームム ミソムミクミサミセミカミオミスミクム +python manage.py runserver 0.0.0.0:8000 +``` +ミ頒セミアミーミイミサム紹オミシ ミエミセムムびσソ ミコ ミソミセムム ミオムミサミク ミオムムび ムミーミオムミイミセミサ +```sh +sudo firewall-cmd --permanent --add-port=8000/tcp +sudo firewall-cmd --permanent --add-port=8001/tcp +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` +```python +command = '/var/www/env/bin/gunicorn' +pythonpath = '/var/www/project1' +bind = '127.0.0.1:8001' +workers = 5 +user = '' +limit_request_fields = 32000 +limit_request_field_size = 0 +raw_env = 'DJANGO_SETTINGS_MODULE=project1.settings' +``` +ミ柘ひセムミセミケ ムミーミケミサ +```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 +``` +ミ頒オミサミーミオミシ ムミーミケミサ ミクムミソミセミサミスム紹オミシム巾シ +```sh +chmod +x gunicorn_start.sh +``` +ミ」ムムひーミスミーミイミサミクミイミーミオミシ ミク ミスミームムびミーミクミイミーミオミシ `supervisior` +ミ。ミセミキミエミーミオミシ ムミーミケミサ ミコミセミスムミクミウムτミームミクミク `/etc/supervisior/conf.d/project1.conf` +```sh +[program:project1_gunicorn] +command=/var/www/gunicorn_start.sh +user= +process_name=%(program_name)s +numprocs=1 +autostart=true +autorestart=true +redirect_stderr=true +``` +ミ頒ーミサミオミオ ミスミームムびミセミケミコミー nginx `/etc/nginx/sites-available/default` +```sh +server { + server_name example.com; + # ミ榧ソムひクミシミクミキミームミクム 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"; + # HTTP ミキミーミウミセミサミセミイミコミク ミエミサム ミアミオミキミセミソミームミスミセムムひク + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options DENY; + add_header X-XSS-Protection "1; mode=block"; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + # ミ樮ミスミセミイミスミセミケ ミコミセムミスミオミイミセミケ ミコミームひーミサミセミウ + root /var/www/html; + index index.html index.htm index.nginx-debian.html; + # ミ湲ミセミコムミク ミエミサム backend + location / { + proxy_pass http://127.0.0.1:8001; + proxy_set_header X-Forwarded-Host $server_name; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; + # ミ」ミアミオミエミクムひオムム, ムムひセ ミイミーミシ ミエミオミケムムひイミクムひオミサム糊スミセ ミスムσカミスミセ ムミーミキムミオム威クムび ミエミセムムびσソ ム ミサム社アミセミウミセ ミエミセミシミオミスミー + add_header Access-Control-Allow-Origin *; + } + # ミ榧アムミーミアミセムひコミー ミシミオミエミクミー ムミーミケミサミセミイ + location /media/ { + alias /var/www/project1/media/; + expires max; + access_log on; + } + # ミ嶢セミウミク + error_log /var/log/nginx/backend-error.log; + access_log /var/log/nginx/backend-access.log; + # ミ慴ーミコムミクミシミーミサム糊スム巾ケ ムミーミキミシミオム ミキミーミウムムσカミーミオミシミセミウミセ ムミーミケミサミー + client_max_body_size 100M; + # ミ厘ーム禍クムひー ミセム ミシミオミエミサミオミスミスム錦 ミームひーミコ (slowloris) + client_body_timeout 10s; + client_header_timeout 10s; + #send_timeout 10s; + keepalive_timeout 65; +} +# ミミオミエミクムミオミコム ム HTTP ミスミー HTTPS +server { + listen 80; + listen [::]:80; + server_name example.com; + return 301 https://$host$request_uri; +} +``` +ミ頒ーミサミオミオ ミソミオムミオミキミーミウムムσカミーミオミシ nginx +```sh +sudo service nginx restart +``` +ミ頒ーミサミオミオ ミエミサム ミコミセムムミオミコムひスミセミケ ムミーミアミセムび ミスムσカミスミセ ムτムひーミスミセミイミクムび ムミオムムひクムミクミコミーム LetsEncrypt ssl, ムτムひーミスミセミイミコミー ミアムσエミオム ム ミソミセミシミセム禾袴 `certbot` +[ミ侑スムムびムσコムミクム ム ミセムミクムミクミーミサム糊スミセミウミセ ムミーミケムひー]([ミ侑スムムびムσコムミクミク Certbot | Certbot](https://certbot.eff.org/instructions?ws=nginx&os=pip)) +```sh +sudo apt update +sudo apt install python3 python3-venv libaugeas0 +sudo /home//.python/bin/python3 -m venv /opt/certbot/ +sudo /opt/certbot/bin/pip install --upgrade pip +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 +``` +## ミエミセミアミーミイミサム紹オミシ ムムミセミスムひオミスミエ ミソムミセミオミコム +```sh +git clone https://github.com/Project2.git +cd project2 +``` +ミ」ムムひーミスミーミイミサミクミイミーミオミシ `npm` +```sh +sudo apt install -y npm +``` +ミ」ムムひーミスミーミイミサミクミイミーミオミシ ミアミクミアミサミクミセムひオミコミク ミクミキ ミソムミセミオミコムひー +```sh +npm install +``` +ミ。ムひームムびσオミシ ミソムミセミオミコム ミイ ムミオミカミクミシミオ ムミーミキムミーミアミセムびミクミコミー +```sh +npm run dev +``` +ミ ミセミソム肖び ミイミセミキミイムミーム禍ーミオミシムム ミコ ム威ーミウム ミエミセミアミーミイミサミオミスミクム ミソミセムムひー ミイ ムミーミオムミイミセミサ +```sh +sudo firewall-cmd --permanent --add-port=8002/tcp +sudo firewall-cmd --reload +``` +ミ。ミセミキミエミーミオミシ ミスミセミイム巾ケ ムミーミケミサ ミコミセミスムミクミウムτミームミクミク ミエミサム nginx + `/etc/nginx/sites-available/example` +```sh +server { + listen 443; + server_name example2.com; + 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"; + + # HTTP headers ミエミサム ミアミオミキミセミソミームミスミセムムひク + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options DENY; + add_header X-XSS-Protection "1; mode=block"; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + + } + # ミ榧アムミーミアミセムひコミー ミキミーミソムミセムミセミイ + location / { + proxy_pass http://127.0.0.1:8002; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_cache_bypass $http_upgrade; + + # ミ厘ーム禍クムひー ミセム ミシミオミエミサミオミスミスム錦 ミームひーミコ (slowloris) + client_body_timeout 10s; + #client_header_timeout 10s; + send_timeout 10s; + } + + # ミ嶢セミウミク + error_log /var/log/nginx/frontend-error.log; + access_log /var/log/nginx/frontend-access.log; + + # ミ慴ーミコムミクミシミーミサム糊スム巾ケ ムミーミキミシミオム ミキミーミウムムσカミーミオミシミセミウミセ ムミーミケミサミー (ミスミーミソムミクミシミオム, 100MB) + client_max_body_size 100M; + + # ミ厘ーム禍クムひー ミセム ムミサミクム威コミセミシ ミエミセミサミウミクム ムミセミオミエミクミスミオミスミクミケ + keepalive_timeout 65; +} + +# ミミオミエミクムミオミコム ム HTTP ミスミー HTTPS +server { + listen 80; + server_name example2.com; + return 301 https://$host$request_uri; +} + +``` +ミ頒ーミサミオミオ ミセミソムミオミエミオミサム紹オミシ ミセミアミー ムミーミケミサミー ミスミームムびミセミケミコミー 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 nginx -t && sudo nginx -s reload +# ミ頒セミアミーミイミサム紹オミシ ムミオムムひクムミクミコミーム ミスミー ミスミセミイム巾ケ ミエミセミシミオミス +sudo certbot --nginx +``` +ミ」ムムひーミスミーミイミサミクミイミーミオミシ ミソムミクミサミセミカミオミスミクム ミエミサム ミソミセムムひセミケミスミセミウミセ ミセミアミスミセミイミサミオミスミクム pm2 +```sh +sudo npm i pm2 -g +``` +ミ。ミセミキミエミーミオミシ ムミーミケミサ ミコミセミスムミクミウムτミームミクミク ミイミシミオムムひオ ム ミソムミセミオミコムひセミシ +```js +module.exports = { + apps: [ + { + name: 'project2', + port: '8002', + exec_mode: 'cluster', + instances: 'max', + script: './project2/.output/server/index.mjs' + } + ] +} +``` +ミァムひセ ミアム ミソミセムミサミオ ミソミオムミオミキミーミウムムσキミコミク ミソムミセミオミコム ムミーミシ ミイミコミサム紗ミーミサムム ミスムσカミスミセ ミエミセミアミーミイミクムび ミコミセミシミーミスミエム +```sh +pm2 startup +``` +