
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.
Делать мы всё будем с дроплетом на DigitalOcean. Это, конечно, необязательно, выбирайте любой хостинг. Дойдете до рабочего сервера на Ubuntu, возвращайтесь. Для тех, кто все же решил делать на DigitalOcean, будут еще советы по настройке домена. А также .
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 laravelusermod -aG sudo laravelsu laravel
Tilføj SSH til det
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Indsæt den offentlige nøgle
chmod 600 ~/.ssh/authorized_keys
Firewall
sudo ufw allow OpenSSHsudo ufw enablesudo ufw status
Nginx
sudo apt updatesudo apt install -y nginxsudo ufw allow 'Nginx HTTP'sudo ufw status
MySQL
sudo apt install -y mysql-serversudo mysql_secure_installation,NYNNYsudo mysqlALTER 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 updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo apt update7.3:
sudo apt install -y php7.3-fpm php7.3-mysql7.4:
sudo apt install -y php7.4-fpm php7.4-mysqlsudo 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/defaultsudo nginx -tsudo systemctl reload nginx
Laravel
7.3:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip7.4:
sudo apt install -y php7.4-mbstring php7.4-xml composer unzipmysql -u root -pCREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';FLUSH PRIVILEGES;exitcd /var/www/htmlsudo mkdir -p <Имя проекта>sudo chown laravel:laravel <Имя проекта>cd ./<Имя проекта>git clone <ссылка на проект> ./git clone -b <имя ветки> --single-branch <ссылка на проект> .composer installvim .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 migratephp artisan key:generatesudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
HTTPS
sudo add-apt-repository ppa:certbot/certbotsudo apt install -y python-certbot-nginxsudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>sudo nginx -tsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo 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 ~/.sshchmod 700 ~/.sshvim ~/.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 updatesudo apt install nginx
Tilføjelse af Nginx til firewall-indstillingerne
sudo ufw app listsudo 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 -
NVil du fjerne anonyme brugere? —
YVil du ikke tillade root-login eksternt? —
NVil du fjerne testdatabasen og få adgang til den? —
NGenindlæse privilegietabeller nu? —
YLad os gå til MySQL:
sudo mysqlLad 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;иexitNu skal du bruge for at logge på MySQL
mysql -u root -pog indtast adgangskoden
Installation af PHP
Lad os bruge et tredjeparts lager fra
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo 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_namenå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 unzip7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzipLad os gå til MySQL:
mysql -u root -pOpret 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;exitcd /var/www/htmlOpret 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 storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -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/certbotsudo apt install python-certbot-nginxsudo 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 -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo 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 updatesudo apt install -y nodejs npmnodejs -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 , som tjente som grundlag for alle ovenstående handlinger. I nogle tilfælde virker det ikke for Laravel 7, jeg fiksede det.
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
