Ubuntu рдЖрдгрд┐ Nginx рд╡рд░ Laravel 7 рд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдХрд░рдд рдЖрд╣реЗ

Ubuntu рдЖрдгрд┐ Nginx рд╡рд░ Laravel 7 рд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдХрд░рдд рдЖрд╣реЗ

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

рдЖрддрд╛ рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдкрд╛рдпрд▒реНрдпрд╛ рдкрд╛рд░ рдХрд░реВ, SSH рджреНрд╡рд╛рд░реЗ рд▓рд╛рдБрдЪ рдХрд░реВрди рдЖрдгрд┐ рдХрд╛рд░реНрдпрд░рдд рд╕рд╛рдЗрдЯрд╕рд╣ рд╕рдорд╛рдкреНрдд. рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдЕрдбрдЪрдгреА рдЯрд╛рд│рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ.

рддреБрдореНрд╣рд╛рд▓рд╛ рддрддреНрд╕рдо рд╕реВрдЪрдирд╛ рдСрдирд▓рд╛рдЗрди рдорд┐рд│реВ рд╢рдХрддрд╛рдд. рд╢реЗрд╡рдЯреА, рдорд▓рд╛ рддреЗ рд╕рд╛рдкрдбрд▓реЗ. рдЦрд░реЗ рдЖрд╣реЗ, рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рдирд╛рд╣реА, рд╕реНрдЯреЕрдХрдУрд╡реНрд╣рд░рдлреНрд▓реЛрдЪреНрдпрд╛ рдорджрддреАрд╢рд┐рд╡рд╛рдп рдирд╛рд╣реА рдЖрдгрд┐ рд░рд╢рд┐рдпрди рднрд╛рд╖реЗрдд рдХреНрд╡рдЪрд┐рддрдЪ. рдорд▓рд╛ рддреНрд░рд╛рд╕ рдЭрд╛рд▓рд╛. рдореНрд╣рдгреВрдирдЪ рдореА рддреБрдордЪреЗ рдЬреАрд╡рди рд╕реЛрдкреЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдЖрд╣реЗ.

рдЖрдореНрд╣реА DigitalOcean рд╡рд░ рдбреНрд░реЙрдкрд▓реЗрдЯрд╕рд╣ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд░реВ. рд╣реЗ рдЕрд░реНрдерд╛рддрдЪ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА; рдХреЛрдгрддреЗрд╣реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдирд┐рд╡рдбрд╛. рддреБрдореНрд╣реА рдЙрдмрдВрдЯреВрд╡рд░ рдХрд╛рд░реНрдпрд░рдд рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкреЛрд╣реЛрдЪрд▓реНрдпрд╛рд╡рд░, рдкрд░рдд рдпрд╛. рдЬреЗ рдЕрдЬреВрдирд╣реА DigitalOcean рд╡рд░ рдХрд░рд╛рдпрдЪреЗ рдард░рд╡рддрд╛рдд, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдбреЛрдореЗрди рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдЯрд┐рдкрд╛ рдЕрд╕рддреАрд▓. рдЖрдгрд┐ $100 рд░реЗрдлрд░рд▓ рд▓рд┐рдВрдХ.

рд╕рд░реНрд╡ рдбрд┐рдЬрд┐рдЯрд▓ рдУрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рдпрд▒реНрдпрд╛ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рддрд│рдЯреАрдкрд╛рдВрдордзреНрдпреЗ рджрд┐рд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.

рдЖрдкрдг рд╕реБрд░реБ рдХрд░реВ.

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

Nginx

  • 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 рджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛, рддреЗ рдорджрдд рдХрд░реЗрд▓.

рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдореЗрдиреВрдордзреНрдпреЗ, рдХреНрд▓рд┐рдХ рдХрд░рд╛ рддрдпрд╛рд░ рдХрд░рд╛->рдмрд┐рдВрджреБрдХреЗ. рдирд┐рд╡рдбрд╛ рдЙрдмрдВрдЯреВ.

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

рдореА рдЖрдордЪреНрдпрд╛ рдЬрд╡рд│рдЪрд╛ рдкреНрд░рджреЗрд╢ рдирд┐рд╡рдбрддреЛ рдлреНрд░рд╛рдВрдХрдлреБрд░реНрдд. рд╡реНрд╣реАрдкреАрд╕реА рдиреЗрдЯрд╡рд░реНрдХ->рдбреАрдлреЙрд▓реНрдЯ-fra1

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

рдЖрдореНрд╣реА рдбреНрд░реЙрдкрд▓реЗрдЯрд╕рд╛рдареА рд╣реЛрд╕реНрдЯрдирд╛рд╡ рдШреЗрдКрди рдЖрд▓реЛ рдЖрд╣реЛрдд.

рдкреБрд╢ рдбреНрд░реЙрдкрд▓реЗрдЯ рддрдпрд╛рд░ рдХрд░рд╛

рдирд╡реАрди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рд╛

  • 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 (рдЗрдВрдЧреНрд░рдЬреАрддреВрди. рдШрд╛рд▓рд╛)
  • рдЖрдореНрд╣реА рдЖрдордЪреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА рдШрд╛рд▓рддреЛ (рдЬреА рдЖрдореНрд╣реА рд╡рд░ рдХреЗрд▓реА рдЖрд╣реЗ)
  • рдЖрдореНрд╣реА рдмрджрд▓рд╛рдВрдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рддреЛ: 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 <╨Ш╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░>

рдкреБрдвреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреНрд░рдХрд▓реНрдк рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЧрд┐рдердм рд╡рд░реВрди рдХреНрд▓реЛрдирд┐рдВрдЧ.

  • 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;
    }
}

рдорд╛рдЧреАрд▓ рд╡реЗрд│реЗрдкреНрд░рдорд╛рдгреЗ, рддреБрдореНрд╣реА рддреНрдпрд╛рдРрд╡рдЬреА рдЖрд╡реГрддреНрддреА рен.рей рдирд┐рд╡рдбрд▓реНрдпрд╛рд╕ php7.4-fpm.sock рдордзреНрдпреЗ рд▓рд┐рд╣рд╛ php7.4-fpm.sock.

DigitalOcean рд╡рд░ рдбреЛрдореЗрди рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рд╕рд░реНрд╡ рдХрд╛рд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рддреБрдореНрд╣реА рдбреЛрдореЗрди (рдХреБрдареВрдирд╣реА) рдЦрд░реЗрджреА рдХрд░рддрд╛, рдпреЗрдереЗ DigitalOcean рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рд╛ рддрдпрд╛рд░ рдХрд░рд╛->рдбреЛрдореЗрди/DNS. рез рдбреЛрдореЗрди рдЬреЛрдбрд╛ рддреБрдореНрд╣реА рд╣реЗ рдбреЛрдореЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдЬреЛрдбрд╛ рдХреНрд▓рд┐рдХ рдХрд░рд╛. рддреНрдпрд╛рдирдВрддрд░ рдбреЛрдореЗрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЖрдгрд┐ рдлреАрд▓реНрдбрд╡рд░ рдЬрд╛ рд╣реЛрд╕реНрдЯ рдирд╛рд╡ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛ @. рдПрдХ рдкреНрд░рдХрд▓реНрдк рдирд┐рд╡рдбрд╛ рдЖрдгрд┐ рдХреНрд▓рд┐рдХ рдХрд░рд╛ рд░реЗрдХреЙрд░реНрдб рддрдпрд╛рд░ рдХрд░рд╛.
рдЖрддрд╛ рддреБрдореНрд╣реА рдбреЛрдореЗрди рд╡рд┐рдХрдд рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯрд╡рд░ рдЬрд╛, рддреЗрдереЗ "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 рд╣реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдЖрд╣реЗ.

рдкреБрдирд╢реНрдЪ рд▓реЗрдЦрдХрд╛рдЪреЗ рд╡рд┐рд╢реЗрд╖ рдЖрднрд╛рд░ рд╣рд╛ рд╕рд╛рд░рд╛рдВрд╢, рдЬреНрдпрд╛рдиреЗ рд╡рд░реАрд▓ рд╕рд░реНрд╡ рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рдХрд╛рдо рдХреЗрд▓реЗ. рдХрд╛рд╣реА рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рддреЗ Laravel 7 рд╕рд╛рдареА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА, рдореА рддреЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ.

PPS рдЬрд░ рддреБрдореНрд╣реА рдЙрдЪреНрдЪ рдЕрднрд┐рдпрдВрддрд╛ рдЕрд╕рд╛рд▓ рдЬреЛ рдмреЕрд╢ рдХрдорд╛рдВрдбрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЛ, рддрд░ рдХреГрдкрдпрд╛ рдХрдареЛрд░рдкрдгреЗ рдирд┐рд░реНрдгрдп рдШреЗрдК рдирдХрд╛. рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╛ рд▓реЗрдЦ рдЦрд╛рд▓рдЪреНрдпрд╛ рдкрд╛рддрд│реАрд╡рд░рдЪрд╛ рд╡рд╛рдЯреВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдорд▓рд╛ рддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдорд▓рд╛ рдПрдХ рд╢реЛрдзреВрди рдЖрдирдВрдж рдЭрд╛рд▓рд╛ рдЕрд╕рддрд╛. рд╕реБрдзрд╛рд░рдгреЗрд╕рд╛рдареА рдХрд╛рд╣реА рд╕реВрдЪрдирд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдореА рддреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЖрд╣реЗ.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛