
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, .
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 laravelusermod -aG sudo laravelsu laravel
SSH hozzáadása neki
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Illessze be a nyilvános kulcsot
chmod 600 ~/.ssh/authorized_keys
Tűzfal
sudo ufw allow OpenSSHsudo ufw enablesudo ufw status
Nginx
sudo apt updatesudo apt install -y nginxsudo ufw allow 'Nginx HTTP'sudo ufw status
MySQL
sudo apt install -y mysql-serversudo mysql_secure_installation,NYNNYsudo mysqlALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';SELECT user,authentication_string,plugin,host FROM mysql.user;FLUSH PRIVILEGES;exit
PHP
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo apt update7.3:
sudo apt install -y php7.3-fpm php7.3-mysql7.4:
sudo apt install -y php7.4-fpm php7.4-mysql
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;
}
}sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/sudo unlink /etc/nginx/sites-enabled/defaultsudo nginx -tsudo systemctl reload nginx
Laravel
7.3:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip7.4:
sudo apt install -y php7.4-mbstring php7.4-xml composer unzipmysql -u root -pDATABASE laravel HÉT karakterkóddal utf8 COLLATE utf8_unicode_ci;GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;exitcd /var/www/htmlsudo mkdir -psudo chown laravel:laravelcd ./git clone ./git clone -b --single-branch .composer installvim .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 migratephp artisan key:generatesudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
HTTPS
sudo add-apt-repository ppa:certbot/certbotsudo apt install -y python-certbot-nginxsudo certbot certonly --webroot --webroot-path=/var/www/html//public -d -d www.sudo nginx -tsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
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 csakcat ~\/ .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 root@[IPAddress-of-your-droplet]- Biztosan folytatni szeretné a kapcsolatot (igen\/nem\/ [ujjlenyomat])?
igen - Kérjük, adja meg az SSH jelszavát.
- Felhasználó létrehozása laravel:
adduser laravel - Kérjük, adja meg a jelszót és egyéb információkat (én csak a Teljes nevet írom be).
- Adja hozzá a felhasználót a sudo csoporthoz:
usermod -aG sudo laravel
SSH az új felhasználóhoz
- Átváltunk az új felhasználóra:
su laravel
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
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
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.
- A Vim-ben különböző módok vannak: normál (Normal mode), ahol parancsokat adhat meg, és kiválaszthatja a módokat és a többit.
- Bármelyik módból való kilépéshez és a normál módba való visszatéréshez csak nyomja meg
Esc - Navigálás: egyszerűen használhatja a nyílbillentyűket.
- Kilépés mentés nélkül
<Normal mode>::q! - Kilépés és mentés
<Normal mode>::wq - Átváltás a szövegbeviteli módra
<Normal mode>:i(az angol beszúrás)
- Illessze be a nyilvános kulcsunkat (amit fentebb készítettünk)
- Védje meg a változtatásoktól:
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 - Engedélyezze az OpenSSH-t (különben blokkolni fog minket):
sudo ufw allow OpenSSH - Indítsa 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 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).
sudo apt updatesudo apt install nginx
Hozzáadjuk az Nginx-et a tűzfal beállításaiba.
sudo ufw app listsudo ufw allow 'Nginx HTTP'sudo ufw status
Á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.

MySQL telepítése
sudo apt install mysql-server- Automatikus védelmi script indítása
sudo mysql_secure_installation
Válaszoljon a feltett kérdésekre. Ha nem tudja, mit válaszoljon, itt vannak a javasolt lehetőségek:
Validate password plugin —
NElnézheti az anonim felhasználókat? —
YTiltja a root távoli bejelentkezést? —
NEltávolítja a teszt adatbázist és annak hozzáférését? —
NFeltölti a jogosultsági táblázatokat most? —
YBelépünk a MySQL-be:
sudo mysqlMegnézzük a hozzáférési módszereket:
SELECT user,authentication_string,plugin,host FROM mysql.user;Beállítjuk a jelszót a root felhasználónak:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';Újra megvizsgáljuk a hozzáférési módszereket:
SELECT user,authentication_string,plugin,host FROM mysql.user;Alkalmazzuk a változásokat és lépjünk ki a MySQL-ből:
FLUSH PRIVILEGES;ésexitMost, hogy belépjünk a MySQL-be, használni kell
mysql -u root -pés meg kell adni a jelszót
PHP telepítése
Egy külső tárolót fogunk használni, a következőtől:
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo 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
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
- sites-enabled
Link törlése:be.Ellenőrizzük a hibákat::sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ - Újraindítjuk:
alapértelmezett:sudo unlink /etc/nginx/sites-enabled/default - Működés ellenőrzése:
sudo nginx -t - sudo vim /var/www/html/info.php
sudo systemctl reload nginx
<?php phpinfo();
<Az Ön IP-je>/info.php- mivel 16 alkalommal kell átkonvertálni 2 byte-ot a LED-vezérlő kimenetei számának megfelelően, így valahogy így:
Valaminek ilyennek kell látszania: - Lépjünk a
Most ezt a fájlt törölheti:
sudo rm /var/www/html/info.php

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
7.3:
Adatbázis létrehozása a következő névvel:7.4:
Root hozzáférés biztosítása aBelépünk a MySQL-be:
mysql -u root -pProjekt mappa létrehozása: laravel:
DATABASE laravel HÉT karakterkóddal utf8 COLLATE utf8_unicode_ci;Hozzáférést biztosít a felhasználónak laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;exitcd /var/www/htmla projekthez:
sudo mkdir -pMost át kell helyezni a projektet. Például, klónozás a Github-ról. laravel Fontos figyelembe venni, hogy ha nem mentette el a statikus fájlokat (például a
sudo chown laravel:laravel
) a Github-ra, akkor természetesen nem lesznek. Én például egy külön ágat hoztam létre ennek megoldására,
cd ./git clone .
, amelyről klónoztam: /public, after_deploy. git clone -b --single-branch ..
- A függőségek telepítése:
composer install - .env létrehozása:
vim .env
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.
- Az adatbázis migrálása:
php artisan migrate - A kód generálása:
php artisan key:generate
A jogosultságok módosítása:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
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 (nevezetesenns1.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).
sudo add-apt-repository ppa:certbot/certbotsudo apt install python-certbot-nginxsudo certbot certonly --webroot --webroot-path=/var/www/html//public -d -d www.
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:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
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.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
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 , 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
