Π”Π΅ΠΏΠ»ΠΎΠΉ прилоТСния Π½Π° Laravel 7 Π½Π° Ubuntu & Nginx

Π”Π΅ΠΏΠ»ΠΎΠΉ прилоТСния Π½Π° Laravel 7 Π½Π° Ubuntu & Nginx

РСшил я Ρ‚ΡƒΡ‚ своё ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° 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

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

Волько HTTP настройка ΠΏΠΎΠ΄ Laravel:

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

HTTPS настройка ΠΏΠΎΠ΄ Laravel:

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-ΠΊΠ»ΡŽΡ‡

Π― искрСннС Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сами Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ с рСгистрациСй Π½Π° DigitalOcean. Она нСпростая, с ΠΊΡƒΡ‡Π΅ΠΉ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ Π±Π°ΠΉΠ΄Ρ‹. Если Ρƒ вас ΠΏΡ€ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² постоянно Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка сСти, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ всё ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· VPN, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Π’ мСню свСрху Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Create->Droplets. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Ubuntu.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ 100$ Π½Π° счСт. Но Π½Π΅ ΠΎΠ±ΠΎΠ»ΡŒΡ‰Π°ΠΉΡ‚Π΅ΡΡŒ. Π£ вас Π΅ΡΡ‚ΡŒ всСго 60 Π΄Π½Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ. А это ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈ я, Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ ΠΏΠΎΠ΄ΠΎΡ€ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ ΠΏΠΎΠΉΠ΄ΡƒΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ дСньги, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΡΡ‚ΡŒ Π½Π° подСшСвлС. Π‘Ρ€Π°Π·Ρƒ Π³ΠΎΠ²ΠΎΡ€ΡŽ, Π½Π΅ получится. Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ нСльзя. Π’Π°ΠΊΠΈΠ΅ Π΄Π΅Π»Π°. Π― Π²Ρ‹Π±ΠΈΡ€Π°ΡŽ Standard->$5.

Π Π΅Π³ΠΈΠΎΠ½ я Π²Ρ‹Π±ΠΈΡ€Π°ΡŽ блиТайший ΠΊ Π½Π°ΠΌ Frankfurt. VPC Network->default-fra1

ΠΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ сразу сдСлаСм Ρ‡Π΅Ρ€Π΅Π· SSH. НаТимаСм New SSH Key. Если Ρƒ вас Π½Π΅Ρ‚ SSH, справа Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ простая инструкция. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ bash-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», вставляСм ssh-keygen. ΠŸΠΎΡ‚ΠΎΠΌ Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Ρ„Π°ΠΉΠ» с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ /Users/<Π’Π°ΡˆΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>/.ssh/id_rsa.pub (ΠΈΠ»ΠΈ просто cat ~/.ssh/id_rsa.pub), ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ содСрТимоС ΠΈ вставляСм Π² ΠΎΠΊΠ½ΠΎ слСва. Имя любоС.

ΠŸΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π΅ΠΌ для Π΄Ρ€ΠΎΠΏΠ»Π΅Ρ‚Π° хостнСйм.

НаТимаСм Create Droplet

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

  • ssh root@[IP-адрСс вашСго Π΄Ρ€ΠΎΠΏΠ»Π΅Ρ‚Π°]
  • Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
  • Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ваш ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ SSH
  • Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ laravel: adduser laravel
  • Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (я Π²Π²ΠΎΠΆΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Full Name)
  • ДобавляСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ sudo: usermod -aG sudo laravel

SSH для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

  • ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ: su laravel

ВсС дСйствия Π΄Π°Π»Π΅Π΅, Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ laravel. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Π²Π΄Ρ€ΡƒΠ³ ΠΏΡ€Π΅Ρ€Π²Π°Π»ΠΈΡΡŒ, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ su laravel

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

ΠœΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Ρ„Π°ΠΉΠ» Π² Vim. Если Π²Ρ‹ с Π½ΠΈΠΌ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Nano, вашС ΠΏΡ€Π°Π²ΠΎ.

Π‘Π°ΠΌΡ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Vim

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ Vim, Π²Π°ΠΌ достаточно Π·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

  • Π’ Vim Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹: ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ (Normal mode), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.
  • Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· любого Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΈ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ достаточно Π½Π°ΠΆΠ°Ρ‚ΡŒ Esc
  • ΠŸΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ: ΠΌΠΎΠΆΠ½ΠΎ просто стрСлками
  • Π’Ρ‹ΠΉΡ‚ΠΈ Π±Π΅Π· сохранСния <Normal mode>: :q!
  • Π’Ρ‹ΠΉΡ‚ΠΈ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ <Normal mode>: :wq
  • ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ Π²Π²ΠΎΠ΄Π° тСкста <Normal mode>: i (ΠΎΡ‚ Π°Π½Π³Π». insert)
  • ВставляСм наш ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π²Ρ‹ΡˆΠ΅)
  • Π—Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌ ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: 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. Если всС ΠΈΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

Π”Π΅ΠΏΠ»ΠΎΠΉ прилоТСния Π½Π° Laravel 7 Π½Π° Ubuntu & Nginx

УстанавливаСм MySQL

  • sudo apt install mysql-server
  • ЗапускаСм автоматичСский скрипт ΠΏΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ sudo mysql_secure_installation

ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° поставлСнныС вопросы. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ, Π²ΠΎΡ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

  • Validate password plugin β€” N

  • Remove anonymous users? β€” Y

  • Disallow root login remotely? β€” N

  • Remove test database and access to it? β€” N

  • Reload privilege tables now? β€” Y

  • Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² MySQL: sudo mysql

  • Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • УстанавливаСм ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для root: 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

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ сторонним Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ ΠΎΡ‚ OndΕ™ej SurΓ½

  • 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 Process Manager (fpm) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с PHP запросами. mysql, СстСствСнно, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с MySQL.

Π”Π°Π»ΡŒΡˆΠ΅ я всС Π±ΡƒΠ΄Ρƒ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° 7.4.

НастраиваСм Nginx

  • sudo vim /etc/nginx/sites-available/<Π’Π°Ρˆ Π΄ΠΎΠΌΠ΅Π½>

ВмСсто "<Π’Π°Ρˆ Π΄ΠΎΠΌΠ΅Π½>" Π²ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΄ΠΎΠΌΠ΅Π½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 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 Π±Π΅Ρ€Π΅ΠΌ index-Ρ„Π°ΠΉΠ». Если послС 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

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅:

Π”Π΅ΠΏΠ»ΠΎΠΉ прилоТСния Π½Π° Laravel 7 Π½Π° Ubuntu & Nginx

Π’Π΅ΠΏΠ΅Ρ€ΡŒ этот Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ: 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;

  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ root доступ ΠΊ 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 Π½Π° production, APP_DEBUG Π½Π° false ΠΈ Π²ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ настройки для 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

ПослСднСС, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ, – ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Nginx ΠΏΠΎΠ΄ Laravel:

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

Всё, Π½Π° самом Π΄Π΅Π»Π΅, ΠΎΡ‡Π΅Π½ΡŒ просто. Π’Ρ‹ ΠΏΠΎΠΊΡƒΠΏΠ°Π΅Ρ‚Π΅ Π΄ΠΎΠΌΠ΅Π½ (Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ), ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° DigitalOcean Π² Create->Domains/DNS. Π’ ΠΏΠΎΠ»Π΅ Add a domain Π²Ρ‹ вписываСтС этот Π΄ΠΎΠΌΠ΅Π½, Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π² настройки Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ Π² ΠΏΠΎΠ»Π΅ HOSTNAME вписываСтС @. Π’Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Create record.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° сайт, Π³Π΄Π΅ ΠΏΠΎΠΊΡƒΠΏΠ°Π»ΠΈ Π΄ΠΎΠΌΠ΅Π½, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΌ "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 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² – ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠ»Π°Ρ†Π΄Π°Ρ€ΠΌ для Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ.

P.S. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€Ρƒ Π²ΠΎΡ‚ этого гиста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послуТил основой всСх Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… дСйствий. Он Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Laravel 7, я это ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ».

P.P.S. Если Π²Ρ‹ Π²Π΄Ρ€ΡƒΠ³ Ρ‚ΠΎΠΏΠΎΠ²Ρ‹ΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΡƒΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈΠ· bash, поТалуйста, Π½Π΅ судитС строго. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ покаТСтся Π½ΠΈΠ·ΠΊΠΎΠ²Π°Ρ‚Ρ‹ΠΌ, Π½ΠΎ я Π±Ρ‹Π» Π±Ρ‹ Ρ€Π°Π΄ Π½Π°ΠΉΡ‚ΠΈ Ρ‚Π°ΠΊΡƒΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΌΠ½Π΅ Π±Ρ‹Π»Π° Π½ΡƒΠΆΠ½Π°. Если Π΅ΡΡ‚ΡŒ прСдлоТСния ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ, я ΠΎΠ±Π΅ΠΈΠΌΠΈ Ρ€ΡƒΠΊΠ°ΠΌΠΈ "Π·Π°".

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com