Rozhodl jsem se vytvořit své portfolio pomocí Laravel 7. Aby hlavní stránka byla vstupní stránkou a všechny informace na ní bylo možné měnit pomocí admin panelu. Nejde o to. Došlo k nasazení. Našel jsem pár dobrých návodů, jak to udělat na plnohodnotném serveru se všemi problémy. Nejsem příliš silný v nasazení; obecně jsem více vepředu než full stack. A pokud stále mohu psát a testovat v PHP, pak před správou serveru atd. Ještě jsem nevyrostl. Ale musel jsem na to přijít.
Nyní projdeme všemi kroky, počínaje spuštěním přes SSH a konče pracovním webem. Pokusíme se vyhnout všem nástrahám.
Podobné pokyny můžete najít na internetu. Nakonec jsem to nakonec našel. Pravda, ne na jednom místě, ne bez pomoci StackOverflow a sotva v ruštině. Trpěl jsem. Proto jsem se rozhodl zjednodušit vám život.
Vše uděláme kapkou na DigitalOcean. To samozřejmě není nutné, vyberte si jakýkoli hosting. Až se dostanete na fungující server na Ubuntu, vraťte se. Pro ty, kteří se stále rozhodnou to udělat na DigitalOcean, budou další tipy na nastavení domény. A
Všechny kroky specifické pro DigitalOcean budou uvedeny v poznámkách pod čarou, jako jsou tyto.
Začněme.
TL;DR (pouze základní příkazy)
Vytvořte uživatele
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Přidejte k tomu SSH
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Vložte veřejný klíč
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/<Ваш домен>
Základní nastavení:
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;
}
}
Pouze nastavení HTTP pro 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;
}
}
Nastavení HTTPS pro 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
Vytvořte droplet na DigitalOcean a zaregistrujte nový klíč SSH
Opravdu věřím, že sami přijdete na to, jak se zaregistrovat u DigitalOcean. Není to jednoduché, se spoustou ověřování a dalších věcí. Pokud se při ověřování pomocí dokumentů neustále zobrazuje chyba sítě, zkuste vše udělat přes VPN, mělo by to pomoci.
V nabídce nahoře klikněte na Vytvořit->Kapky. Vyberte si ubuntu.
Jakmile se zaregistrujete, dostanete na svůj účet 100 $. Ale nenechte se zmást. Máte na to jen 60 dní. A to je velmi málo. Možná budete chtít, stejně jako já, použít dražší plán, abyste později, až začnou proudit skutečné peníze, mohli přejít na levnější. Rovnou vám řeknu, že to nepůjde. Můžete ji zvýšit, ale nemůžete ji snížit. Tak to jde. vybírám si Standard->$5.
Vybírám kraj, který je nám nejblíže Frankfurt. Síť VPC->default-fra1
Okamžitě provedeme autentizaci přes SSH. Klikněte Nový klíč SSH. Pokud nemáte SSH, napravo je velmi jednoduchý návod. Otevřete bash terminál a vložte
ssh-keygen
. Poté přejdeme k souboru s veřejným klíčem/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(nebo jednodušecat ~/.ssh/id_rsa.pub
), zkopírujte obsah a vložte jej do okna vlevo. Jakékoliv jméno.Vymyslíme název hostitele pro droplet.
Klikněte zde Vytvořte kapku
Vytvořte nového uživatele
ssh root@[IP-адрес вашего дроплета]
- Opravdu chcete pokračovat v připojení (ano/ne/[otisk prstu])?
yes
- Zadejte své SSH heslo
- Vytvořte uživatele laravel:
adduser laravel
- Zadejte své heslo a další informace (zadávám pouze celé jméno)
- Přidejte uživatele do skupiny sudo:
usermod -aG sudo laravel
SSH pro nového uživatele
- Přepnout na nového uživatele:
su laravel
Veškeré akce dále, až do konce článku, provádíme jménem uživatele laravel. Proto, pokud budete náhle vyrušeni, znovu se přihlaste a vstupte su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Soubor jsme otevřeli ve Vimu. Pokud se v tom vůbec nevyznáte, můžete pracovat v Nano, máte právo.
Nejzákladnější příkazy Vim
Abyste mohli používat editor Vim v celém článku, stačí znát následující.
- Vim má různé režimy: Normální režim, ve kterém zadáváte příkazy a vybíráte režimy a další.
- Chcete-li opustit jakýkoli režim a vrátit se do normálního režimu, stačí stisknout
Esc
- Pohybujte se: můžete použít pouze šipky
- Odejít bez uložení
<Normal mode>
::q!
- Odejít a uložit
<Normal mode>
::wq
- Přepněte do režimu zadávání textu
<Normal mode>
:i
(z angličtiny. INSERT)
- Vložíme náš veřejný klíč (což jsme udělali výše)
- Chráníme před změnami:
chmod 600 ~/.ssh/authorized_keys
Instalace firewallu
- Podívejme se na všechna dostupná nastavení:
sudo ufw app list
- Povolit OpenSSH (jinak nás zamkne):
sudo ufw allow OpenSSH
- Spustíme firewall:
sudo ufw enable
,y
- Zkontrolujeme:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Vše je v pořádku.
Instalace Nginx
Během instalace budete někdy dotázáni "Jste si jisti?" Odpovědět y
(no, jen pokud jste si jisti).
sudo apt update
sudo apt install nginx
Přidání Nginx do nastavení brány 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)
Přejděte na svou IP. Pokud vše půjde dobře, měli byste vidět následující.
Instalace MySQL
sudo apt install mysql-server
- Spuštění skriptu automatické ochrany
sudo mysql_secure_installation
Odpovězte na položené otázky. Pokud nevíte, co odpovědět, zde je několik navrhovaných možností:
-
Plugin pro ověření hesla -
N
-
Odebrat anonymní uživatele? —
Y
-
Zakázat vzdálené přihlášení root? —
N
-
Odebrat testovací databázi a přístup k ní? —
N
-
Znovu načíst tabulky oprávnění? —
Y
-
Pojďme k MySQL:
sudo mysql
-
Podívejme se na přístupové metody:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Nastavte heslo pro root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Podívejme se znovu na přístupové metody:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Použijte změny a ukončete MySQL:
FLUSH PRIVILEGES;
иexit
-
Nyní, abyste se mohli přihlásit do MySQL, musíte použít
mysql -u root -p
a zadejte heslo
Instalace PHP
Použijme úložiště třetí strany z
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
Nyní si vyberme. Pro Laravel 7 si můžete vybrat PHP 7.3 nebo 7.4. Jediný rozdíl bude v číslech 3 a 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) pracuje s požadavky PHP. mysql, samozřejmě pro práci s MySQL.
Odteď budu vše dělat 7.4.
Nastavení Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
Místo „<Vaše doména>“ zadejte doménu (např. mysite.ru
), který chcete v budoucnu použít. Pokud ještě žádnou nemáte, napište si nějakou a poté při výběru zopakujte kroky v této kapitole pro vaši doménu.
Zadejte následující:
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;
}
}
Pokud jste místo toho zvolili verzi 7.3 php7.4-fpm.sock
Vepište php7.4-fpm.sock
.
Poslouchejte port 80 zapnutý server_name
když se dostaneme k požadavku root /var/www/html
vzít indexový soubor. Pokud po server_name
Něco je, hledáme takový soubor. Pokud to nenajdeme, vyhodíme 404. Pokud to skončí .php
, proběhnout fpm
... Pokud existuje .ht
, zakázat (403).
- Vytvoření odkazu z
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Odstranění odkazu na
default
:sudo unlink /etc/nginx/sites-enabled/default
- Kontrola chyb:
sudo nginx -t
- Restartovat:
sudo systemctl reload nginx
Kontrola práce:
sudo vim /var/www/html/info.php
- Píšeme:
<?php phpinfo();
- Pojď dál
<Ваш IP>/info.php
Měli byste vidět něco takového:
Nyní lze tento soubor smazat: sudo rm /var/www/html/info.php
Nainstalujte 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
-
Pojďme k MySQL:
mysql -u root -p
-
Vytvořte databázi s názvem laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Poskytujeme root přístup k laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Vytvořte složku pro projekt:
sudo mkdir -p <Имя проекта>
-
Poskytujeme uživateli laravel práva k projektu:
sudo chown laravel:laravel <Имя проекта>
Dále musíte projekt přenést. Například klonování z Githubu.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Stojí za zvážení, že pokud jste neuložili statické soubory (například z /public
) na Github, pak je přirozeně mít nebudete. Například jsem vytvořil samostatné vlákno, abych to vyřešil deploy
, ze kterého jsem již naklonoval: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Instalace závislostí:
composer install
- Vytvořit .env:
vim .env
Jeho základní verze vypadá takto:
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>
Pokud zkopírujete soubor .env, nahraďte APP_ENV produkčním, APP_DEBUG false a zadejte správná nastavení pro MySQL.
- Migrace databáze:
php artisan migrate
- Generování kódu:
php artisan key:generate
Změna oprávnění:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Poslední, co zbývá, je překonfigurovat Nginx pro 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;
}
}
Jako minule, pokud jste místo toho zvolili verzi 7.3 php7.4-fpm.sock
Vepište php7.4-fpm.sock
.
Nastavení domény na DigitalOcean
Všechno je vlastně velmi jednoduché. Koupíte si doménu (kdekoli), přepnete na DigitalOcean na Vytvořit->Domény/DNS... V poli Přidejte doménu zadáte tuto doménu a kliknete na přidat. Poté přejděte do nastavení domény a do pole NÁZEV HOSTITELE vstoupit @. Vyberte projekt a klikněte Vytvořte záznam.
Nyní přejděte na stránku, kde jste zakoupili doménu, najděte tam „DNS Servers“ (nebo něco podobného) a zadejte servery DigitalOcean (jmenovitěns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Nyní musíte chvíli (nebo hodně) počkat, než budou tato nastavení přijata. Připraveno!
Jediný problém je, že se váš web otevře pouze jako HTTP. Chcete-li mít HTTPS, přejděte k další části.
Nastavení HTTPS
Nainstalujte certbot a předejte mu název domény (formát mysite.ru
) a název domény s 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.<Ваш домен>
Nyní musíte překonfigurovat Nginx (nezapomeňte nahradit své hodnoty):
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;
}
}
Myslím, že už chápete, co je potřeba změnit pro PHP 7.3.
Zde je ve skutečnosti vše jednoduché. Jednoduše přesměrujeme všechny požadavky z HTTP (port 80) na HTTPS (port 443). A tam vše děláme stejně jako předtím, ale s šifrováním.
Zbývá pouze nastavit oprávnění ve firewallu:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Nyní by mělo vše fungovat jak má.
[Pokročilé] Instalace Node.js
Pokud náhle potřebujete spouštět příkazy npm přímo na serveru, musíte nainstalovat Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
To je vše, v této fázi jsem přestal. V zásadě jsem s výsledkem spokojen. Snad přejdu z DigitalOcean někam blíž k Rusku a levněji. Ale protože už jsem prošel všemi ověřovacími koly na webu a vše jsem tam udělal, ukázal jsem je na příkladu. Navíc jejich startovních 100 dolarů je výborným odrazovým můstkem pro trénink.
PS Zvláštní poděkování autorovi
PPS Pokud jste náhodou špičkový inženýr, který přemýšlí v bashových příkazech, nesuďte prosím přísně. Možná se vám bude zdát tento článek na nízké úrovni, ale když bych ho potřeboval, rád bych ho našel. Pokud existují návrhy na zlepšení, jsem pro.
Zdroj: www.habr.com