Jeg besluttede at lave min portefølje ved hjælp af Laravel 7. Så hovedsiden ville være en landingsside, og alle oplysningerne på den kunne ændres ved hjælp af admin panelet. Ikke meningen. Det kom til indsættelse. Jeg fandt et par gode tutorials om, hvordan man gør dette på en fuldgyldig server med alle problemerne. Jeg er ikke særlig stærk i implementeringen; jeg er generelt mere foran end fuld stack. Og hvis jeg stadig kan skrive og teste i PHP, før jeg administrerer serveren osv. Jeg er ikke blevet voksen endnu. Men jeg var nødt til at finde ud af det.
Nu vil vi gennemgå alle trinene, startende med lancering via SSH og slutter med arbejdsstedet. Vi vil forsøge at undgå alle faldgruberne.
Du kan muligvis finde lignende instruktioner online. Jeg fandt det jo endelig. Sandt nok, ikke på ét sted, ikke uden hjælp fra StackOverflow, og næppe på russisk. jeg led. Det er derfor, jeg besluttede at forenkle dit liv.
Vi vil gøre alt med en dråbe på DigitalOcean. Dette er selvfølgelig ikke nødvendigt; vælg hvilken som helst hosting. Når du når en fungerende server på Ubuntu, så kom tilbage. For dem, der stadig beslutter sig for at gøre det på DigitalOcean, vil der være flere tips om opsætning af et domæne. Og
Alle DigitalOcean-specifikke trin vil blive givet i fodnoter som disse.
Lad os begynde.
TL;DR (kun grundlæggende kommandoer)
Opret en bruger
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Tilføj SSH til det
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Indsæt den offentlige nøgle
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/<Ваш домен>
Grundlæggende opsætning:
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;
}
}
Kun HTTP-opsætning til 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;
}
}
HTTPS-indstilling for 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
Opret en dråbe på DigitalOcean og registrer en ny SSH-nøgle
Jeg tror virkelig, at du selv vil finde ud af, hvordan du registrerer dig hos DigitalOcean. Det er ikke nemt, med en masse verifikationer og andre ting. Hvis du konstant får en netværksfejl, når du verificerer ved hjælp af dokumenter, så prøv at gøre alt via en VPN, det burde hjælpe.
Klik på i menuen øverst Opret->dråber. Vælge Ubuntu.
Så snart du tilmelder dig, vil du modtage $100 til din konto. Men lad dig ikke narre. Du har kun 60 dage til at bruge det. Og det er meget lidt. Du vil måske ligesom mig bruge en dyrere plan, så du senere, når de rigtige penge begynder at flyde, kan skifte til en billigere. Jeg fortæller dig med det samme, at det ikke virker. Du kan øge det, men du kan ikke mindske det. Sådan går det. jeg vælger standard->$5.
Jeg vælger den region, der er tættest på os Frankfurt. VPC netværk->default-fra1
Vi vil straks udføre godkendelse via SSH. Klik Ny SSH nøgle. Hvis du ikke har SSH, er der meget enkle instruktioner til højre. Åbn en bash-terminal og indsæt
ssh-keygen
. Så går vi til filen med den offentlige nøgle/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(eller simpelthencat ~/.ssh/id_rsa.pub
), kopier indholdet og indsæt det i vinduet til venstre. Ethvert navn.Vi finder på et værtsnavn til dråben.
Klik Opret dråbe
Opret en ny bruger
ssh root@[IP-адрес вашего дроплета]
- Er du sikker på, at du vil fortsætte med at oprette forbindelse (ja/nej/[fingeraftryk])?
yes
- Indtast din SSH-adgangskode
- Opret en bruger laravel:
adduser laravel
- Indtast din adgangskode og andre oplysninger (jeg indtaster kun fulde navn)
- Tilføj brugeren til sudo-gruppen:
usermod -aG sudo laravel
SSH for ny bruger
- Skift til den nye bruger:
su laravel
Vi udfører alle handlinger videre, indtil slutningen af artiklen, på vegne af laravel-brugeren. Derfor, hvis du pludselig bliver afbrudt, skal du logge ind igen og gå ind su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Vi åbnede filen i Vim. Hvis du slet ikke er bekendt med det, kan du arbejde i Nano, din ret.
De mest grundlæggende Vim-kommandoer
For at bruge Vim-editoren i hele artiklen skal du blot vide følgende.
- Vim har forskellige tilstande: Normal tilstand, hvor du indtaster kommandoer og vælger tilstande og andre.
- For at forlade en hvilken som helst tilstand og vende tilbage til normal tilstand, skal du blot trykke på
Esc
- Flyt rundt: du kan bare bruge pile
- Forlad uden at gemme
<Normal mode>
::q!
- Afslut og gem
<Normal mode>
::wq
- Skift til tekstindtastningstilstand
<Normal mode>
:i
(fra engelsk. INSERT)
- Vi indsætter vores offentlige nøgle (hvilket vi gjorde ovenfor)
- Vi beskytter mod ændringer:
chmod 600 ~/.ssh/authorized_keys
Installation af en firewall
- Lad os se på alle de tilgængelige indstillinger:
sudo ufw app list
- Tillad OpenSSH (ellers låser det os):
sudo ufw allow OpenSSH
- Lad os starte firewallen:
sudo ufw enable
,y
- Vi tjekker:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Alt er fint.
Installerer Nginx
Under installationen vil du nogle gange blive spurgt "Er du sikker?" Svar y
(nå, kun hvis du er sikker).
sudo apt update
sudo apt install nginx
Tilføjelse af Nginx til firewall-indstillingerne
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)
Gå til din IP. Hvis alt går godt, skal du se følgende.
Installation af MySQL
sudo apt install mysql-server
- Lancering af et automatisk beskyttelsesscript
sudo mysql_secure_installation
Besvar de stillede spørgsmål. Hvis du ikke ved, hvad du skal svare, er her nogle foreslåede muligheder:
-
Valider password plugin -
N
-
Vil du fjerne anonyme brugere? —
Y
-
Vil du ikke tillade root-login eksternt? —
N
-
Vil du fjerne testdatabasen og få adgang til den? —
N
-
Genindlæse privilegietabeller nu? —
Y
-
Lad os gå til MySQL:
sudo mysql
-
Lad os se på adgangsmetoderne:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Indstil en adgangskode til root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Lad os se på adgangsmetoderne igen:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Anvend ændringerne og afslut MySQL:
FLUSH PRIVILEGES;
иexit
-
Nu skal du bruge for at logge på MySQL
mysql -u root -p
og indtast adgangskoden
Installation af PHP
Lad os bruge et tredjeparts lager fra
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
Lad os nu vælge. Til Laravel 7 kan du vælge PHP 7.3 eller 7.4. Den eneste forskel vil være i tallene 3 og 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) fungerer med PHP-anmodninger. mysql, selvfølgelig, for at arbejde med MySQL.
Fra nu af vil jeg gøre alt den 7.4.
Opsætning af Nginx
sudo vim /etc/nginx/sites-available/<Ваш домен>
I stedet for "<Dit domæne>" skal du indtaste domænet (f.eks. mysite.ru
), som du vil bruge i fremtiden. Hvis du ikke har en endnu, skriv nogen, og gentag bare trinene i dette kapitel for dit domæne, når du vælger det.
Indtaste følgende:
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;
}
}
Hvis du i stedet valgte version 7.3 php7.4-fpm.sock
Skriv ind php7.4-fpm.sock
.
Lyt til port 80 på server_name
når vi kommer til root-anmodningen /var/www/html
tag indeksfilen. Hvis efter server_name
Der er noget, vi leder efter sådan en fil. Hvis vi ikke finder det, smider vi 404. Hvis det ender med .php
, løbe igennem fpm
... Hvis der er .ht
, forbyde (403).
- At lave et link fra
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Fjerner linket til
default
:sudo unlink /etc/nginx/sites-enabled/default
- Kontrollerer for fejl:
sudo nginx -t
- Genstart:
sudo systemctl reload nginx
Kontrol af arbejdet:
sudo vim /var/www/html/info.php
- Vi skriver:
<?php phpinfo();
- Lad os gå til
<Ваш IP>/info.php
Du burde se noget som dette:
Nu kan denne fil slettes: sudo rm /var/www/html/info.php
Installer 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
-
Lad os gå til MySQL:
mysql -u root -p
-
Opret en database med navnet laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Vi giver root-adgang til laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Opret en mappe til projektet:
sudo mkdir -p <Имя проекта>
-
Vi giver brugeren laravel rettigheder til projektet:
sudo chown laravel:laravel <Имя проекта>
Dernæst skal du overføre projektet. For eksempel kloning fra Github.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Det er værd at overveje, at hvis du ikke har gemt statiske filer (for eksempel fra /public
) på Github, så vil du naturligvis ikke have dem. For eksempel oprettede jeg en separat tråd for at løse dette deploy
, hvorfra jeg allerede har klonet: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Installation af afhængigheder:
composer install
- Opret .env:
vim .env
Den grundlæggende version af den ser sådan ud:
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>
Hvis du kopierer din .env, skal du erstatte APP_ENV med produktion, APP_DEBUG med falsk og indtaste de korrekte indstillinger for MySQL.
- Migrering af databasen:
php artisan migrate
- Generering af koden:
php artisan key:generate
Ændring af tilladelser:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Den sidste ting tilbage er at omkonfigurere Nginx til 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;
}
}
Ligesom sidste gang, hvis du i stedet valgte version 7.3 php7.4-fpm.sock
Skriv ind php7.4-fpm.sock
.
Opsætning af et domæne på DigitalOcean
Alt er faktisk meget enkelt. Du køber et domæne (hvor som helst), skifter til DigitalOcean kl Opret->Domæner/DNS... I marken Tilføj et domæne du indtaster dette domæne og klikker på tilføje. Gå derefter til domæneindstillingerne og til feltet VÆRTSNAVN gå ind @. Vælg et projekt og klik Opret registrering.
Gå nu til siden, hvor du købte domænet, find "DNS Servers" der (eller noget lignende) og indtast DigitalOcean-serverne (nemligns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Nu skal du vente lidt (eller meget), indtil disse indstillinger er accepteret. Parat!
Det eneste problem er, at dit websted kun åbner som HTTP. For at have HTTPS, gå videre til næste del.
Opsætning af HTTPS
Installer certbot og giv den domænenavnet (format mysite.ru
) og domænenavn med 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.<Ваш домен>
Nu skal du omkonfigurere Nginx (glem ikke at erstatte dine værdier):
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;
}
}
Jeg tror, du allerede forstår, hvad der skal ændres for PHP 7.3.
Her er alt faktisk simpelt. Vi omdirigerer simpelthen alle anmodninger fra HTTP (port 80) til HTTPS (port 443). Og der gør vi alt det samme som før, men med kryptering.
Det eneste, der er tilbage, er at indstille tilladelserne i firewallen:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Nu skulle alt fungere som det skal.
[Avanceret] Installation af Node.js
Hvis du pludselig skal køre npm-kommandoer direkte på serveren, skal du installere Node.js.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Det var det, jeg stoppede på dette tidspunkt. I princippet er jeg tilfreds med resultatet. Måske vil jeg skifte fra DigitalOcean et sted tættere på Rusland og billigere. Men da jeg allerede havde gennemgået alle verifikationsrunderne på siden og gjort alt der, viste jeg dem ved eksempel. Derudover er deres start $100 et glimrende springbræt til træning.
PS Særlig tak til forfatteren
PPS Hvis du tilfældigvis er en topingeniør, der tænker i bash-kommandoer, skal du ikke dømme hårdt. Du synes måske, at denne artikel er på et lavt niveau, men jeg ville have været glad for at finde en, når jeg havde brug for den. Hvis der er forslag til forbedringer, er jeg helt for det.
Kilde: www.habr.com