
Одлучио сам да направим свој портфолио користећи Ларавел 7. Тако да главна страница буде одредишна страница, а све информације на њој могу да се мењају преко админ панела. Није поента. Дошло је до распоређивања. Нашао сам неколико добрих туторијала о томе како то учинити на пуном серверу са свим проблемима. Нисам баш јак у примени; генерално сам више предњи него фулл стацк. И, ако још увек могу да пишем и тестирам у ПХП-у, онда пре управљања сервером, итд. Нисам још одрастао. Али морао сам то да схватим.
Сада ћемо проћи кроз све кораке, почевши од покретања преко ССХ-а и завршавајући са радном локацијом. Покушаћемо да избегнемо све замке.
Можда ћете моћи да пронађете слична упутства на мрежи. На крају крајева, коначно сам га нашао. Истина, не на једном месту, не без помоћи СтацкОверфлов-а, и једва на руском. Патио сам. Зато сам одлучио да ти поједноставим живот.
Све ћемо радити помоћу капљице на DigitalOcean-у. Ово је, наравно, опционо; слободно изаберите било који хостинг. Доћи ћете до продукцијског сервера на Ubuntu, вратите се. За оне који се ипак одлуче да користе DigitalOcean, биће још савета о подешавању домена. А такође .
Сви кораци специфични за ДигиталОцеан биће дати у фуснотама попут ових.
Почнимо.
ТЛ;ДР (само основне команде)
Креирајте корисника
ssh root@[IP-адрес вашего дроплета]adduser laravelusermod -aG sudo laravelsu laravel
Додајте му ССХ
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Убаците јавни кључ
chmod 600 ~/.ssh/authorized_keys
Ватрени зид
sudo ufw allow OpenSSHsudo ufw enablesudo ufw status
Нгинк
sudo apt updatesudo apt install -y nginxsudo ufw allow 'Nginx HTTP'sudo ufw status
МиСКЛ
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 updateКСНУМКС:
sudo apt install -y php7.3-fpm php7.3-mysqlКСНУМКС:
sudo apt install -y php7.4-fpm php7.4-mysqlsudo vim /etc/nginx/sites-available/<Ваш домен>
Основно подешавање:
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;
}
}Само ХТТП подешавање за Ларавел:
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;
}
}ХТТПС подешавање за Ларавел:
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
Ларавел
КСНУМКС:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzipКСНУМКС:
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
ХТТПС
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
Направите капљицу на ДигиталОцеан-у и региструјте нови ССХ кључ
Заиста верујем да ћете сами схватити како да се региструјете на ДигиталОцеан-у. Није лако, уз много провера и осталог. Ако стално добијате мрежну грешку приликом провере коришћења докумената, покушајте да урадите све преко ВПН-а, требало би да помогне.
У менију на врху кликните Створити->Капљице. Изаберите Ubuntu.
Чим се региструјете, добићете 100 долара на свој налог. Али немојте се заваравати. Имате само 60 дана да га потрошите. А ово је врло мало. Можда ћете, као и ја, желети да користите скупљи план, тако да касније, када прави новац почне да тече, можете да пређете на јефтинији. Одмах ћу вам рећи да то неће радити. Можете га повећати, али не можете смањити. Тако то иде. бирам стандард->$5.
Бирам нама најближи регион Франкфурт. ВПЦ мрежа->дефаулт-фра1
Одмах ћемо извршити аутентификацију преко ССХ-а. Кликните Нови ССХ кључ. Ако немате ССХ, на десној страни су врло једноставна упутства. Отворите басх терминал и залепите
ssh-keygen. Затим идемо на датотеку са јавним кључем/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(или једноставноcat ~/.ssh/id_rsa.pub), копирајте садржај и налепите га у прозор са леве стране. Било које име.Смишљамо име хоста за капљицу.
Притисни Цреате Дроплет
Креирајте новог корисника
ssh root@[IP-адрес вашего дроплета]- Да ли сте сигурни да желите да наставите са повезивањем (да/не/[отисак прста])?
yes - Унесите своју ССХ лозинку
- Креирајте корисника ларавел:
adduser laravel - Унесите своју лозинку и друге информације (уносим само пуно име)
- Додајте корисника у судо групу:
usermod -aG sudo laravel
ССХ за новог корисника
- Пређите на новог корисника:
su laravel
Све радње вршимо даље, до краја чланка, у име корисника ларавел. Стога, ако сте изненада прекинути, поново се пријавите и уђите su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Отворили смо датотеку у Виму. Ако уопште нисте упознати са тим, можете радити у Нано-у, ваше право.
Најосновније Вим команде
Да бисте користили Вим едитор у целом чланку, само треба да знате следеће.
- Вим има различите режиме: Нормални режим, у којем уносите команде и бирате режиме и друге.
- Да бисте изашли из било ког режима и вратили се у нормалан режим, само притисните
Esc - Крећите се: можете користити само стрелице
- Излаз без чувања
<Normal mode>::q! - Изађите и сачувајте
<Normal mode>::wq - Пребаците се на режим уноса текста
<Normal mode>:i(са енглеског. ИНСЕРТ)
- Убацујемо наш јавни кључ (што смо урадили горе)
- Штитимо од промена:
chmod 600 ~/.ssh/authorized_keys
Инсталирање заштитног зида
- Погледајмо сва доступна подешавања:
sudo ufw app list - Дозволите ОпенССХ (у супротном ће нас закључати):
sudo ufw allow OpenSSH - Хајде да покренемо заштитни зид:
sudo ufw enable,y - Проверавамо:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Све је у реду.
Инсталирање Нгинк-а
Током инсталације ћете понекад бити упитани "Да ли сте сигурни?" Одговор y (па, само ако сте сигурни).
sudo apt updatesudo apt install nginx
Додавање Нгинк-а у подешавања заштитног зида
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)Идите на свој ИП. Ако све прође како треба, требало би да видите следеће.

Инсталирање МиСКЛ-а
sudo apt install mysql-server- Покретање скрипте за аутоматску заштиту
sudo mysql_secure_installation
Одговорите на постављена питања. Ако не знате шта да одговорите, ево неколико предложених опција:
Потврди додатак за лозинку -
NУклонити анонимне кориснике? —
YЖелите ли да забраните роот пријаву на даљину? —
NУклонити тестну базу података и приступити њој? —
NСада поново учитати табеле привилегија? —
YИдемо на МиСКЛ:
sudo mysqlПогледајмо методе приступа:
SELECT user,authentication_string,plugin,host FROM mysql.user;Поставите лозинку за роот:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';Погледајмо поново методе приступа:
SELECT user,authentication_string,plugin,host FROM mysql.user;Примените промене и изађите из МиСКЛ-а:
FLUSH PRIVILEGES;иexitСада, да бисте се пријавили на МиСКЛ морате да користите
mysql -u root -pи унесите лозинку
Инсталирање ПХП-а
Хајде да користимо складиште треће стране из
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo apt update
Сада бирајмо. За Ларавел 7, можете изабрати ПХП 7.3 или 7.4. Једина разлика ће бити у бројевима 3 и 4.
- КСНУМКС:
sudo apt install -y php7.3-fpm php7.3-mysql - КСНУМКС:
sudo apt install -y php7.4-fpm php7.4-mysql
ПХП ФастЦГИ Процесс Манагер (фпм) ради са ПХП захтевима. мискл, наравно, за рад са МиСКЛ.
Од сада ћу све радити 7.4.
Подешавање Нгинк-а
sudo vim /etc/nginx/sites-available/<Ваш домен>
Уместо „<Ваш домен>“ унесите домен (нпр. mysite.ru) које желите да користите у будућности. Ако га још немате, напишите било који, а затим само поновите кораке у овом поглављу за свој домен када га изаберете.
Унесите следеће:
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;
}
}Ако сте уместо тога изабрали верзију 7.3 php7.4-fpm.sock уписати php7.4-fpm.sock.
Слушајте порт 80 укључен server_nameкада стигнемо до коренског захтева /var/www/html узмите индексну датотеку. Ако после server_name Има нешто, тражимо такав фајл. Ако га не пронађемо, избацујемо 404. Ако се завршава са .php, протрчати fpm... Ако постоји .ht, забранити (403).
- Прављење везе од
sites-availableвsites-enabled:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/ - Уклањање везе до
default:sudo unlink /etc/nginx/sites-enabled/default - Провера грешака:
sudo nginx -t - Рестарт:
sudo systemctl reload nginx
Провера рада:
sudo vim /var/www/html/info.php- Пишемо:
<?php phpinfo(); - Идемо у
<Ваш IP>/info.php
Требало би да видите нешто овако:

Сада се ова датотека може избрисати: sudo rm /var/www/html/info.php
Инсталирајте Ларавел
КСНУМКС:
sudo apt install php7.3-mbstring php7.3-xml composer unzipКСНУМКС:
sudo apt install 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;exitcd /var/www/htmlНаправите фасциклу за пројекат:
sudo mkdir -p <Имя проекта>Ми пружамо кориснику ларавел права на пројекат:
sudo chown laravel:laravel <Имя проекта>
Затим морате пренети пројекат. На пример, клонирање са Гитхуб-а.
cd ./<Имя проекта>git clone <ссылка на проект> .
Вреди узети у обзир да ако нисте сачували статичне датотеке (на пример, из /public) на Гитхуб-у, онда их наравно нећете имати. На пример, направио сам засебну нит да ово решим deploy, из које сам већ клонирао: 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 storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Последња ствар која је преостала је да поново конфигуришете Нгинк за Ларавел:
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;
}
}Као и прошли пут, ако сте уместо тога изабрали верзију 7.3 php7.4-fpm.sock уписати php7.4-fpm.sock.
Подешавање домена на ДигиталОцеан-у
Све је заправо врло једноставно. Купите домен (било где), пређите на ДигиталОцеан на Створити->Домени/ДНС... На терену Додајте домен унесете овај домен и кликнете на додај. Затим идите на подешавања домена и на поље ХОСТНАМЕ ући @. Изаберите пројекат и кликните Креирајте запис.
Сада идите на сајт где сте купили домен, пронађите тамо „ДНС сервере“ (или нешто слично) и унесите сервере ДигиталОцеан (тј.ns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Сада треба да сачекате мало (или много) док се ова подешавања не прихвате. Спремни!
Једини проблем је што ће се ваша страница отворити само као ХТТП. Да бисте имали ХТТПС, пређите на следећи део.
Подешавање ХТТПС-а
Инсталирајте цертбот и проследите му име домена (формат mysite.ru) и име домена са ввв (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.<Ваш домен>
Сада морате поново да конфигуришете Нгинк (не заборавите да замените своје вредности):
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;
}
}Мислим да већ разумете шта треба да се промени за ПХП 7.3.
Овде је, у ствари, све једноставно. Једноставно преусмеравамо све захтеве са ХТТП-а (порт 80) на ХТТПС (порт 443). И тамо радимо све исто као и раније, али са шифровањем.
Остаје само да подесите дозволе у заштитном зиду:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Сада би све требало да ради како треба.
[Напредно] Инсталирање Ноде.јс
Ако изненада треба да покренете нпм команде директно на серверу, потребно је да инсталирате Ноде.јс.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
То је то, зауставио сам се у овој фази. У принципу, задовољан сам резултатом. Можда ћу прећи са ДигиталОцеана негде ближе Русији и јефтиније. Али пошто сам већ прошао све кругове верификације на сајту и тамо све урадио, показао сам им примером. Поред тога, њихових почетних 100 долара је одлична одскочна даска за тренинг.
ПС Посебно хвала аутору , који је послужио као основа за све наведене радње. У неким случајевима не ради за Ларавел 7, поправио сам то.
ППС Ако сте врхунски инжењер који размишља басх командама, молим вас немојте оштро судити. Можда ћете сматрати да је овај чланак ниског нивоа, али било би ми драго да га нађем када ми је био потребан. Ако има предлога за побољшање, ја сам за то.
Извор: ввв.хабр.цом
