Django рд╕рд╛рдЭрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ, рдореЙрдбрд▓ рдПрди

Django рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдПрдХ * nix рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдореИрдВ рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛, рдмрд╕ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ-рд╕рдмрд╕реЗ-рд╕рдмрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реВрдБрдЧрд╛ред

рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд╕реНрдерд┐рддрд┐


рдкреГрд╖реНрдарднреВрдорд┐:рдкреНрд░рдпреБрдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░:

рдФрд░ рдиреЗрдлрд╝рд┐рдЧрд╝ рдЗрдзрд░-рдЙрдзрд░ рдХреА рдЕрдлрд╡рд╛рд╣


рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдЧреНрд░рд╛рд╣рдХ / рдЧреНрд░рд╛рд╣рдХ рднреА рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдлрд╝рд╛рдЗрд▓ рдЯреНрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ), рдЕрд░реНрдерд╛рддреНред тАЬрд▓рдЧрднрдЧ рдмрд╛рд╣рд░реА рд▓реЛрдЧред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рдбрд┐рд╕реНрдХ рдкрд░ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рд╣реЛрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕ рдЖрд╡реЗрдЧ рдХреЗ рдЖрдЧреЗ рдирд╣реАрдВ рдЭреБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдШрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд╛рдЬрд╛ рдФрд░ рднрдЧрд╡рд╛рди рд╣реИ, рдФрд░ рдПрдХ рдЧрд▓рдд рдХрджрдо рд╣реИ рдФрд░ рдЖрдк рдкрд┐рддрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдП рдЯреНрд░рд┐рдХ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдПрдВ:
/home /client --      /client --    "client" /another_project /project /www-root /static /app1 /app2 manage.py settings.py django_wsgi.py ... /var /log --  nginx'a,      logrotate /tmp -- chmod 770 --    /run --      /client2 --      /client3 --       

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреА рд╣реЛрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдзрд┐рдХрд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ: рдХреНрд▓рд╛рдЗрдВрдЯ, рдмрд╛рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛ, рд░реВрдЯ: рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдХреИрдореЛрдб 750, рдХреНрд░рдорд╢рдГред рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдореВрд╣ рдореЗрдВ nginx рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ nginx рдХреЗ рдкрд╛рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛред рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рднреА, рдПрдХ sftponly рд╕рдореВрд╣ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред Sshd config (/ etc / ssh / sshd_config) рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
 Match Group sftponly X11Forwarding no AllowAgentForwarding no AllowTcpForwarding no ChrootDirectory /home/%u ForceCommand internal-sftp 
рдФрд░ рд▓рд╛рдЗрди
 Subsystem sftp /usr/lib/misc/sftp-server 
рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ
 Subsystem sftp internal-sftp 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ sftp (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, wincp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕реНрддрд░ рддрдХ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШреВрдо рд╕рдХрддрд╛ рд╣реИ, рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ (chmod 750 рд╣рд╛рд▓рд╛рдВрдХрд┐)ред

nginx - рдЗрд╕ рд╢рдмреНрдж рдореЗрдВ рдХрд┐рддрдирд╛ рд╣реИ


рд╕реНрдЯреИрдЯрд┐рдХ рдХрдВрдЯреЗрдВрдЯ рдбрд┐рд▓реАрд╡рд░ рдХрд░рдиреЗ рдФрд░ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЬреЗрдирд░реЗрд╢рди рд╕реЗ рдЬреБрдбрд╝реЗ рдорд╕рд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Nginx рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдмреЗрд╣рддрд░ http- рд╕рд░реНрд╡рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирдЧреНрдиреЗрдХреНрд╕ рдХреЛ рдпреВрд╡реЗрд╕реА-рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред рдЬрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ (рдХрдо рд╕реЗ рдХрдо gentoo рдореЗрдВ) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ nginx / etc / nginx рдореЗрдВ рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдкрд░рдВрдкрд░рд╛ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдореБрдЦреНрдп nginx'a config (/etc/nginx/nginx.conf) рдореЗрдВ, http рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ
 include /etc/nginx/vhost.d/*.conf ; 
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (/etc/nginx/vhost.d/project.conf) рд╣реЛ рд╕рдХрддреА рд╣реИред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
 #uwsgi# USER client #uwsgi# PRJ cool_site.ru #uwsgi# HOME ~/../project #uwsgi# VE ~/.virtualenvs/project #uwsgi# SOCKET ../var/run/uwsgi-project #uwsgi# LOG ../var/log/uwsgi-project.log #uwsgi# PID ../var/run/uwsgi-project.pid #uwsgi# WORKERS 2 upstream wsgi_cluster__project { server unix:/home/client/var/run/uwsgi-project; } server { listen 80; server_name .cool_site.ru; charset utf8; autoindex off; root /home/client/project/www-root; access_log /home/client/var/log/nginx_access.log ; error_log /home/client/var/log/nginx_error.log error; location /static { root /home/client/project; expires 1d; } location / { try_files $uri @django; } location @django { uwsgi_pass wsgi_cluster__project; include uwsgi_params; } } 
# Uwsgi # рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ nginx рджреНрд╡рд╛рд░рд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреА, рд╣рд╛рд▓рд╛рдБрдХрд┐, nust start script (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ) рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдорд╛рдирддреЗ рд╣реБрдП рджреЗрдЦрддреА рд╣реИред

Nust - Nginx Uwsgi STarter


рдПрдХ рдмрд╛рд░, рдЬрдм uwsgi рдмрд╕ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧрд╛ рдерд╛, рдпрд╣ рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреИрд╕реЗ рдЧрд┐рд░рдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ "рд╢рд╛рд╣реА" рд╢рд╛рд╕рди рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдорд╛рдВрдЧ рдХреЗ рдирд░рдХ рдореЗрдВ рдерд╛ - рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╣реА рдХрд╛рд░рдг рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ - рд╡рд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рддреЛ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред
рдХреНрд░рд╛рдЙрди рдкрд░ рдирд╕реНрдЯ рдЪрд▓рддрд╛ рд╣реИ (рдХреНрд░реЙрд╕реНрдЯреЗрдм-рдИ)
 */5 * * * * nust -s -c /etc/nust.conf 
рдЖрдкрдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдеред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ рдЦрдВрдб рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╕реАрдзреЗ nust'y рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рд╕реНрддреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ - uwsgi рдХреЗ рд▓рд┐рдП рдЪреВрдХред
 [nust] pstree = /usr/bin/pstree vhosts = /etc/nginx/vhost.d/*.conf uwsgi = /usr/bin/uwsgi uwsgi_def_args = --ini=/etc/nust.conf dbdir = /var/run kill = /bin/kill -s TERM kill_k9= /bin/kill -s KILL [uwsgi] master= disable-logging= vacuum= logfile-chown= chmod-socket=666 catch-exceptions= memory-report= 

рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдирд╕реНрдЯрд╕реНрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 sudo pip install nust 

"рдШреБрдВрдШрд░рд╛рд▓реЗ рдЯрд┐рдкреНрдкрдгреА" # uwsgi # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ nginx'a рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:рд▓реЗрдХрд┐рди рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:рдкрде рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
Uwsgi рдХреЗ рддрд╣рдд рдХрд┐рд╕реА рднреА рдЕрдЬрдЧрд░ рдХреЛрдб рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рддрдерд╛рдХрдерд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред Django рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб django_wsgi.py рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
 #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals import os os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рдирд╕реНрдЯ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд░рд╛рдЙрди рдкрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдирд╕реНрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд╕реНрдЯ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ (рдХреНрд░реИрд╢, рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рд╕рд╛рде рд╣реА рд╕рд╛рде nginx рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рднреАред рдпрджрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдЖрдлреНрдЯрд░рд╡рд░реНрдб рдХреЗ рдмрдЬрд╛рдп


рдЦреИрд░, рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рднреВрд▓ рдЧрдпрд╛ рд╣реВрдВред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In139270/


All Articles