Úgy döntöttem, hogy a portfóliómat a Laravel 7 segítségével készítem el. Így a főoldal egy céloldal lesz, és a rajta lévő összes információ módosítható az adminisztrációs panel segítségével. Nem a lényeg. Jött a bevetés. Találtam pár jó oktatóanyagot, hogyan kell ezt megtenni egy teljes értékű szerveren minden gonddal. Nem vagyok túl erős a bevetésben; általában inkább az első, mint a teljes stackben vagyok. És, ha még tudok írni és tesztelni PHP-ben, akkor a szerver kezelése előtt stb. Még nem nőttem fel. De rá kellett jönnöm.
Most végigmegyünk az összes lépésen, kezdve az SSH-n keresztüli indítástól és a működő webhelyig. Igyekszünk minden buktatót elkerülni.
Hasonló utasításokat találhat az interneten. Végül is megtaláltam. Igaz, nem egy helyen, nem a StackOverflow segítsége nélkül, és aligha oroszul. Szenvedtem. Ezért döntöttem úgy, hogy leegyszerűsítem az életedet.
Mindent egy cseppecskével fogunk csinálni a DigitalOcean-en. Ez természetesen nem szükséges; válasszon bármilyen tárhelyet. Ha elér egy működő szervert az Ubuntu-n, térjen vissza. Azok számára, akik mégis a DigitalOcean mellett döntenek, további tippeket kapnak a domain beállításához. És
Az összes DigitalOcean-specifikus lépést az ehhez hasonló lábjegyzetekben adjuk meg.
Kezdjük.
TL;DR (csak alapvető parancsok)
Hozzon létre egy felhasználót
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Add hozzá az SSH-t
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Helyezze be a nyilvános kulcsot
chmod 600 ~/.ssh/authorized_keys
Tűzfal
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/<Ваш домен>
Alapbeállítás:
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;
}
}
Csak HTTP beállítás a Laravel számára:
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-beállítás Laravelhez:
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
Hozzon létre egy cseppet a DigitalOcean-en, és regisztráljon egy új SSH-kulcsot
Őszintén hiszem, hogy Ön is kitalálja, hogyan regisztrálhat a DigitalOcean-en. Nem könnyű, sok igazolással és egyéb dolgokkal. Ha folyamatosan hálózati hibát kap a dokumentumok használatával történő ellenőrzéskor, próbáljon meg mindent VPN-en keresztül, ez segíteni fog.
A felső menüben kattintson a gombra Teremt->cseppek. Választ Ubuntu.
Amint regisztrál, 100 dollárt fog kapni a számlájára. De ne tévesszen meg. Már csak 60 napod van elkölteni. Ez pedig nagyon kevés. Előfordulhat, hogy hozzám hasonlóan drágább konstrukciót szeretne használni, hogy később, amikor elkezd folyni a valódi pénz, váltson olcsóbbra. Azonnal megmondom, hogy nem fog menni. Növelheti, de nem csökkentheti. Ez így megy. Én választok Standard ->$5.
A hozzánk legközelebb eső régiót választom Frankfurt. VPC hálózat->alapértelmezett-fra1
Azonnal végrehajtjuk a hitelesítést SSH-n keresztül. Kattintson Új SSH kulcs. Ha nem rendelkezik SSH-val, a jobb oldalon nagyon egyszerű utasítások találhatók. Nyisson meg egy bash terminált és illessze be
ssh-keygen
. Ezután megyünk a fájlhoz a nyilvános kulccsal/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(vagy egyszerűencat ~/.ssh/id_rsa.pub
), másolja ki a tartalmat, és illessze be a bal oldali ablakba. Bármely név.Találunk egy gazdanevet a cseppnek.
sajtó Csepp létrehozása
Hozzon létre egy új felhasználót
ssh root@[IP-адрес вашего дроплета]
- Biztosan folytatni szeretné a csatlakozást (igen/nem/[ujjlenyomat])?
yes
- Adja meg SSH jelszavát
- Hozzon létre egy felhasználót laravel:
adduser laravel
- Adja meg jelszavát és egyéb adatait (csak a teljes nevet adom meg)
- Adja hozzá a felhasználót a sudo csoporthoz:
usermod -aG sudo laravel
SSH új felhasználó számára
- Váltás új felhasználóra:
su laravel
A továbbiakban a cikk végéig minden intézkedést a laravel felhasználó nevében hajtunk végre. Ezért, ha hirtelen megszakítják, jelentkezzen be újra, és lépjen be su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Megnyitottuk a fájlt a Vimben. Ha egyáltalán nem ismeri, dolgozhat Nano-ban, joga van.
A legalapvetőbb Vim parancsok
A Vim szerkesztő használatához a cikkben csak a következőket kell tudnia.
- A Vimnek különböző módjai vannak: Normál mód, amelyben parancsokat írhat be, módokat választhat és egyebeket.
- Bármely módból való kilépéshez és a normál módba való visszatéréshez nyomja meg a gombot
Esc
- Mozgás: csak nyilakat használhat
- Kilépés mentés nélkűl
<Normal mode>
::q!
- Kilépés és mentés
<Normal mode>
::wq
- Váltson szövegbeviteli módra
<Normal mode>
:i
(az angolból. helyezze)
- Beillesztjük a nyilvános kulcsunkat (amit fent tettünk)
- A változások ellen védekezünk:
chmod 600 ~/.ssh/authorized_keys
Tűzfal telepítése
- Nézzük meg az összes elérhető beállítást:
sudo ufw app list
- Az OpenSSH engedélyezése (különben zárol minket):
sudo ufw allow OpenSSH
- Indítsuk el a tűzfalat:
sudo ufw enable
,y
- Ellenőrizzük:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Minden rendben.
Az Nginx telepítése
A telepítés során néha megkérdezik: "Biztos benne?" Válasz y
(csak ha biztos vagy benne).
sudo apt update
sudo apt install nginx
Az Nginx hozzáadása a tűzfal beállításaihoz
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)
Menjen az IP-címére. Ha minden jól megy, a következőket kell látnia.
MySQL telepítése
sudo apt install mysql-server
- Automatikus védelmi szkript indítása
sudo mysql_secure_installation
Válaszoljon a feltett kérdésekre. Ha nem tudja, mit válaszoljon, itt van néhány javasolt lehetőség:
-
Jelszó megerősítése -
N
-
Eltávolítja a névtelen felhasználókat? —
Y
-
Letiltja a root bejelentkezést távolról? —
N
-
Eltávolítja a tesztadatbázist, és hozzáférhet hozzá? —
N
-
Újratölti a jogosultságtáblázatokat most? —
Y
-
Menjünk a MySQL-hez:
sudo mysql
-
Nézzük a hozzáférési módokat:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Állítson be jelszót a root számára:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Nézzük újra a hozzáférési módokat:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Alkalmazza a módosításokat, és lépjen ki a MySQL-ből:
FLUSH PRIVILEGES;
иexit
-
Most a MySQL-be való bejelentkezéshez használnia kell
mysql -u root -p
és adja meg a jelszót
PHP telepítése
Használjunk harmadik féltől származó adattárat
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
Most válasszunk. Laravel 7 esetén választhat a PHP 7.3 vagy 7.4 verzió közül. Az egyetlen különbség a 3-as és a 4-es számban lesz.
- 7.3:
sudo apt install -y php7.3-fpm php7.3-mysql
- 7.4:
sudo apt install -y php7.4-fpm php7.4-mysql
A PHP FastCGI Process Manager (fpm) PHP kérésekkel működik. mysql, természetesen a MySQL-lel való együttműködéshez.
Mostantól mindent 7.4-én csinálok.
Az Nginx beállítása
sudo vim /etc/nginx/sites-available/<Ваш домен>
A „<Saját domain>” helyett írja be a domaint (például mysite.ru
), amelyet a jövőben használni szeretne. Ha még nem rendelkezik ilyennel, írjon be egyet, majd ismételje meg az ebben a fejezetben található lépéseket a domainjére, amikor kiválasztja azt.
Írd be a következőt:
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;
}
}
Ha inkább a 7.3-as verziót választotta php7.4-fpm.sock
Írja be php7.4-fpm.sock
.
Hallgassa meg a 80-as portot server_name
amikor megérkezünk a gyökérkéréshez /var/www/html
vegye az indexfájlt. Ha azután server_name
Van valami, ilyen fájlt keresünk. Ha nem találjuk, kidobjuk a 404. Ha úgy végződik .php
, végigmenni fpm
... Ha van .ht
, tiltja (403).
- Link készítése innen
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- A link eltávolítása
default
:sudo unlink /etc/nginx/sites-enabled/default
- Hibák ellenőrzése:
sudo nginx -t
- Újraindítás:
sudo systemctl reload nginx
A munka ellenőrzése:
sudo vim /var/www/html/info.php
- Mi írunk:
<?php phpinfo();
- Menjünk-hoz
<Ваш IP>/info.php
Valami ilyesmit kellene látnod:
Most ez a fájl törölhető: sudo rm /var/www/html/info.php
Telepítse a Laravelt
-
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
-
Menjünk a MySQL-hez:
mysql -u root -p
-
Hozzon létre egy adatbázist a névvel laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Root hozzáférést biztosítunk laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Hozzon létre egy mappát a projekthez:
sudo mkdir -p <Имя проекта>
-
Mi biztosítjuk a felhasználónak laravel jogok a projekthez:
sudo chown laravel:laravel <Имя проекта>
Ezután át kell vinnie a projektet. Például klónozás Githubból.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Érdemes megfontolni, hogy ha nem mentett statikus fájlokat (például innen /public
) a Githubon, akkor természetesen nem lesznek meg. Ennek megoldására például létrehoztam egy külön szálat deploy
, ahonnan már klónoztam: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Függőségek telepítése:
composer install
- .env létrehozása:
vim .env
Az alapverzió így néz ki:
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>
Ha másolja az .env fájlt, cserélje ki az APP_ENV-t élesre, az APP_DEBUG-ot false-re, és adja meg a megfelelő MySQL-beállításokat.
- Az adatbázis áttelepítése:
php artisan migrate
- A kód generálása:
php artisan key:generate
Engedélyek módosítása:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Az utolsó hátra lévő dolog az Nginx újrakonfigurálása Laravel számára:
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;
}
}
Mint legutóbb, ha a 7.3-as verziót választotta helyette php7.4-fpm.sock
Írja be php7.4-fpm.sock
.
Domain beállítása a DigitalOcean-en
Valójában minden nagyon egyszerű. Ha vásárol egy domaint (bárhol), váltson át a DigitalOceanre a címen Teremt->Domain/DNS... Terepen Adjon hozzá egy domaint adja meg ezt a domaint, és kattintson a Hozzáadás gombra. Ezután lépjen a tartománybeállításokhoz és a mezőbe HOST NEVE belép @. Válasszon ki egy projektet, és kattintson Rekord létrehozása.
Most menjen arra a webhelyre, ahol a domaint vásárolta, keresse meg ott a „DNS-kiszolgálókat” (vagy valami hasonlót), és adja meg a DigitalOcean szervereket (nevezetesenns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Most várnia kell egy kicsit (vagy sokat), amíg elfogadja ezeket a beállításokat. Kész!
Az egyetlen probléma az, hogy webhelye csak HTTP-ként fog megnyílni. A HTTPS használatához lépjen tovább a következő részre.
HTTPS beállítása
Telepítse a certbotot, és adja át neki a domain nevet (formátum mysite.ru
) és domain név 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.<Ваш домен>
Most újra kell konfigurálnia az Nginxet (ne felejtse el helyettesíteni az értékeket):
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;
}
}
Azt hiszem, már érted, mit kell változtatni a PHP 7.3-ban.
Itt valójában minden egyszerű. Egyszerűen minden kérést átirányítunk a HTTP-ről (80-as port) a HTTPS-re (443-as port). És ott mindent ugyanúgy csinálunk, mint korábban, csak titkosítással.
Nincs más hátra, mint beállítani a tűzfal engedélyeit:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Most mindennek úgy kell működnie, ahogy kell.
[Speciális] A Node.js telepítése
Ha hirtelen npm parancsokat kell futtatnia közvetlenül a kiszolgálón, telepítenie kell a Node.js fájlt.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Ennyi, ebben a szakaszban megálltam. Elvileg elégedett vagyok az eredménnyel. Talán átváltok a DigitalOceanről valahol közelebb Oroszországhoz és olcsóbban. De mivel az oldalon már végigjártam az összes ellenőrző kört, és ott mindent megtettem, példával mutattam meg őket. Ezen kívül a kezdő 100 dollárjuk kiváló ugródeszka az edzésekhez.
PS Külön köszönet a szerzőnek
PPS Ha történetesen csúcsmérnök vagy, aki bash parancsokban gondolkodik, kérjük, ne ítéljen keményen. Lehet, hogy ezt a cikket alacsony szintűnek találja, de szívesen találtam volna egyet, amikor szükségem volt rá. Ha vannak fejlesztési javaslatok, én mindenért támogatom.
Forrás: will.com