Pag-deploy ng application sa Laravel 7 sa Ubuntu at Nginx

Pag-deploy ng application sa Laravel 7 sa Ubuntu at Nginx

Napagpasyahan kong gawin ang aking portfolio gamit ang Laravel 7. Upang ang pangunahing pahina ay maging isang landing page, at lahat ng impormasyon dito ay maaaring mabago gamit ang admin panel. Hindi ang punto. Dumating ito sa deployment. Nakakita ako ng ilang magagandang tutorial kung paano ito gagawin sa isang ganap na server na may lahat ng mga problema. Hindi ako masyadong malakas sa deployment; sa pangkalahatan ay mas nasa harap ako kaysa sa buong stack. At, kung maaari pa rin akong magsulat at sumubok sa PHP, pagkatapos ay bago pamahalaan ang server, atbp. Hindi pa ako lumaki. Ngunit kailangan kong malaman ito.

Ngayon ay dadaan tayo sa lahat ng mga hakbang, simula sa paglunsad sa pamamagitan ng SSH at magtatapos sa gumaganang site. Susubukan naming maiwasan ang lahat ng mga pitfalls.

Maaari kang makahanap ng mga katulad na tagubilin online. Pagkatapos ng lahat, natagpuan ko ito sa wakas. Totoo, hindi sa isang lugar, hindi nang walang tulong ng StackOverflow, at halos hindi sa Russian. nagdusa ako. Kaya naman nagdesisyon akong gawing simple ang buhay mo.

Gagawin namin ang lahat gamit ang isang droplet sa DigitalOcean. Ito, siyempre, ay hindi kinakailangan; pumili ng anumang pagho-host. Kapag naabot mo ang isang gumaganang server sa Ubuntu, bumalik. Para sa mga nagpasya pa ring gawin ito sa DigitalOcean, magkakaroon ng higit pang mga tip sa pag-set up ng isang domain. At $100 na link ng referral.

Lahat ng hakbang na partikular sa DigitalOcean ay ibibigay sa mga footnote na tulad nito.

Magsimula na tayo

TL;DR (mga pangunahing utos lamang)

Gumawa ng user

  • ssh root@[IP-адрСс вашСго Π΄Ρ€ΠΎΠΏΠ»Π΅Ρ‚Π°]
  • adduser laravel
  • usermod -aG sudo laravel
  • su laravel

Magdagdag ng SSH dito

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Ipasok ang pampublikong susi
  • 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/<Π’Π°Ρˆ Π΄ΠΎΠΌΠ΅Π½>

Pangunahing setup:

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

Tanging HTTP setup para sa 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;
    }
}

Setting ng HTTPS para sa 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

Gumawa ng droplet sa DigitalOcean at magrehistro ng bagong SSH key

Talagang naniniwala ako na malalaman mo kung paano magrehistro sa DigitalOcean mismo. Ito ay hindi madali, na may maraming mga pagpapatunay at iba pang mga bagay. Kung palagi kang nakakakuha ng error sa network kapag nagbe-verify gamit ang mga dokumento, subukang gawin ang lahat sa pamamagitan ng VPN, makakatulong ito.

Sa menu sa itaas, i-click Lumikha->Mga Droplet. Pumili Ubuntu.

Sa sandaling magparehistro ka, makakatanggap ka ng $100 sa iyong account. Ngunit huwag magpaloko. Mayroon ka lamang 60 araw para gugulin ito. At ito ay napakaliit. Maaaring gusto mo, tulad ko, na gumamit ng mas mahal na plano, para sa ibang pagkakataon, kapag nagsimula nang dumaloy ang totoong pera, maaari kang lumipat sa mas mura. Sasabihin ko kaagad sa iyo na hindi ito gagana. Maaari mong dagdagan ito, ngunit hindi mo ito maaaring bawasan. Kaya ito napupunta. pinili ko pamantayan->$5.

Pinipili ko ang rehiyon na pinakamalapit sa amin Frankfurt. VPC Network->default-fra1

Magsasagawa kami kaagad ng pagpapatunay sa pamamagitan ng SSH. I-click Bagong SSH Key. Kung wala kang SSH, may mga napakasimpleng tagubilin sa kanan. Magbukas ng bash terminal at i-paste ssh-keygen. Pagkatapos ay pumunta kami sa file gamit ang pampublikong key /Users/<Π’Π°ΡˆΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>/.ssh/id_rsa.pub (o simple cat ~/.ssh/id_rsa.pub), kopyahin ang mga nilalaman at i-paste ito sa window sa kaliwa. Kahit anong pangalan.

Nakabuo kami ng hostname para sa droplet.

Push Lumikha ng Droplet

Gumawa ng bagong user

  • ssh root@[IP-адрСс вашСго Π΄Ρ€ΠΎΠΏΠ»Π΅Ρ‚Π°]
  • Sigurado ka bang gusto mong magpatuloy sa pagkonekta (oo/hindi/[fingerprint])? yes
  • Ilagay ang iyong SSH password
  • Gumawa ng user laravel: adduser laravel
  • Ilagay ang iyong password at iba pang impormasyon (Ilalagay ko lang ang Buong Pangalan)
  • Idagdag ang user sa sudo group: usermod -aG sudo laravel

SSH para sa bagong user

  • Lumipat sa bagong user: su laravel

Isinasagawa namin ang lahat ng mga aksyon nang higit pa, hanggang sa katapusan ng artikulo, sa ngalan ng gumagamit ng laravel. Samakatuwid, kung bigla kang nagambala, muling mag-login at pumasok su laravel

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

Binuksan namin ang file sa Vim. Kung hindi ka pamilyar dito, maaari kang magtrabaho sa Nano, ang iyong karapatan.

Ang pinakapangunahing mga utos ng Vim

Upang magamit ang Vim editor sa buong artikulo, kailangan mo lamang malaman ang mga sumusunod.

  • Ang Vim ay may iba't ibang mga mode: Normal na mode, kung saan ka maglalagay ng mga command at pumili ng mga mode at iba pa.
  • Upang lumabas sa anumang mode at bumalik sa normal na mode, pindutin lamang Esc
  • Lumipat sa paligid: maaari ka lamang gumamit ng mga arrow
  • Lumabas nang hindi nagse-save <Normal mode>: :q!
  • Lumabas at i-save <Normal mode>: :wq
  • Lumipat sa text input mode <Normal mode>: i (mula sa English. isingit)
  • Ipinasok namin ang aming pampublikong susi (na ginawa namin sa itaas)
  • Pinoprotektahan namin laban sa mga pagbabago: chmod 600 ~/.ssh/authorized_keys

Pag-install ng firewall

  • Tingnan natin ang lahat ng magagamit na mga setting: sudo ufw app list
  • Payagan ang OpenSSH (kung hindi, mai-lock tayo nito): sudo ufw allow OpenSSH
  • Ilunsad natin ang firewall: sudo ufw enable, y
  • Namin suriin: sudo ufw status

Status: active

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

Maayos ang lahat.

Pag-install ng Nginx

Sa panahon ng pag-install, minsan tatanungin ka ng "Sigurado ka ba?" Sagot y (well, kung sigurado ka lang).

  • sudo apt update
  • sudo apt install nginx

Pagdaragdag ng Nginx sa mga setting ng 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)

Pumunta sa iyong IP. Kung maayos ang lahat, dapat mong makita ang sumusunod.

Pag-deploy ng application sa Laravel 7 sa Ubuntu at Nginx

Pag-install ng MySQL

  • sudo apt install mysql-server
  • Paglulunsad ng awtomatikong proteksyon script sudo mysql_secure_installation

Sagutin ang mga itinanong. Kung hindi mo alam kung ano ang isasagot, narito ang ilang iminungkahing opsyon:

  • Patunayan ang plugin ng password - N

  • Alisin ang mga hindi kilalang user? β€” Y

  • Huwag payagan ang root login nang malayuan? β€” N

  • Alisin ang database ng pagsubok at pag-access dito? β€” N

  • I-reload ang mga privilege table ngayon? β€” Y

  • Pumunta tayo sa MySQL: sudo mysql

  • Tingnan natin ang mga paraan ng pag-access: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Magtakda ng password para sa root: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Π’Π°Ρˆ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для MySQL>';

  • Tingnan natin muli ang mga paraan ng pag-access: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Ilapat ang mga pagbabago at lumabas sa MySQL: FLUSH PRIVILEGES; ΠΈ exit

  • Ngayon, upang mag-log in sa MySQL kailangan mong gamitin mysql -u root -p at ilagay ang password

Pag-install ng PHP

Gumamit tayo ng isang third-party na repository mula sa 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

Ngayon pumili tayo. Para sa Laravel 7, maaari kang pumili ng PHP 7.3 o 7.4. Ang pagkakaiba lamang ay nasa mga numero 3 at 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

Gumagana ang PHP FastCGI Process Manager (fpm) sa mga kahilingan sa PHP. mysql, siyempre, para sa pagtatrabaho sa MySQL.

Mula ngayon gagawin ko ang lahat sa 7.4.

Pag-set up ng Nginx

  • sudo vim /etc/nginx/sites-available/<Π’Π°Ρˆ Π΄ΠΎΠΌΠ΅Π½>

Sa halip na "<Iyong domain>" ilagay ang domain (halimbawa, mysite.ru) na gusto mong gamitin sa hinaharap. Kung wala ka pa, sumulat ng anuman, pagkatapos ay ulitin lang ang mga hakbang sa kabanatang ito para sa iyong domain kapag pinili mo ito.

Ipasok ang sumusunod:

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

Kung pinili mo ang bersyon 7.3 sa halip php7.4-fpm.sock isulat sa php7.4-fpm.sock.

Makinig sa port 80 sa server_namepagdating namin sa root request /var/www/html kunin ang index file. Kung pagkatapos server_name May isang bagay, naghahanap kami ng ganoong file. Kung hindi namin ito mahanap, itinatapon namin ang 404. Kung magtatapos ito sa .php, tumakbo sa pamamagitan ng fpm... Kung meron .ht, ipagbawal (403).

  • Gumagawa ng link mula sa sites-available Π² sites-enabled: sudo ln -s /etc/nginx/sites-available/<Π’Π°Ρˆ Π΄ΠΎΠΌΠ΅Π½> /etc/nginx/sites-enabled/
  • Tinatanggal ang link sa default: sudo unlink /etc/nginx/sites-enabled/default
  • Pagsusuri ng mga error: sudo nginx -t
  • I-reboot: sudo systemctl reload nginx

Sinusuri ang gawain:

  • sudo vim /var/www/html/info.php
  • Sumulat kami: <?php phpinfo();
  • Pumunta sa <Π’Π°Ρˆ IP>/info.php

Dapat kang makakita ng ganito:

Pag-deploy ng application sa Laravel 7 sa Ubuntu at Nginx

Ngayon ang file na ito ay maaaring tanggalin: sudo rm /var/www/html/info.php

I-install ang 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

  • Pumunta tayo sa MySQL: mysql -u root -p

  • Lumikha ng isang database na may pangalan laravel: CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • Nagbibigay kami ng root access sa laravel: GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Π’Π°Ρˆ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ MySQL>';

  • FLUSH PRIVILEGES;

  • exit

  • cd /var/www/html

  • Lumikha ng isang folder para sa proyekto: sudo mkdir -p <Имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°>

  • Nagbibigay kami sa gumagamit laravel karapatan sa proyekto: sudo chown laravel:laravel <Имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°>

Susunod na kailangan mong ilipat ang proyekto. Halimbawa, ang pag-clone mula sa Github.

  • cd ./<Имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°>
  • git clone <ссылка Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚> .

Ito ay nagkakahalaga ng pagsasaalang-alang na kung hindi ka nag-save ng mga static na file (halimbawa, mula sa /public) sa Github, at natural na wala ka sa kanila. Halimbawa, gumawa ako ng hiwalay na thread para malutas ito deploy, kung saan na-clone ko na: git clone -b <имя Π²Π΅Ρ‚ΠΊΠΈ> --single-branch <ссылка Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚> ..

  • Pag-install ng mga dependency: composer install
  • Lumikha ng .env: vim .env

Ang pangunahing bersyon nito ay ganito ang hitsura:

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>

Kung kopyahin mo ang iyong .env, palitan ang APP_ENV ng produksyon, APP_DEBUG ng false at ilagay ang mga tamang setting para sa MySQL.

  • Paglipat ng database: php artisan migrate
  • Pagbuo ng code: php artisan key:generate

Pagbabago ng mga pahintulot:

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

Ang huling bagay na natitira ay muling i-configure ang Nginx para sa 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;
    }
}

Tulad ng huling pagkakataon, kung pinili mo na lang ang bersyon 7.3 php7.4-fpm.sock isulat sa php7.4-fpm.sock.

Pagse-set up ng domain sa DigitalOcean

Ang lahat ay talagang napaka-simple. Bumili ka ng domain (kahit saan), lumipat sa DigitalOcean sa Lumikha->Mga Domain/DNS... Sa patlang Magdagdag ng domain ipasok mo ang domain na ito at i-click ang idagdag. Pagkatapos ay pumunta sa mga setting ng domain at sa field PANGALAN NG HOST pumasok @. Pumili ng proyekto at i-click Lumikha ng tala.
Pumunta ngayon sa site kung saan mo binili ang domain, hanapin ang "Mga Server ng DNS" doon (o katulad nito) at ipasok ang mga server ng DigitalOcean (ibig sabihin, ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Ngayon ay kailangan mong maghintay ng kaunti (o marami) hanggang sa matanggap ang mga setting na ito. handa na!
Ang tanging problema ay ang iyong site ay magbubukas lamang bilang HTTP. Upang magkaroon ng HTTPS, magpatuloy sa susunod na bahagi.

Pagse-set up ng HTTPS

I-install ang certbot at ipasa ang domain name (format mysite.ru) at domain name na may 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.<Π’Π°Ρˆ Π΄ΠΎΠΌΠ΅Π½>

Ngayon ay kailangan mong i-configure muli ang Nginx (huwag kalimutang palitan ang iyong mga halaga):

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

Sa tingin ko naiintindihan mo na kung ano ang kailangang baguhin para sa PHP 7.3.

Dito, sa katunayan, ang lahat ay simple. Nire-redirect lang namin ang lahat ng kahilingan mula sa HTTP (port 80) patungo sa HTTPS (port 443). At doon ginagawa namin ang lahat tulad ng dati, ngunit may pag-encrypt.

Ang natitira na lang ay itakda ang mga pahintulot sa firewall:

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

Ngayon ang lahat ay dapat gumana ayon sa nararapat.

[Advanced] Pag-install ng Node.js

Kung biglang kailangan mong magpatakbo ng mga npm command nang direkta sa server, kailangan mong i-install ang Node.js.

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

Iyon lang, tumigil ako sa yugtong ito. Sa prinsipyo, nasiyahan ako sa resulta. Marahil ay lilipat ako mula sa DigitalOcean sa isang lugar na mas malapit sa Russia at mas mura. Ngunit dahil nalampasan ko na ang lahat ng verification round sa site at ginawa ko na ang lahat doon, ipinakita ko sa kanila sa pamamagitan ng halimbawa. Bilang karagdagan, ang kanilang panimulang $100 ay isang mahusay na pambuwelo para sa pagsasanay.

PS Espesyal na salamat sa may-akda itong diwa, na nagsilbing batayan para sa lahat ng mga aksyon sa itaas. Sa ilang mga kaso hindi ito gumagana para sa Laravel 7, naayos ko ito.

PPS Kung ikaw ay isang nangungunang inhinyero na nag-iisip sa mga utos ng bash, mangyaring huwag husgahan nang malupit. Maaaring makita mo ang artikulong ito na mababa ang pamantayan, ngunit natutuwa akong makahanap ng isa kapag kailangan ko ito. Kung may mga mungkahi para sa pagpapabuti, lahat ako para dito.

Pinagmulan: www.habr.com

Magdagdag ng komento