Mwen deside fè pòtfolyo mwen an lè l sèvi avèk Laravel 7. Pou ke paj prensipal la ta dwe yon paj aterisaj, ak tout enfòmasyon ki sou li yo ta ka chanje lè l sèvi avèk panèl la admin. Se pa pwen an. Li te rive nan deplwaman. Mwen te jwenn yon koup nan leson patikilye bon sou kòman yo fè sa sou yon sèvè plen véritable ak tout pwoblèm yo. Mwen pa trè fò nan deplwaman; Mwen jeneralman pi devan pase pil konplè. Epi, si mwen ka toujou ekri ak teste nan PHP, Lè sa a, anvan jere sèvè a, elatriye. Mwen poko grandi. Men, mwen te oblije kalkile li.
Koulye a, nou pral ale nan tout etap yo, kòmanse ak lansman atravè SSH epi fini ak sit la k ap travay. Nou pral eseye evite tout enkonvenyans yo.
Ou ka jwenn enstriksyon ki sanble sou entènèt. Apre yo tout, mwen finalman jwenn li. Se vre, pa nan yon sèl kote, pa san èd nan StackOverflow, ak diman an Ris. Mwen te soufri. Se poutèt sa mwen deside senplifye lavi ou.
Nou pral fè tout bagay ak yon ti gout sou DigitalOcean. Sa a, nan kou, pa nesesè; chwazi nenpòt hosting. Lè ou rive nan yon sèvè k ap travay sou Ubuntu, tounen. Pou moun ki toujou deside fè li sou DigitalOcean, pral gen plis konsèy sou konfigirasyon yon domèn. Epi
Tout etap espesifik DigitalOcean yo pral bay nan nòt anba tankou sa yo.
Ann kòmanse.
TL;DR (kòmand debaz sèlman)
Kreye yon itilizatè
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Ajoute SSH sou li
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Mete kle piblik la
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
Miskl
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/<Ваш домен>
Konfigirasyon debaz:
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;
}
}
Se sèlman HTTP konfigirasyon pou 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 anviwònman pou 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
T
-
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
Kreye yon ti gout sou DigitalOcean epi anrejistre yon nouvo kle SSH
Mwen vrèman kwè ke ou pral konnen ki jan yo enskri ak DigitalOcean tèt ou. Li pa fasil, ak anpil verifikasyon ak lòt bagay. Si ou toujou ap jwenn yon erè rezo lè w verifye w ap itilize dokiman, eseye fè tout bagay atravè yon VPN, li ta dwe ede.
Nan meni ki anlè a, klike sou Kreye->Ti gout. Chwazi Ubentu.
Le pli vit ke ou anrejistre, w ap resevwa $100 nan kont ou. Men, pa twonpe. Ou gen sèlman 60 jou pou pase l. Epi sa a se yon ti kras. Ou ka, tankou mwen, vle sèvi ak yon plan ki pi chè, pou pita, lè lajan reyèl la kòmanse koule, ou ka chanje nan yon sèl ki pi bon mache. Mwen pral di ou imedyatman ke li pa pral travay. Ou ka ogmante li, men ou pa ka diminye li. Se konsa, li ale. mwen chwazi Estanda->$5.
Mwen chwazi rejyon ki pi pre nou an Frankfurt. Rezo VPC->default-fra1
Nou pral imedyatman fè otantifikasyon atravè SSH. Klike sou Nouvo kle SSH. Si ou pa gen SSH, gen enstriksyon trè senp sou bò dwat la. Louvri yon tèminal bash epi kole
ssh-keygen
. Lè sa a, nou ale nan dosye a ak kle piblik la/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(oswa tou senplemancat ~/.ssh/id_rsa.pub
), kopye sa a epi kole li nan fenèt ki sou bò gòch la. Nenpòt non.Nou vini ak yon non host pou gout la.
Pouse Kreye ti gout
Kreye yon nouvo itilizatè
ssh root@[IP-адрес вашего дроплета]
- Èske w sèten ou vle kontinye konekte (wi/non/[anprent])?
yes
- Antre modpas SSH ou
- Kreye yon itilizatè laravel:
adduser laravel
- Antre modpas ou ak lòt enfòmasyon (mwen sèlman antre non konplè)
- Ajoute itilizatè a nan gwoup sudo a:
usermod -aG sudo laravel
SSH pou nouvo itilizatè
- Chanje nan nouvo itilizatè a:
su laravel
Nou fè tout aksyon pi lwen, jouk nan fen atik la, sou non itilizatè laravel la. Se poutèt sa, si ou toudenkou koupe, re-konekte epi antre su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Nou louvri dosye a nan Vim. Si ou pa abitye ak li nan tout, ou ka travay nan Nano, dwa ou.
Kòmandman Vim ki pi fondamantal yo
Pou w ka itilize editè Vim nan tout atik la, ou jis bezwen konnen sa ki annapre yo.
- Vim gen diferan mòd: mòd nòmal, kote ou antre kòmandman epi chwazi mòd ak lòt moun.
- Pou sòti nan nenpòt ki mòd epi retounen nan mòd nòmal, jis peze
Esc
- Deplase: ou ka jis itilize flèch
- Sòti san yo pa sove
<Normal mode>
::q!
- Sòti epi sove
<Normal mode>
::wq
- Chanje nan mòd antre tèks
<Normal mode>
:i
(ki soti nan angle a. Antre)
- Nou mete kle piblik nou an (sa nou te fè pi wo a)
- Nou pwoteje kont chanjman:
chmod 600 ~/.ssh/authorized_keys
Enstale yon firewall
- Ann gade tout paramèt ki disponib yo:
sudo ufw app list
- Pèmèt OpenSSH (sinon li pral fèmen nou):
sudo ufw allow OpenSSH
- Ann lanse firewall la:
sudo ufw enable
,y
- Nou tcheke:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Tout bagay anfòm.
Enstale Nginx
Pandan enstalasyon yo pral pafwa mande w "Èske w sèten?" Repons y
(Oke, sèlman si ou sèten).
sudo apt update
sudo apt install nginx
Ajoute Nginx nan anviwònman firewall yo
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)
Ale nan IP ou. Si tout bagay ale byen, ou ta dwe wè sa ki annapre yo.
Enstale MySQL
sudo apt install mysql-server
- Lanse yon script pwoteksyon otomatik
sudo mysql_secure_installation
Reponn kesyon yo poze yo. Si ou pa konnen kisa pou reponn, men kèk opsyon sijere:
-
Valide modpas plugin -
N
-
Retire itilizatè anonim yo? —
Y
-
Anpeche koneksyon rasin adistans? —
N
-
Retire baz done tès ak aksè a li? —
N
-
Rechaje tab privilèj kounye a? —
Y
-
Ann ale nan MySQL:
sudo mysql
-
Ann gade metòd aksè yo:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Mete yon modpas pou rasin:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Ann gade metòd aksè yo ankò:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Aplike chanjman yo epi sòti MySQL:
FLUSH PRIVILEGES;
иexit
-
Koulye a, konekte nan MySQL ou bezwen itilize
mysql -u root -p
epi antre modpas la
Enstale PHP
Ann sèvi ak yon depo twazyèm pati soti nan
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
Koulye a, ann chwazi. Pou Laravel 7, ou ka chwazi PHP 7.3 oswa 7.4. Sèl diferans lan pral nan nimewo 3 ak 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 Manadjè Pwosesis (fpm) travay ak demann PHP. mysql, nan kou, pou travay ak MySQL.
Depi koulye a mwen pral fè tout bagay sou 7.4.
Mete kanpe Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
Olye de "<Domèn ou>" antre nan domèn nan (pa egzanp, mysite.ru
) ke ou vle itilize alavni. Si ou poko genyen youn, ekri nenpòt, epi jis repete etap sa yo nan chapit sa a pou domèn ou a lè ou chwazi li.
Antre sa ki annapre yo:
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;
}
}
Si ou te chwazi vèsyon 7.3 pito php7.4-fpm.sock
ekri nan php7.4-fpm.sock
.
Koute pò 80 sou server_name
lè nou rive nan demann rasin lan /var/www/html
pran fichye endèks la. Si apre server_name
Gen yon bagay, nap chèche yon dosye konsa. Si nou pa jwenn li, nou jete 404. Si li fini ak .php
, kouri nan fpm
... Si genyen .ht
, entèdi (403).
- Fè yon lyen soti nan
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Retire lyen pou
default
:sudo unlink /etc/nginx/sites-enabled/default
- Tcheke pou erè:
sudo nginx -t
- Rdemare:
sudo systemctl reload nginx
Tcheke travay la:
sudo vim /var/www/html/info.php
- Nou ekri:
<?php phpinfo();
- Ann ale nan
<Ваш IP>/info.php
Ou ta dwe wè yon bagay tankou sa a:
Koulye a, yo ka efase dosye sa a: sudo rm /var/www/html/info.php
Enstale 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
-
Ann ale nan MySQL:
mysql -u root -p
-
Kreye yon baz done ak non an laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Nou bay aksè rasin nan laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Kreye yon katab pou pwojè a:
sudo mkdir -p <Имя проекта>
-
Nou bay itilizatè a laravel dwa pou pwojè a:
sudo chown laravel:laravel <Имя проекта>
Apre sa, ou bezwen transfere pwojè a. Pou egzanp, klonaj soti nan Github.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Li vo konsidere ke si ou pa t 'sove fichye estatik (pa egzanp, soti nan /public
) sou Github, Lè sa a, natirèlman ou pa pral genyen yo. Pou egzanp, mwen te kreye yon fil separe pou rezoud sa a deploy
, ki soti nan ki mwen deja klonaj: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Enstale depandans:
composer install
- Kreye .env:
vim .env
Vèsyon debaz la sanble sa a:
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>
Si w kopye .env ou a, ranplase APP_ENV ak pwodiksyon, APP_DEBUG ak fo epi antre nan paramèt ki kòrèk pou MySQL.
- Migrasyon baz done a:
php artisan migrate
- Jenere kòd la:
php artisan key:generate
Chanje otorizasyon:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Dènye bagay ki rete a se rekonfigire Nginx pou 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;
}
}
Tankou dènye fwa, si ou te chwazi vèsyon 7.3 pito php7.4-fpm.sock
ekri nan php7.4-fpm.sock
.
Mete kanpe yon domèn sou DigitalOcean
Tout bagay aktyèlman trè senp. Ou achte yon domèn (nenpòt kote), chanje nan DigitalOcean nan Kreye->Domèn/DNS... Nan jaden Ajoute yon domèn ou antre nan domèn sa a epi klike sou ajoute. Lè sa a, ale nan anviwònman yo domèn ak nan jaden an NON LAME antre @. Chwazi yon pwojè epi klike sou Kreye dosye.
Koulye a, ale nan sit la kote ou te achte domèn nan, jwenn "DNS Servers" la (oswa yon bagay ki sanble) epi antre nan sèvè DigitalOcean yo (sètadins1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Koulye a, ou bezwen tann yon ti kras (oswa anpil) jiskaske anviwònman sa yo aksepte. Pare!
Pwoblèm nan sèlman se ke sit ou a ap louvri sèlman kòm HTTP. Pou gen HTTPS, ale nan pwochen pati a.
Mete kanpe HTTPS
Enstale certbot epi pase li non domèn (fòma mysite.ru
) ak non domèn ak 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.<Ваш домен>
Koulye a, ou bezwen reconfigure Nginx (pa bliye ranplase valè ou):
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;
}
}
Mwen panse ou deja konprann sa ki bezwen chanje pou PHP 7.3.
Isit la, an reyalite, tout bagay se senp. Nou senpleman redireksyon tout demann soti nan HTTP (pò 80) nan HTTPS (pò 443). Epi la nou fè tout bagay menm jan ak anvan, men ak chifreman.
Tout sa ki rete se mete otorizasyon yo nan firewall la:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Koulye a, tout bagay ta dwe travay jan li ta dwe.
[Avanse] Enstale Node.js
Si ou toudenkou bezwen kouri kòmand npm dirèkteman sou sèvè a, ou bezwen enstale Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Sa a, mwen te kanpe nan etap sa a. An prensip, mwen satisfè ak rezilta a. Petèt mwen pral chanje soti nan DigitalOcean yon kote ki pi pre Larisi ak pi bon mache. Men, kòm mwen te deja ale nan tout jij yo verifikasyon sou sit la ak fè tout bagay la, mwen te montre yo pa egzanp. Anplis de sa, $100 kòmanse yo se yon tranplen ekselan pou fòmasyon.
PS Mèsi espesyal pou otè a
PPS Si w ta rive yon enjenyè tèt ki panse nan kòmandman bash, tanpri pa jije sevè. Ou ka jwenn atik sa a nan yon nivo ki ba, men mwen ta byen kontan jwenn youn lè mwen te bezwen li. Si gen sijesyon pou amelyorasyon, mwen tout pou li.
Sous: www.habr.com