
Vendosa të krijoj portofolin tim në Laravel 7. Që faqja kryesore të jetë një faqe marketingu, dhe të gjithë informacionin në të ta ndryshojmë me anë të adminit. Nuk është çështja kryesore. Arritëm në depomimin. Gjeta disa tutoriale të mira për ta bërë këtë në një server të plotë me të gjitha detajet. Nuk jam shumë i fortë në depo, përgjithësisht jam më shumë në front se sa full stack. Dhe, nëse mund të shkruaj dhe testoj në PHP, për menaxhimin e serverit e kështu me radhë, ende nuk kam arritur. Por, më duhej të merrem me këtë.
Tani do të kalojmë përmes të gjithë hapave, duke filluar nga nisja përmes SSH dhe duke përfunduar me një faqe funksionale. Do të përpiqemi të shmangim të gjithë pengesat.
Ndoshta do të mund të gjeni udhëzime të ngjashme në internet. Përfundimisht, edhe unë i gjeta. E vërtetë, jo në një vend, jo pa ndihmën e StackOverflow dhe ndoshta jo në rusisht. Pashë vështirësi. Prandaj vendosa t'ju lehtësoj jetën.
Gjatë kësaj do të punojmë me një droplet në DigitalOcean. Nuk është patjetër, zgjidhni çdo hostim tjetër. Kur të arrini te serveri funksional në Ubuntu, kthjelluni. Për ata që vendosën të punojnë në DigitalOcean, do të jenë edhe këshilla për konfigurimin e domenit. .
Të gjitha hapat specifik për DigitalOcean do të jepen në nota të tilla.
Le të fillojmë.
TL;DR (vetëm komandat kryesore)
Krijojmë përdorues
ssh root@[IP-adresa e droplet-it tuaj]adduser laravelusermod -aG sudo laravelsu laravel
Shtojmë SSH për të
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Ngjitemi çelësi publik
chmod 600 ~/.ssh/authorized_keys
Fireualli
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 i 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: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 -pKrijo 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ë me të vërtetë besoj se do t'ju japë të kuptoni procedurën e regjistrimit në DigitalOcean. Ajo nuk është e lehtë, me shumë verifikime dhe gjëra të tjera. Nëse keni vazhdimisht probleme me verifikimin përmes dokumenteve për shkak të gabimeve të rrjetit, provoni ta bëni gjithçka përmes një VPN, duhet ta ndihmojë.
Në menunë e sipërme, klikoni Krijo->Droplets. Zgjidhni Ubuntu.
Sapo që u regjistruat, do të merrni 100$ në llogari. Por mos u gënjeni. Keni vetëm 60 ditë për t'i shpenzuar ato. Kjo është shumë pak. Mund të dëshironit, ashtu si unë, të përdorni një plan më të shtrenjtë, për të kaluar më pas në një më të lirë, kur të hyjë tashmë para e vërtetë. Po e them menjëherë, nuk do të mundeni. Mund të rrisni, por nuk mund të zvogëloni. Këto janë punët. Unë zgjedh Standard->$5.
Zgjedh rajonin më të afërt me ne Frankfurt. VPC Network->default-fra1
Do ta bëjmë autentifikimin menjëherë përmes SSH. Shtypim New SSH Key. Nëse nuk keni SSH, në anën e djathtë ka një udhëzim shumë të thjeshtë. Hapim terminalin bash, ngjisim
ssh-keygen. Pastaj hyjmĂ« nĂ« skedarin me çelĂ«sin publik/Users/<ĐаŃĐ” ĐžĐŒŃ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлŃ>/.ssh/id_rsa.pub(ose thjeshtcat ~\/ .ssh\/id_rsa.pub), kopjojmĂ« pĂ«rmbajtjen dhe e ngjisim nĂ« dritaren nĂ« tĂ« majtĂ«. Emri mund tĂ« jetĂ« çfarĂ«do.KrijojmĂ« njĂ« emĂ«r hosti pĂ«r dropletin.
Klikoni Create Droplet
Krijojmë një përdorues të ri
ssh root@[IP-adresa e droplet-it tuaj]- A jeni të sigurt se dëshironi të vazhdoni të lidhni (po/jo/[fingerprint])?
po - Shkruani fjalëkalimin tuaj për SSH
- Krijojmë përdorues laravel:
adduser laravel - Shkruani fjalëkalimin dhe informacionin e tjerë (unë shkruaj vetëm Emrin e Plotë)
- Shtojmë përdoruesin në grupin sudo:
usermod -aG sudo laravel
SSH për përdoruesin e ri
- Kalojmë te përdoruesi i ri:
su laravel
Të gjitha veprimet në vazhdim, deri në fund të artikullit, do t'i kryejmë në emrin e përdoruesit laravel. Prandaj, nëse ndonjëherë ndaloni, rihyni dhe shkruani su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Kemi hapur skedarin në Vim. Nëse nuk e njihni fare, mund të punoni në Nano, është e drejta juaj.
Komandat më themelore të Vim
Për të përdorur editorin Vim gjatë artikullit, mjafton të dini këtë.
- Në Vim ka modet të ndryshme: moda normale (Normal mode), në të cilën vendosni komanda dhe zgjidhni moda dhe të tjera.
- Për të dalë nga çdo mënyrë dhe për të kaluar në modën normale, mjafton të shtypni
Esc - Lëvizni: mund të përdorni thjesht arrow-t
- Dalni pa ruajtur
<Normal mode>::q! - Dalni dhe ruani
<Normal mode>::wq - Vazhdoni në modalitetin e futjes së tekstit
<Normal mode>:i(nga anglishtja insert)
- Ngjisim çelësin tonë publik (të cilin e krijuam më lart)
- Mbrojmë nga ndryshimet:
chmod 600 ~/.ssh/authorized_keys
Vendosim firewall-in
- Shikoni të gjitha konfigurimet e disponueshme:
sudo ufw app list - Lejojmë OpenSSH (ndryshe na bllokon):
sudo ufw allow OpenSSH - Nisni firewall-in:
sudo ufw enable,y - Po kontrollojmë:
sudo ufw status
Status: aktiv
Për Veprimi Nga
-- ------ ----
OpenSSH LEJO Ădo vend
OpenSSH (v6) LEJO Ădo vend (v6)TĂ« gjitha janĂ« nĂ« rregull.
Instalojmë Nginx
Gjatë instalimit ndonjëherë do të pyesin "A jeni të sigurt?". Përgjigjuni y (vetëm nëse jeni të sigurt).
sudo apt updatesudo apt install nginx
Shtojmë Nginx në konfigurimet e firewall-it
sudo ufw app listsudo ufw allow 'Nginx HTTP'sudo ufw status
Status: aktiv
Për Veprimi Nga
-- ------ ----
OpenSSH LEJO Kudo
Nginx HTTP LEJO Kudo
OpenSSH (v6) LEJO Kudo (v6)
Nginx HTTP (v6) LEJO Kudo (v6)Shkoni te IP juaj. Nëse gjithçka shkon mirë, duhet të shihni këtë.

Po instalojmë MySQL
sudo apt install mysql-server- Po nisni skenarin automatike për mbrojtje
sudo mysql_secure_installation
Përgjigjuni pyetjeve të paracaktuara. Nëse nuk e dini se çfarë të përgjigjeni, këtu janë opsionet e rekomanduara:
Plugin-i pĂ«r validimin e fjalĂ«kalimeve â
NTĂ« hiqen pĂ«rdoruesit anonim? â
YTĂ« ndalohet hyrja nga distanca si root? â
NTĂ« hiqet databaza e testit dhe aksesin nĂ« tĂ«? â
NTĂ« rifreskohen tabelat e privilegjeve tani? â
YPo hyjmë në MySQL:
sudo mysqlPo shohim metodat e aksesit:
SELECT user,authentication_string,plugin,host FROM mysql.user;Po vendosim fjalëkalimin për root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';Po shohim metodat e aksesit përsëri:
SELECT user,authentication_string,plugin,host FROM mysql.user;Po aplikojmë ndryshimet dhe dalim nga MySQL:
FLUSH PRIVILEGES;dheexitTani, për të hyrë në MySQL duhet të përdorni
mysql -u root -pdhe të jepni fjalëkalimin
Po instalojmë PHP
Do të përdorim një repo të tretë 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. Diferenca 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 dhe menaxhon MySQL-në.
Më pas do të punoj me versionin 7.4.
Po konfiguroni Nginx
sudo vim /etc/nginx/sites-available/
Në vend të "<Domeni juaj>" shkruani domenin (për shembull, mysite.ru), të cilin dëshironi ta përdorni në të ardhmen. Nëse nuk e keni një të tillë tani, shkruani çfarëdo, më pas thjesht përsërisni hapat në këtë kapitull për domenin tuaj, kur ta zgjidhni atë.
Shkruani kë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;
}
}Nëse zgjodhët 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ën /var/www/html marrim skedarin index. Nëse pas server_name ka diçka tjetër, kërkojmë një skedar të tillë. Nëse nuk e gjejmë, hedhim 404. Nëse përfundojmë në .php, kalojmë përmes fpm. Nëse ka .ht, ndalojmë (403).
- Bëjmë një lidhje nga
sites-availablenësites-enabled:sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ - Fshijmë lidhjen për
default:sudo unlink /etc/nginx/sites-enabled/default - Kontrollojmë për gabime:
sudo nginx -t - Rivendosim:
sudo systemctl reload nginx
Kontrollojmë funksionimin:
sudo vim /var/www/html/info.php- Shkruajmë:
<?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
Po vendosim 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 unzipPo hyjmë në MySQL:
mysql -u root -pKrijoni një DB me emrin laravel:
Krijo DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Sigurojeni aksesin root në laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;exitcd /var/www/htmlKrijoni një dosje për projektin:
sudo mkdir -pSigurojeni përdoruesit laravel të drejtat për projektin:
sudo chown laravel:laravel
Më pas duhen transferuar projektet. Për shembull, duke klonuar nga Github.
cd ./git clone .
Duhet të merret parasysh se, nëse nuk i keni ruajtur skedarët statikë (për shembull, nga /public) në Github, ju natyrisht nuk do t'i keni ata. Unë, për shembull, për ta zgjidhur këtë krijova një degë të veçantë deploy, nga e cila kam klonuar: git clone -b --single-branch ..
- Instalojmë varësitë:
composer install - Krijojmë .env:
vim .env
Versioni bazë 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 cilësimet e sakta për MySQL.
- Migrojmë DB:
php artisan migrate - Generejmë kodin:
php artisan key:generate
Ndryshojmë lejet:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
E fundit, qĂ« na mbetet â pĂ«rshtatim 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ç bëmë herën e kaluar, nëse zgjodhët versionin 7.3 në vend të php7.4-fpm.sock shkruani php7.4-fpm.sock.
Konfiguroni domainin në DigitalOcean
Të gjitha, në të vërtetë, janë shumë të thjeshta. Blini një domain (në çdo vend), shkoni në DigitalOcean në Krijo->Domains/DNS. Në fushën Shtoni një domain shkruani këtë domain, dhe klikoni shto. Më pas shkoni te cilësimet e domainit dhe në fushën HOSTNAME shkruani @. Zgjidhni projektin dhe klikoni Krijoni rekord.
Tani shkoni në faqen ku keni blerë domainin, gjeni "DNS Serverët" (ose diçka të ngjashme) dhe shkruani serverët e DigitalOcean (përkatësishtns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Tani duhet pak (ose shumë) të prisni derisa këto cilësime të pranohen. Gati!
Problemi i vetëm është se faqja juaj do të hapet vetëm si HTTP. Për të pasur HTTPS, kalojmë te pjesa tjetër.
Konfiguroni HTTPS
Instalojmë certbot dhe i japim atij emrin e domainit (formatin mysite.ru) dhe emrin e domainit 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ë përshtatim Nginx (mos harroni të vendosni 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: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;
}
}Mendoj se tashmë e keni kuptuar se çfarë duhet të ndryshoni për PHP 7.3.
Këtu, në të vërtetë, është shumë e thjeshtë. Ne thjesht derigjojmë të gjitha kërkesat nga HTTP (porti 80) në HTTPS (porti 443). Dhe atje bëjmë gjithçka ashtu si më parë, por tashmë me enkriptim.
Na mbetet të vendosim 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ë filloni komandat npm direkt në server, duhet të instaloni Node.js.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Tani, unë jam ndalur në këtë etapë. Në të vërtetë, rezultati më kënaq. Mbase do të kaloj nga DigitalOcean diku më pranë Rusisë dhe më lirë. Por pasi kalova të gjitha nivelet e verifikimit në faqe dhe bëra gjithçka atje, e tregova si shembuj. Për më tepër, 100 dollarët e tyre fillestarë janë një platformë e shkëlqyer për stërvitje.
P.S. Falenderim të veçantë autorit , i cili shërbeu si baza e të gjitha veprimeve të lartpërmendura. Ai në disa momente nuk funksionon për Laravel 7, unë e kam korrigjuar.
P.P.S. Nëse ndonjëherë jeni një inxhinier i shkëlqyer që mendon në grupe bash, ju lutem mos e gjykoni ashpër. Ndoshta niveli i këtij artikulli do t'ju duket i ulët, por do të isha i lumtur ta gjeja një të tillë kur më duhej. Nëse keni sugjerime për përmirësim, jam absolutisht pro.
Burimi: habr.com
