Rozhodol som sa vytvoriť svoje portfólio pomocou Laravel 7. Aby hlavná stránka bola vstupnou stránkou a všetky informácie na nej sa dali meniť pomocou admin panela. Nie pointa. Prišlo na nasadenie. Našiel som pár dobrých návodov, ako to urobiť na plnohodnotnom serveri so všetkými problémami. Nie som veľmi silný v nasadení, vo všeobecnosti som viac vpredu ako full stack. A ak môžem stále písať a testovať v PHP, potom pred správou servera atď. Ešte som nevyrástol. Ale musel som na to prísť.
Teraz prejdeme všetkými krokmi, počnúc spustením cez SSH a končiac pracovnou stránkou. Pokúsime sa vyhnúť všetkým nástrahám.
Podobné pokyny možno nájdete aj na internete. Napokon som to predsa len našiel. Pravda, nie na jednom mieste, nie bez pomoci StackOverflow a sotva v ruštine. Trpel som. Preto som sa rozhodol zjednodušiť vám život.
Všetko urobíme kvapôčkou na DigitalOcean. To, samozrejme, nie je potrebné, vyberte si akýkoľvek hosting. Keď sa dostanete na fungujúci server na Ubuntu, vráťte sa. Pre tých, ktorí sa to predsa len rozhodnú urobiť na DigitalOcean, pribudnú ďalšie tipy na nastavenie domény. A
Všetky kroky špecifické pre DigitalOcean budú uvedené v poznámkach pod čiarou, ako sú tieto.
Začnime.
TL;DR (iba základné príkazy)
Vytvorte používateľa
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Pridajte k tomu SSH
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Vložte verejný kľúč
chmod 600 ~/.ssh/authorized_keys
POŽARNE DVERE
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/<Ваш домен>
Základné nastavenie:
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;
}
}
Iba nastavenie HTTP pre 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;
}
}
Nastavenie HTTPS pre 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
Vytvorte droplet na DigitalOcean a zaregistrujte nový kľúč SSH
Naozaj verím, že sami prídete na to, ako sa zaregistrovať v DigitalOcean. Nie je to jednoduché, s množstvom overovaní a iných vecí. Ak sa pri overovaní pomocou dokumentov neustále zobrazuje chyba siete, skúste urobiť všetko cez VPN, malo by to pomôcť.
V ponuke v hornej časti kliknite na vytvoriť->kvapôčky. Vyberte si ubuntu.
Hneď ako sa zaregistrujete, dostanete na svoj účet 100 $. Ale nenechajte sa oklamať. Máte na to iba 60 dní. A to je veľmi málo. Možno budete chcieť, ako ja, použiť drahší plán, aby ste neskôr, keď začnú tiecť skutočné peniaze, mohli prejsť na lacnejší. Hneď vám poviem, že to nepôjde. Môžete ho zvýšiť, ale nemôžete ho znížiť. Tak to ide. vyberám si štandard->$5.
Vyberám si región, ktorý je nám najbližšie Frankfurt. VPC sieť->default-fra1
Okamžite vykonáme autentifikáciu cez SSH. Kliknite Nový kľúč SSH. Ak nemáte SSH, vpravo je veľmi jednoduchý návod. Otvorte bash terminál a vložte ho
ssh-keygen
. Potom prejdeme k súboru s verejným kľúčom/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(alebo jednoduchocat ~/.ssh/id_rsa.pub
), skopírujte obsah a vložte ho do okna vľavo. Hocijaké meno.Prichádzame s názvom hostiteľa pre kvapôčku.
lis Vytvorte kvapôčku
Vytvorte nového používateľa
ssh root@[IP-адрес вашего дроплета]
- Naozaj chcete pokračovať v pripájaní (áno/nie/[odtlačok prsta])?
yes
- Zadajte svoje heslo SSH
- Vytvorte používateľa laravel:
adduser laravel
- Zadajte svoje heslo a ďalšie informácie (zadávam iba celé meno)
- Pridajte používateľa do skupiny sudo:
usermod -aG sudo laravel
SSH pre nového používateľa
- Prepnúť na nového používateľa:
su laravel
Všetky akcie vykonávame ďalej, až do konca článku, v mene užívateľa laravel. Preto, ak vás náhle vyrušia, znova sa prihláste a vstúpte su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Súbor sme otvorili vo Vime. Ak sa v tom vôbec nevyznáte, môžete pracovať v Nano, máte právo.
Najzákladnejšie príkazy Vim
Aby ste mohli používať editor Vim v celom článku, potrebujete vedieť nasledovné.
- Vim má rôzne režimy: Normálny režim, v ktorom zadávate príkazy a vyberáte režimy a iné.
- Ak chcete ukončiť akýkoľvek režim a vrátiť sa do normálneho režimu, stačí stlačiť
Esc
- Pohybujte sa: môžete použiť iba šípky
- Ukončiť bez uloženia
<Normal mode>
::q!
- Ukončite a uložte
<Normal mode>
::wq
- Prepnite do režimu zadávania textu
<Normal mode>
:i
(z angličtiny. vložiť)
- Vložíme náš verejný kľúč (čo sme urobili vyššie)
- Chránime pred zmenami:
chmod 600 ~/.ssh/authorized_keys
Inštalácia brány firewall
- Pozrime sa na všetky dostupné nastavenia:
sudo ufw app list
- Povoliť OpenSSH (inak nás uzamkne):
sudo ufw allow OpenSSH
- Spustíme firewall:
sudo ufw enable
,y
- skontrolujte:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Všetko je v poriadku.
Inštalácia Nginx
Počas inštalácie sa vás niekedy opýta: "Ste si istý?" Odpoveď y
(no, len ak si si istý).
sudo apt update
sudo apt install nginx
Pridanie Nginx do nastavení brány firewall
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)
Prejdite na svoju IP. Ak všetko pôjde dobre, mali by ste vidieť nasledovné.
Inštalácia MySQL
sudo apt install mysql-server
- Spustenie skriptu automatickej ochrany
sudo mysql_secure_installation
Odpovedzte na položené otázky. Ak neviete, čo odpovedať, tu je niekoľko navrhovaných možností:
-
Overenie doplnku hesla -
N
-
Chcete odstrániť anonymných používateľov? —
Y
-
Zakázať prihlásenie root na diaľku? —
N
-
Odstrániť testovaciu databázu a získať k nej prístup? —
N
-
Chcete teraz znova načítať tabuľky práv? —
Y
-
Poďme na MySQL:
sudo mysql
-
Pozrime sa na spôsoby prístupu:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Nastavte heslo pre root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Pozrime sa znova na spôsoby prístupu:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Použite zmeny a ukončite MySQL:
FLUSH PRIVILEGES;
иexit
-
Teraz, ak sa chcete prihlásiť do MySQL, musíte použiť
mysql -u root -p
a zadajte heslo
Inštalácia PHP
Použime úložisko tretej strany z
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
Teraz si vyberme. Pre Laravel 7 si môžete vybrať PHP 7.3 alebo 7.4. Rozdiel bude len v číslach 3 a 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) pracuje s požiadavkami PHP. mysql, samozrejme, pre prácu s MySQL.
Odteraz budem všetko robiť 7.4.
Nastavenie Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
Namiesto „<Vaša doména>“ zadajte doménu (napr. mysite.ru
), ktorý chcete použiť v budúcnosti. Ak ešte žiadnu nemáte, napíšte nejaké a potom pri výbere zopakujte kroky v tejto kapitole pre vašu doménu.
Zadaj nasledujúce:
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;
}
}
Ak ste namiesto toho vybrali verziu 7.3 php7.4-fpm.sock
vpísať php7.4-fpm.sock
.
Počúvajte port 80 zapnutý server_name
keď sa dostaneme ku koreňovej požiadavke /var/www/html
vziať indexový súbor. Ak po server_name
Niečo je, hľadáme taký súbor. Ak to nenájdeme, vyhodíme 404. Ak to skončí .php
, prebehnúť fpm
... Ak existuje .ht
, zakázať (403).
- Vytvorenie odkazu z
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Odstraňuje sa odkaz na
default
:sudo unlink /etc/nginx/sites-enabled/default
- Kontrola chýb:
sudo nginx -t
- Reštartovať:
sudo systemctl reload nginx
Kontrola práce:
sudo vim /var/www/html/info.php
- Píšeme:
<?php phpinfo();
- Prejdeme k
<Ваш IP>/info.php
Mali by ste vidieť niečo takéto:
Teraz je možné tento súbor odstrániť: sudo rm /var/www/html/info.php
Nainštalujte 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
-
Poďme na MySQL:
mysql -u root -p
-
Vytvorte databázu s názvom laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Poskytujeme root prístup k laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Vytvorte priečinok pre projekt:
sudo mkdir -p <Имя проекта>
-
Poskytujeme užívateľovi laravel práva na projekt:
sudo chown laravel:laravel <Имя проекта>
Ďalej musíte preniesť projekt. Napríklad klonovanie z Githubu.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Stojí za zváženie, že ak ste neuložili statické súbory (napríklad z /public
) na Github, potom ich prirodzene nebudete mať. Na vyriešenie tohto problému som napríklad vytvoril samostatné vlákno deploy
, z ktorého som už naklonoval: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Inštalácia závislostí:
composer install
- Vytvoriť .env:
vim .env
Jeho základná verzia vyzerá takto:
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>
Ak skopírujete súbor .env, nahraďte APP_ENV produkčným, APP_DEBUG false a zadajte správne nastavenia pre MySQL.
- Migrácia databázy:
php artisan migrate
- Generovanie kódu:
php artisan key:generate
Zmena povolení:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Posledná vec, ktorá zostáva, je prekonfigurovať Nginx pre 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;
}
}
Ako minule, ak ste namiesto toho zvolili verziu 7.3 php7.4-fpm.sock
vpísať php7.4-fpm.sock
.
Nastavenie domény na DigitalOcean
Všetko je vlastne veľmi jednoduché. Kúpite si doménu (kdekoľvek), prejdete na DigitalOcean na vytvoriť->Domény/DNS... V poli Pridajte doménu zadáte túto doménu a kliknete na pridať. Potom prejdite do nastavení domény a do poľa MENO HOSŤA vstúpiť @. Vyberte projekt a kliknite Vytvorte záznam.
Teraz prejdite na stránku, kde ste si kúpili doménu, nájdite tam „Servery DNS“ (alebo niečo podobné) a zadajte servery DigitalOcean (konkrétnens1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Teraz musíte chvíľu (alebo veľa) počkať, kým budú tieto nastavenia akceptované. Pripravený!
Jediným problémom je, že vaša stránka sa otvorí iba ako HTTP. Ak chcete mať HTTPS, prejdite na ďalšiu časť.
Nastavenie HTTPS
Nainštalujte certbot a odovzdajte mu názov domény (formát mysite.ru
) a názov domény s 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.<Ваш домен>
Teraz musíte prekonfigurovať Nginx (nezabudnite nahradiť svoje hodnoty):
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;
}
}
Myslím, že už chápete, čo je potrebné zmeniť pre PHP 7.3.
Tu je v skutočnosti všetko jednoduché. Všetky požiadavky jednoducho presmerujeme z HTTP (port 80) na HTTPS (port 443). A tam robíme všetko rovnako ako predtým, ale so šifrovaním.
Zostáva len nastaviť povolenia vo firewalle:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Teraz by malo všetko fungovať ako má.
[Pokročilé] Inštalácia Node.js
Ak náhle potrebujete spustiť príkazy npm priamo na serveri, musíte si nainštalovať Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
To je všetko, v tejto fáze som sa zastavil. V zásade som s výsledkom spokojný. Možno prejdem z DigitalOcean niekam bližšie k Rusku a lacnejšie. Ale keďže som už prešiel všetkými overovacími kolami na stránke a urobil som všetko tam, ukázal som ich na príklade. Navyše ich štartovacích 100 dolárov je výborným odrazovým mostíkom na tréning.
PS Osobitné poďakovanie autorovi
PPS Ak ste náhodou špičkový inžinier, ktorý premýšľa v bash príkazoch, prosím, nesúďte tvrdo. Možno sa vám bude zdať tento článok nízkej úrovne, ale bol by som rád, keby som ho našiel, keď by som ho potreboval. Ak existujú návrhy na zlepšenie, som za všetko.
Zdroj: hab.com