Rakenduse juurutamine Laravel 7-s Ubuntu ja Nginx-i all.

Rakenduse juurutamine Laravel 7-l Ubuntu & Nginx-il

Otsustasin teha oma portfoolio Laravel 7 peal. Et peamine leht oleks maandumisleht ja kogu teavet saaks muuta admin-paneeli kaudu. See ei ole oluline. Asi jõudis deploymise juurde. Leidsin mõned head õpetused, kuidas seda teha korralikul serveril koos kõikide nüanssidega. Ma ei ole deploymises väga tugev, olen enamasti rohkem front-end, mitte full-stack. Ja kuigi ma saan PHP-s kirjutada ja testida, ei ole ma veel serveri haldamisega sellesse astunud. Kuid pidin end sellega kurssi viima.

Praegu liigume läbi kõik sammud, alates SSH kaudu käivitamisest kuni töötava saidini. Püüame ületada kõik miinused.

Võib-olla leiate Internetist sarnaseid juhiseid. Lõppude lõpuks, mina leidsin. Tõsi, mitte ühest kohast, mitte ilma StackOverflow abita ja tõenäoliselt mitte vene keeles. Ma vaevasin end sellega. Seetõttu otsustasin teie elu lihtsustada.

Teeme kõik droplet'i peal DigitalOceanis. See ei ole muidugi hädavajalik, valige igasugune hostimine. Kui jõuate töötava serverini Ubuntu peal, tulge tagasi. Neile, kes siiski otsustavad teha DigitalOceanis, jagan veel nõuandeid domeeni seadistamiseks. Ja samuti soovituslink 100 dollarile.

Küpros, mis on spetsiifiline DigitalOceanile, antakse sellistes märkustes.

Alustame.

TL;DR (ainult põhikäsud)

Loome kasutaja

  • ssh root@[Teie droplet'i IP-aadress]
  • adduser laravel
  • usermod -aG sudo laravel
  • su laravel

Lisame talle SSH

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Kleebi sisse avalik võti
  • chmod 600 ~/.ssh/authorized_keys

Tugivõrk

  • 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 '';
  • 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/

Põhiseaded:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name ;

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

Ainult HTTP seadistus Laravelile:

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

    root /var/www/html//public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name ;

    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 seadistamine Laravelile:

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

  • 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=

  • 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

Looge droplet DigitalOceanis ja registreerige uus SSH-võti

Ma usun siiralt, et te saate ise DigitalOceanis registreerimisega hakkama. See ei ole kerge, seal on palju verifitseerimisi ja muud jampsi. Kui teil tekib dokumentide kaudu verifitseerimise ajal pidevalt võrguviga, proovige kõike VPN-i kaudu teha, see peaks aitama.

Ülemisel menüüs klõpsake Loo->Dropletid. Valime Ubuntu.

Registreerumisel saate kontole 100 dollarit. Kuid ärge laskuge petma. Teil on ainult 60 päeva, et see summa kasutada. See on väga vähe. Võite, nagu mina, soovida kasutada kallimat plaani, et hiljem, kui reaalne raha hakkab tulema, kas minna odavamale. Ütlen kohe, see ei õnnestu. Suurendada saab, aga vähendada ei saa. Nii see on. Mina valin Standard->$5.

Valin piirkonna, mis on meile kõige lähemal Frankfurt. VPC Network->default-fra1

Teeme autentimise kohe läbi SSH. Vajutage Uus SSH võti. Kui teil ei ole SSH-d, siis paremal on väga lihtne juhend. Avage bash-terminaal, kleepige ssh-keygen. Siis sisenege avaliku võtme faili /Users/<Ваше имя пользователя>/.ssh/id_rsa.pub (või lihtsalt cat ~\/ .ssh\/ id_rsa.pub), kopeerige sisu ja kleepige vasakusse aknasse. Nimi võib olla ükskõik milline.

Mõtleme dropletile hostinime.

Klõpsame Loo droplet

Loome uue kasutaja

  • ssh root@[Teie droplet'i IP-aadress]
  • Kas olete kindel, et soovite jätkata ühenduse loomist (jah\/ei\/[sõrmejälg])? yes
  • Sisestage oma SSH parool
  • Loome kasutaja laravel: adduser laravel
  • Sisestage parool ja muud andmed (ma sisestan ainult täieliku nime)
  • Lisame kasutaja sudo gruppi: usermod -aG sudo laravel

SSH uuele kasutajale

  • Lülitume uuele kasutajale: su laravel

Kõiki edasisi tegevusi, kuni artikli lõpuni, teeme kasutajana laravel. Seega, kui te mingil hetkel katkestate, logige uuesti sisse ja sisestage su laravel

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

Oleme avanud faili Vim-is. Kui te ei ole sellega üldse tuttav, võite töötada ka Nano-s, see on teie valik..

Vimi kõige põhjalikumad käsklused

Et artikli jooksul Vim-i redigeerijat kasutada, piisab, kui teada järgmist.

  • Vimis on erinevad režiimid: tavaline (Normaalne režiim), kus te sisestate käske ja valite muid režiime.
  • Et väljuda igast režiimist ja siseneda tavarežiimi, piisab, kui vajutada Esc
  • Liikumine: saate liikuda lihtsalt nooltidega
  • Välja ilma salvestamata <Normal mode>: :q!
  • Välja ja salvestama <Normal mode>: :wq
  • Siseneda tekstisisestusrežiimi <Normal mode>: i (inglise keeles sisestage)
  • Kleebi oma avalik võti (mida me eespool tegime)
  • Kaitse muudatuste eest: chmod 600 ~/.ssh/authorized_keys

Seame tulemüüri

  • Katsume kõik saadaval seadistused: sudo ufw app list
  • Lubame OpenSSH (vastasel juhul lukustatakse meid): sudo ufw allow OpenSSH
  • Käivitame tulemüüri: sudo ufw enable, y
  • Kontrollime: sudo ufw status

Seisund: aktiivne

Kuhu                       Tegevus       Alates
--                         ------       ----
OpenSSH                    LOA sagedus  K Kõigilt
OpenSSH (v6)               LOA sagedus  K (v6)

Kõik on korras.

Paigaldame Nginx

Paigaldamise ajal küsitakse teilt mõnikord "Kas olete kindel?". Vastake y (no ainult siis, kui olete kindel).

  • sudo apt update
  • sudo apt install nginx

Lisame Nginx tulemüüri seadistustesse

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

Olek: aktiivne

Tegevus                      Alus           Alates
--                            ------         ----
OpenSSH                       LUBATUD       Ükskõik kus
Nginx HTTP                    LUBATUD       Ükskõik kus
OpenSSH (v6)                  LUBATUD       Ükskõik kus (v6)
Nginx HTTP (v6)               LUBATUD       Ükskõik kus (v6)

Mine oma IP-le. Kui kõik läheb hästi, peaksid sa nägema järgmist.

Rakenduse juurutamine Laravel 7-l Ubuntu & Nginx-il

Paigaldame MySQL

  • sudo apt install mysql-server
  • Käivitame automaatse kaitseskripti sudo mysql_secure_installation

Vasta esitatud küsimustele. Kui sa ei tea, mida vastata, siin on soovitatud variandid:

  • Validate password plugin — N

  • Kas eemaldada anonüümsed kasutajad? — Y

  • Kas keelata kaugjuurdepääs root-kontole? — N

  • Kas eemaldada testandmebaas ja juurdepääs sellele? — N

  • Kas laadida õiguste tabelid praegu? — Y

  • Logime sisse MySQL: sudo mysql

  • Vaadake juurdepääsumeetodeid: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Määrame root-kontole parooli: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

  • Vaadake jälle juurdepääsumeetodeid: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Kohaldame muudatusi ja väljumme MySQL-ist: FLUSH PRIVILEGES; ja exit

  • Nüüd tuleb MySQL-sse sisenemiseks kasutada mysql -u root -p ja sisestada parool

Paigaldame PHP

Kasutame kolmanda osapoole hoidlat 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

Nüüd valime. Laravel 7 jaoks saab valida PHP 7.3 või 7.4. Erinevus on vaid numbrites 3 ja 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) töötleb PHP päringuid. mysql, loomulikult, töötab MySQLiga.

Edasi teen kõike versiooniga 7.4.

Seame üles Nginx

  • sudo vim /etc/nginx/sites-available/

Asenda "<Teie domeen>" domeeni nimega (näiteks, mysite.ru). Kui sul sellist pole, kirjuta ükskõik milline, hiljem lihtsalt korda need toimingud oma domeeni jaoks, kui valite selle.

Kirjutame järgmise:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name ;

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

Kui oled valinud versiooni 7.3 selle asemel php7.4-fpm.sock siis sisesta php7.4-fpm.sock.

Kaitseme 80 porti server_name, kui päring tuleb juurest /var/www/html võtame index-faili. Kui pärast server_name on midagi, otsime sellist faili. Kui ei leia, tagastame 404. Kui lõpeb sõnaga .php, suuname läbi fpm, siis kõik vastavad ülesanded paigutatakse sektsioonidesse. .ht, keelame (403).

  • Teeme lingi sites-available ja sites-enabled: sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
  • Kustutame lingi Seejärel käivitame exec käsu ja ootame 5000 sekundit, et jätkata jälgimist:: sudo unlink /etc/nginx/sites-enabled/default
  • Kontrollime vigu: sudo nginx -t
  • Taaskäivitame: sudo systemctl reload nginx

Kontrollime tööd:

  • sudo vim /var/www/html/info.php
  • Kirjutame: <?php phpinfo();
  • Liigu <Teie IP>/info.php

Pead nägema midagi sellist:

Rakenduse juurutamine Laravel 7-l Ubuntu & Nginx-il

Nüüd saab selle faili kustutada: sudo rm /var/www/html/info.php

Paigaldame 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

  • Logime sisse MySQL: mysql -u root -p

  • Loome andmebaas nimega laravel: CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • Anname root juurdepääsu laravel: GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';

  • FLUSH PRIVILEGES;

  • exit

  • cd /var/www/html

  • Loome kausta projekti jaoks: sudo mkdir -p

  • Anname kasutajale laravel õigused projekti jaoks: sudo chown laravel:laravel

Edasi tuleb projekt edastada. Näiteks kloonimisega Githubist.

  • cd ./
  • git clone .

Tuleb arvestada, et kui sa ei ole salvestanud staatilisi faile (näiteks, /public) Githubi, siis sul neid loomulikult ei ole. Mina näiteks lahendasin selle, luues eraldi haru deploy, kust ma juba kloonisin: git clone -b --single-branch ..

  • Paigaldame sõltuvused: composer install
  • Loome .env: vim .env

Selle põhiversioon näeb välja nii:

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=

Kui kopeerite oma .env, asendage APP_ENV väärtusega production, APP_DEBUG väärtusega false ja sisestage õiged seadistused MySQL-i jaoks.

  • Migrime andmebaasi: php artisan migrate
  • Genereerime koodi: php artisan key:generate

Muudame õigusi:

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

Viimane asi, mis on jäänud, on Nginxi seadistamine Laravel'i jaoks:

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 ;

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

Nagu eelmisel korral, kui valisite versiooni 7.3 selle asemel php7.4-fpm.sock siis sisesta php7.4-fpm.sock.

Domeeni seadistamine DigitalOceanis

Kõik on tegelikult väga lihtne. Te ostate domeeni (kust iganes), minge DigitalOceanisse Loo->Domains/DNS. Väljal Lisa domeen sisestate selle domeeni, klõpsate lisa. Seejärel minge domeeni seadistustes väljal HOSTNAME sisestate @. Valite projekti ja vajutate Looge rekord.
Nüüd minge veebisaidile, kus ostsite domeeni, leidke sealt "DNS Serverid" (või midagi sarnast) ja sisestage DigitalOcean'i serverid (täpsemalt ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Nüüd peate pisut (või palju) ootama, kuni need seaded kehtestatakse. Valmis!
Ainus probleem on, et teie veebisait avatakse vaid HTTP kujul. Et see oleks HTTPS, liikume järgmise osa juurde.

Seadistame HTTPS-i

Paigaldame certboti ja edastame sellele domeeninime (formaadis mysite.ru) ja domeeni nime koos 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.

Nüüd tuleb Nginx ümber seadistada (ärge unustage sisestada oma väärtusi):

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

Arvan, et olete juba aru saanud, mida tuleb PHP 7.3 jaoks muuta.

Siin on tegelikult kõik lihtne. Suuname kõik päringud HTTP-lt (port 80) HTTPS-ile (port 443). Ja seal teeme kõik sama, nagu varem, kuid juba krüpteerimisega.

Jäänud on seada õigused tulemüüris:

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

Nüüd peaks kõik toimima nagu peab.

[Дополнительно] Установка Node.js

Kui teil peaks olema vajadus käivitada npm-käske otse serveris, peate paigaldama Node.js.

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

Kõik, ma peatun sellel etapil. Üldiselt olen tulemusega rahul. Võib-olla liikun DigitalOceanist mõnda odavamasse kohtadesse Venemaa lähedal. Kuid kuna oleme läbinud kõik verifitseerimise etapid ja tegin kõik seal, näitasin nende näitel. Lisaks nende algsed 100 dollarit on suurepärane platvorm treenimiseks.

P.S. Eriline tänu autorile selle gisti eest, mis oli kõigi ülaltoodud toimingute aluseks. Ta ei tööta mõnedes punktides Laravel 7 jaoks, ma parandasin selle.

P.P.S. Kui olete juhuslikult tippinsener, kes mõtleb bash komandodega, palun ärge olge liiga ranged. Võib-olla tundub see artikkel teile liiga madalal tasemel, kuid ma oleksin olnud õnnelik, kui oleksin sellise leidnud, kui see mulle vaja oli. Kui teil on ettepanekuid parendamiseks, olen igati poolt.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster