Odlučio sam da napravim svoj portfolio koristeći Laravel 7. Tako da glavna stranica bude landing stranica, a sve informacije na njoj mogu se mijenjati preko admin panela. Nije poenta. Došlo je do raspoređivanja. Našao sam nekoliko dobrih tutorijala o tome kako to učiniti na punom serveru sa svim problemima. Nisam baš jak u raspoređivanju; generalno sam više prednji nego full stack. I, ako još uvijek mogu pisati i testirati u PHP-u, onda prije upravljanja serverom, itd. Nisam još odrastao. Ali morao sam to shvatiti.
Sada ćemo proći kroz sve korake, počevši od pokretanja preko SSH-a do radnog mjesta. Pokušat ćemo izbjeći sve zamke.
Možda ćete moći pronaći slična uputstva na internetu. Na kraju krajeva, konačno sam ga našao. Istina, ne na jednom mjestu, ne bez pomoći StackOverflow-a, i jedva na ruskom. Patio sam. Zato sam odlučio da ti pojednostavim život.
Sve ćemo raditi s kapljicom na DigitalOceanu. To, naravno, nije potrebno; odaberite bilo koji hosting. Kada dođete do radnog servera na Ubuntu, vratite se. Za one koji se ipak odluče to učiniti na DigitalOceanu, bit će još savjeta za postavljanje domene. I
Svi koraci specifični za DigitalOcean bit će dati u fusnotama poput ovih.
Počnimo.
TL;DR (samo osnovne naredbe)
Kreirajte korisnika
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Dodajte mu SSH
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Umetnite javni ključ
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/<Ваш домен>
Osnovno podešavanje:
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;
}
}
Samo HTTP podešavanje za 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 postavka za 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
Kreirajte kapljicu na DigitalOcean i registrirajte novi SSH ključ
Iskreno vjerujem da ćete sami shvatiti kako se registrovati na DigitalOcean. Nije lako, uz puno provjera i drugih stvari. Ako stalno dobivate mrežnu grešku prilikom provjere korištenja dokumenata, pokušajte sve učiniti preko VPN-a, trebalo bi pomoći.
U meniju na vrhu kliknite stvoriti->Kapljice. Odaberite Ubuntu.
Čim se registrujete, dobit ćete 100 USD na svoj račun. Ali nemojte se zavaravati. Imate samo 60 dana da ga potrošite. A ovo je jako malo. Možda ćete, kao i ja, htjeti koristiti skuplji plan, tako da kasnije, kada pravi novac počne da teče, možete preći na jeftiniji. Odmah ću vam reći da to neće uspjeti. Možete ga povećati, ali ne možete smanjiti. Tako to ide. ja biram standard->$5.
Ja biram region koji je nama najbliži Frankfurt. VPC mreža->default-fra1
Mi ćemo odmah izvršiti autentifikaciju putem SSH-a. Kliknite Novi SSH ključ. Ako nemate SSH, na desnoj strani su vrlo jednostavne upute. Otvorite bash terminal i zalijepite
ssh-keygen
. Zatim idemo na fajl sa javnim ključem/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(ili jednostavnocat ~/.ssh/id_rsa.pub
), kopirajte sadržaj i zalijepite ga u prozor s lijeve strane. Bilo koje ime.Smišljamo ime hosta za droplet.
Pritisni Create Droplet
Kreirajte novog korisnika
ssh root@[IP-адрес вашего дроплета]
- Jeste li sigurni da želite nastaviti povezivanje (da/ne/[otisak prsta])?
yes
- Unesite svoju SSH lozinku
- Kreirajte korisnika laravel:
adduser laravel
- Unesite svoju lozinku i druge podatke (unosim samo puno ime)
- Dodajte korisnika u sudo grupu:
usermod -aG sudo laravel
SSH za novog korisnika
- Prebacite se na novog korisnika:
su laravel
Sve radnje vršimo dalje, do kraja članka, u ime korisnika laravel. Stoga, ako ste iznenada prekinuti, ponovo se prijavite i uđite su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Otvorili smo fajl u Vimu. Ako uopšte niste upoznati, možete raditi u Nano-u, vaše pravo.
Najosnovnije Vim komande
Da biste koristili Vim editor u cijelom članku, samo trebate znati sljedeće.
- Vim ima različite režime: Normalni režim, u kojem unosite komande i birate režime i druge.
- Da biste izašli iz bilo kojeg moda i vratili se u normalan način rada, samo pritisnite
Esc
- Krećite se: možete koristiti samo strelice
- Izađite bez spremanja
<Normal mode>
::q!
- Izađite i sačuvajte
<Normal mode>
::wq
- Prebacite se na način unosa teksta
<Normal mode>
:i
(sa engleskog. umetnite)
- Ubacujemo naš javni ključ (što smo uradili gore)
- Štitimo od promjena:
chmod 600 ~/.ssh/authorized_keys
Instaliranje zaštitnog zida
- Pogledajmo sve dostupne postavke:
sudo ufw app list
- Dozvolite OpenSSH (inače će nas zaključati):
sudo ufw allow OpenSSH
- Pokrenimo firewall:
sudo ufw enable
,y
- Provjeravamo:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Sve je uredu.
Instalacija Nginxa
Tokom instalacije ćete ponekad biti upitani "Jeste li sigurni?" Odgovori y
(pa, samo ako ste sigurni).
sudo apt update
sudo apt install nginx
Dodavanje Nginxa u postavke zaštitnog zida
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)
Idite na svoju IP adresu. Ako sve prođe kako treba, trebali biste vidjeti sljedeće.
Instaliranje MySQL
sudo apt install mysql-server
- Pokretanje skripte za automatsku zaštitu
sudo mysql_secure_installation
Odgovorite na postavljena pitanja. Ako ne znate šta da odgovorite, evo nekoliko predloženih opcija:
-
Potvrdi dodatak za lozinku -
N
-
Ukloniti anonimne korisnike? —
Y
-
Zabraniti root prijavu na daljinu? —
N
-
Ukloniti testnu bazu podataka i pristupiti joj? —
N
-
Ponovno učitati tablice privilegija sada? —
Y
-
Idemo na MySQL:
sudo mysql
-
Pogledajmo metode pristupa:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Postavite lozinku za root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Pogledajmo ponovo metode pristupa:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Primijenite promjene i izađite iz MySQL-a:
FLUSH PRIVILEGES;
иexit
-
Sada, da biste se prijavili na MySQL morate koristiti
mysql -u root -p
i unesite lozinku
Instaliranje PHP-a
Hajde da koristimo repozitorijum treće strane iz
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
Sada birajmo. Za Laravel 7 možete odabrati PHP 7.3 ili 7.4. Jedina razlika će biti u brojevima 3 i 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) radi sa PHP zahtjevima. mysql, naravno, za rad sa MySQL.
Od sada ću sve raditi na 7.4.
Postavljanje Nginxa
sudo vim /etc/nginx/sites-available/<Ваш домен>
Umjesto "<Vaša domena>" unesite domenu (na primjer, mysite.ru
) koje želite koristiti u budućnosti. Ako ga još nemate, napišite bilo koji, a zatim samo ponovite korake u ovom poglavlju za svoju domenu kada je odaberete.
Unesite sljedeće:
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;
}
}
Ako ste umjesto toga odabrali verziju 7.3 php7.4-fpm.sock
upiši php7.4-fpm.sock
.
Slušajte port 80 uključen server_name
kada stignemo do root zahtjeva /var/www/html
uzmite indeksni fajl. Ako posle server_name
Ima nešto, tražimo takav fajl. Ako ga ne pronađemo, izbacit ćemo 404. Ako se završi sa .php
, protrčati fpm
... Ako ima .ht
, zabraniti (403).
- Pravljenje veze od
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Uklanjanje veze do
default
:sudo unlink /etc/nginx/sites-enabled/default
- Provjera grešaka:
sudo nginx -t
- Ponovno pokretanje:
sudo systemctl reload nginx
Provjera rada:
sudo vim /var/www/html/info.php
- Mi pišemo:
<?php phpinfo();
- Idemo na
<Ваш IP>/info.php
Trebali biste vidjeti nešto ovako:
Sada se ovaj fajl može izbrisati: sudo rm /var/www/html/info.php
Instalirajte 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
-
Idemo na MySQL:
mysql -u root -p
-
Kreirajte bazu podataka sa imenom laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Pružamo root pristup laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Kreirajte folder za projekat:
sudo mkdir -p <Имя проекта>
-
Mi pružamo korisniku laravel prava na projekat:
sudo chown laravel:laravel <Имя проекта>
Zatim morate prenijeti projekat. Na primjer, kloniranje sa Githuba.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Vrijedi uzeti u obzir da ako niste spremili statičke datoteke (na primjer, from /public
) na Githubu, onda ih naravno nećete imati. Na primjer, napravio sam zasebnu nit da riješim ovo deploy
, sa kojeg sam već klonirao: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Instaliranje zavisnosti:
composer install
- Kreirajte .env:
vim .env
Osnovna verzija izgleda ovako:
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>
Ako kopirate svoj .env, zamijenite APP_ENV sa proizvodnim, APP_DEBUG sa false i unesite ispravne postavke za MySQL.
- Migracija baze podataka:
php artisan migrate
- Generiranje koda:
php artisan key:generate
Promjena dozvola:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Posljednja stvar koja je preostala je rekonfigurirati Nginx za 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;
}
}
Kao i prošli put, ako ste umjesto toga odabrali verziju 7.3 php7.4-fpm.sock
upiši php7.4-fpm.sock
.
Postavljanje domene na DigitalOcean
Sve je zapravo vrlo jednostavno. Kupite domenu (bilo gdje), prebacite se na DigitalOcean na stvoriti->Domains/DNS. V pole Dodajte domenu unesete ovu domenu i kliknete na dodaj. Zatim idite na postavke domene i na polje IME HOST-a enter @. Odaberite projekat i kliknite Kreirajte zapis.
Sada idite na stranicu na kojoj ste kupili domenu, tamo pronađite “DNS servere” (ili nešto slično) i unesite servere DigitalOcean (tj.ns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Sada morate pričekati malo (ili puno) dok se ove postavke ne prihvate. Spremni!
Jedini problem je što će se vaša stranica otvoriti samo kao HTTP. Da biste imali HTTPS, prijeđite na sljedeći dio.
Postavljanje HTTPS-a
Instalirajte certbot i proslijedite mu ime domene (format mysite.ru
) i naziv domene sa 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.<Ваш домен>
Sada morate ponovo konfigurirati Nginx (ne zaboravite zamijeniti svoje vrijednosti):
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;
}
}
Mislim da već razumete šta treba da se promeni za PHP 7.3.
Ovdje je, zapravo, sve jednostavno. Jednostavno preusmjeravamo sve zahtjeve sa HTTP-a (port 80) na HTTPS (port 443). I tamo radimo sve isto kao i prije, ali uz enkripciju.
Sve što ostaje je da podesite dozvole u firewall-u:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Sada bi sve trebalo da radi kako treba.
[Napredno] Instaliranje Node.js
Ako iznenada trebate pokrenuti npm komande direktno na serveru, morate instalirati Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
To je to, stao sam u ovoj fazi. U principu sam zadovoljan rezultatom. Možda ću se prebaciti sa DigitalOceana negdje bliže Rusiji i jeftinije. Ali pošto sam već prošao sve krugove verifikacije na sajtu i uradio sve tamo, pokazao sam im primerom. Uz to, njihovih početnih 100 dolara odlična je odskočna daska za trening.
PS Posebno hvala autoru
PPS Ako ste slučajno vrhunski inžinjer koji razmišlja bash komandama, nemojte strogo suditi. Možda ćete smatrati da je ovaj članak niskog nivoa, ali bilo bi mi drago da ga nađem kada mi je zatrebao. Ako ima prijedloga za poboljšanje, ja sam za.
izvor: www.habr.com