Alkalmazás telepítése Laravel 7-re Ubuntu & Nginx alatt.

Laravel 7 alkalmazás telepítése Ubuntu & Nginx rendszerre

Elhatároztam, hogy elkészítem a portfóliómat Laravel 7-ben. A főoldalnak landing page-nek kell lennie, és az egész információt az admin felületen keresztül tudom változtatni. De nem ez a lényeg. Elérkeztem a telepítéshez. Találtam néhány jó útmutatót arról, hogyan lehet ezt megvalósítani egy teljes kiszolgálón, minden nehézséggel együtt. Nem vagyok túl jártas a telepítésben, inkább frontend tervező vagyok, mint full-stack. Ha PHP-ban írni és tesztelni tudok, a kiszolgáló kezeléséig még nem jutottam el. De neki kellett látnom, hogy megértem.

Most végigmegyünk az összes lépésen, kezdve az SSH indítással és végződve a működő webhellyel. Megpróbáljuk megkerülni az összes buktatót.

Lehet, hogy hasonló útmutatókat találhatsz az interneten. Végül is én is megtaláltam őket. Igaz, nem egy helyen, nem kis segítséggel a StackOverflow-tól, és valószínűleg nem oroszul. Megszenvedtem vele. Ezért úgy döntöttem, hogy megkönnyítem az életeteket.

Mindent egy DigitalOcean droplet-tel fogunk csinálni. Ez persze nem kötelező, válassz bármilyen tárhelyszolgáltatót. Ha elérted a működő szervert Ubuntu-n, térj vissza. Azoknak, akik mégis a DigitalOcean-ra szeretnének telepíteni, további tanácsokat adok a domain beállításához. Azt is, referenciakódot 100$-ra.

Minden, a DigitalOcean-ra vonatkozó lépés hasonló lábjegyzetekben lesz megadva.

Kezdjük.

TL;DR (csak a fő parancsok)

Felhasználó létrehozása

  • ssh root@[IPAddress-of-your-droplet]
  • adduser laravel
  • usermod -aG sudo laravel
  • su laravel

SSH hozzáadása neki

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Illessze be a nyilvános kulcsot
  • chmod 600 ~/.ssh/authorized_keys

Tűzfal

  • 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

PHP

Alapértelmezett beállítás:

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

Csak HTTP beállítás Laravel-hoz:

szerver {
    figyelj 80;
    figyelj [::]:80;

    gyökér /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 {
        tagad minden;
    }
}

HTTPS beállítás Laravelhez:

szerver {
    figyelj 80;
    figyelj [::]:80;

    server_name  www.;
    return 301 https://$server_name$request_uri;
}

szerver {
    figyelj 443 ssl http2;
    figyelj [::]:443 ssl http2;
    server_name  www.;
    gyökér /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;

    karakterkód 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 {
            tagad minden;
    }

    location ~ /.well-known {
            engedélyez minden;
    }
}

Laravel

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=

HTTPS

Cseppentünk egy dropletet a DigitalOceanon és regisztrálunk egy új SSH kulcsot

Őszintén hiszem, hogy magától el fog igazodni a DigitalOcean regisztrációjában. Nem egyszerű, tele van ellenőrzésekkel és egyéb huncutságokkal. Ha az okmányokkal való ellenőrzés során folyamatosan hálózati hiba lép fel, próbálkozzon minden lépésnél VPN-nel, ez segíthet.

A felső menüben kattintsunk Létrehozás->Droplet-ek. Válasszuk ki Ubuntu.

Amint regisztrálja magát, 100 $-t fog kapni a számlájára. De ne tévessze meg magát. Csak 60 napja van, hogy elkölthesse. Ez nagyon kevés. Mint én, lehet, hogy Ön is drágább csomagra vágyik, hogy később, amikor már valódi pénz folyna be, olcsóbbra váltson. Azonnal mondom, ez nem működik. Növelni lehet, csökkenteni nem. Ilyen a helyzet. Én választom, Standard->$5.

A legközelebbi régiót választom. Frankfurt. VPC Network->default-fra1

Az autentikálást azonnal SSH-n keresztül végezzük. Kattintson New SSH Key. Ha nincs SSH-ja, jobbra talál egy nagyon egyszerű útmutatót. Nyissa meg a bash terminált, majd illessze be ssh-keygen. Ezután lépjünk be a nyilvános kulcs fájljába /Users/<Ваше имя пользователя>/.ssh/id_rsa.pub (vagy egyszerűen csak cat ~\/ .ssh\/ id_rsa.pub), másolja a tartalmát, és illessze be a bal oldali ablakba. A név tetszőleges.

Találjunk ki egy hosztnevet a droplethez.

Kattintunk Create Droplet

Új felhasználót hozunk létre.

SSH az új felhasználóhoz

Minden további lépést az laravel felhasználó nevében végzünk a cikk végéig. Tehát ha megszakadt, kérjük, lépjen be újra, és írja be su laravel

Megnyitottuk a fájlt a Vim-ben. Ha nem ismeri, használhatja a Nano-t, ez az Ön döntése..

A legegyszerűbb Vim parancsok

A cikk során a Vim szerkesztő használatához elegendő tudni a következőket.

Tűzfal telepítése

Status: active

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

Minden rendben van.

Telepítjük az Nginx-et.

A telepítés során néha meg fogja kérdezni, hogy "Biztos benne?". Válaszoljon y (csak ha biztos benne).

Hozzáadjuk az Nginx-et a tűzfal beállításaiba.

Állapot: aktív

Action      From
--         ------      ----
OpenSSH    ENGEDÉLYEZVE     Mindenhol
Nginx HTTP ENGEDÉLYEZVE     Mindenhol
OpenSSH (v6) ENGEDÉLYEZVE     Mindenhol (v6)
Nginx HTTP (v6) ENGEDÉLYEZVE     Mindenhol (v6)

Lépjen a saját IP-címére. Ha minden jól megy, akkor a következőt kell látnia.

Laravel 7 alkalmazás telepítése Ubuntu & Nginx rendszerre

MySQL telepítése

Válaszoljon a feltett kérdésekre. Ha nem tudja, mit válaszoljon, itt vannak a javasolt lehetőségek:

PHP telepítése

Egy külső tárolót fogunk használni, a következőtől: 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

Most választunk. A Laravel 7-hez választhatja a PHP 7.3 vagy 7.4 verziót. A különbség csak a 3 és 4 számokban van.

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

A PHP FastCGI Process Manager (fpm) PHP kérésekkel dolgozik. mysql pedig nyilvánvalóan a MySQL-lal való munkához.

Mostantól mindent a 7.4-en fogok csinálni.

Nginx beállítása

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

A "<Az ön domaine>" helyére írja be a domaint (például, mysite.ru), amelyet a jövőben használni szeretne. Ha még nincs ilyen, írjon bármit, majd később ismételje meg a lépéseket ebben a fejezetben a saját domainje számára, amikor az kiválasztásra kerül.

Írja be a következőt:

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

Ha a 7.3 verziót választotta a php7.4-fpm.sock helyett írja be php7.4-fpm.sock.

Hallgatjuk a 80-as portot, amikor a kérés érkezik a gyökérben server_name, indexfájlt veszünk. Ha van /var/www/html , akkor keresünk egy ilyen fájlt. Ha nem találunk, 404-et dobunk. Ha végződik, akkor átfuttatjuk server_name fpm .php. Ha van .ht, akkor megtiltjuk (403). Hivatkozást készítünk asites-available

<?php phpinfo();

sudo rm /var/www/html/info.php

Laravel 7 alkalmazás telepítése Ubuntu & Nginx rendszerre

Laravel telepítése sudo apt install php7.3-mbstring php7.3-xml composer unzip

sudo apt install php7.4-mbstring php7.4-xml composer unzip

) a Github-ra, akkor természetesen nem lesznek. Én például egy külön ágat hoztam létre ennek megoldására,

, amelyről klónoztam: /public, after_deploy. git clone -b --single-branch ..

Az alapváltozat így néz ki:

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=

Ha másolod a .env fájlodat, cseréld az APP_ENV értékét production-ra, az APP_DEBUG értékét false-ra, és írd be a MySQL megfelelő beállításait.

A jogosultságok módosítása:

Az utolsó lépés az Nginx újrakonfigurálása Laravelhez:

sudo vim /etc/nginx/sites-available/

szerver {
    figyelj 80;
    figyelj [::]:80;

    gyökér /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 {
        tagad minden;
    }
}

Mint előzőleg, ha a 7.3-as verziót választottad a php7.4-fpm.sock helyett írja be php7.4-fpm.sock.

Domain beállítása a DigitalOcean-on

Mindez igazából nagyon egyszerű. Vásárolj egy domaint (bármelyik helyen), majd menj a DigitalOcean-ra a Létrehozás->Domains/DNSmezőbe Domain hozzáadása írd be ezt a domaint, majd kattints a hozzáadásra. Ezután menj a domain beállításaihoz, és a HOSTNAME mezőbe írd be @. Válaszd ki a projektet, majd kattints a Rekord létrehozása.
Most menj arra a webhelyre, ahol megvásároltad a domaint, keresd meg a "DNS Szerverek" (vagy valami hasonlót), és írd be a DigitalOcean szervereit (nevezetesen ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Most picit (vagy sokat) várni kell, amíg ezek a beállítások érvénybe lépnek. Kész!
Az egyetlen probléma az, hogy a webhelyed csak HTTP-ként fog megnyílni. Ahhoz, hogy HTTPS legyen, lépj a következő részhez.

HTTPS beállítása

Telepítsd a certbotot, és add meg neki a domain nevét (formátum: mysite.ru) és a domain nevét www-al (www.mysite.hu).

Most újra kell konfigurálnod az Nginx-t (ne felejtsd el a saját értékeidet behelyettesíteni):

szerver {
    figyelj 80;
    figyelj [::]:80;

    server_name  www.;
    return 301 https://$server_name$request_uri;
}

szerver {
    figyelj 443 ssl http2;
    figyelj [::]:443 ssl http2;
    server_name  www.;
    gyökér /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;

    karakterkód 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 {
            tagad minden;
    }

    location ~ /.well-known {
            engedélyez minden;
    }
}

Gondolom, már rájöttél, mit kell megváltoztatni a PHP 7.3-hoz.

Itt igazából minden egyszerű. Csak átirányítjuk az összes HTTP kérést (80-as port) HTTPS-re (443-as port). Aztán ugyanazt tesszük, mint korábban, de már titkosítva.

Még be kell állítanod a tűzfal jogosultságait:

Most már minden normálisan kell, hogy működjön.

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

Ha esetleg npm parancsokat kell futtatnod a szerveren, telepítened kell a Node.js-t.

Eddig jutottam el. Alapvetően elégedett vagyok az eredménnyel. Lehet, hogy átköltözöm a DigitalOcean-ról valahova közelebb Oroszországhoz és olcsóbban. De mivel már végigmentem az összes ellenőrzési körön a weboldalon, és mindent ott csináltam, ezt az ő példájuk alapján mutattam be. Ráadásul az ő 100 dolláros induló lehetőségük nagyszerű tesztelő platform.

P.S. Külön köszönet a szerzőnek ennek a gistnek, amely a fent említett összes lépés alapjául szolgált. Néhány esetben nem működik Laravel 7-re, de ezt kijavítottam.

P.P.S. Ha esetleg egy kiváló mérnök vagy, aki bash parancsokban gondolkodik, kérlek, ne ítélj túl szigorúan. Lehet, hogy az írás szintje alacsonynak tűnik számodra, de örülnék, ha megtaláltam volna egy ilyet, amikor szükségem volt rá. Ha van javaslatod a javításra, mindkét kézzel "értékelem".

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster