Aghju decisu di fà a mo cartera cù Laravel 7. Per quessa, a pagina principale seria una pagina di destinazione, è tutte l'infurmazioni nantu à questu puderia esse cambiatu cù u panel admin. Ùn hè micca u puntu. Hè ghjuntu à a distribuzione. Aghju trovu un paru di boni tutoriali nantu à cumu fà questu nantu à un servitore cumpletu cù tutti i prublemi. Ùn sò micca assai forte in u dispiegamentu; Sò in generale più davanti à stack pienu. È, se possu ancu scrive è pruvà in PHP, allora prima di gestisce u servitore, etc. Ùn sò ancu crisciutu. Ma aghju avutu à capisce.
Avà avemu da passà per tutti i passi, cuminciendu cù u lanciu via SSH è finiscinu cù u situ di travagliu. Pruvaremu di evità tutte e trappule.
Pudete esse capace di truvà struzzioni simili in linea. Dopu tuttu, aghju finalmente trovu. True, micca in un locu, micca senza l'aiutu di StackOverflow, è pocu in russo. Aghju patitu. Hè per quessa ch'e aghju decisu di simplificà a vostra vita.
Faremu tuttu cù una goccia nantu à DigitalOcean. Questu, sicuru, ùn hè micca necessariu; sceglite qualsiasi hosting. Quandu ghjunghje à un servitore chì travaglia in Ubuntu, torna. Per quelli chì decidenu ancu di fà in DigitalOcean, ci saranu più cunsiglii per a creazione di un duminiu. È
Tutti i passi specifichi di DigitalOcean seranu datu in note à piè di pagina cum'è queste.
Cuminciamu.
TL; DR (solu cumandamenti basi)
Crea un utilizatore
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Aghjunghjite SSH à questu
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Inserite a chjave publica
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/<Ваш домен>
Configurazione di basa:
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;
}
}
Solu l'installazione HTTP per 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;
}
}
Configurazione HTTPS per 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
Crea una goccia in DigitalOcean è registrate una nova chjave SSH
Credu veramente chì scoprerete cumu registrà cù DigitalOcean stessu. Ùn hè micca faciule, cù assai verificazioni è altre cose. Sè avete sempre un errore di rete quandu verificate cù documenti, pruvate à fà tuttu per una VPN, duverebbe aiutà.
In u menù in cima, cliccate creà->Gucciuletti. Sceglite Ubuntu.
Appena vi registrate, riceverete $ 100 à u vostru contu. Ma ùn vi ingannatu. Avete solu 60 ghjorni per passà. È questu hè assai pocu. Puderete, cum'è mè, vulete usà un pianu più caru, perchè più tardi, quandu i soldi veri cumincianu à flussu, pudete cambià à un più prezzu. Vi dicu subitu chì ùn hà micca travagliatu. Pudete aumentà, ma ùn pudete micca diminuisce. Allora va. I sceglie Standard->$5.
Sceltu a regione più vicinu à noi Francuforti. Rete VPC->default-fra1
Eseguiremu immediatamente l'autentificazione via SSH. Cliccate Nova Chjave SSH. Se ùn avete micca SSH, ci sò struzzioni assai simplici nantu à a diritta. Aprite un terminal bash è incolla
ssh-keygen
. Allora andemu à u schedariu cù a chjave publica/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(o simpliciamentecat ~/.ssh/id_rsa.pub
), copià u cuntenutu è incollà in a finestra di manca. Qualchese nome.Avemu un nome d'ospite per a goccia.
Pulsà Crea Droplet
Crea un novu utilizatore
ssh root@[IP-адрес вашего дроплета]
- Sè sicuru chì vulete cuntinuà a cunnessione (sì/no/[impronta digitale])?
yes
- Inserite a vostra password SSH
- Crea un utilizatore laravellu:
adduser laravel
- Inserite a vostra password è altre informazioni (intru solu u nome cumpletu)
- Aghjunghjite l'utilizatore à u gruppu sudo:
usermod -aG sudo laravel
SSH per u novu utilizatore
- Cambia à u novu utilizatore:
su laravel
Facemu tutte l'azzioni più in più, finu à a fine di l'articulu, in nome di l'utilizatore laravel. Dunque, sè vo site interrotta subitu, re-login è entre su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Avemu apertu u schedariu in Vim. Se ùn site micca familiarizatu cù questu, pudete travaglià in Nano, u vostru dirittu.
I cumandamenti più basi di Vim
Per utilizà l'editore Vim in tuttu l'articulu, avete bisognu di cunnosce i seguenti.
- Vim hà modi diffirenti: Modu normale, in quale entre cumandamenti è selezziunate modi è altri.
- Per abbandunà ogni modu è vultà à u modu normale, basta à appughjà
Esc
- Move around: pudete solu aduprà frecce
- Esci senza salvà
<Normal mode>
::q!
- Esci è salvà
<Normal mode>
::wq
- Cambia à u modu di input di testu
<Normal mode>
:i
(da l'inglese. inserisce)
- Inseremu a nostra chjave publica (chì avemu fattu sopra)
- Prutegemu contru i cambiamenti:
chmod 600 ~/.ssh/authorized_keys
Stallà un firewall
- Fighjemu tutti i paràmetri dispunibili:
sudo ufw app list
- Permette OpenSSH (altrimenti ci bloccherà):
sudo ufw allow OpenSSH
- Lancemu u firewall:
sudo ufw enable
,y
- Verificate:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Tuttu hè bè.
Installazione di Nginx
Durante a stallazione vi sarà qualchì volta dumandatu "Sè sicuru?" Rispondi y
(bene, solu s'è tù sì sicuru).
sudo apt update
sudo apt install nginx
Aghjunghjite Nginx à i paràmetri di u 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)
Andà à u vostru IP. Se tuttu va bè, duvete vede i seguenti.
Installazione di MySQL
sudo apt install mysql-server
- Lanciari un script di prutezzione automatica
sudo mysql_secure_installation
Rispondi à e dumande fatte. Se ùn sapete micca ciò chì risponde, eccu alcune opzioni suggerite:
-
Validate u plugin di password -
N
-
Eliminate l'utilizatori anonimi? —
Y
-
Disallow login root remotamente? —
N
-
Eliminate a basa di dati di prova è accede à questu? —
N
-
Ricaricate e tabelle di privilegi avà? —
Y
-
Andemu à MySQL:
sudo mysql
-
Fighjemu i metudi di accessu:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Stabilite una password per root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Fighjemu di novu i metudi di accessu:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Applica i cambiamenti è esce da MySQL:
FLUSH PRIVILEGES;
иexit
-
Avà, per accede à MySQL avete bisognu di utilizà
mysql -u root -p
è entre a password
Installazione di PHP
Utilizemu un repository di terzu partitu da
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
Avà scegliemu. Per Laravel 7, pudete sceglie PHP 7.3 o 7.4. L'unica diferenza serà in i numeri 3 è 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) travaglia cù richieste PHP. mysql, sicuru, per travaglià cù MySQL.
Da avà da fà tuttu nantu à 7.4.
Configurazione di Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
Invece di "<U vostru duminiu>" entre in u duminiu (per esempiu, mysite.ru
) chì vulete usà in u futuru. Se ùn avete micca unu, scrivite qualcunu, poi ripetite i passi in stu capitulu per u vostru duminiu quandu selezziunate.
Inserite i seguenti:
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;
}
}
Sè avete sceltu a versione 7.3 invece php7.4-fpm.sock
scrive in php7.4-fpm.sock
.
Ascolta u portu 80 server_name
quandu ghjunghjemu à a dumanda di a radica /var/www/html
piglià u schedariu index. Se dopu server_name
Ci hè qualcosa, circhemu un tali schedariu. S'ellu ùn truvamu micca, scacciemu 404. S'ellu finisce cù .php
, scorri fpm
... S'ellu ci hè .ht
, pruibisce (403).
- Facendu un ligame da
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Eliminà u ligame à
default
:sudo unlink /etc/nginx/sites-enabled/default
- Verificate l'errori:
sudo nginx -t
- Reboot:
sudo systemctl reload nginx
Verificazione di u travagliu:
sudo vim /var/www/html/info.php
- Scrivemu:
<?php phpinfo();
- Andemu à
<Ваш IP>/info.php
Duvete vede qualcosa cum'è questu:
Avà stu schedariu pò esse sguassatu: sudo rm /var/www/html/info.php
Installa 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
-
Andemu à MySQL:
mysql -u root -p
-
Crea una basa di dati cù u nome laravellu:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Avemu furnisce l'accessu root à laravellu:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Crea un cartulare per u prugettu:
sudo mkdir -p <Имя проекта>
-
Avemu furnisce l'utilizatori laravellu diritti à u prugettu:
sudo chown laravel:laravel <Имя проекта>
Dopu avete bisognu di trasfiriri u prugettu. Per esempiu, cloning da Github.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Hè vale a pena cunsiderà chì se ùn avete micca salvate i fugliali statichi (per esempiu, da /public
) in Github, allora naturalmente ùn l'avete micca. Per esempiu, aghju creatu un filu separatu per risolve questu deploy
, da quale aghju digià clonatu: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Installazione di dipendenze:
composer install
- Crea .env:
vim .env
A versione basica di questu hè cusì:
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>
Se copiate u vostru .env, rimpiazzà APP_ENV cù a pruduzzione, APP_DEBUG cù false è entre in i paràmetri curretti per MySQL.
- Migrazione di a basa di dati:
php artisan migrate
- Generazione di u codice:
php artisan key:generate
Cambia i permessi:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
L'ultima cosa chì resta hè di cunfigurà Nginx per 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;
}
}
Cum'è l'ultima volta, se sceglite a versione 7.3 invece php7.4-fpm.sock
scrive in php7.4-fpm.sock
.
Configurazione di un duminiu nantu à DigitalOcean
Tuttu hè veramente assai simplice. Cumprate un duminiu (in ogni locu), cambiate à DigitalOcean à creà->Duminii/DNS... In campu Aghjunghje un duminiu entre in stu duminiu è cliccate aghjunghje. Allora andate à i paràmetri di u duminiu è à u campu NOME entre @. Sceglite un prughjettu è cliccate Crea un record.
Avà andate à u situ induve avete compru u duminiu, truvate "Servitori DNS" quì (o qualcosa simili) è entre in i servitori DigitalOcean (vale à dì.ns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Avà avete bisognu à aspittà un pocu (o assai) finu à chì questi paràmetri sò accettati. Pronti !
L'unicu prublema hè chì u vostru situ si apre solu cum'è HTTP. Per avè HTTPS, andate à a parti dopu.
Configurazione di HTTPS
Installa certbot è trasmette u nome di duminiu (formatu mysite.ru
) è u nome di duminiu cù 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.<Ваш домен>
Avà avete bisognu di cunfigurà Nginx (ùn vi scurdate di rimpiazzà i vostri valori):
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;
}
}
Pensu chì avete digià capitu ciò chì deve esse cambiatu per PHP 7.3.
Quì, in fatti, tuttu hè simplice. Semu simpricimenti redirect tutte e dumande da HTTP (port 80) à HTTPS (port 443). E ci facemu tuttu u listessu cum'è prima, ma cù criptografia.
Tuttu ciò chì resta hè di stabilisce i permessi in u firewall:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Avà tuttu deve travaglià cum'è deve.
[Avanzatu] Installazione di Node.js
Se di colpu avete bisognu di eseguisce cumandamenti npm direttamente nantu à u servitore, avete bisognu di installà Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Eccu, aghju firmatu in questu stadiu. In principiu, sò cuntentu di u risultatu. Forse passeraghju da DigitalOcean in un locu più vicinu à a Russia è più prezzu. Ma siccomu avia digià passatu tutte e volte di verificazione nantu à u situ è aghju fattu tuttu quì, aghju dimustratu per esempiu. Inoltre, u so $ 100 di partenza hè un eccellente trampolinu per a furmazione.
PS Un ringraziu speciale à l'autore
PPS Se vi capita di esse un ingegnere di punta chì pensa in i cumandamenti bash, per piacè ùn ghjudicà micca duramente. Puderete truvà questu articulu per esse di un livellu bassu, ma aghju avutu cuntentu di truvà unu quandu aghju bisognu. Se ci sò suggerimenti per migliurà, sò tuttu per questu.
Source: www.habr.com