Примена апликације на Ларавел 7 на Убунту и Нгинк

Примена апликације на Ларавел 7 на Убунту и Нгинк

Одлучио сам да направим свој портфолио користећи Ларавел 7. Тако да главна страница буде одредишна страница, а све информације на њој могу да се мењају преко админ панела. Није поента. Дошло је до распоређивања. Нашао сам неколико добрих туторијала о томе како то учинити на пуном серверу са свим проблемима. Нисам баш јак у примени; генерално сам више предњи него фулл стацк. И, ако још увек могу да пишем и тестирам у ПХП-у, онда пре управљања сервером, итд. Нисам још одрастао. Али морао сам то да схватим.

Сада ћемо проћи кроз све кораке, почевши од покретања преко ССХ-а и завршавајући са радном локацијом. Покушаћемо да избегнемо све замке.

Можда ћете моћи да пронађете слична упутства на мрежи. На крају крајева, коначно сам га нашао. Истина, не на једном месту, не без помоћи СтацкОверфлов-а, и једва на руском. Патио сам. Зато сам одлучио да ти поједноставим живот.

Све ћемо урадити са капљицом на ДигиталОцеану. Ово, наравно, није неопходно; изаберите било који хостинг. Када дођете до радног сервера на Убунту, вратите се. За оне који се ипак одлуче да то ураде на ДигиталОцеан-у, биће још савета за подешавање домена. И $100 линк за препоруке.

Сви кораци специфични за ДигиталОцеан биће дати у фуснотама попут ових.

Почнимо.

ТЛ;ДР (само основне команде)

Креирајте корисника

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

Додајте му ССХ

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • vim ~/.ssh/authorized_keys
  • Убаците јавни кључ
  • chmod 600 ~/.ssh/authorized_keys

Ватрени зид

  • sudo ufw allow OpenSSH
  • sudo ufw enable
  • sudo ufw status

Нгинк

  • sudo apt update
  • sudo apt install -y nginx
  • sudo ufw allow 'Nginx HTTP'
  • sudo ufw status

МиСКЛ

  • 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

  • КСНУМКС: sudo apt install -y php7.3-fpm php7.3-mysql

  • КСНУМКС: sudo apt install -y php7.4-fpm php7.4-mysql

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

Основно подешавање:

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

Само ХТТП подешавање за Ларавел:

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

ХТТПС подешавање за Ларавел:

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

Ларавел

  • КСНУМКС: sudo apt install -y php7.3-mbstring php7.3-xml composer unzip

  • КСНУМКС: 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

ХТТПС

  • 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

Направите капљицу на ДигиталОцеан-у и региструјте нови ССХ кључ

Заиста верујем да ћете сами схватити како да се региструјете на ДигиталОцеан-у. Није лако, уз много провера и осталог. Ако стално добијате мрежну грешку приликом провере коришћења докумената, покушајте да урадите све преко ВПН-а, требало би да помогне.

У менију на врху кликните Створити->Капљице. Изаберите убунту.

Чим се региструјете, добићете 100 долара на свој налог. Али немојте се заваравати. Имате само 60 дана да га потрошите. А ово је врло мало. Можда ћете, као и ја, желети да користите скупљи план, тако да касније, када прави новац почне да тече, можете да пређете на јефтинији. Одмах ћу вам рећи да то неће радити. Можете га повећати, али не можете смањити. Тако то иде. бирам стандард->$5.

Бирам нама најближи регион Франкфурт. ВПЦ мрежа->дефаулт-фра1

Одмах ћемо извршити аутентификацију преко ССХ-а. Кликните Нови ССХ кључ. Ако немате ССХ, на десној страни су врло једноставна упутства. Отворите басх терминал и залепите ssh-keygen. Затим идемо на датотеку са јавним кључем /Users/<Ваше имя пользователя>/.ssh/id_rsa.pub (или једноставно cat ~/.ssh/id_rsa.pub), копирајте садржај и налепите га у прозор са леве стране. Било које име.

Смишљамо име хоста за капљицу.

Притисни Цреате Дроплет

Креирајте новог корисника

  • ssh root@[IP-адрес вашего дроплета]
  • Да ли сте сигурни да желите да наставите са повезивањем (да/не/[отисак прста])? yes
  • Унесите своју ССХ лозинку
  • Креирајте корисника ларавел: adduser laravel
  • Унесите своју лозинку и друге информације (уносим само пуно име)
  • Додајте корисника у судо групу: usermod -aG sudo laravel

ССХ за новог корисника

  • Пређите на новог корисника: su laravel

Све радње вршимо даље, до краја чланка, у име корисника ларавел. Стога, ако сте изненада прекинути, поново се пријавите и уђите su laravel

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

Отворили смо датотеку у Виму. Ако уопште нисте упознати са тим, можете радити у Нано-у, ваше право.

Најосновније Вим команде

Да бисте користили Вим едитор у целом чланку, само треба да знате следеће.

  • Вим има различите режиме: Нормални режим, у којем уносите команде и бирате режиме и друге.
  • Да бисте изашли из било ког режима и вратили се у нормалан режим, само притисните Esc
  • Крећите се: можете користити само стрелице
  • Излаз без чувања <Normal mode>: :q!
  • Изађите и сачувајте <Normal mode>: :wq
  • Пребаците се на режим уноса текста <Normal mode>: i (са енглеског. ИНСЕРТ)
  • Убацујемо наш јавни кључ (што смо урадили горе)
  • Штитимо од промена: chmod 600 ~/.ssh/authorized_keys

Инсталирање заштитног зида

  • Погледајмо сва доступна подешавања: sudo ufw app list
  • Дозволите ОпенССХ (у супротном ће нас закључати): sudo ufw allow OpenSSH
  • Хајде да покренемо заштитни зид: sudo ufw enable, y
  • Проверавамо: sudo ufw status

Status: active

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

Све је у реду.

Инсталирање Нгинк-а

Током инсталације ћете понекад бити упитани "Да ли сте сигурни?" Одговор y (па, само ако сте сигурни).

  • sudo apt update
  • sudo apt install nginx

Додавање Нгинк-а у подешавања заштитног зида

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

Идите на свој ИП. Ако све прође како треба, требало би да видите следеће.

Примена апликације на Ларавел 7 на Убунту и Нгинк

Инсталирање МиСКЛ-а

  • sudo apt install mysql-server
  • Покретање скрипте за аутоматску заштиту sudo mysql_secure_installation

Одговорите на постављена питања. Ако не знате шта да одговорите, ево неколико предложених опција:

  • Потврди додатак за лозинку - N

  • Уклонити анонимне кориснике? — Y

  • Желите ли да забраните роот пријаву на даљину? — N

  • Уклонити тестну базу података и приступити њој? — N

  • Сада поново учитати табеле привилегија? — Y

  • Идемо на МиСКЛ: sudo mysql

  • Погледајмо методе приступа: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Поставите лозинку за роот: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';

  • Погледајмо поново методе приступа: SELECT user,authentication_string,plugin,host FROM mysql.user;

  • Примените промене и изађите из МиСКЛ-а: FLUSH PRIVILEGES; и exit

  • Сада, да бисте се пријавили на МиСКЛ морате да користите mysql -u root -p и унесите лозинку

Инсталирање ПХП-а

Хајде да користимо складиште треће стране из Ондреј Суры

  • 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, можете изабрати ПХП 7.3 или 7.4. Једина разлика ће бити у бројевима 3 и 4.

  • КСНУМКС: sudo apt install -y php7.3-fpm php7.3-mysql
  • КСНУМКС: sudo apt install -y php7.4-fpm php7.4-mysql

ПХП ФастЦГИ Процесс Манагер (фпм) ради са ПХП захтевима. мискл, наравно, за рад са МиСКЛ.

Од сада ћу све радити 7.4.

Подешавање Нгинк-а

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

Уместо „<Ваш домен>“ унесите домен (нпр. mysite.ru) које желите да користите у будућности. Ако га још немате, напишите било који, а затим само поновите кораке у овом поглављу за свој домен када га изаберете.

Унесите следеће:

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

Ако сте уместо тога изабрали верзију 7.3 php7.4-fpm.sock уписати php7.4-fpm.sock.

Слушајте порт 80 укључен server_nameкада стигнемо до коренског захтева /var/www/html узмите индексну датотеку. Ако после server_name Има нешто, тражимо такав фајл. Ако га не пронађемо, избацујемо 404. Ако се завршава са .php, протрчати fpm... Ако постоји .ht, забранити (403).

  • Прављење везе од sites-available в sites-enabled: sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
  • Уклањање везе до default: sudo unlink /etc/nginx/sites-enabled/default
  • Провера грешака: sudo nginx -t
  • Рестарт: sudo systemctl reload nginx

Провера рада:

  • sudo vim /var/www/html/info.php
  • Пишемо: <?php phpinfo();
  • Идемо у <Ваш IP>/info.php

Требало би да видите нешто овако:

Примена апликације на Ларавел 7 на Убунту и Нгинк

Сада се ова датотека може избрисати: sudo rm /var/www/html/info.php

Инсталирајте Ларавел

  • КСНУМКС: sudo apt install php7.3-mbstring php7.3-xml composer unzip

  • КСНУМКС: sudo apt install 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 <ссылка на проект> .

Вреди узети у обзир да ако нисте сачували статичне датотеке (на пример, из /public) на Гитхуб-у, онда их наравно нећете имати. На пример, направио сам засебну нит да ово решим deploy, из које сам већ клонирао: 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

Последња ствар која је преостала је да поново конфигуришете Нгинк за Ларавел:

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

Као и прошли пут, ако сте уместо тога изабрали верзију 7.3 php7.4-fpm.sock уписати php7.4-fpm.sock.

Подешавање домена на ДигиталОцеан-у

Све је заправо врло једноставно. Купите домен (било где), пређите на ДигиталОцеан на Створити->Домени/ДНС... На терену Додајте домен унесете овај домен и кликнете на додај. Затим идите на подешавања домена и на поље ХОСТНАМЕ ући @. Изаберите пројекат и кликните Креирајте запис.
Сада идите на сајт где сте купили домен, пронађите тамо „ДНС сервере“ (или нешто слично) и унесите сервере ДигиталОцеан (тј. ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com). Сада треба да сачекате мало (или много) док се ова подешавања не прихвате. Спремни!
Једини проблем је што ће се ваша страница отворити само као ХТТП. Да бисте имали ХТТПС, пређите на следећи део.

Подешавање ХТТПС-а

Инсталирајте цертбот и проследите му име домена (формат mysite.ru) и име домена са ввв (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.<Ваш домен>

Сада морате поново да конфигуришете Нгинк (не заборавите да замените своје вредности):

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

Мислим да већ разумете шта треба да се промени за ПХП 7.3.

Овде је, у ствари, све једноставно. Једноставно преусмеравамо све захтеве са ХТТП-а (порт 80) на ХТТПС (порт 443). И тамо радимо све исто као и раније, али са шифровањем.

Остаје само да подесите дозволе у ​​заштитном зиду:

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

Сада би све требало да ради како треба.

[Напредно] Инсталирање Ноде.јс

Ако изненада треба да покренете нпм команде директно на серверу, потребно је да инсталирате Ноде.јс.

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

То је то, зауставио сам се у овој фази. У принципу, задовољан сам резултатом. Можда ћу прећи са ДигиталОцеана негде ближе Русији и јефтиније. Али пошто сам већ прошао све кругове верификације на сајту и тамо све урадио, показао сам им примером. Поред тога, њихових почетних 100 долара је одлична одскочна даска за тренинг.

ПС Посебно хвала аутору ову суштину, који је послужио као основа за све наведене радње. У неким случајевима не ради за Ларавел 7, поправио сам то.

ППС Ако сте врхунски инжењер који размишља басх командама, молим вас немојте оштро судити. Можда ћете сматрати да је овај чланак ниског нивоа, али било би ми драго да га нађем када ми је био потребан. Ако има предлога за побољшање, ја сам за то.

Извор: ввв.хабр.цом

Додај коментар