Одлучио сам да направим свој портфолио користећи Ларавел 7. Тако да главна страница буде одредишна страница, а све информације на њој могу да се мењају преко админ панела. Није поента. Дошло је до распоређивања. Нашао сам неколико добрих туторијала о томе како то учинити на пуном серверу са свим проблемима. Нисам баш јак у примени; генерално сам више предњи него фулл стацк. И, ако још увек могу да пишем и тестирам у ПХП-у, онда пре управљања сервером, итд. Нисам још одрастао. Али морао сам то да схватим.
Сада ћемо проћи кроз све кораке, почевши од покретања преко ССХ-а и завршавајући са радном локацијом. Покушаћемо да избегнемо све замке.
Можда ћете моћи да пронађете слична упутства на мрежи. На крају крајева, коначно сам га нашао. Истина, не на једном месту, не без помоћи СтацкОверфлов-а, и једва на руском. Патио сам. Зато сам одлучио да ти поједноставим живот.
Све ћемо урадити са капљицом на ДигиталОцеану. Ово, наравно, није неопходно; изаберите било који хостинг. Када дођете до радног сервера на Убунту, вратите се. За оне који се ипак одлуче да то ураде на ДигиталОцеан-у, биће још савета за подешавање домена. И
Сви кораци специфични за ДигиталОцеан биће дати у фуснотама попут ових.
Почнимо.
ТЛ;ДР (само основне команде)
Креирајте корисника
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Додајте му ССХ
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Убаците јавни кључ
chmod 600 ~/.ssh/authorized_keys
Ватрени зид
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
Нгинк
sudo apt update
sudo apt install -y nginx
sudo ufw allow 'Nginx HTTP'
sudo ufw status
МиСКЛ
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
-
КСНУМКС:
sudo apt install -y php7.3-fpm php7.3-mysql
-
КСНУМКС:
sudo apt install -y php7.4-fpm php7.4-mysql
-
sudo 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/default
sudo nginx -t
sudo 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 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
ХТТПС
-
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
Направите капљицу на ДигиталОцеан-у и региструјте нови ССХ кључ
Заиста верујем да ћете сами схватити како да се региструјете на ДигиталОцеан-у. Није лако, уз много провера и осталог. Ако стално добијате мрежну грешку приликом провере коришћења докумената, покушајте да урадите све преко ВПН-а, требало би да помогне.
У менију на врху кликните Створити->Капљице. Изаберите убунту.
Чим се региструјете, добићете 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 ~/.ssh
chmod 700 ~/.ssh
vim ~/.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 update
sudo apt install nginx
Додавање Нгинк-а у подешавања заштитног зида
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)
Идите на свој ИП. Ако све прође како треба, требало би да видите следеће.
Инсталирање МиСКЛ-а
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 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, можете изабрати ПХП 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;
-
exit
-
cd /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 storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -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/certbot
sudo apt install python-certbot-nginx
sudo 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 -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Сада би све требало да ради како треба.
[Напредно] Инсталирање Ноде.јс
Ако изненада треба да покренете нпм команде директно на серверу, потребно је да инсталирате Ноде.јс.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
То је то, зауставио сам се у овој фази. У принципу, задовољан сам резултатом. Можда ћу прећи са ДигиталОцеана негде ближе Русији и јефтиније. Али пошто сам већ прошао све кругове верификације на сајту и тамо све урадио, показао сам им примером. Поред тога, њихових почетних 100 долара је одлична одскочна даска за тренинг.
ПС Посебно хвала аутору
ППС Ако сте врхунски инжењер који размишља басх командама, молим вас немојте оштро судити. Можда ћете сматрати да је овај чланак ниског нивоа, али било би ми драго да га нађем када ми је био потребан. Ако има предлога за побољшање, ја сам за то.
Извор: ввв.хабр.цом