
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 .
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 laravelusermod -aG sudo laravelsu laravel
Lisame talle SSH
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Kleebi sisse avalik võti
chmod 600 ~/.ssh/authorized_keys
Tugivõrk
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-mysqlsudo 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/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 -pCREATE DATABASE laravel DEFAULT CHARACTER SET 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
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 lihtsaltcat ~\/ .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 ~/.sshchmod 700 ~/.sshvim ~/.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 updatesudo apt install nginx
Lisame Nginx tulemüüri seadistustesse
sudo ufw app listsudo 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.

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 —
NKas eemaldada anonüümsed kasutajad? —
YKas keelata kaugjuurdepääs root-kontole? —
NKas eemaldada testandmebaas ja juurdepääs sellele? —
NKas laadida õiguste tabelid praegu? —
YLogime sisse MySQL:
sudo mysqlVaadake 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;jaexitNüüd tuleb MySQL-sse sisenemiseks kasutada
mysql -u root -pja sisestada parool
Paigaldame PHP
Kasutame kolmanda osapoole hoidlat
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo 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-availablejasites-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:

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 unzip7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzipLogime sisse MySQL:
mysql -u root -pLoome 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;exitcd /var/www/htmlLoome kausta projekti jaoks:
sudo mkdir -pAnname 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 storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -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äpsemaltns1.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/certbotsudo apt install python-certbot-nginxsudo 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 -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo 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 updatesudo apt install -y nodejs npmnodejs -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 , 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
