
Ég ákvað að búa til eignasafnið mitt með því að nota Laravel 7. Þannig að aðalsíðan yrði áfangasíða og hægt væri að breyta öllum upplýsingum á henni með því að nota stjórnborðið. Ekki málið. Það kom að dreifingu. Ég fann nokkrar góðar leiðbeiningar um hvernig á að gera þetta á fullgildum server með öllum vandræðum. Ég er ekki mjög sterkur í dreifingu; ég er almennt frekar frammi en fullur stafla. Og ef ég get samt skrifað og prófað í PHP, þá áður en ég stjórna þjóninum osfrv. Ég er ekki orðin fullorðin ennþá. En ég varð að finna út úr því.
Nú förum við í gegnum öll skrefin, byrja með ræsingu í gegnum SSH og endar með vinnusíðunni. Við munum reyna að forðast allar gildrurnar.
Þú gætir fundið svipaðar leiðbeiningar á netinu. Enda fann ég það loksins. Að vísu ekki á einum stað, ekki án aðstoðar StackOverflow, og varla á rússnesku. Ég þjáðist. Þess vegna ákvað ég að einfalda líf þitt.
Við munum gera allt með dropatali á DigitalOcean. Þetta er auðvitað ekki nauðsynlegt; veldu hvaða hýsingu sem er. Þegar þú nærð virkum netþjóni á Ubuntu, komdu aftur. Fyrir þá sem enn ákveða að gera það á DigitalOcean verða fleiri ráð um að setja upp lén. Og .
Öll DigitalOcean-sértæk skref verða gefin í neðanmálsgreinum eins og þessum.
Byrjum.
TL;DR (aðeins grunnskipanir)
Búðu til notanda
ssh root@[IP-адрес вашего дроплета]adduser laravelusermod -aG sudo laravelsu laravel
Bættu SSH við það
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Settu opinbera lykilinn inn
chmod 600 ~/.ssh/authorized_keys
Eldveggur
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 '<Ваш пароль для MySQL>';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/<Ваш домен>
Grunnuppsetning:
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;
}
}Aðeins HTTP uppsetning fyrir 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;
}
}HTTPS stilling fyrir 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 -pCREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';FLUSH PRIVILEGES;exitcd /var/www/htmlsudo mkdir -p <Имя проекта>sudo chown laravel:laravel <Имя проекта>cd ./<Имя проекта>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=<Ваш пароль от MySQL>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
Búðu til dropa á DigitalOcean og skráðu nýjan SSH lykil
Ég trúi því sannarlega að þú munt finna út hvernig á að skrá þig hjá DigitalOcean sjálfur. Það er ekki auðvelt, með fullt af sannprófunum og öðru. Ef þú færð stöðugt netvillu þegar þú staðfestir notkun skjala skaltu reyna að gera allt í gegnum VPN, það ætti að hjálpa.
Í valmyndinni efst, smelltu Búa til->Droplets. Veldu ubuntu.
Um leið og þú skráir þig færðu $100 inn á reikninginn þinn. En ekki láta blekkjast. Þú hefur aðeins 60 daga til að eyða því. Og þetta er mjög lítið. Þú gætir, eins og ég, viljað nota dýrari áætlun, svo að seinna, þegar alvöru peningar byrja að streyma, geturðu skipt yfir í ódýrari. Ég skal segja þér strax að það mun ekki virka. Þú getur aukið það, en þú getur ekki minnkað það. Svona fer það. ég vel Standard->$5.
Ég vel það svæði sem er næst okkur Frankfurt. VPC net->sjálfgefið-fra1
Við munum strax framkvæma auðkenningu í gegnum SSH. Smellur Nýr SSH lykill. Ef þú ert ekki með SSH eru mjög einfaldar leiðbeiningar til hægri. Opnaðu bash terminal og límdu
ssh-keygen. Síðan förum við í skrána með almenningslyklinum/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(eða einfaldlegacat ~/.ssh/id_rsa.pub), afritaðu innihaldið og límdu það inn í gluggann til vinstri. Hvaða nafn sem er.Við komum með hýsingarheiti fyrir dropann.
Ýttu Búðu til dropa
Búðu til nýjan notanda
ssh root@[IP-адрес вашего дроплета]- Ertu viss um að þú viljir halda áfram að tengjast (já/nei/[fingrafar])?
yes - Sláðu inn SSH lykilorðið þitt
- Búðu til notanda lirfa:
adduser laravel - Sláðu inn lykilorðið þitt og aðrar upplýsingar (ég slá aðeins inn fullt nafn)
- Bættu notandanum við sudo hópinn:
usermod -aG sudo laravel
SSH fyrir nýjan notanda
- Skiptu yfir í nýja notandann:
su laravel
Við framkvæmum allar aðgerðir frekar, þar til í lok greinarinnar, fyrir hönd laravel notandans. Þess vegna, ef þú verður skyndilega truflun, skráðu þig aftur inn og sláðu inn su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Við opnuðum skrána í Vim. Ef þú þekkir það alls ekki geturðu unnið í Nano, rétt þinn.
Helstu Vim skipanir
Til þess að nota Vim ritstjórann í gegnum greinina þarftu bara að vita eftirfarandi.
- Vim hefur mismunandi stillingar: Venjuleg stilling, þar sem þú slærð inn skipanir og velur stillingar og aðra.
- Til að fara úr hvaða stillingu sem er og fara aftur í venjulega stillingu, ýttu bara á
Esc - Færðu þig um: þú getur bara notað örvarnar
- Hætta án þess að vista
<Normal mode>::q! - Hætta og vista
<Normal mode>::wq - Skiptu yfir í textainnsláttarstillingu
<Normal mode>:i(úr ensku. setja)
- Við setjum inn opinbera lykilinn okkar (sem við gerðum hér að ofan)
- Við verndum gegn breytingum:
chmod 600 ~/.ssh/authorized_keys
Að setja upp eldvegg
- Við skulum skoða allar tiltækar stillingar:
sudo ufw app list - Leyfa OpenSSH (annars mun það læsa okkur):
sudo ufw allow OpenSSH - Við skulum ræsa eldvegginn:
sudo ufw enable,y - Við athugum:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Allt er í lagi.
Að setja upp Nginx
Við uppsetningu verður þú stundum spurður "Ertu viss?" Svaraðu y (jæja, bara ef þú ert viss).
sudo apt updatesudo apt install nginx
Bætir Nginx við eldveggstillingarnar
sudo ufw app listsudo 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)Farðu á IP-inn þinn. Ef allt gengur vel ættirðu að sjá eftirfarandi.

Að setja upp MySQL
sudo apt install mysql-server- Ræsir sjálfvirkt verndarforskrift
sudo mysql_secure_installation
Svaraðu spurningunum sem spurt er um. Ef þú veist ekki hverju þú átt að svara, hér eru nokkrar tillögur að valmöguleikum:
Staðfesta lykilorð viðbót -
NFjarlægja nafnlausa notendur? —
YBanna rótarinnskráningu fjarstýrt? —
NFjarlægja prófunargagnagrunn og aðgang að honum? —
NEndurhlaða forréttindatöflur núna? —
YVið skulum fara í MySQL:
sudo mysqlVið skulum skoða aðgangsaðferðirnar:
SELECT user,authentication_string,plugin,host FROM mysql.user;Stilltu lykilorð fyrir rót:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';Við skulum skoða aðgangsaðferðirnar aftur:
SELECT user,authentication_string,plugin,host FROM mysql.user;Notaðu breytingarnar og farðu úr MySQL:
FLUSH PRIVILEGES;иexitNú, til að skrá þig inn á MySQL þarftu að nota
mysql -u root -pog sláðu inn lykilorðið
Að setja upp PHP
Við skulum nota geymslu frá þriðja aðila frá
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ú skulum við velja. Fyrir Laravel 7 geturðu valið PHP 7.3 eða 7.4. Eini munurinn verður á tölunum 3 og 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) vinnur með PHP beiðnum. mysql, auðvitað, til að vinna með MySQL.
Héðan í frá mun ég gera allt þann 7.4.
Að setja upp Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
Sláðu inn lénið í stað „<lénsins þíns>“ (til dæmis, mysite.ru) sem þú vilt nota í framtíðinni. Ef þú ert ekki með einn, skrifaðu þá, endurtaktu síðan skrefin í þessum kafla fyrir lénið þitt þegar þú velur það.
Skráðu Eftirfarandi:
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;
}
}Ef þú velur útgáfu 7.3 í staðinn php7.4-fpm.sock skrifa inn php7.4-fpm.sock.
Hlustaðu á port 80 á server_nameþegar við komum að rótarbeiðni /var/www/html taktu vísitöluskrána. Ef eftir server_name Það er eitthvað, við erum að leita að slíkri skrá. Ef við finnum það ekki, þá hentum við út 404. Ef það endar með .php, hlaupa gegn um fpm... Ef það er .ht, banna (403).
- Gerir tengil frá
sites-availableвsites-enabled:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/ - Fjarlægir tengilinn á
default:sudo unlink /etc/nginx/sites-enabled/default - Leitar að villum:
sudo nginx -t - Endurræsa:
sudo systemctl reload nginx
Athugaðu verkið:
sudo vim /var/www/html/info.php- Við skrifum:
<?php phpinfo(); - Förum til
<Ваш IP>/info.php
Þú ættir að sjá eitthvað á þessa leið:

Nú er hægt að eyða þessari skrá: sudo rm /var/www/html/info.php
Settu upp 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 unzipVið skulum fara í MySQL:
mysql -u root -pBúðu til gagnagrunn með nafninu lirfa:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Við veitum rótaraðgang að lirfa:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';FLUSH PRIVILEGES;exitcd /var/www/htmlBúðu til möppu fyrir verkefnið:
sudo mkdir -p <Имя проекта>Við veitum notandanum lirfa réttindi á verkefninu:
sudo chown laravel:laravel <Имя проекта>
Næst þarftu að flytja verkefnið. Til dæmis, klónun frá Github.
cd ./<Имя проекта>git clone <ссылка на проект> .
Það er þess virði að íhuga að ef þú vistaðir ekki truflanir skrár (til dæmis frá /public) á Github, þá muntu náttúrulega ekki hafa þá. Til dæmis bjó ég til sérstakan þráð til að leysa þetta deploy, sem ég hef þegar klónað: git clone -b <имя ветки> --single-branch <ссылка на проект> ..
- Að setja upp ósjálfstæði:
composer install - Búa til .env:
vim .env
Grunnútgáfan af því lítur svona út:
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>Ef þú afritar .env þinn skaltu skipta út APP_ENV fyrir framleiðslu, APP_DEBUG fyrir false og sláðu inn réttar stillingar fyrir MySQL.
- Flutningur gagnagrunnsins:
php artisan migrate - Búa til kóðann:
php artisan key:generate
Breyting á heimildum:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Það síðasta sem er eftir er að endurstilla Nginx fyrir 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;
}
}Eins og síðast, ef þú valdir útgáfu 7.3 í staðinn php7.4-fpm.sock skrifa inn php7.4-fpm.sock.
Að setja upp lén á DigitalOcean
Allt er í rauninni mjög einfalt. Þú kaupir lén (hvar sem er), skiptir yfir í DigitalOcean á Búa til->Lén/DNS... Á sviði Bættu við léni þú slærð inn þetta lén og smellir á bæta við. Farðu síðan í lénsstillingarnar og í reitinn HÚSNEFNI koma inn @. Veldu verkefni og smelltu Búðu til skrá.
Farðu nú á síðuna þar sem þú keyptir lénið, finndu “DNS Servers” þar (eða eitthvað álíka) og sláðu inn DigitalOcean netþjónana (þ.e.ns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Nú þarftu að bíða aðeins (eða mikið) þar til þessar stillingar eru samþykktar. Tilbúið!
Eina vandamálið er að síðan þín opnast aðeins sem HTTP. Til að hafa HTTPS skaltu fara í næsta hluta.
Að setja upp HTTPS
Settu upp certbot og sendu því lénið (snið mysite.ru) og lén 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.<Ваш домен>
Nú þarftu að endurstilla Nginx (ekki gleyma að skipta um gildin þín):
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;
}
}Ég held að þú skiljir nú þegar hverju þarf að breyta fyrir PHP 7.3.
Hér er í raun allt einfalt. Við beinum einfaldlega öllum beiðnum frá HTTP (gátt 80) til HTTPS (gátt 443). Og þar gerum við allt eins og áður, en með dulkóðun.
Allt sem er eftir er að stilla heimildirnar í eldveggnum:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Nú ætti allt að virka eins og það á að gera.
[Advanced] Að setja upp Node.js
Ef þú þarft skyndilega að keyra npm skipanir beint á þjóninum þarftu að setja upp Node.js.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Það er það, ég hætti á þessu stigi. Í grundvallaratriðum er ég sáttur við niðurstöðuna. Kannski mun ég skipta úr DigitalOcean einhvers staðar nær Rússlandi og ódýrara. En þar sem ég var búinn að fara í gegnum allar sannprófunarloturnar á síðunni og gerði allt þar sýndi ég þær með dæmi. Að auki, byrjun $100 þeirra er frábær stökkpallur fyrir þjálfun.
PS Sérstakar þakkir til höfundar , sem var grundvöllur allra ofangreindra aðgerða. Í sumum tilfellum virkar það ekki fyrir Laravel 7, ég lagaði það.
PPS Ef þú ert yfirmaður verkfræðingur sem hugsar í bash skipunum, vinsamlegast ekki dæma hart. Þér gæti fundist þessi grein vera á lágu stigi, en ég hefði verið fegin að finna eina þegar ég þurfti á henni að halda. Ef það eru tillögur til úrbóta þá er ég alveg til í það.
Heimild: www.habr.com
