Vendosa të bëj portofolin tim duke përdorur Laravel 7. Në mënyrë që faqja kryesore të jetë një faqe uljeje dhe të gjitha informacionet në të mund të ndryshohen duke përdorur panelin e administratorit. Jo pika. Erdhi deri te vendosja. Gjeta disa mësime të mira se si ta bëj këtë në një server të plotë me të gjitha problemet. Unë nuk jam shumë i fortë në vendosje; në përgjithësi jam më shumë përpara sesa të plotë. Dhe, nëse ende mund të shkruaj dhe testoj në PHP, atëherë përpara se të menaxhoj serverin, etj. Nuk jam rritur akoma. Por duhej ta kuptoja.
Tani do të kalojmë nëpër të gjitha hapat, duke filluar nga nisja përmes SSH dhe duke përfunduar me sitin e punës. Ne do të përpiqemi të shmangim të gjitha grackat.
Ju mund të gjeni udhëzime të ngjashme në internet. Në fund të fundit, më në fund e gjeta. Vërtetë, jo në një vend, jo pa ndihmën e StackOverflow, dhe vështirë se në rusisht. kam vuajtur. Kjo është arsyeja pse vendosa të thjeshtoj jetën tuaj.
Ne do të bëjmë gjithçka me një pikëz në DigitalOcean. Kjo, natyrisht, nuk është e nevojshme; zgjidhni ndonjë hosting. Kur të arrini një server që funksionon në Ubuntu, kthehuni. Për ata që ende vendosin ta bëjnë atë në DigitalOcean, do të ketë më shumë këshilla për vendosjen e një domeni. Dhe
Të gjithë hapat specifikë të DigitalOcean do të jepen në shënime si këto.
Le të fillojmë.
TL;DR (vetëm komandat bazë)
Krijo një përdorues
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Shtoni SSH në të
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Fusni çelësin publik
chmod 600 ~/.ssh/authorized_keys
Firewall
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
nginx
sudo apt update
sudo apt install -y nginx
sudo ufw allow 'Nginx HTTP'
sudo ufw status
MySQL
sudo apt install -y mysql-server
sudo mysql_secure_installation
,NYNNY
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
SELECT user,authentication_string,plugin,host FROM mysql.user;
FLUSH PRIVILEGES;
exit
PHP
-
sudo apt update
-
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
-
sudo apt-add-repository ppa:ondrej/php
-
sudo apt update
-
7.3:
sudo apt install -y php7.3-fpm php7.3-mysql
-
7.4:
sudo apt install -y php7.4-fpm php7.4-mysql
-
sudo 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 <Ваш домен или IP>;
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 i 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 <Ваш домен или IP>;
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;
}
}
Cilësimi 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/default
sudo nginx -t
sudo systemctl reload nginx
Laravel
-
7.3:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip
-
7.4:
sudo apt install -y php7.4-mbstring php7.4-xml composer unzip
-
mysql -u root -p
-
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
sudo mkdir -p <Имя проекта>
-
sudo chown laravel:laravel <Имя проекта>
-
cd ./<Имя проекта>
-
git clone <ссылка на проект> .
/git clone -b <имя ветки> --single-branch <ссылка на проект> .
-
composer install
-
vim .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=<Ваш пароль от MySQL>
-
php artisan migrate
-
php artisan key:generate
-
sudo chown -R $USER:www-data storage
-
sudo chown -R $USER:www-data bootstrap/cache
-
chmod -R 775 storage
-
chmod -R 775 bootstrap/cache
HTTPS
-
sudo add-apt-repository ppa:certbot/certbot
-
sudo apt install -y python-certbot-nginx
-
sudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>
-
sudo nginx -t
-
sudo ufw allow 'Nginx HTTPS'
-
sudo ufw status
-
sudo systemctl reload nginx
Krijoni një pikëz në DigitalOcean dhe regjistroni një çelës të ri SSH
Unë me të vërtetë besoj se ju do të kuptoni se si të regjistroheni në DigitalOcean vetë. Nuk është e lehtë, me shumë verifikime e të tjera. Nëse vazhdimisht merrni një gabim rrjeti kur verifikoni përdorimin e dokumenteve, provoni të bëni gjithçka përmes një VPN, duhet të ndihmojë.
Në menunë në krye, klikoni Krijo->pikëza. Zgjedhja Ubuntu.
Sapo të regjistroheni, do të merrni 100 dollarë në llogarinë tuaj. Por mos u mashtroni. Keni vetëm 60 ditë për ta shpenzuar. Dhe kjo është shumë pak. Ju, si unë, mund të dëshironi të përdorni një plan më të shtrenjtë, në mënyrë që më vonë, kur paratë e vërteta të fillojnë të rrjedhin, të mund të kaloni në një plan më të lirë. Unë do t'ju them menjëherë se nuk do të funksionojë. Mund ta rrisni, por nuk mund ta zvogëloni. Ashtu shkon. zgjedh standard->$5.
Unë zgjedh rajonin më të afërt me ne Frankfurt. Rrjeti VPC->default-fra1
Ne do të kryejmë menjëherë vërtetimin nëpërmjet SSH. Klikoni Çelësi i ri SSH. Nëse nuk keni SSH, ka udhëzime shumë të thjeshta në të djathtë. Hapni një terminal bash dhe ngjiteni
ssh-keygen
. Pastaj shkojmë te skedari me çelësin publik/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(ose thjeshtcat ~/.ssh/id_rsa.pub
), kopjoni përmbajtjen dhe ngjisni në dritaren në të majtë. Çdo emër.Ne dalim me një emër pritës për pikën.
shtyp Krijo Droplet
Krijo një përdorues të ri
ssh root@[IP-адрес вашего дроплета]
- Jeni i sigurt që dëshironi të vazhdoni lidhjen (po/jo/[gjurmë gishti])?
yes
- Futni fjalëkalimin tuaj SSH
- Krijo një përdorues laravel:
adduser laravel
- Futni fjalëkalimin tuaj dhe informacione të tjera (fut vetëm emrin e plotë)
- Shtoni përdoruesin në grupin sudo:
usermod -aG sudo laravel
SSH për përdorues të ri
- Kalo te përdoruesi i ri:
su laravel
Ne kryejmë të gjitha veprimet më tej, deri në fund të artikullit, në emër të përdoruesit të laravel. Prandaj, nëse ndërpriteni papritmas, identifikohuni përsëri dhe hyni su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Ne hapëm skedarin në Vim. Nëse nuk e njihni fare, mund të punoni në Nano, e drejta juaj.
Komandat më themelore të Vim
Për të përdorur redaktorin Vim gjatë gjithë artikullit, thjesht duhet të dini sa vijon.
- Vim ka mënyra të ndryshme: modaliteti normal, në të cilin futni komanda dhe zgjidhni mënyra dhe të tjera.
- Për të dalë nga çdo modalitet dhe për t'u kthyer në modalitetin normal, thjesht shtypni
Esc
- Lëvizni përreth: mund të përdorni vetëm shigjeta
- Dilni pa ruajtur
<Normal mode>
::q!
- Dilni dhe ruajeni
<Normal mode>
::wq
- Kalo në modalitetin e futjes së tekstit
<Normal mode>
:i
(nga anglishtja. fut)
- Fusim çelësin tonë publik (që bëmë më lart)
- Ne mbrohemi nga ndryshimet:
chmod 600 ~/.ssh/authorized_keys
Instalimi i një muri zjarri
- Le të shohim të gjitha cilësimet e disponueshme:
sudo ufw app list
- Lejo OpenSSH (përndryshe do të na bllokojë):
sudo ufw allow OpenSSH
- Le të hapim murin e zjarrit:
sudo ufw enable
,y
- kontrolloni:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Cdo gje eshte ne rregull.
Instalimi i Nginx
Gjatë instalimit ndonjëherë do të pyeteni "A jeni i sigurt?" Përgjigju y
(epo, vetëm nëse jeni i sigurt).
sudo apt update
sudo apt install nginx
Shtimi i Nginx në cilësimet e murit të zjarrit
sudo ufw app list
sudo ufw allow 'Nginx HTTP'
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Shkoni në IP-në tuaj. Nëse gjithçka shkon mirë, duhet të shihni sa vijon.
Instalimi i MySQL
sudo apt install mysql-server
- Nisja e një skripti automatik të mbrojtjes
sudo mysql_secure_installation
Përgjigjuni pyetjeve të bëra. Nëse nuk dini çfarë të përgjigjeni, këtu janë disa opsione të sugjeruara:
-
Vërteto shtojcën e fjalëkalimit -
N
-
Të hiqen përdoruesit anonimë? -
Y
-
Të mos lejohet identifikimi i rrënjës nga distanca? -
N
-
Të hiqet baza e të dhënave të testimit dhe qasja në të? -
N
-
Rifresko tabelat e privilegjeve tani? -
Y
-
Le të shkojmë në MySQL:
sudo mysql
-
Le të shohim metodat e hyrjes:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Vendosni një fjalëkalim për root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Le të shohim përsëri metodat e hyrjes:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Aplikoni ndryshimet dhe dilni nga MySQL:
FLUSH PRIVILEGES;
иexit
-
Tani, për të hyrë në MySQL duhet të përdorni
mysql -u root -p
dhe futni fjalëkalimin
Instalimi i PHP
Le të përdorim një depo të palëve të treta nga
sudo apt update
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
sudo apt-add-repository ppa:ondrej/php
sudo apt update
Tani le të zgjedhim. Për Laravel 7, ju mund të zgjidhni PHP 7.3 ose 7.4. Dallimi i vetëm do të jetë 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.
Tani e tutje do të bëj gjithçka në 7.4.
Konfigurimi i Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
Në vend të "<Domeni juaj>" futni domenin (për shembull, mysite.ru
) që dëshironi të përdorni në të ardhmen. Nëse nuk keni ende një të tillë, shkruani ndonjë, pastaj thjesht përsëritni hapat në këtë kapitull për domenin tuaj kur ta zgjidhni atë.
Futni sa vijon:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name <Ваш домен или IP>;
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 në vend të kësaj zgjodhe versionin 7.3 php7.4-fpm.sock
shkruani në php7.4-fpm.sock
.
Dëgjoni portin 80 në server_name
kur arrijmë në kërkesën rrënjësore /var/www/html
merrni skedarin e indeksit. Nëse pas server_name
Ka diçka, ne po kërkojmë një dosje të tillë. Nëse nuk e gjejmë, hedhim 404. Nëse mbaron me .php
, vrapo permes fpm
... Nëse ka .ht
, ndaloj (403).
- Krijimi i një lidhjeje nga
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Heqja e lidhjes për
default
:sudo unlink /etc/nginx/sites-enabled/default
- Kontrollimi për gabime:
sudo nginx -t
- Rinisja:
sudo systemctl reload nginx
Kontrollimi i punës:
sudo vim /var/www/html/info.php
- Ne shkruajmë:
<?php phpinfo();
- Shkojmë
<Ваш IP>/info.php
Ju duhet të shihni diçka të tillë:
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 unzip
-
7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzip
-
Le të shkojmë në MySQL:
mysql -u root -p
-
Krijo një bazë të dhënash me emrin laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Ne ofrojmë qasje rrënjësore në laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Krijo një dosje për projektin:
sudo mkdir -p <Имя проекта>
-
Ne i ofrojmë përdoruesit laravel të drejtat për projektin:
sudo chown laravel:laravel <Имя проекта>
Tjetra ju duhet të transferoni projektin. Për shembull, klonimi nga Github.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Vlen të merret parasysh që nëse nuk keni ruajtur skedarë statikë (për shembull, nga /public
) në Github, atëherë natyrisht që nuk do t'i keni ato. Për shembull, kam krijuar një temë të veçantë për ta zgjidhur këtë deploy
, nga e cila kam klonuar tashmë: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Instalimi i varësive:
composer install
- Krijo .env:
vim .env
Versioni bazë i tij duket si ky:
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=<Ваш пароль от MySQL>
Nëse kopjoni .env tuaj, zëvendësoni APP_ENV me prodhimin, APP_DEBUG me false dhe futni cilësimet e sakta për MySQL.
- Migrimi i bazës së të dhënave:
php artisan migrate
- Gjenerimi i kodit:
php artisan key:generate
Ndryshimi i lejeve:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Gjëja e fundit që mbetet është të rikonfiguroni 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 <Ваш домен или IP>;
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;
}
}
Ashtu si herën e kaluar, nëse në vend të kësaj zgjodhe versionin 7.3 php7.4-fpm.sock
shkruani në php7.4-fpm.sock
.
Vendosja e një domeni në DigitalOcean
Gjithçka është në fakt shumë e thjeshtë. Ju blini një domen (kudo), kaloni në DigitalOcean në Krijo->Domenet/DNSMe Në fushë Shtoni një domen ju hyni në këtë domen dhe klikoni "Shto". Pastaj shkoni te cilësimet e domenit dhe te fusha EMRI hyjnë @. Zgjidhni një projekt dhe klikoni Krijo rekord.
Tani shkoni te faqja ku keni blerë domenin, gjeni "Serverët DNS" atje (ose diçka të ngjashme) dhe futni serverët DigitalOcean (domethënëns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Tani duhet të prisni pak (ose shumë) 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, kaloni në pjesën tjetër.
Konfigurimi i HTTPS
Instaloni certbot dhe kaloni emrin e domenit (format mysite.ru
) dhe emri i domenit me www (www.mysite.ru
).
sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-nginx
sudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>
Tani ju duhet të rikonfiguroni Nginx (mos harroni të zëvendësoni 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;
}
}
Unë mendoj se ju tashmë e kuptoni se çfarë duhet ndryshuar për PHP 7.3.
Këtu, në fakt, gjithçka është e thjeshtë. Ne thjesht i ridrejtojmë të gjitha kërkesat nga HTTP (porti 80) në HTTPS (porti 443). Dhe atje bëjmë gjithçka njësoj si më parë, por me enkriptim.
Gjithçka që mbetet është të vendosni lejet në murin e zjarrit:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Tani gjithçka duhet të funksionojë siç duhet.
[I avancuar] Instalimi i Node.js
Nëse papritur ju duhet të ekzekutoni komandat npm direkt në server, duhet të instaloni Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Kjo është ajo, unë u ndal në këtë fazë. Në parim, jam i kënaqur me rezultatin. Ndoshta do të kaloj nga DigitalOcean diku më afër Rusisë dhe më lirë. Por duke qenë se kisha kaluar tashmë nëpër të gjitha raundet e verifikimit në faqe dhe bëra gjithçka atje, i tregova me shembull. Për më tepër, 100 dollarët e tyre fillestarë janë një trampolinë e shkëlqyer për stërvitje.
PS Falenderim i vecante per autorin
PPS Nëse ju ndodh të jeni një inxhinier i lartë që mendon në komandat bash, ju lutemi mos gjykoni ashpër. Ju mund ta gjeni këtë artikull të një standardi të ulët, por do të kisha qenë i lumtur ta gjeja një të tillë kur të kisha nevojë. Nëse ka sugjerime për përmirësim, unë jam i gjithi për të.
Burimi: www.habr.com