Rakenduse juurutamine Ubuntu ja Nginxi Laravel 7-le

Rakenduse juurutamine Ubuntu ja Nginxi Laravel 7-le

Otsustasin oma portfoolio teha Laravel 7 abil. Et pealeheks oleks maandumisleht ja kogu sellel olevat infot saaks muuta administraatori paneeli abil. Mitte asja mõte. See jõudis kasutuselevõtuni. Leidsin paar head õpetust, kuidas seda kõigi hädadega täisväärtuslikus serveris teha. Ma ei ole juurutamisel eriti tugev; üldiselt olen rohkem ees kui täispinn. Ja kui ikka PHP-s kirjutada ja testida saan, siis enne serveri haldamist jne. Ma pole veel suureks saanud. Aga ma pidin selle välja mõtlema.

Nüüd läbime kõik sammud, alustades SSH kaudu käivitamisest ja lõpetades töökohaga. Püüame vältida kõiki lõkse.

Võimalik, et leiate Internetist sarnaseid juhiseid. Ju ma selle lõpuks leidsin. Tõsi, mitte ühes kohas, mitte ilma StackOverflow abita ja vaevalt ka vene keeles. ma kannatasin. Sellepärast otsustasin teie elu lihtsustada.

Teeme DigitalOceanis kõike tilgakesega. See pole muidugi vajalik; valige mis tahes hostimine. Kui jõuate Ubuntu töötava serverini, tulge tagasi. Neile, kes otsustavad seda siiski DigitalOceanis teha, on veel näpunäiteid domeeni seadistamiseks. Ja $100 suunamislink.

Kõik DigitalOceani spetsiifilised sammud esitatakse sellistes joonealustes märkustes.

Alustame.

TL;DR (ainult põhikäsud)

Looge kasutaja

  • ssh root@[IP-адрес вашего дроплета]
  • adduser laravel
  • usermod -aG sudo laravel
  • su laravel

Lisage sellele SSH

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Sisestage avalik võti
  • chmod 600 ~/.ssh/authorized_keys

Tulemüür

  • 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/<Ваш домен>

Põhiseade:

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;
        }
}

Ainult HTTP-seadistus Laraveli jaoks:

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-i seadistus Laraveli jaoks:

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

Looge DigitalOceanis piisk ja registreerige uus SSH-võti

Usun tõesti, et mõtlete ise välja, kuidas DigitalOceanis registreeruda. See pole lihtne, palju kontrollimisi ja muid asju. Kui teil tekib dokumentide abil kontrollimisel pidevalt võrgutõrge, proovige kõike teha VPN-i kaudu, see peaks aitama.

Klõpsake ülaosas menüüs Looma->Tilgad. Vali Ubuntu.

Niipea kui registreerute, saate oma kontole 100 dollarit. Kuid ärge laske end petta. Teil on selle kulutamiseks aega vaid 60 päeva. Ja seda on väga vähe. Võib-olla soovite, nagu minagi, kasutada kallimat plaani, et hiljem, kui päris raha voolama hakkab, saaksite vahetada odavama vastu. Ma ütlen teile kohe, et see ei tööta. Saate seda suurendada, kuid te ei saa seda vähendada. Ja nii see läheb. ma valin Standard->$5.

Valin meile lähima piirkonna Frankfurt. VPC võrk->default-fra1

Teostame kohe autentimise SSH kaudu. Klõpsake Uus SSH-võti. Kui teil pole SSH-d, on paremal väga lihtsad juhised. Avage bashi terminal ja kleepige ssh-keygen. Seejärel läheme avaliku võtmega faili juurde /Users/<Ваше имя пользователя>/.ssh/id_rsa.pub (või lihtsalt cat ~/.ssh/id_rsa.pub), kopeerige sisu ja kleepige see vasakpoolsesse aknasse. Ükskõik milline nimi.

Me mõtleme tilgale välja hostinime.

Vajuta siia Loo tilk

Looge uus kasutaja

  • ssh root@[IP-адрес вашего дроплета]
  • Kas olete kindel, et soovite ühenduse loomist jätkata (jah/ei/[sõrmejälg])? yes
  • Sisestage oma SSH parool
  • Looge kasutaja laravel: adduser laravel
  • Sisestage oma parool ja muu teave (ma sisestan ainult täisnime)
  • Lisage kasutaja sudo rühma: usermod -aG sudo laravel

SSH uuele kasutajale

  • Uuele kasutajale lülitumine: su laravel

Kõik toimingud teostame edaspidi kuni artikli lõpuni laraveli kasutaja nimel. Seetõttu, kui teid ootamatult katkestatakse, logige uuesti sisse ja sisestage su laravel

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys

Avasime faili Vimis. Kui te pole sellega üldse tuttav, võite töötada Nanos, teie õigus.

Kõige elementaarsemad Vimi käsud

Vimi redaktori kasutamiseks kogu artiklis peate lihtsalt teadma järgmist.

  • Vimil on erinevad režiimid: Tavarežiim, kus sisestad käske ja valid režiime ja muud.
  • Mis tahes režiimist väljumiseks ja tavarežiimi naasmiseks vajutage lihtsalt Esc
  • Liikuge ringi: saate kasutada lihtsalt nooli
  • Välju salvestamata <Normal mode>: :q!
  • Välju ja salvesta <Normal mode>: :wq
  • Lülituge tekstisisestusrežiimile <Normal mode>: i (inglise keelest. sisestada)
  • Sisestame oma avaliku võtme (mida tegime eespool)
  • Kaitseme muudatuste eest: chmod 600 ~/.ssh/authorized_keys

Tulemüüri paigaldamine

  • Vaatame kõiki saadaolevaid seadeid: sudo ufw app list
  • Luba OpenSSH (muidu lukustab see meid): sudo ufw allow OpenSSH
  • Käivitame tulemüüri: sudo ufw enable, y
  • Kontrollime: sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Kõik on korras.

Nginxi installimine

Installimise ajal küsitakse mõnikord "Kas olete kindel?" Vastus y (ainult siis, kui olete kindel).

  • sudo apt update
  • sudo apt install nginx

Nginxi lisamine tulemüüri sätetesse

  • 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)

Minge oma IP-le. Kui kõik läheb hästi, peaksite nägema järgmist.

Rakenduse juurutamine Ubuntu ja Nginxi Laravel 7-le

MySQL-i installimine

  • sudo apt install mysql-server
  • Automaatse kaitseskripti käivitamine sudo mysql_secure_installation

Vastake esitatud küsimustele. Kui te ei tea, mida vastata, on siin mõned soovitatud võimalused.

  • Kinnitage parooli plugin - N

  • Kas eemaldada anonüümsed kasutajad? — Y

  • Kas keelata juurjuurde sisselogimine eemalt? — N

  • Kas eemaldada testandmebaas ja sellele juurdepääs? — N

  • Kas laadida privileegitabelid kohe uuesti? — Y

  • Läheme MySQL-i: sudo mysql

  • Vaatame juurdepääsu meetodeid: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Seadke root jaoks parool: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';

  • Vaatame uuesti juurdepääsumeetodeid: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Rakendage muudatused ja väljuge MySQL-ist: FLUSH PRIVILEGES; и exit

  • Nüüd peate MySQL-i sisselogimiseks kasutama mysql -u root -p ja sisestage parool

PHP installimine

Kasutame kolmanda osapoole hoidlat 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

Nüüd valime. Laravel 7 jaoks saate valida PHP 7.3 või 7.4. Ainus erinevus on numbrites 3 ja 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 protsessihaldur (fpm) töötab PHP päringutega. mysql muidugi MySQL-iga töötamiseks.

Edaspidi teen kõik 7.4.

Nginxi seadistamine

  • sudo vim /etc/nginx/sites-available/<Ваш домен>

Sisestage "<Teie domeen>" asemel domeen (näiteks mysite.ru), mida soovite tulevikus kasutada. Kui teil seda veel pole, kirjutage see üles ja korrake selle valimisel oma domeeni jaoks selles peatükis toodud samme.

Sisestage järgmised:

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;
        }
}

Kui valisite selle asemel versiooni 7.3 php7.4-fpm.sock sisse kirjutama php7.4-fpm.sock.

Kuulake port 80 sisse server_namekui jõuame juurpäringuni /var/www/html võtke registrifail. Kui pärast server_name Midagi on, me otsime sellist faili. Kui me seda ei leia, viskame välja 404. Kui see lõpeb .php, jookse läbi fpm... Kui seal on .ht, keelata (403).

  • Lingi tegemine aadressilt sites-available в sites-enabled: sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
  • Linki eemaldamine default: sudo unlink /etc/nginx/sites-enabled/default
  • Vigade kontrollimine: sudo nginx -t
  • Taaskäivitamine: sudo systemctl reload nginx

Töö kontrollimine:

  • sudo vim /var/www/html/info.php
  • Me kirjutame: <?php phpinfo();
  • Mine <Ваш IP>/info.php

Peaksite nägema midagi sellist:

Rakenduse juurutamine Ubuntu ja Nginxi Laravel 7-le

Nüüd saab selle faili kustutada: sudo rm /var/www/html/info.php

Installige 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

  • Läheme MySQL-i: mysql -u root -p

  • Looge andmebaas nimega laravel: CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • Pakume juurjuurdepääsu laravel: GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';

  • FLUSH PRIVILEGES;

  • exit

  • cd /var/www/html

  • Looge projekti jaoks kaust: sudo mkdir -p <Имя проекта>

  • Pakume kasutajale laravel õigused projektile: sudo chown laravel:laravel <Имя проекта>

Järgmisena peate projekti üle kandma. Näiteks kloonimine Githubist.

  • cd ./<Имя проекта>
  • git clone <ссылка на проект> .

Tasub kaaluda, et kui te ei salvestanud staatilisi faile (näiteks alates /public) Githubis, siis loomulikult teil neid pole. Näiteks lõin selle lahendamiseks eraldi lõime deploy, millest ma juba kloonisin: git clone -b <имя ветки> --single-branch <ссылка на проект> ..

  • Sõltuvuste installimine: composer install
  • Looge .env: vim .env

Selle põhiversioon näeb välja selline:

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>

Kui kopeerite oma .env-i, asendage APP_ENV tootmisega, APP_DEBUG valega ja sisestage MySQL-i õiged sätted.

  • Andmebaasi migreerimine: php artisan migrate
  • Koodi genereerimine: php artisan key:generate

Lubade muutmine:

  • sudo chown -R $USER:www-data storage
  • sudo chown -R $USER:www-data bootstrap/cache
  • chmod -R 775 storage
  • chmod -R 775 bootstrap/cache

Viimane asi, mis jääb, on Nginx Laraveli jaoks uuesti konfigureerida:

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;
    }
}

Nagu eelmisel korral, kui valisite selle asemel versiooni 7.3 php7.4-fpm.sock sisse kirjutama php7.4-fpm.sock.

Domeeni seadistamine teenuses DigitalOcean

Kõik on tegelikult väga lihtne. Kui ostate domeeni (ükskõik kus), lülituge DigitalOceanile aadressil Looma->Domeenid/DNS... Väljas Lisage domeen sisestate selle domeeni ja klõpsake nuppu Lisa. Seejärel minge domeeni seadetesse ja väljale HOSTNAME sisenema @. Valige projekt ja klõpsake Loo rekord.
Nüüd minge saidile, kust domeeni ostsite, leidke sealt "DNS-serverid" (või midagi sarnast) ja sisestage DigitalOceani serverid (nimelt ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Nüüd peate natuke (või palju) ootama, kuni need seaded aktsepteeritakse. Valmis!
Ainus probleem on see, et teie sait avaneb ainult HTTP-na. HTTPS-i kasutamiseks liikuge järgmise osa juurde.

HTTPS-i seadistamine

Installige certbot ja edastage sellele domeeninimi (vorming mysite.ru) ja domeeninimi koos www-ga (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.<Ваш домен>

Nüüd peate Nginxi uuesti konfigureerima (ärge unustage oma väärtusi asendada):

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;
    }
}

Arvan, et saate juba aru, mida tuleb PHP 7.3 jaoks muuta.

Siin on tegelikult kõik lihtne. Me lihtsalt suuname kõik päringud HTTP-lt (port 80) ümber HTTPS-i (port 443). Ja seal teeme kõike samamoodi nagu varem, kuid krüptimisega.

Jääb üle vaid tulemüüris õigused määrata:

  • sudo nginx -t
  • sudo ufw app list
  • sudo ufw allow 'Nginx HTTPS'
  • sudo ufw status
  • sudo systemctl reload nginx

Nüüd peaks kõik toimima nii nagu peab.

[Täpsemalt] Node.js installimine

Kui teil on ootamatult vaja npm-käske otse serveris käivitada, peate installima Node.js-i.

  • sudo apt update
  • sudo apt install -y nodejs npm
  • nodejs -v

See on kõik, ma peatusin selles etapis. Põhimõtteliselt olen tulemusega rahul. Võib-olla vahetan DigitalOceanilt kuskil Venemaale lähemal ja odavamalt. Aga kuna olin saidil kõik kontrollringid juba läbinud ja seal kõik ära teinud, siis näitasin neile eeskuju. Lisaks on nende algav 100 dollarit suurepärane hüppelaud treenimiseks.

PS Eriline tänu autorile see sisu, mis oli kõigi ülaltoodud toimingute aluseks. Mõnel juhul ei tööta see Laravel 7 jaoks, parandasin selle.

PPS Kui juhtute olema tippinsener, kes mõtleb bash-käskude järgi, ärge andke karmi hinnangut. Võib-olla leiate, et see artikkel on madala tasemega, kuid ma oleksin hea meelega selle leidnud, kui oleksin seda vajanud. Kui on parendusettepanekuid, siis olen selle poolt.

Allikas: www.habr.com

Lisa kommentaar