
Kam vendos për të krijuar portofolin tim në Laravel 7. Të bëj që faqja kryesore të jetë si një landing page, dhe të kem mundësi të ndryshoj të gjithë informacionin përmes panelit të adminit. Nuk është e rëndësishme. Më erdhi në mendje të bëj diamik e zhvillimi. Gjeta disa tutoriale të mira se si ta bëj këtë në një server real me të gjitha detajet e nevojshme. Nuk kam shumë përvojë në implementim, jam më shumë në frontend sesa në full stack. Edhe nëse mund të shkruaj dhe të testoj në PHP, akoma nuk kam arritur të arrij në menaxhimin e serverit. Por duhet të mësoj.
Tani do të kalojmë nëpër të gjithë hapat, duke filluar nga çaktivizimi përmes SSH deri te krijimi i një faqe funksionale. Do përpiqemi të shmangim të gjitha pengesat.
Ndoshta do të mund të gjeni udhëzime të ngjashme në internet. Pas gjitha, edhe unë i kam gjetur. Megjithatë, jo në një vend të vetëm, pa ndihmën e StackOverflow dhe fare duke mos qenë në gjuhën ruse. Kam kaluar një kohe të vështirë. Prandaj vendosa t'ju lehtësoj jetën.
Të gjitha veprimet do t'i bëjmë me një droplet në DigitalOcean. Këtu, sigurisht, nuk është e detyrueshme, mund të zgjidhni çdo host. Kur të arrini në një server funksional në Ubuntu, kthehuni. Për ata që kanë vendosur ta bëjnë këtë në DigitalOcean, do të ketë disa këshilla për konfigurimin e domain-it. Po ashtu, .
Të gjitha hapat specifik për DigitalOcean do të jepen në këto nota.
Le të fillojmë.
TL;DR (vetëm komandat kryesore)
Krijoni një përdorues
ssh root@[IP-adi i droplet-it tuaj]adduser laravelusermod -aG sudo laravelsu laravel
Shtojmë SSH për të
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Ngjisim çelësin publik
chmod 600 ~/.ssh/authorized_keys
Firewall
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/
Konfigurimi bazë:
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;
}
}Vetëm konfigurimi HTTP për Laravel:
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;
}
}Konfigurimi HTTPS për Laravel:
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
Krijoni një droplet në DigitalOcean dhe regjistroni një çelës të ri SSH
Unë sinqerisht besoj se do të arrini të regjistroheni në DigitalOcean. Nuk është e lehtë, me shumë verifikime dhe gjëra të tjera. Nëse keni probleme me verifikimin përmes dokumenteve që shkaktojnë gabime në rrjet, provoni ta bëni gjithçka përmes VPN, duhet të ndihmojë.
Në menunë e sipërme klikoni Create->Droplets. Zgjidhni Ubuntu.
Sak të regjistroheni, do të merrni 100$ në llogari. Por mos u gënjeni. Keni vetëm 60 ditë për t’i shpenzuar. Dhe kjo është shumë pak. Mund të dëshironi të përdorni një plan më të shtrenjtë, që më vonë, kur të filloni të fitoni para reale, të kaloni në një më të lirë. E them menjëherë, nuk do të funksionojë. Mund ta rrisni, por ta ulni nuk mundeni. Këto janë çështjet. Unë zgjedh Standard->$5.
Zgjidh rajonin më të afërt me ne Frankfurt. VPC Network->default-fra1
Do ta bëjmë autentifikimin përmes SSH menjëherë. Klikojmë New SSH Key. Nëse nuk keni SSH, ka një udhëzim shumë të thjeshtë në të djathtën. Hapni terminalin bash, ngjisni
ssh-keygen. Më pas hyni në skedarin me çelësin publik/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(ose thjeshtcat ~/ .ssh/id_rsa.pub), kopjoni përmbajtjen dhe ngjisni në dritaren përkatëse. Emri është çfarëdo.Krijoni një emër për droplet-in.
Klikoni Create Droplet
Krijojmë një përdorues të ri
ssh root@[IP-adi i droplet-it tuaj]- A jeni të sigurt që dëshironi të vazhdoni? (po/jo/[ç'kodo])?
yes - Shkruani fjalëkalimin tuaj për SSH
- Krijoni një përdorues laravel:
adduser laravel - Shkruani fjalëkalimin dhe informacione të tjera (unë shkruaj vetëm Emrin e Plotë)
- Shtoni përdoruesin në grupin sudo:
usermod -aG sudo laravel
SSH për përdoruesin e ri
- Kaloni te përdoruesi i ri:
su laravel
Të gjitha veprimet e tjera, deri në fund të artikullit, do t’i bëjmë nga emri i përdoruesit laravel. Prandaj, nëse keni ndërprerë ndonjëherë, ri-hyni dhe shkruani su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Hapëm skedarin në Vim. Nëse nuk jeni njohur me të, mund të punoni në Nano, është vendosja juaj.
Komandat më bazike të Vim
Për t’i përdorur redaktori Vim gjatë artikullit, ju mjafton të dini të paktën sa vijon.
- Në Vim ka mënyra të ndryshme: moda normale (Normal mode), në të cilën futni komanda dhe zgjidhni mënyrat dhe të tjerat.
- Për të dalë nga çdo modë dhe për të kaluar në modën normale, mjafton të shtypni
Esc - Të lëvizni: mund ta bëni thjesht me shigjeta
- Dilni pa ruajtur
<Normal mode>::q! - Dilni dhe ruani
<Normal mode>::wq - Kaloni në mënyrën e futjes së tekstit
<Normal mode>:i(nga anglishtja insert)
- Ngjisni çelësin tonë publik (atë që bëjmë më sipër)
- Mbrojeni nga ndryshimet:
chmod 600 ~/.ssh/authorized_keys
Vendosni firewall-in
- Shikoni të gjitha konfigurimet e disponueshme:
sudo ufw app list - Lejoni OpenSSH (ndryshe do të na bllokojë):
sudo ufw allow OpenSSH - Nisni firewall-in:
sudo ufw enable,y - Po kontrollojmë:
sudo ufw status
Status: aktiv
Për Veprimi Nga
-- ------ ----
OpenSSH LEJOHET Nga Çdo Vend
OpenSSH (v6) LEJOHET Nga Çdo Vend (v6)Të gjitha në rregull.
Vendosni Nginx
Gjatë instalimit, ndonjëherë do t'ju pyesin "Jeni të sigurt?". Pëgjigjuni y (natyrisht, vetëm nëse jeni të sigurt).
sudo apt updatesudo apt install nginx
Shtoni Nginx në konfigurimet e firewall-it
sudo ufw app listsudo ufw allow 'Nginx HTTP'sudo ufw status
Status: aktiv
Për Veprimi Nga
-- ------ ----
OpenSSH LEJOHET Nga Çdo Vend
Nginx HTTP LEJOHET Nga Çdo Vend
OpenSSH (v6) LEJOHET Nga Çdo Vend (v6)
Nginx HTTP (v6) LEJOHET Nga Çdo Vend (v6)Shkoni te IP juaj. Nëse gjithçka shkon mirë, duhet të shihni këto.

Vendosni MySQL
sudo apt install mysql-server- Nisni skenarin automatizues për mbrojtje
sudo mysql_secure_installation
Përgjigjuni pyetjeve të parashtruara. Nëse nuk dini çfarë të përgjigjeni, ja disa versione të rekomanduara:
Plugin për verifikimin e fjalëkalimit —
NTë hiqni përdoruesit anonim? —
YTë ndaloni hyrjen e root nga larg? —
NTë hiqni bazën e testit dhe aksesin në të? —
NTë rifreskoni tabelat e privilegjeve tani? —
YHyni në MySQL:
sudo mysqlShikoni metodat e aksesit:
SELECT user,authentication_string,plugin,host FROM mysql.user;Vendosni fjalëkalimin për root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';Shikoni metodat e aksesit përsëri:
SELECT user,authentication_string,plugin,host FROM mysql.user;Zbatuani ndryshimet dhe dilni nga MySQL:
FLUSH PRIVILEGES;dheexitTani, për të hyrë në MySQL, duhet të përdorni
mysql -u root -pdhe të futni fjalëkalimin
Vendosni PHP
Do të shfrytëzojmë një depo të jashtme nga
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo apt update
Tani zgjidhni. Për Laravel 7, mund të zgjidhni PHP 7.3 ose 7.4. Dallimi do të jetë vetëm në numrat 3 dhe 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) punon me kërkesat PHP. mysql, natyrisht, për të punuar me MySQL.
Më pas, unë do të bëj gjithçka në 7.4.
Konfiguro Nginx
sudo vim /etc/nginx/sites-available/
Në vend të "<Domeni juaj>" shkruani domenin (p.sh., mysite.ru), të cilin dëshironi ta përdorni në të ardhmen. Nëse nuk e keni ende, shkruani çfarëdo, pastaj thjesht përsëritni veprimet në këtë kapitull për domenin tuaj kur ta zgjidhni atë.
Shkruani sa vijon:
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;
}
}Nëse keni zgjedhur versionin 7.3 në vend të php7.4-fpm.sock shkruani php7.4-fpm.sock.
Dëgjojmë portin 80 në server_name, kur marrim kërkesë në rrënjë /var/www/html marrim index-failin. Nëse pas server_name shtë ndonjë, kërkojmë një skedar të tillë. Nëse nuk e gjeni, i japim 404. Nëse përfundon me .php, e zgjedhim përmes fpm. Nëse ka .ht, ndalojmë (403).
- Krijojmë një lidhje nga
sites-availablenësites-enabled:sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ - Heqim lidhjen nga
default:sudo unlink /etc/nginx/sites-enabled/default - Kontrollojmë për gabime:
sudo nginx -t - Rifillojmë:
sudo systemctl reload nginx
Kontrolloni funksionimin:
sudo vim /var/www/html/info.php- Shkruani:
<?php phpinfo(); - Shkoni në
<IP juaj>/info.php
Duhet të shihni diçka të ngjashme:

Tani ky skedar mund të fshihet: sudo rm /var/www/html/info.php
Instaloni 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 unzipHyni në MySQL:
mysql -u root -pKrijoni DB me emrin laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Dhuroni aksesin root te laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;exitcd /var/www/htmlKrijoni një katalog për projektin:
sudo mkdir -pDhuroni përdoruesit laravel të drejtat mbi projektin:
sudo chown laravel:laravel
Më pas duhet të transferoni projektin. Për shembull, me klonimin nga Github.
cd ./git clone .
Duhet të merret parasysh se, nëse nuk keni ruajtur skedarët statikë (p.sh., nga /public) në Github, atëherë nuk do t’i keni. Unë, për shembull, për zgjidhjen e kësaj krijova një degë të veçantë deploy, nga e cila e kam klonuar: git clone -b --single-branch ..
- Instalojmë varësitë:
composer install - Krijoni .env:
vim .env
Versioni bazë i tij duket kështu:
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=Nëse kopjoni .env tuaj, zëvendësoni APP_ENV me production, APP_DEBUG me false dhe shkruani konfigurimet e sakta për MySQL.
- Migrimi i DB:
php artisan migrate - Generimi i kodit:
php artisan key:generate
Ndryshimi i lejeve:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
E fundit që mbetet, është të konfiguroni Nginx për Laravel:
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;
}
}Si herën e kaluar, nëse zgjodhët versionin 7.3 në vend të php7.4-fpm.sock shkruani php7.4-fpm.sock.
Konfigurimi i domain-it në DigitalOcean
Gjithçka është në të vërtetë shumë e thjeshtë. Blini një domain (në çdo vend), kaloni në DigitalOcean në Create->Domains/DNS. Në fushën Shto një domain shkruani këtë domain, klikoni shto. Pastaj kaloni në cilësimet e domain-it dhe në fushën HOSTNAME shkruani @. Zgjidhni projektin dhe klikoni Krijo regjistrimin.
Tani kaloni në faqen ku blinit domain-in, gjeni "Serverat DNS" (ose diçka të ngjashme) dhe shkruani serverat e DigitalOcean (saktësishtns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Tani duhet të prisni pak (ose shumë) derisa këto konfigurime të pranohen. E përfunduar!
Problemi i vetëm është se faqja juaj do të hapet vetëm si HTTP. Për të pasur HTTPS, kaloni në pjesën tjetër.
Konfigurimi i HTTPS
Instaloni certbot dhe jepni atij emrin e domain-it (formatit mysite.ru) dhe emrin e domain-it me 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.
Tani duhet të rikonfigurojmë Nginx (mos harroni të futni vlerat tuaja):
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;
}
}Mendoj se tashmë e kuptoni se çfarë duhet të ndryshoni për PHP 7.3.
Këtu, në të vërtetë, gjithçka është e thjeshtë. Thjesht tërë kërkesat nga HTTP (porta 80) i drejtojmë në HTTPS (porta 443). Dhe atje bëjmë gjithçka ashtu si më parë, por tashmë me enkriptim.
Mbështetet lejet në firewall:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Tani gjithçka duhet të funksionojë si duhet.
[Дополнительно] Установка Node.js
Nëse ndonjëherë keni nevojë të ekzekutoni komanda npm drejtpërdrejt në server, duhet të instaloni Node.js.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Të gjitha, unë u ndala në këtë hap. Në thelb, rezultati më kënaq. Ndoshta do të kaloj nga DigitalOcean diku më afër Rusisë dhe më të lira. Por pasi që kam kaluar të gjitha rrethinat e verifikimit në faqe dhe kam bërë gjithçka atje, e tregova si shembull. Për më tepër, 100 dollarët e tyre fillestarë janë një platformë e shkëlqyer për stërvitje.
P.S. Faleminderit të veçantë autorit , i cili shërbeu si baza për të gjitha veprimet e mësipërme. Në disa momente nuk funksionon për Laravel 7, e kam korrigjuar këtë.
P.P.S. Nëse ndonjëherë jeni një inxhinier i shkëlqyer, i cili mendon në grupe bash, ju lutem mos e gjykoni me ashpërsinë. Ndoshta niveli i këtij artikulli do t'ju duket i ulët, por do të isha i lumtur të gjeja një të tillë kur më nevojitej. Nëse ka propozime për përmirësim, jam pro me të dyja duar.
Burimi: habr.com
