
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 .
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 laravelusermod -aG sudo laravelsu laravel
Lisame SSH
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Kasutame avalikku võtme
chmod 600 ~/.ssh/authorized_keys
Tulekahju sein
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õ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/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
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 lihtsaltcat ~/.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 ~/.sshchmod 700 ~/.sshvim ~/.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 updatesudo apt install nginx
Lisame Nginxi tulemüüri seadistustesse
sudo ufw app listsudo 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.

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 —
NEemaldada anonüümsed kasutajad? —
YKeela root-juurde sisselogimine eemalt? —
NEemalda testandmebaas ja juurdepääs sellele? —
NTaasta privileegide tabelid nüüd? —
YLogige sisse MySQL:
sudo mysqlVaata 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;jaexitNüüd, et MySQL-sse siseneda, peate kasutama
mysql -u root -pja sisestama parooli
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 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ühessites-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:

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