Rakenduse kasutuselevõtt Laravel 7-l Ubuntu & Nginx-il.

Rakenduse juurutamine Laravel 7-s Ubuntu & Nginx-is

Otsustasin siin oma portfooliot teha Laravel 7 peal. Et avaleht oleks maandumisleht ja kogu teave, mida saaks muuta administreerimise kaudu. Pole see point. Jõudsin juurutamise juurde. Leidsin mõne hea õpetuse, kuidas seda teha täiskohaga serveris koos kõikide nüanssidega. Ma ei ole juurutamises väga tugev, ma olen pigem front-end kui full-stack. Ja kuigi ma oskan PHP-s kirjutada ja testida, pole ma veel serveri haldamiseks valmis. Kuid tuli see läbi töötada.

Nüüd käime kõik sammud läbi, alates SSH kaudu käivitamisest kuni töötava veebisaidini. Püüame vältida kõiki peidetud takistusi.

Võib-olla leiate sarnaseid juhiseid internetist. Lõppude lõpuks, ma ju leidisin need. Tõsi, mitte ühes kohas, mitte ilma StackOverflow abita ja ilmselt mitte vene keeles. Ma vaevlesin. Seetõttu otsustasin teie elu lihtsamaks teha.

Teeme kõik dropletiga DigitalOceanis. See pole muidugi kohustuslik, valige ükskõik milline hostimine. Kui jõuate töötava serverini Ubuntu peal, tulge tagasi. Need, kes otsustasid ikkagi DigitalOceanis töötada, saavad ka domeeni seadistamise nõuandeid. Ja samuti suunamislink 100$ jaoks.

Kõik DigitalOceaniga seotud toimingud antakse sarnastes märkustes.

Alustame.

TL;DR (ainult peamised käsklussed)

Loome kasutaja

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

Lisame SSH

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Kasutame avalikku võtme
  • chmod 600 ~/.ssh/authorized_keys

Tulekahju sein

  • 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õhinõuded:

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 Laravel jaoks:

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 Laravel jaoks:

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:ECDHE-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

Loo droplet DigitalOceanis ja registreeri uus SSH-võti

Usun siiralt, et saate ise DigitalOceanis registreerimisega hakkama. See ei ole lihtne, sisaldab palju kontrollimisi ja muid asjaolusid. Kui dokumendi kontrollimisel tekkis pidevalt võrguhäirete viga, proovige seda teha VPN-i kaudu, see peaks aitama.

Ülemises menüüs klõpsake Loo->Droplets. Valige Ubuntu.

Kui olete registreerunud, saate oma kontole 100 dollari. Kuid ärge petke end. Teil on vaid 60 päeva nende kasutamiseks. See on väga vähe. Võite, nagu mina, soovida valida kallima plaani, et hiljem, kui käivad juba reaalsed rahavood, üle minna odavamale. Ütlen kohe, et see ei toimi. Suurendada saab, vähendada ei saa. Nii ongi. Ma valin Standard->$5.

Regiooni valin lähima meie juurde Frankfurt. VPC Network->default-fra1

Teeme autentimise kohe läbi SSH. Vajutame New SSH Key. Kui teil ei ole SSH-d, siis paremal on väga lihtne juhend. Avame bash-terminaali, kopeerime ssh-keygen. Siis siseneme avaliku võtme faili /Users/<Ваше имя пользователя>/.ssh/id_rsa.pub (või lihtsalt cat ~/.ssh/id_rsa.pub), kopeerime sisu ja liimime vasakpoolsetesse akendesse. Nimi on suvaline.

Mõtleme dropleti jaoks nime.

Vajutame Create Droplet

Loome uue kasutaja

  • ssh root@[Teie virtuaalmasina IP-aadress]
  • Kas olete kindel, et soovite jätkata ühendamist (jah/ei/[sõrmejälg])? jah
  • Sisestage oma SSH parool
  • Loome kasutaja laravel: adduser laravel
  • Sisestage parool ja muu teave (mina sisestan ainult Täisnimi)
  • Lisame kasutaja sudo rühma: usermod -aG sudo laravel

SSH uue kasutaja jaoks

  • Lülitame üle uuele kasutajale: su laravel

Kõik tegevused edaspidi, kuni artikli lõpuni, teeme kasutaja laravel nimel. Seega, kui te katkestate, logige uuesti sisse ja sisestage su laravel

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

Avasime faili Vim’is. Kui te pole selle programmiga üldse tuttav, võite töötada Nano's, see on teie valik..

Vimi kõige põhjalikumad käsud

Et artikli käigus Vim'i redigeerijat kasutada, peab te teadma järgmist.

  • Vimis on erinevad režiimid: tavaline (Normal mode), kus sisestate käske ja valite režiime ja teisi.
  • Kuidas igast režiimist väljuda ja tavalisse režiimi minna: vajutage lihtsalt Esc
  • Liikumine: saate liikuda lihtsalt nooltetega
  • Välja ilma salvestamata <Normal mode>: :q!
  • Välja ja salvestada <Normal mode>: :wq
  • Käivita teksti sisestamise režiim <Normal mode>: i (lühend inglise keelest) insert)
  • Kleebi meie avalik võtmed (mida me varem tegime)
  • Kaitseme muudatuste eest: chmod 600 ~/.ssh/authorized_keys

Seame tulemüüri

  • Vaata kõiki saadaval olevate seadistuste: sudo ufw app list
  • Luba OpenSSH (vastasel juhul lukustame end): sudo ufw allow OpenSSH
  • Käivitame tulemüüri: sudo ufw enable, y
  • Kontrollin: sudo ufw status

Oleku: aktiivne

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

Kõik on korras.

Installeerime Nginxi

Installeerimise ajal küsitakse teilt vahel "Kas olete kindel?". Vastake y (ainult siis, kui olete kindel).

  • sudo apt update
  • sudo apt install nginx

Lisame Nginxi tulemüüri seadistustesse

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

Olekuva: aktiivne

Kuidas                      Tegevus    Kust
--                          ------     ----
OpenSSH                     LUBA       Ükskõik kus
Nginx HTTP                  LUBA       Ükskõik kus
OpenSSH (v6)                LUBA       Ükskõik kus (v6)
Nginx HTTP (v6)             LUBA       Ükskõik kus (v6)

Minna oma IP-le. Kui kõik läheb hästi, peaksite nägema järgmist.

Rakenduse juurutamine Laravel 7-s Ubuntu & Nginx-is

Paigaldame MySQL

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

Vastake esitatud küsimustele. Kui te ei tea, mis vastata, siin on soovitatud valikud:

  • Valideeri parooli plugin — N

  • Eemaldada anonüümsed kasutajad? — Y

  • Keela root-juurde sisselogimine eemalt? — N

  • Eemalda testandmebaas ja juurdepääs sellele? — N

  • Taasta privileegide tabelid nüüd? — Y

  • Logige sisse MySQL: sudo mysql

  • Vaata ligipääsumeetodeid: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Seadistame parooli root-kasutajale: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

  • Vaata ligipääsumeetodeid uuesti: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Kanna muudatused ja logi välja MySQL: FLUSH PRIVILEGES; ja exit

  • Nüüd, et MySQL-sse siseneda, peate kasutama mysql -u root -p ja sisestama parooli

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 valige. Laravel 7 jaoks võite valida PHP 7.3 või 7.4. Erinevus on ainult 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öötab PHP päringutega. mysql, loomulikult, MySQL-i jaoks.

Edasi teen kõik 7.4 peal.

Seadistame Nginxi

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

Kohandage "<Teie domeen>" oma domeeniga (näiteks, mysite.ru), mida soovite tulevikus kasutada. Kui teil seda veel ei ole, kirjutage mis tahes, hiljem lihtsalt korrake selle peatüki samme oma domeeni jaoks, kui olete selle valinud.

Sisestame 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 valisite versiooni 7.3 asemel php7.4-fpm.sock , sisestage php7.4-fpm.sock.

Kuulame 80 porti server_name, kui saame päringu juurest /var/www/html võtame index-faili. Kui pärast server_name on midagi olemas, otsime sellist faili. Kui ei leia, viskame 404. Kui lõppeb .php, käitleme seda läbi fpm. Kui on olemas .ht, keelame (403).

  • Teeme lingi sites-available ühes sites-enabled: sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
  • Kustutame lingi default: 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();
  • Siirduge /info.php

Te peaksite nägema midagi sellist:

Rakenduse juurutamine Laravel 7-s Ubuntu & Nginx-is

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

  • Logige sisse MySQL: mysql -u root -p

  • Loome andmebaasi 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

Seejärel tuleb projekt edastada. Näiteks Github'ist kloonimisega.

  • cd ./
  • git clone .

Tasub arvestada, et kui te ei ole staatilisi faile (näiteks /public) GitHubis, siis neid teil paraku ei ole. Näiteks lõin ma selle lahendamiseks eraldi haru deploy, millest ma juba kloonisin: git clone -b --single-branch ..

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

Põhiversioon näeb välja selline:

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, siis muutke APP_ENV väärtuseks production, APP_DEBUG väärtuseks false ja kirjutage õiged seadistused MySQL jaoks.

  • Migreerime 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 jääb, 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 asemel php7.4-fpm.sock , sisestage php7.4-fpm.sock.

Domeeni seadistamine DigitalOceanis

Tegelikult on kõik väga lihtne. Te ostate domeeni (kust iganes), minge DigitalOceanisse Loo->Domeenid/DNS. Väljale Lisa domeen te kirjutate selle domeeni sisse, klõpsate lisa. Seejärel minge domeeni seadistustesse ja väljale HOSTNAME kirjutage @. Valige projekt ja klõpsake Loo kirje.
Nüüd minge veebisaidile, kus ostsite domeeni, leidke "DNS Serverid" (või midagi sarnast) ja kirjutage sisse DigitalOceani serverid (täpselt ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Nüüd peate ootama, kuni need seadistused vastu võetakse. Valmis!
Ainuke probleem on see, et teie sait avatakse ainult HTTP kaudu. Et oleks HTTPS, liikume järgmise osa juurde.

Seadistame HTTPS

Paigaldame certboti ja edastame talle domeeninime (forma mysite.ru) ja domeeninime 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 Nginxi ümber seadistada (ärge unustage oma väärtusi sisestada):

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

Ma arvan, et olete juba aru saanud, mida PHPe 7.3 jaoks muuta tuleb.

Siin on kõik tegelikult lihtne. Suuname lihtsalt kõik päringud HTTP-lt (port 80) HTTPS-ile (port 443). Sealt teeme sama, mis varem, aga juba krüpteerituna.

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

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

Nüüd peaks kõik tööle hakkama, nagu peab.

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

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

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

Kõik, ma jäängi selle etapi juurde. Põhimõtteliselt olen tulemusega rahul. Võib-olla kolin DigitalOceanist kuhugi lähemale Venemaale ja odavamale. Kuid kuna olen kõik verifitseerimise sammud nende saidil läbi teinud ja seal kõike teinud, näitasin nende näidet. Lisaks, nende algsed 100 dollarit on suurepärane platvorm treeninguteks.

P.S. Eriline tänu autori selle gisti, mis oli kõigi eespool nimetatud toimingute alus. Mõnedes kohtades ei tööta see Laravel 7 jaoks, ma parandasime selle.

P.P.S. Kui te olete näiteks tippinsener, kes mõtleb bash'i käsuread, palun ärge olge liiga karm. Võib-olla tundub see artikkel teile liiga lihtne, kuid mul oleks hea meel, kui oleks selline olnud siis, kui mul seda vaja oli. Kui teil on parandusettepanekuid, olen ma alati "poolt".

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster