Alkalmazás telepítése a Laravel 7-re Ubuntu és Nginx rendszeren

Alkalmazás telepítése a Laravel 7-re Ubuntu és Nginx rendszeren

Úgy döntöttem, hogy a portfóliómat a Laravel 7 segítségével készítem el. Így a főoldal egy céloldal lesz, és a rajta lévő összes információ módosítható az adminisztrációs panel segítségével. Nem a lényeg. Jött a bevetés. Találtam pár jó oktatóanyagot, hogyan kell ezt megtenni egy teljes értékű szerveren minden gonddal. Nem vagyok túl erős a bevetésben; általában inkább az első, mint a teljes stackben vagyok. És, ha még tudok írni és tesztelni PHP-ben, akkor a szerver kezelése előtt stb. Még nem nőttem fel. De rá kellett jönnöm.

Most végigmegyünk az összes lépésen, kezdve az SSH-n keresztüli indítástól és a működő webhelyig. Igyekszünk minden buktatót elkerülni.

Hasonló utasításokat találhat az interneten. Végül is megtaláltam. Igaz, nem egy helyen, nem a StackOverflow segítsége nélkül, és aligha oroszul. Szenvedtem. Ezért döntöttem úgy, hogy leegyszerűsítem az életedet.

Mindent egy cseppecskével fogunk csinálni a DigitalOcean-en. Ez természetesen nem szükséges; válasszon bármilyen tárhelyet. Ha elér egy működő szervert az Ubuntu-n, térjen vissza. Azok számára, akik mégis a DigitalOcean mellett döntenek, további tippeket kapnak a domain beállításához. És 100 dolláros ajánló link.

Az összes DigitalOcean-specifikus lépést az ehhez hasonló lábjegyzetekben adjuk meg.

Kezdjük.

TL;DR (csak alapvető parancsok)

Hozzon létre egy felhasználót

  • ssh root@[IP-адрес вашего дроплета]
  • adduser laravel
  • usermod -aG sudo laravel
  • su laravel

Add hozzá az SSH-t

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Helyezze 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

  • 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/<Ваш домен>

Alapbeállítás:

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

Csak HTTP beállítás a Laravel számára:

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-beállítás Laravelhez:

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

Hozzon létre egy cseppet a DigitalOcean-en, és regisztráljon egy új SSH-kulcsot

Őszintén hiszem, hogy Ön is kitalálja, hogyan regisztrálhat a DigitalOcean-en. Nem könnyű, sok igazolással és egyéb dolgokkal. Ha folyamatosan hálózati hibát kap a dokumentumok használatával történő ellenőrzéskor, próbáljon meg mindent VPN-en keresztül, ez segíteni fog.

A felső menüben kattintson a gombra Teremt->cseppek. Választ Ubuntu.

Amint regisztrál, 100 dollárt fog kapni a számlájára. De ne tévesszen meg. Már csak 60 napod van elkölteni. Ez pedig nagyon kevés. Előfordulhat, hogy hozzám hasonlóan drágább konstrukciót szeretne használni, hogy később, amikor elkezd folyni a valódi pénz, váltson olcsóbbra. Azonnal megmondom, hogy nem fog menni. Növelheti, de nem csökkentheti. Ez így megy. Én választok Standard ->$5.

A hozzánk legközelebb eső régiót választom Frankfurt. VPC hálózat->alapértelmezett-fra1

Azonnal végrehajtjuk a hitelesítést SSH-n keresztül. Kattintson Új SSH kulcs. Ha nem rendelkezik SSH-val, a jobb oldalon nagyon egyszerű utasítások találhatók. Nyisson meg egy bash terminált és illessze be ssh-keygen. Ezután megyünk a fájlhoz a nyilvános kulccsal /Users/<Ваше имя пользователя>/.ssh/id_rsa.pub (vagy egyszerűen cat ~/.ssh/id_rsa.pub), másolja ki a tartalmat, és illessze be a bal oldali ablakba. Bármely név.

Találunk egy gazdanevet a cseppnek.

sajtó Csepp létrehozása

Hozzon létre egy új felhasználót

  • ssh root@[IP-адрес вашего дроплета]
  • Biztosan folytatni szeretné a csatlakozást (igen/nem/[ujjlenyomat])? yes
  • Adja meg SSH jelszavát
  • Hozzon létre egy felhasználót laravel: adduser laravel
  • Adja meg jelszavát és egyéb adatait (csak a teljes nevet adom meg)
  • Adja hozzá a felhasználót a sudo csoporthoz: usermod -aG sudo laravel

SSH új felhasználó számára

  • Váltás új felhasználóra: su laravel

A továbbiakban a cikk végéig minden intézkedést a laravel felhasználó nevében hajtunk végre. Ezért, ha hirtelen megszakítják, jelentkezzen be újra, és lépjen be su laravel

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

Megnyitottuk a fájlt a Vimben. Ha egyáltalán nem ismeri, dolgozhat Nano-ban, joga van.

A legalapvetőbb Vim parancsok

A Vim szerkesztő használatához a cikkben csak a következőket kell tudnia.

  • A Vimnek különböző módjai vannak: Normál mód, amelyben parancsokat írhat be, módokat választhat és egyebeket.
  • Bármely módból való kilépéshez és a normál módba való visszatéréshez nyomja meg a gombot Esc
  • Mozgás: csak nyilakat használhat
  • Kilépés mentés nélkűl <Normal mode>: :q!
  • Kilépés és mentés <Normal mode>: :wq
  • Váltson szövegbeviteli módra <Normal mode>: i (az angolból. helyezze)
  • Beillesztjük a nyilvános kulcsunkat (amit fent tettünk)
  • A változások ellen védekezünk: chmod 600 ~/.ssh/authorized_keys

Tűzfal telepítése

  • Nézzük meg az összes elérhető beállítást: sudo ufw app list
  • Az OpenSSH engedélyezése (különben zárol minket): sudo ufw allow OpenSSH
  • Indítsuk el a tűzfalat: sudo ufw enable, y
  • Ellenőrizzük: sudo ufw status

Status: active

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

Minden rendben.

Az Nginx telepítése

A telepítés során néha megkérdezik: "Biztos benne?" Válasz y (csak ha biztos vagy benne).

  • sudo apt update
  • sudo apt install nginx

Az Nginx hozzáadása a tűzfal beállításaihoz

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

Menjen az IP-címére. Ha minden jól megy, a következőket kell látnia.

Alkalmazás telepítése a Laravel 7-re Ubuntu és Nginx rendszeren

MySQL telepítése

  • sudo apt install mysql-server
  • Automatikus védelmi szkript indítása sudo mysql_secure_installation

Válaszoljon a feltett kérdésekre. Ha nem tudja, mit válaszoljon, itt van néhány javasolt lehetőség:

  • Jelszó megerősítése - N

  • Eltávolítja a névtelen felhasználókat? — Y

  • Letiltja a root bejelentkezést távolról? — N

  • Eltávolítja a tesztadatbázist, és hozzáférhet hozzá? — N

  • Újratölti a jogosultságtáblázatokat most? — Y

  • Menjünk a MySQL-hez: sudo mysql

  • Nézzük a hozzáférési módokat: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Állítson be jelszót a root számára: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';

  • Nézzük újra a hozzáférési módokat: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Alkalmazza a módosításokat, és lépjen ki a MySQL-ből: FLUSH PRIVILEGES; и exit

  • Most a MySQL-be ​​való bejelentkezéshez használnia kell mysql -u root -p és adja meg a jelszót

PHP telepítése

Használjunk harmadik féltől származó adattárat Ondrej 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álasszunk. Laravel 7 esetén választhat a PHP 7.3 vagy 7.4 verzió közül. Az egyetlen különbség a 3-as és a 4-es számban lesz.

  • 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 működik. mysql, természetesen a MySQL-lel való együttműködéshez.

Mostantól mindent 7.4-én csinálok.

Az Nginx beállítása

  • sudo vim /etc/nginx/sites-available/<Ваш домен>

A „<Saját domain>” helyett írja be a domaint (például mysite.ru), amelyet a jövőben használni szeretne. Ha még nem rendelkezik ilyennel, írjon be egyet, majd ismételje meg az ebben a fejezetben található lépéseket a domainjére, amikor kiválasztja azt.

Írd 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 <Ваш домен или 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;
        }
}

Ha inkább a 7.3-as verziót választotta php7.4-fpm.sock Írja be php7.4-fpm.sock.

Hallgassa meg a 80-as portot server_nameamikor megérkezünk a gyökérkéréshez /var/www/html vegye az indexfájlt. Ha azután server_name Van valami, ilyen fájlt keresünk. Ha nem találjuk, kidobjuk a 404. Ha úgy végződik .php, végigmenni fpm... Ha van .ht, tiltja (403).

  • Link készítése innen sites-available в sites-enabled: sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
  • A link eltávolítása default: sudo unlink /etc/nginx/sites-enabled/default
  • Hibák ellenőrzése: sudo nginx -t
  • Újraindítás: sudo systemctl reload nginx

A munka ellenőrzése:

  • sudo vim /var/www/html/info.php
  • Mi írunk: <?php phpinfo();
  • Menjünk-hoz <Ваш IP>/info.php

Valami ilyesmit kellene látnod:

Alkalmazás telepítése a Laravel 7-re Ubuntu és Nginx rendszeren

Most ez a fájl törölhető: sudo rm /var/www/html/info.php

Telepítse a Laravelt

  • 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

  • Menjünk a MySQL-hez: mysql -u root -p

  • Hozzon létre egy adatbázist a névvel laravel: CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • Root hozzáférést biztosítunk laravel: GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';

  • FLUSH PRIVILEGES;

  • exit

  • cd /var/www/html

  • Hozzon létre egy mappát a projekthez: sudo mkdir -p <Имя проекта>

  • Mi biztosítjuk a felhasználónak laravel jogok a projekthez: sudo chown laravel:laravel <Имя проекта>

Ezután át kell vinnie a projektet. Például klónozás Githubból.

  • cd ./<Имя проекта>
  • git clone <ссылка на проект> .

Érdemes megfontolni, hogy ha nem mentett statikus fájlokat (például innen /public) a Githubon, akkor természetesen nem lesznek meg. Ennek megoldására például létrehoztam egy külön szálat deploy, ahonnan már klónoztam: git clone -b <имя ветки> --single-branch <ссылка на проект> ..

  • Függőségek telepítése: composer install
  • .env létrehozása: vim .env

Az alapverzió í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=<Ваш пароль от MySQL>

Ha másolja az .env fájlt, cserélje ki az APP_ENV-t élesre, az APP_DEBUG-ot false-re, és adja meg a megfelelő MySQL-beállításokat.

  • Az adatbázis áttelepítése: php artisan migrate
  • A kód generálása: php artisan key:generate

Engedélyek módosítása:

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

Az utolsó hátra lévő dolog az Nginx újrakonfigurálása Laravel számára:

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

Mint legutóbb, ha a 7.3-as verziót választotta helyette php7.4-fpm.sock Írja be php7.4-fpm.sock.

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

Valójában minden nagyon egyszerű. Ha vásárol egy domaint (bárhol), váltson át a DigitalOceanre a címen Teremt->Domain/DNS... Terepen Adjon hozzá egy domaint adja meg ezt a domaint, és kattintson a Hozzáadás gombra. Ezután lépjen a tartománybeállításokhoz és a mezőbe HOST NEVE belép @. Válasszon ki egy projektet, és kattintson Rekord létrehozása.
Most menjen arra a webhelyre, ahol a domaint vásárolta, keresse meg ott a „DNS-kiszolgálókat” (vagy valami hasonlót), és adja meg a DigitalOcean szervereket (nevezetesen ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Most várnia kell egy kicsit (vagy sokat), amíg elfogadja ezeket a beállításokat. Kész!
Az egyetlen probléma az, hogy webhelye csak HTTP-ként fog megnyílni. A HTTPS használatához lépjen tovább a következő részre.

HTTPS beállítása

Telepítse a certbotot, és adja át neki a domain nevet (formátum mysite.ru) és domain név 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.<Ваш домен>

Most újra kell konfigurálnia az Nginxet (ne felejtse el helyettesíteni az értékeket):

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

Azt hiszem, már érted, mit kell változtatni a PHP 7.3-ban.

Itt valójában minden egyszerű. Egyszerűen minden kérést átirányítunk a HTTP-ről (80-as port) a HTTPS-re (443-as port). És ott mindent ugyanúgy csinálunk, mint korábban, csak titkosítással.

Nincs más hátra, mint beállítani a tűzfal engedélyeit:

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

Most mindennek úgy kell működnie, ahogy kell.

[Speciális] A Node.js telepítése

Ha hirtelen npm parancsokat kell futtatnia közvetlenül a kiszolgálón, telepítenie kell a Node.js fájlt.

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

Ennyi, ebben a szakaszban megálltam. Elvileg elégedett vagyok az eredménnyel. Talán átváltok a DigitalOceanről valahol közelebb Oroszországhoz és olcsóbban. De mivel az oldalon már végigjártam az összes ellenőrző kört, és ott mindent megtettem, példával mutattam meg őket. Ezen kívül a kezdő 100 dollárjuk kiváló ugródeszka az edzésekhez.

PS Külön köszönet a szerzőnek ezt a lényeget, amely az összes fenti akció alapjául szolgált. Néhány esetben nem működik a Laravel 7-nél, javítottam.

PPS Ha történetesen csúcsmérnök vagy, aki bash parancsokban gondolkodik, kérjük, ne ítéljen keményen. Lehet, hogy ezt a cikket alacsony szintűnek találja, de szívesen találtam volna egyet, amikor szükségem volt rá. Ha vannak fejlesztési javaslatok, én mindenért támogatom.

Forrás: will.com

Hozzászólás