
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 droplet nant'à DigitalOcean. Questu hè, benintesa, facultativu; sentitevi liberi di sceglie qualsiasi hosting. Ghjunghjerete à u servitore di pruduzzione nant'à Ubuntu, vultate. Per quelli chì decidenu sempre d'utilizà DigitalOcean, ci saranu più cunsiglii nantu à a creazione di un duminiu. È dinò .
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 laravelusermod -aG sudo laravelsu laravel
Aghjunghjite SSH à questu
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Inserite a chjave publica
chmod 600 ~/.ssh/authorized_keys
Firewall
sudo ufw allow OpenSSHsudo ufw enablesudo ufw status
Nginx
sudo apt updatesudo apt install -y nginxsudo ufw allow 'Nginx HTTP'sudo ufw status
MySQL
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 update7.3:
sudo apt install -y php7.3-fpm php7.3-mysql7.4:
sudo apt install -y php7.4-fpm php7.4-mysqlsudo 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/defaultsudo nginx -tsudo systemctl reload nginx
Laravel
7.3:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip7.4:
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
HTTPS
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
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 ~/.sshchmod 700 ~/.sshvim ~/.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 updatesudo apt install nginx
Aghjunghjite Nginx à i paràmetri di u firewall
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)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 -
NEliminate l'utilizatori anonimi? —
YDisallow login root remotamente? —
NEliminate a basa di dati di prova è accede à questu? —
NRicaricate e tabelle di privilegi avà? —
YAndemu à MySQL:
sudo mysqlFighjemu 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;иexitAvà, 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 updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo 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_namequandu 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 unzip7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzipAndemu à MySQL:
mysql -u root -pCrea 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;exitcd /var/www/htmlCrea 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 storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -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/certbotsudo apt install python-certbot-nginxsudo 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 -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo 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 updatesudo apt install -y nodejs npmnodejs -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 , chì hà servitu com'è a basa per tutte l'azzioni sopra. In certi casi ùn hè micca travagliatu per Laravel 7, aghju riparatu.
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
