Implementazione di una applicazione à Laravel 7 in Ubuntu è Nginx

Implementazione di una applicazione à Laravel 7 in Ubuntu è Nginx

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. È $ 100 ligame di riferimentu.

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 simpliciamente cat ~/.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.

Implementazione di una applicazione à Laravel 7 in Ubuntu è Nginx

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 Ondrej Surý

  • 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_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:

Implementazione di una applicazione à Laravel 7 in Ubuntu è Nginx

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 stu sguardu, 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

Add a comment