Ubuntu рд░ Nginx рдорд╛ Laravel 7 рдорд╛ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдЧрд░реНрджреИ

Ubuntu рд░ Nginx рдорд╛ Laravel 7 рдорд╛ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдЧрд░реНрджреИ

рдореИрд▓реЗ Laravel 7 рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЗрд░реЛ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рдмрдирд╛рдЙрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рддрд╛рдХрд┐ рдореБрдЦреНрдп рдкреГрд╖реНрда рдПрдХ рд▓реНрдпрд╛рдиреНрдбрд┐рдЩ рдкреГрд╖реНрда рд╣реБрдиреЗрдЫ, рд░ рдпрд╕рдорд╛ рд╕рдмреИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╢рд╛рд╕рдХ рдкреНрдпрд╛рдирд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдмрд┐рдиреНрджреБ рд╣реЛрдЗрдиред рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯрдорд╛ рдЖрдпреЛ ред рдореИрд▓реЗ рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдкреВрд░реНрдг рд╕рд░реНрднрд░рдорд╛ рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреЗрд╣реА рд░рд╛рдореНрд░реЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реЗред рдо рддреИрдирд╛рддреАрдорд╛ рдзреЗрд░реИ рдмрд▓рд┐рдпреЛ рдЫреИрди; рдо рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдкреВрд░реНрдг рд╕реНрдЯреНрдпрд╛рдХ рднрдиреНрджрд╛ рдЕрдЧрд╛рдбрд┐ рдЫреБред рд░, рдпрджрд┐ рдо рдЕрдЭреИ рдкрдирд┐ PHP рдорд╛ рд▓реЗрдЦреНрди рд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреБ, рд╕рд░реНрднрд░ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдиреБ рдЕрдШрд┐, рдЖрджрд┐ред рдо рдЕрдЭреИ рд╣реБрд░реНрдХреЗрдХреЛ рдЫреИрди ред рддрд░ рдореИрд▓реЗ рдмреБрдЭреНрдиреБрдкрд░реНрдиреЗ рднрдпреЛ ред

рдЕрдм рд╣рд╛рдореА рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ, SSH рдорд╛рд░реНрдлрдд рд▓рдиреНрдЪ рдЧрд░реЗрд░ рд░ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рд╛рдЗрдЯрдХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдБрджреИред рд╣рд╛рдореА рд╕рдмреИ рдЦрд░рд╛рдмреАрд╣рд░реВ рдЬреЛрдЧрд┐рди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред

рддрдкрд╛рдЗрдБ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЕрдирд▓рд╛рдЗрди рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрд╖рдо рд╣реБрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЖрдЦрд┐рд░, рдореИрд▓реЗ рдЕрдиреНрддрддрдГ рдлреЗрд▓рд╛ рдкрд╛рд░реЗред рд╕рд╛рдБрдЪреЛ, рдПрдХ рдард╛рдЙрдБрдорд╛ рд╣реЛрдЗрди, StackOverflow рдХреЛ рдорджреНрджрдд рдмрд┐рдирд╛, рд░ рд╢рд╛рдпрдж рд░реВрд╕реА рдорд╛ред рдореИрд▓реЗ рднреЛрдЧреЗ ред рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рддрд┐рдореНрд░реЛ рдЬреАрд╡рдирд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдХреЛ рдЫреБред

рд╣рд╛рдореА DigitalOcean рдорд╛ рдПрдХ рдереЛрдкрд╛рдХреЛ рд╕рд╛рде рд╕рдмреИ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫреМрдВред рдпреЛ, рдЕрд╡рд╢реНрдп рдкрдирд┐, рдЖрд╡рд╢реНрдпрдХ рдЫреИрди; рдХреБрдиреИ рдкрдирд┐ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЫрдиреМрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЬрдм рддрдкрд╛рдИрдВ Ubuntu рдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рд░реНрднрд░рдорд╛ рдкреБрдЧреНрдиреБрд╣реБрдиреНрдЫ, рдлрд┐рд░реНрддрд╛ рдЖрдЙрдиреБрд╣реЛрд╕реНред рдЕрдЭреИ рдкрдирд┐ DigitalOcean рдорд╛ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рддреНрдпрд╣рд╛рдБ рдбреЛрдореЗрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рдердк рд╕реБрдЭрд╛рд╡рд╣рд░реВ рд╣реБрдиреЗрдЫрдиреНред рд░ $100 рд░реЗрдлрд░рд▓ рд▓рд┐рдЩреНрдХ.

рд╕рдмреИ DigitalOcean-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░рдгрд╣рд░реВ рдпреА рдЬрд╕реНрддреИ рдлреБрдЯрдиреЛрдЯрд╣рд░реВрдорд╛ рджрд┐рдЗрдиреЗрдЫред

рд╕реБрд░реБ рдЧрд░реМрдБред

TL; DR (рдЖрдзрд╛рд░рднреВрдд рдЖрджреЗрд╢рд╣рд░реВ рдорд╛рддреНрд░)

рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

  • ssh root@[IP-╨░╨┤╤А╨╡╤Б ╨▓╨░╤И╨╡╨│╨╛ ╨┤╤А╨╛╨┐╨╗╨╡╤В╨░]
  • adduser laravel
  • usermod -aG sudo laravel
  • su laravel

рдпрд╕рдорд╛ SSH рдердкреНрдиреБрд╣реЛрд╕реН

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА рдШреБрд╕рд╛рдЙрдиреБрд╣реЛрд╕реН
  • chmod 600 ~/.ssh/authorized_keys

рдлрд╛рдпрд░рд╡рд╛рд▓

  • sudo ufw allow OpenSSH
  • sudo ufw enable
  • sudo ufw status

рдирд┐рдЬрд┐рдирдХреНрд╕

  • sudo apt update
  • sudo apt install -y nginx
  • sudo ufw allow 'Nginx HTTP'
  • sudo ufw status

MySQL

  • sudo apt install -y mysql-server
  • sudo mysql_secure_installation, NYNNY
  • sudo mysql
  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<╨Т╨░╤И ╨┐╨░╤А╨╛╨╗╤М ╨┤╨╗╤П MySQL>';
  • SELECT user,authentication_string,plugin,host FROM mysql.user;
  • FLUSH PRIVILEGES;
  • exit

PHP

  • sudo apt update

  • sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https

  • sudo apt-add-repository ppa:ondrej/php

  • sudo apt update

  • 7.3: sudo apt install -y php7.3-fpm php7.3-mysql

  • 7.4: sudo apt install -y php7.4-fpm php7.4-mysql

  • sudo vim /etc/nginx/sites-available/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

рдЖрдзрд╛рд░рднреВрдд рд╕реЗрдЯрдЕрдк:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜ ╨╕╨╗╨╕ IP>;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ .php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

        location ~ /.ht {
                deny all;
        }
}

Laravel рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ HTTP рд╕реЗрдЯрдЕрдк:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html/<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>/public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜ ╨╕╨╗╨╕ IP>;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /.ht {
        deny all;
    }
}

Laravel рдХреЛ рд▓рд╛рдЧрд┐ HTTPS рд╕реЗрдЯрд┐рдЩ:

server {
    listen 80;
    listen [::]:80;

    server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> www.<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> www.<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>;
    root /var/www/html/<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>/public;

    ssl_certificate /etc/letsencrypt/live/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>/privkey.pem;

    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
    ssl_prefer_server_ciphers on;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php index.html index.htm index.nginx-debian.html;

    charset utf-8;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /.ht {
            deny all;
    }

    location ~ /.well-known {
            allow all;
    }
}

  • sudo ln -s /etc/nginx/sites-available/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> /etc/nginx/sites-enabled/
  • sudo unlink /etc/nginx/sites-enabled/default
  • sudo nginx -t
  • sudo systemctl reload nginx

Laravel

  • 7.3: sudo apt install -y php7.3-mbstring php7.3-xml composer unzip

  • 7.4: sudo apt install -y php7.4-mbstring php7.4-xml composer unzip

  • mysql -u root -p

  • CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<╨Т╨░╤И ╨┐╨░╤А╨╛╨╗╤М ╨╛╤В MySQL>';

  • FLUSH PRIVILEGES;

  • exit

  • cd /var/www/html

  • sudo mkdir -p <╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>

  • sudo chown laravel:laravel <╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>

  • cd ./<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>

  • git clone <╤Б╤Б╤Л╨╗╨║╨░ ╨╜╨░ ╨┐╤А╨╛╨╡╨║╤В> . / git clone -b <╨╕╨╝╤П ╨▓╨╡╤В╨║╨╕> --single-branch <╤Б╤Б╤Л╨╗╨║╨░ ╨╜╨░ ╨┐╤А╨╛╨╡╨║╤В> .

  • composer install

  • vim .env

APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=<╨Т╨░╤И ╨┐╨░╤А╨╛╨╗╤М ╨╛╤В MySQL>

  • php artisan migrate

  • php artisan key:generate

  • sudo chown -R $USER:www-data storage

  • sudo chown -R $USER:www-data bootstrap/cache

  • chmod -R 775 storage

  • chmod -R 775 bootstrap/cache

HTTPS

  • sudo add-apt-repository ppa:certbot/certbot

  • sudo apt install -y python-certbot-nginx

  • sudo certbot certonly --webroot --webroot-path=/var/www/html/<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>/public -d <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> -d www.<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

  • sudo nginx -t

  • sudo ufw allow 'Nginx HTTPS'

  • sudo ufw status

  • sudo systemctl reload nginx

DigitalOcean рдорд╛ рдПрдХ рдбреНрд░рдкрд▓реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдирдпрд╛рдБ SSH рдХреБрдЮреНрдЬреА рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдо рд╕рд╛рдБрдЪреНрдЪреИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрдЫреБ рдХрд┐ рддрдкрд╛рдИрд▓реЗ рдбрд┐рдЬрд┐рдЯрд▓рдУрд╢рдирд╕рдБрдЧ рдХрд╕рд░реА рджрд░реНрддрд╛ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реБрдиреЗрдЫред рдпреЛ рд╕рдЬрд┐рд▓реЛ рдЫреИрди, рдзреЗрд░реИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдЕрдиреНрдп рдЪреАрдЬрд╣рд░реВрдХреЛ рд╕рд╛рдеред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрджрд╛ рд▓рдЧрд╛рддрд╛рд░ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, VPN рдорд╛рд░реНрдлрдд рд╕рдмреИ рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдпрд╕рд▓реЗ рдорджреНрджрдд рдЧрд░реНрдиреБрдкрд░реНрдЫред

рдорд╛рдерд┐рдХреЛ рдореЗрдиреБрдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рд┐рд░реНрдЬрдирд╛->рдШрдЯреНрджреИред рдЫрд╛рдиреНрдиреБрд╣реЛрд╕реН Ubuntu.

рддрдкрд╛рдИрдВрд▓реЗ рджрд░реНрддрд╛ рдЧрд░реНрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдЦрд╛рддрд╛рдорд╛ $ 100 рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред рддрд░ рдореВрд░реНрдЦ рдирд╣реБрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрдВрд╕рдБрдЧ рдпреЛ рдЦрд░реНрдЪ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ 60 рджрд┐рди рдЫред рд░ рдпреЛ рдзреЗрд░реИ рдереЛрд░реИ рдЫред рддрдкрд╛рдИрдВ, рдо рдЬрд╕реНрддреИ, рдЕрдЭ рдорд╣рдБрдЧреЛ рдпреЛрдЬрдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ, рддрд╛рдХрд┐ рдкрдЫрд┐, рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреИрд╕рд╛ рдкреНрд░рд╡рд╛рд╣ рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рддрдкрд╛рдИрдВ рд╕рд╕реНрддреЛ рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рд┐рдзреИ рднрдиреНрдЫреБ рдХрд┐ рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрджреИрдиред рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рдмрдврд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рдШрдЯрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдиред рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдЬрд╛рдиреНрдЫред рдо рд░реЛрдЬреНрдЫреБ рдорд╛рдирдХ->$5.

рдо рд╣рд╛рдореНрд░реЛ рдирдЬрд┐рдХрдХреЛ рдХреНрд╖реЗрддреНрд░ рд░реЛрдЬреНрдЫреБ рдлреНрд░реИрдВрдХрдлрд░реНрдЯ. VPC рдиреЗрдЯрд╡рд░реНрдХ->рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд-fra1

рд╣рд╛рдореА рддреБрд░реБрдиреНрддреИ SSH рдорд╛рд░реНрдлрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВред рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдирдпрд╛рдБ SSH рдХреБрдЮреНрдЬреАред рдпрджрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ SSH рдЫреИрди рднрдиреЗ, рджрд╛рдпрд╛рдБрдорд╛ рдзреЗрд░реИ рд╕рд░рд▓ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЫрдиреНред рдмрд╛рд╕ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реН ssh-keygenред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреАрдХреЛ рд╕рд╛рде рдлрд╛рдЗрд▓рдорд╛ рдЬрд╛рдиреНрдЫреМрдВ /Users/<╨Т╨░╤И╨╡ ╨╕╨╝╤П ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤П>/.ssh/id_rsa.pub (рд╡рд╛ рд╕рд╛рдзрд╛рд░рдг рд░реВрдкрдорд╛ cat ~/.ssh/id_rsa.pub), рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдмрд╛рдБрдпрд╛рдорд╛ рд░рд╣реЗрдХреЛ рд╕рдЮреНрдЭреНрдпрд╛рд▓рдорд╛ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реНред рдХреБрдиреИ рдкрдирд┐ рдирд╛рдоред

рд╣рд╛рдореА рдбреНрд░рдкрд▓реЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛрд╕реНрдЯрдирд╛рдо рд▓рд┐рдПрд░ рдЖрдЙрдБрдЫреМрдВред

Push рдбреНрд░рдкрд▓реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

  • ssh root@[IP-╨░╨┤╤А╨╡╤Б ╨▓╨░╤И╨╡╨│╨╛ ╨┤╤А╨╛╨┐╨╗╨╡╤В╨░]
  • рдХреЗ рддрдкрд╛рдЗрдБ рдЬрдбрд╛рди рдЬрд╛рд░реА рд░рд╛рдЦреНрди рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрдЫ (рд╣реЛ/рд╣реЛрдЗрди/[рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдиреНрдЯ])? yes
  • рдЖрдлреНрдиреЛ SSH рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН laravel: adduser laravel
  • рдЖрдлреНрдиреЛ рдкрд╛рд╕рд╡рд░реНрдб рд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдо рдорд╛рддреНрд░ рдкреВрд░рд╛ рдирд╛рдо рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН)
  • sudo рд╕рдореВрд╣рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдердкреНрдиреБрд╣реЛрд╕реН: usermod -aG sudo laravel

рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ SSH

  • рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН: su laravel

рд╣рд╛рдореА laravel рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рддрд░реНрдлрдмрд╛рдЯ рд▓реЗрдЦрдХреЛ рдЕрдиреНрддреНрдп рдирднрдПрд╕рдореНрдо рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ рдЕрдЧрд╛рдбрд┐ рдмрдврд╛рдЙрдБрдЫреМрдВред рддрд╕рд░реНрде, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрдЪрд╛рдирдХ рдмрд╛рдзрд╛ рдкрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдкреБрди: рд▓рдЧрдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН su laravel

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys

рд╣рд╛рдореАрд▓реЗ Vim рдорд╛ рдлрд╛рдЗрд▓ рдЦреЛрд▓реНрдпреМрдВред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпрд╕рд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрди рднрдиреЗ, рддрдкрд╛рдЗрдБ рдирд╛рдиреЛрдорд╛ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрдкрд╛рдЗрдБрдХреЛ рдЕрдзрд┐рдХрд╛рд░.

рд╕рдмреИрднрдиреНрджрд╛ рдЖрдзрд╛рд░рднреВрдд Vim рдЖрджреЗрд╢рд╣рд░реВ

рд▓реЗрдЦ рднрд░ Vim рд╕рдореНрдкрд╛рджрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА, рддрдкрд╛рдЗрдБ рдХреЗрд╡рд▓ рдирд┐рдореНрди рдЬрд╛рдиреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

  • Vim рдорд╛ рд╡рд┐рднрд┐рдиреНрди рдореЛрдбрд╣рд░реВ рдЫрдиреН: рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб, рдЬрд╕рдорд╛ рддрдкрд╛рдЗрдБ рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рд░ рдореЛрдбрд╣рд░реВ рд░ рдЕрдиреНрдпрд╣рд░реВ рдЪрдпрди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред
  • рдХреБрдиреИ рдкрдирд┐ рдореЛрдбрдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрди рд░ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдбрдорд╛ рдлрд░реНрдХрди, рдорд╛рддреНрд░ рдерд┐рдЪреНрдиреБрд╣реЛрд╕реН Esc
  • рд╡рд░рд┐рдкрд░рд┐ рд╕рд╛рд░реНрдиреБрд╣реЛрд╕реН: рддрдкрд╛рдИрдВ рдХреЗрд╡рд▓ рддреАрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
  • рдмрдЪрдд рдирдЧрд░реА рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реН <Normal mode>: :q!
  • рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реН рд░ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН <Normal mode>: :wq
  • рдкрд╛рда рдЗрдирдкреБрдЯ рдореЛрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН <Normal mode>: i (рдЕ fromреНрдЧреНрд░реЗрдЬреАрдмрд╛рдЯ)ред рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН)
  • рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА рдШреБрд╕рд╛рдЙрдБрдЫреМрдВ (рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдЧрд░реНрдпреМрдВ)
  • рд╣рд╛рдореА рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдЧрд░реНрдЫреМрдВ: chmod 600 ~/.ssh/authorized_keys

рдлрд╛рдпрд░рд╡рд╛рд▓ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

  • рд╕рдмреИ рдЙрдкрд▓рдмреНрдз рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╣реЗрд░реМрдВ: sudo ufw app list
  • OpenSSH рд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рдиреБрд╣реЛрд╕реН (рдЕрдиреНрдпрдерд╛ рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд▓рдХ рдЧрд░реНрдиреЗрдЫ): sudo ufw allow OpenSSH
  • рдлрд╛рдпрд░рд╡рд╛рд▓ рд╕реБрд░реБ рдЧрд░реМрдВ: sudo ufw enable, y
  • рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ: sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

рд╕рдмреИ рдареАрдХ рдЫред

Nginx рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рд╕реНрдерд╛рдкрдирд╛рдХреЛ рдХреНрд░рдордорд╛ рддрдкрд╛рдИрд▓рд╛рдИ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рд╕реЛрдзрд┐рдиреЗрдЫ "рдХреЗ рддрдкрд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрдЫ?" рдЬрд╡рд╛рдл y (рдареАрдХ рдЫ, рдпрджрд┐ рддрдкрд╛рдИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ)ред

  • sudo apt update
  • sudo apt install nginx

рдлрд╛рдпрд░рд╡рд╛рд▓ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ Nginx рдердкреНрджреИ

  • sudo ufw app list
  • sudo ufw allow 'Nginx HTTP'
  • sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

рдЖрдлреНрдиреЛ IP рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред рдпрджрд┐ рд╕рдмреИ рдХреБрд░рд╛ рдареАрдХ рдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдореНрди рд╣реЗрд░реНрдиреБ рдкрд░реНрдЫред

Ubuntu рд░ Nginx рдорд╛ Laravel 7 рдорд╛ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдЧрд░реНрджреИ

MySQL рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

  • sudo apt install mysql-server
  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд░реБ рдЧрд░реНрджреИ sudo mysql_secure_installation

рд╕реЛрдзрд┐рдПрдХрд╛ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреБрд╣реЛрд╕реНред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХреЗ рдЬрд╡рд╛рдл рджрд┐рдиреЗ рдерд╛рд╣рд╛ рдЫреИрди рднрдиреЗ, рдпрд╣рд╛рдБ рдХреЗрд╣реА рд╕реБрдЭрд╛рд╡ рдЧрд░рд┐рдПрдХрд╛ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреН:

  • рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд▓рдЧрдЗрди рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН - N

  • рдмреЗрдирд╛рдореА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд╣рдЯрд╛рдЙрдиреЗ рд╣реЛ? - Y

  • рдЯрд╛рдвреИрдмрд╛рдЯ рд░реВрдЯ рд▓рдЧрдЗрди рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреЗ рд╣реЛ? - N

  • рдкрд░реАрдХреНрд╖рдг рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рдкрд╣реБрдБрдЪ рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН? - N

  • рдЕрдм рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдкреБрди: рд▓реЛрдб рдЧрд░реНрдиреЗ? - Y

  • MySQL рдорд╛ рдЬрд╛рдФрдВ: sudo mysql

  • рдкрд╣реБрдБрдЪ рд╡рд┐рдзрд┐рд╣рд░реВ рд╣реЗрд░реМрдВ: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • рд░реВрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<╨Т╨░╤И ╨┐╨░╤А╨╛╨╗╤М ╨┤╨╗╤П MySQL>';

  • рдкрд╣реБрдБрдЪ рд╡рд┐рдзрд┐рд╣рд░реВ рдлреЗрд░рд┐ рд╣реЗрд░реМрдВ: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ MySQL рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реН: FLUSH PRIVILEGES; ╨╕ exit

  • рдЕрдм, MySQL рдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рддрдкрд╛рдИрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ mysql -u root -p рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН

PHP рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рдмрд╛рдЯ рддреЗрд╕реНрд░реЛ-рдкрдХреНрд╖ рднрдгреНрдбрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реМрдВ рдУрдиреНрдбрд░реЗрдЬ рд╕реБрд░реА

  • sudo apt update
  • sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
  • sudo apt-add-repository ppa:ondrej/php
  • sudo apt update

рдЕрдм рдЫрдиреЛрдЯ рдЧрд░реМрдВред Laravel 7 рдХреЛ рд▓рд╛рдЧреА, рддрдкрд╛рдЗрдБ PHP 7.3 рд╡рд╛ 7.4 рд░реЛрдЬреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдлрд░рдХ рдорд╛рддреНрд░ рд╕рдВрдЦреНрдпрд╛ 3 рд░ 4 рдорд╛ рд╣реБрдиреЗрдЫред

  • 7.3: sudo apt install -y php7.3-fpm php7.3-mysql
  • 7.4: sudo apt install -y php7.4-fpm php7.4-mysql

PHP FastCGI рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдиреНрдзрдХ (fpm) PHP рдЕрдиреБрд░реЛрдзрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрдЫред mysql, рдЕрд╡рд╢реНрдп рдкрдирд┐, MySQL рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ред

рдЕрдм рджреЗрдЦрд┐ рдо 7.4 рдорд╛ рд╕рдмреИ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫреБред

Nginx рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

  • sudo vim /etc/nginx/sites-available/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

"<Your domain>" рдХреЛ рд╕рдЯреНрдЯрд╛ рдбреЛрдореЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, mysite.ru) рдЬреБрди рддрдкрд╛рдИрдВ рднрд╡рд┐рд╖реНрдпрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рдПрдЙрдЯрд╛ рдЫреИрди рднрдиреЗ, рдХреБрдиреИ рдкрдирд┐ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдЪрдпрди рдЧрд░реНрджрд╛ рддрдкрд╛рдЗрдБрдХреЛ рдбреЛрдореЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдЕрдзреНрдпрд╛рдпрдорд╛ рдЪрд░рдгрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реНред

рдирд┐рдореНрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜ ╨╕╨╗╨╕ IP>;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ .php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

        location ~ /.ht {
                deny all;
        }
}

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг 7.3 рд░реЛрдЬреНрдиреБрднрдпреЛ рднрдиреЗ php7.4-fpm.sock рд▓реЗрдЦ php7.4-fpm.sock.

рдкреЛрд░реНрдЯ 80 рдорд╛ рд╕реБрдиреНрдиреБрд╣реЛрд╕реН server_nameрдЬрдм рд╣рд╛рдореА рдореВрд▓ рдЕрдиреБрд░реЛрдзрдорд╛ рдкреБрдЧреНрдЫреМрдВ /var/www/html рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдлрд╛рдЗрд▓ рд▓рд┐рдиреБрд╣реЛрд╕реНред рдпрджрд┐ рдкрдЫрд┐ server_name рддреНрдпрд╣рд╛рдБ рдХреЗрд╣рд┐ рдЫ, рд╣рд╛рдореА рдпрд╕реНрддреЛ рдлрд╛рдЗрд▓ рдЦреЛрдЬреНрджреИрдЫреМрдВред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдиреМрдВ рднрдиреЗ, рд╣рд╛рдореА 404 рдлреНрдпрд╛рдБрдХреНрдЫреМрдВред рдпрджрд┐ рдпреЛ рд╕рдВрдЧ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ .php, рдорд╛рд░реНрдлрдд рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН fpm... рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдЫ .ht, рдирд┐рд╖реЗрдз (403)ред

  • рдмрд╛рдЯ рд▓рд┐рдЩреНрдХ рдмрдирд╛рдЙрдБрджреИ sites-available ╨▓ sites-enabled: sudo ln -s /etc/nginx/sites-available/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> /etc/nginx/sites-enabled/
  • рд▓рд┐рдЩреНрдХ рд╣рдЯрд╛рдЙрдБрджреИ default: sudo unlink /etc/nginx/sites-enabled/default
  • рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ: sudo nginx -t
  • рд░рд┐рдмреБрдЯ: sudo systemctl reload nginx

рдХрд╛рдо рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ:

  • sudo vim /var/www/html/info.php
  • рд╣рд╛рдореА рд▓реЗрдЦреНрдЫреМ: <?php phpinfo();
  • рдЬрд╛рдФрдВ <╨Т╨░╤И IP>/info.php

рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рд╣реЗрд░реНрдиреБ рдкрд░реНрдЫ:

Ubuntu рд░ Nginx рдорд╛ Laravel 7 рдорд╛ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдЧрд░реНрджреИ

рдЕрдм рдпреЛ рдлрд╛рдЗрд▓ рдореЗрдЯрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ: sudo rm /var/www/html/info.php

Laravel рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

  • 7.3: sudo apt install php7.3-mbstring php7.3-xml composer unzip

  • 7.4: sudo apt install php7.4-mbstring php7.4-xml composer unzip

  • MySQL рдорд╛ рдЬрд╛рдФрдВ: mysql -u root -p

  • рдирд╛рдордХреЛ рд╕рд╛рде рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН laravel: CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • рд╣рд╛рдореА рд░реВрдЯ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫреМрдВ laravel: GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<╨Т╨░╤И ╨┐╨░╤А╨╛╨╗╤М ╨╛╤В MySQL>';

  • FLUSH PRIVILEGES;

  • exit

  • cd /var/www/html

  • рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдлреЛрд▓реНрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН: sudo mkdir -p <╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>

  • рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫреМрдВ laravel рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдзрд┐рдХрд╛рд░: sudo chown laravel:laravel <╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>

рдЕрд░реНрдХреЛ рддрдкрд╛рдИрдВрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, Github рдмрд╛рдЯ рдХреНрд▓реЛрдирд┐рдВрдЧред

  • cd ./<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>
  • git clone <╤Б╤Б╤Л╨╗╨║╨░ ╨╜╨░ ╨┐╤А╨╛╨╡╨║╤В> .

рдпреЛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдерд┐рд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдмрдЪрдд рдЧрд░реНрдиреБрднрдПрди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдмрд╛рдЯ /public) Github рдорд╛, рддреНрдпрд╕рдкрдЫрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ рддрдкрд╛рдИрдВрд╕рдБрдЧ рддрд┐рдиреАрд╣рд░реВ рд╣реБрдиреЗрдЫреИрдиред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЫреБрдЯреНрдЯреИ рдереНрд░реЗрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХреЛ рдЫреБ deploy, рдЬрд╕рдмрд╛рдЯ рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдХреНрд▓реЛрди рдЧрд░реЗрдХреЛ рдЫреБ: git clone -b <╨╕╨╝╤П ╨▓╨╡╤В╨║╨╕> --single-branch <╤Б╤Б╤Л╨╗╨║╨░ ╨╜╨░ ╨┐╤А╨╛╨╡╨║╤В> ..

  • рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ: composer install
  • env рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН: vim .env

рдпрд╕рдХреЛ рдЖрдзрд╛рд░рднреВрдд рд╕рдВрд╕реНрдХрд░рдг рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=<╨Т╨░╤И ╨┐╨░╤А╨╛╨╗╤М ╨╛╤В MySQL>

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ .env рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, APP_ENV рд▓рд╛рдИ рдЙрддреНрдкрд╛рджрди, APP_DEBUG рд▓рд╛рдИ рдЧрд▓рддрд╕рдБрдЧ рдмрджрд▓реНрдиреБрд╣реЛрд╕реН рд░ MySQL рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╣реА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

  • рдбрд╛рдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдЧрд░реНрджреИ: php artisan migrate
  • рдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░реНрджреИ: php artisan key:generate

рдЕрдиреБрдорддрд┐рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИ:

  • sudo chown -R $USER:www-data storage
  • sudo chown -R $USER:www-data bootstrap/cache
  • chmod -R 775 storage
  • chmod -R 775 bootstrap/cache

Laravel рдХреЛ рд▓рд╛рдЧреА Nginx рдкреБрди: рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рдЕрдиреНрддрд┐рдо рдХреБрд░рд╛ рд╣реЛ:

sudo vim /etc/nginx/sites-available/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

server {
    listen 80;
    listen [::]:80;

    root /var/www/html/<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>/public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜ ╨╕╨╗╨╕ IP>;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /.ht {
        deny all;
    }
}

рдкрдЫрд┐рд▓реНрд▓реЛ рдкрдЯрдХ рдЬрд╕реНрддреИ, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг 7.3 рд░реЛрдЬреНрдиреБрднрдпреЛ рднрдиреЗ php7.4-fpm.sock рд▓реЗрдЦ php7.4-fpm.sock.

DigitalOcean рдорд╛ рдбреЛрдореЗрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рд╕рдмреИ рдХреБрд░рд╛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдзреЗрд░реИ рд╕рд░рд▓ рдЫред рддрдкрд╛рдИрдВрд▓реЗ рдбреЛрдореЗрди (рдХрд╣реАрдБ рдкрдирд┐) рдХрд┐рдиреНрдиреБрд╣реБрдиреНрдЫ, рдбрд┐рдЬрд┐рдЯрд▓рдУрд╢рдирдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рд┐рд░реНрдЬрдирд╛->рдбреЛрдореЗрди/DNSред ╨Т ╨┐╨╛╨╗╨╡ рдПрдЙрдЯрд╛ рдбреЛрдореЗрди рдЬреЛрдбреНрдиреБрд╣реЛрд╕реН рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдбреЛрдореЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдердкреНрдиреБрд╣реЛрд╕реН рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддреНрдпрд╕рдкрдЫрд┐ рдбреЛрдореЗрди рд╕реЗрдЯрд┐рдЩ рд░ рдлрд┐рд▓реНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН HOST NAME рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН @ред рдПрдЙрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░реЗрдХрд░реНрдб рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН.
рдЕрдм рддрдкрд╛рдИрд▓реЗ рдбреЛрдореЗрди рдХрд┐рдиреНрдиреБ рднрдПрдХреЛ рд╕рд╛рдЗрдЯрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН, рддреНрдпрд╣рд╛рдБ "DNS рд╕рд░реНрднрд░рд╣рд░реВ" рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН (рд╡рд╛ рдпрд╕реНрддреИ рдХреЗрд╣рд┐) рд░ DigitalOcean рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЕрд░реНрдерд╛рддреНред ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com)ред рдЕрдм рддрдкрд╛рдИрдВрд▓реЗ рдпреА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╕реНрд╡реАрдХрд╛рд░ рдирдЧрд░реЗрд╕рдореНрдо рдереЛрд░реИ (рд╡рд╛ рдзреЗрд░реИ) рдкрд░реНрдЦрдиреБ рдкрд░реНрдЫред рддрдпрд╛рд░!
рдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдХреЛ рд╕рд╛рдЗрдЯ HTTP рдХреЛ рд░реВрдкрдорд╛ рдорд╛рддреНрд░ рдЦреБрд▓реНрдиреЗрдЫред HTTPS рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдЕрд░реНрдХреЛ рднрд╛рдЧрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред

HTTPS рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

certbot рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдбреЛрдореЗрди рдирд╛рдо рдкрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдврд╛рдБрдЪрд╛ mysite.ru) рд░ www рдХреЛ рд╕рд╛рде рдбреЛрдореЗрди рдирд╛рдо (www.mysite.ru).

  • sudo add-apt-repository ppa:certbot/certbot
  • sudo apt install python-certbot-nginx
  • sudo certbot certonly --webroot --webroot-path=/var/www/html/<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>/public -d <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> -d www.<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>

рдЕрдм рддрдкрд╛рдИрдВрд▓реЗ Nginx рдкреБрди: рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рддрдкрд╛рдИрдВрдХреЛ рдорд╛рдирд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН):

server {
    listen 80;
    listen [::]:80;

    server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> www.<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name <╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜> www.<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>;
    root /var/www/html/<╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>/public;

    ssl_certificate /etc/letsencrypt/live/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<╨Т╨░╤И ╨┤╨╛╨╝╨╡╨╜>/privkey.pem;

    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
    ssl_prefer_server_ciphers on;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php index.html index.htm index.nginx-debian.html;

    charset utf-8;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /.ht {
            deny all;
    }

    location ~ /.well-known {
            allow all;
    }
}

рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдХрд┐ рддрдкрд╛рдИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ PHP 7.3 рдХреЛ рд▓рд╛рдЧреА рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗрд░ рдмреБрдЭреНрдиреБрднрдпреЛред

рдпрд╣рд╛рдБ, рд╡рд╛рд╕реНрддрд╡рдорд╛, рд╕рдмреИ рд╕рд░рд▓ рдЫред рд╣рд╛рдореА рдХреЗрд╡рд▓ HTTP (рдкреЛрд░реНрдЯ 80) рдмрд╛рдЯ HTTPS (рдкреЛрд░реНрдЯ 443) рдорд╛ рд╕рдмреИ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд░рд┐рдбрд┐рд░реЗрдХреНрдЯ рдЧрд░реНрдЫреМрдВред рд░ рддреНрдпрд╣рд╛рдБ рд╣рд╛рдореА рд╕рдмреИ рдХреБрд░рд╛ рдкрд╣рд┐рд▓реЗ рдЬрд╕реНрддреИ рдЧрд░реНрдЫреМрдВ, рддрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рдирдХреЛ рд╕рд╛рдеред

рдмрд╛рдБрдХреА рд╕рдмреИ рдлрд╛рдпрд░рд╡рд╛рд▓рдорд╛ рдЕрдиреБрдорддрд┐рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди рд╣реЛ:

  • sudo nginx -t
  • sudo ufw app list
  • sudo ufw allow 'Nginx HTTPS'
  • sudo ufw status
  • sudo systemctl reload nginx

рдЕрдм рд╕рдмреИ рдХреБрд░рд╛ рдЬрд╕рд░реА рдЪрд▓реНрдиреБрдкрд░реНрдЫ рддреНрдпрд╕реНрддреИ рд╣реБрдиреБрдкрд░реНрдЫред

[рдЙрдиреНрдирдд] рд╕реНрдерд╛рдкрдирд╛ Node.js

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЕрдЪрд╛рдирдХ npm рдЖрджреЗрд╢рд╣рд░реВ рд╕реАрдзрд╛ рд╕рд░реНрднрд░рдорд╛ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ Node.js рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

  • sudo apt update
  • sudo apt install -y nodejs npm
  • nodejs -v

рдпреЛ рд╣реЛ, рдо рдпреЛ рдЪрд░рдгрдорд╛ рд░реЛрдХрд┐рдПрдБред рд╕рд┐рджреНрдзрд╛рдиреНрдд рдорд╛, рдо рдирддрд┐рдЬрд╛ рд╕рдВрдЧ рд╕рдиреНрддреБрд╖реНрдЯ рдЫреБред рд╕рд╛рдпрдж рдо DigitalOcean рдмрд╛рдЯ рд░реВрд╕рдХреЛ рдирдЬрд┐рдХ рд░ рд╕рд╕реНрддреЛрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреЗрдЫреБред рддрд░ рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рд╛рдЗрдЯрдорд╛ рд╕рдмреИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░рд╛рдЙрдиреНрдбрд╣рд░реВ рдорд╛рд░реНрдлрдд рдЧрдПрдХреЛ рдерд┐рдПрдБ рд░ рддреНрдпрд╣рд╛рдБ рд╕рдмреИ рдХреБрд░рд╛ рдЧрд░реЗрдВ, рдореИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЙрджрд╛рд╣рд░рдгрджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛рдПрдБред рдердк рд░реВрдкрдорд╛, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕реБрд░реБ $100 рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рд╣реЛред

PS рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж рд▓реЗрдЦрдХрд▓рд╛рдИ рдпреЛ рд╕рд╛рд░, рдЬрд╕рд▓реЗ рдорд╛рдерд┐рдХрд╛ рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рд╕реЗрд╡рд╛ рдЧрд░реНрдпреЛред рдХреЗрд╣рд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпрд╕рд▓реЗ Laravel 7 рдХреЛ рд▓рд╛рдЧреА рдХрд╛рдо рдЧрд░реНрджреИрди, рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдареАрдХ рдЧрд░реЗрдВред

PPS рдпрджрд┐ рддрдкрд╛рдИрдВ bash рдЖрджреЗрд╢рд╣рд░реВрдорд╛ рд╕реЛрдЪреНрдиреЗ рд╢реАрд░реНрд╖ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдХреГрдкрдпрд╛ рдХрдареЛрд░ рд░реВрдкрдорд╛ рдиреНрдпрд╛рдп рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрд▓рд╛рдИ рдпреЛ рд▓реЗрдЦ рддрд▓реНрд▓реЛ рд╕реНрддрд░рдХреЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ, рддрд░ рдорд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реЗрдХреЛ рдмреЗрд▓рд╛рдорд╛ рдПрдЙрдЯрд╛ рднреЗрдЯреНрдЯрд╛рдЙрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рд╣реБрдиреЗ рдерд┐рдПрдБред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рд╕реБрдзрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрдЭрд╛рд╡рд╣рд░реВ рдЫрдиреН рднрдиреЗ, рдо рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдЫреБред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди