
Jeg besluttede at lave min portefølje på Laravel 7. Hjemmesiden skulle være en landingpage, hvor al information kunne ændres via et adminpanel. Det er ikke vigtigt. Det kom til deployment. Jeg fandt et par gode tutorials til, hvordan man gør det på en fuld server med alle besværlighederne. Jeg er ikke så stærk i deployment, jeg er mere frontend end fullstack. Og hvis jeg kan skrive og teste i PHP, så er jeg stadig ikke nået til serveradministration osv. Men jeg måtte finde ud af det.
Lad os tage et kig på alle trin, fra at starte via SSH til at have et fungerende websted. Vi vil forsøge at undgå alle faldgruber.
Du kan måske finde lignende instruktioner på internettet. For jeg fandt dem trods alt, selvom ikke ét sted, og ikke uden hjælp fra StackOverflow, og næppe på russisk. Jeg kæmpede for det. Derfor besluttede jeg at gøre livet lettere for jer.
Vi vil gøre alt med en droplet på DigitalOcean. Det er selvfølgelig ikke nødvendigt, så vælg hvilken som helst hosting. Når du kommer til en fungerende server på Ubuntu, så kom tilbage. For dem der har besluttet at bruge DigitalOcean, vil der også være råd til domæneopsætning. Derudover .
Alle specifikke trin for DigitalOcean vil blive givet i sådan nogle fodnoter.
Lad os begynde.
TL;DR (bare de vigtigste kommandoer)
Opret en bruger
ssh root@[IP-adressen på din droplet]adduser laravelusermod -aG sudo laravelsu laravel
Vi tilføjer hans SSH
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 '';SELECT user, authentication_string, plugin, host FROM mysql.user;FLUSH PRIVILEGES;sigreturn
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/
Basisopsætning:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name ;
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 ;
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 opsætning til 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 '';FLUSH PRIVILEGES;sigreturncd /var/www/htmlsudo mkdir -psudo chown laravel:laravelcd ./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=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
Opretter en droplet på DigitalOcean og registrerer en ny SSH-nøgle
Jeg tror oprigtigt, at du selv kan finde ud af registreringen på DigitalOcean. Det er ikke nemt, med mange verifikationer og diverse andre ting. Hvis du oplever netværksfejl ved dokumentverificeringen, så prøv at gøre det via VPN, det skulle hjælpe.
I menuen øverst klikker vi på Opret->Droplets. Vi vælger Ubuntu.
Når du er registreret, får du 100$ på kontoen. Men lad dig ikke narre. Du har kun 60 dage til at bruge dem. Det er meget lidt. Du kan, ligesom jeg, overveje at bruge en dyrere plan, så du senere kan skifte til en billigere, når pengene begynder at komme ind. Jeg siger det med det samme, det er ikke muligt. Du kan kun opgradere, ikke nedgradere. Sådan er det. Jeg vælger Standard->$5.
Jeg vælger den nærmeste region Frankfurt. VPC Network->default-fra1
Lad os straks gøre autentificeringen via SSH. Klik på New SSH Key. Hvis du ikke har SSH, er der en meget simpel vejledning til højre. Åbn bash-terminalen, indsæt
ssh-keygen. Gå derefter ind i filen med den offentlige nøgle/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(eller blotcat ~\/ .ssh\/id_rsa.pub), kopier indholdet og indsæt det i vinduet til venstre. Navnet kan være hvad som helst.Find på et værtsnavn til droplet'en.
Klik på Create Droplet
Opret en ny bruger
ssh root@[IP-adressen på din droplet]- Er du sikker på, at du vil fortsætte med at oprette forbindelse (yes/no/[fingerprint])?
yes - Indtast dit SSH-password
- Opret en bruger laravel:
adduser laravel - Indtast password og andre oplysninger (jeg indtaster kun Fulde navn)
- Tilføj brugeren til sudo-gruppen:
usermod -aG sudo laravel
SSH til den nye bruger
- Skift til den nye bruger:
su laravel
Alle handlinger fra nu af, indtil slutningen af artiklen, udføres som brugeren laravel. Så hvis du pludselig blev afbrudt, skal du logge ind igen og indtaste su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Vi har åbnet filen i Vim. Hvis du ikke kender det overhovedet, kan du arbejde i Nano, det er dit valg.
De mest grundlæggende Vim-kommandoer
For at kunne bruge Vim-editoren under artiklen, behøver du blot at vide følgende.
- I Vim er der forskellige tilstande: normal (Normal mode), hvor du indtaster kommandoer og vælger andre tilstande.
- For at gå ud af enhver tilstand og komme ind i normal tilstand skal du blot trykke
Esc - Bevægelse: du kan blot bruge piletasterne
- Gå ud uden at gemme
<Normal mode>::q! - Gå ud og gem
<Normal mode>::wq - Skift til tekstindgangstilstand
<Normal mode>:i(fra engelsk. insert)
- Indsæt vores offentlige nøgle (den vi lavede tidligere)
- Beskyt mod ændringer:
chmod 600 ~/.ssh/authorized_keys
Installer firewall
- Se alle tilgængelige indstillinger:
sudo ufw app list - Tillad OpenSSH (ellers bliver vi låst ude):
sudo ufw allow OpenSSH - Start firewallen:
sudo ufw enable,y - Vi tjekker:
sudo ufw status
Status: aktiv
Til Handling Fra
-- ------ ----
OpenSSH TILLAD Overalt
OpenSSH (v6) TILLAD Overalt (v6)Alt er i orden.
Installer Nginx
Når du installerer, vil det nogle gange spørge 'Er du sikker?'. Svar y (kun hvis du er sikker).
sudo apt updatesudo apt install nginx
Tilføj Nginx til firewallindstillingerne
sudo ufw app listsudo ufw allow 'Nginx HTTP'sudo ufw status
Status: aktiv
Til Handling Fra
-- ------ ----
OpenSSH TILLAD Overalt
Nginx HTTP TILLAD Overalt
OpenSSH (v6) TILLAD Overalt (v6)
Nginx HTTP (v6) TILLAD Overalt (v6)Gå til din IP. Hvis alt går godt, skal du se følgende.

Installerer MySQL
sudo apt install mysql-server- Starter det automatiske beskyttelsesscript
sudo mysql_secure_installation
Svar på de stillede spørgsmål. Hvis du ikke ved, hvad du skal svare, her er nogle anbefalede muligheder:
Validér password-plugin —
NFjerne anonyme brugere? —
YForbyde root-login eksternt? —
NFjerne testdatabase og adgang til den? —
NGenindlæse privilegietabeller nu? —
YLog ind i MySQL:
sudo mysqlTjekker adgangsmetoder:
SELECT user, authentication_string, plugin, host FROM mysql.user;Sætter password for root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';Tjekker adgangsmetoder igen:
SELECT user, authentication_string, plugin, host FROM mysql.user;Anvender ændringerne og logger ud af MySQL:
FLUSH PRIVILEGES;ogsigreturnNu skal du bruge
mysql -u root -pog indtaste password
Installerer PHP
Vi bruger et eksternt repository 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
Nu vælger vi. For Laravel 7 kan du vælge PHP 7.3 eller 7.4. Forskellen vil kun 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) arbejder med PHP-anmodninger. mysql, naturligvis, til arbejde med MySQL.
Fremover vil jeg gøre alt på 7.4.
Konfigurerer Nginx
sudo vim /etc/nginx/sites-available/
I stedet for "" skal du indtaste dit domæne (f.eks., mysite.ru), som du ønsker at bruge i fremtiden. Hvis du ikke har et endnu, så skriv et hvilket som helst, og gentag derefter handlingerne i dette kapitel for dit domæne, når du vælger det.
Indtast følgende:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name ;
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 valgte version 7.3 i stedet for php7.4-fpm.sock indtast php7.4-fpm.sock.
Lytter på port 80 på server_name, når vi modtager anmodning i roden /var/www/html tager vi index-filen. Hvis der er noget efter server_name , søger vi efter en sådan fil. Finder vi ikke, smider vi 404. Hvis det ender på .php, sender vi det gennem fpm. Hvis der er .ht, forbyder (403).
- Laver et link fra
sites-availableisites-enabled:sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ - Fjerner linket til
default:sudo unlink /etc/nginx/sites-enabled/default - Tjekker for fejl:
sudo nginx -t - Genstarter:
sudo systemctl reload nginx
Tjekker funktionalitet:
sudo vim /var/www/html/info.php- Skriv:
<?php phpinfo(); - Gå til
/info.php
Du skal se noget som dette:

Nu kan denne fil slettes: sudo rm /var/www/html/info.php
Installerer 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 unzipLog ind i MySQL:
mysql -u root -pOpretter en database med navnet laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Giver root adgang til laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;sigreturncd /var/www/htmlOpretter en mappe til projektet:
sudo mkdir -pGiver brugeren laravel rettigheder til projektet:
sudo chown laravel:laravel
Derefter skal projektet overføres. For eksempel ved at klone fra Github.
cd ./git clone .
Det er vigtigt at huske, at hvis du ikke har gemt statiske filer (f.eks. fra /public) på Github, så har du dem naturligvis ikke. Jeg, for eksempel, har oprettet en separat gren deploy, som jeg allerede har klonet fra: git clone -b --single-branch ..
- Installer afhængigheder:
composer install - Opret .env:
vim .env
Den grundlæggende version 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=Hvis du kopierer din .env, skal du ændre APP_ENV til production, APP_DEBUG til false og indtaste de korrekte indstillinger for MySQL.
- Migrerer DB:
php artisan migrate - Genererer kode:
php artisan key:generate
Ændrer tilladelser:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Det sidste, der er 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 ;
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;
}
}Som sidst, hvis du valgte version 7.3 i stedet for php7.4-fpm.sock indtast php7.4-fpm.sock.
Domæneindstilling på DigitalOcean
Det er faktisk meget enkelt. Du køber et domæne (hvor som helst), går til DigitalOcean i Opret->Domains/DNS. I feltet Tilføj et domæne indtaster du dette domæne, trykker på tilføj. Gå derefter til domæneindstillingerne og i feltet HOSTNAME indtaster du @. Vælg projektet og klik på Opret post.
Gå nu til den hjemmeside, hvor du købte domænet, find "DNS-servere" (eller noget lignende) og indtast DigitalOcean-serverne (nemligns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Nu skal vi vente lidt (eller meget), indtil disse indstillinger bliver accepteret. Færdig!
Det eneste problem er, at din hjemmeside kun vil åbne som HTTP. For at få HTTPS skal vi gå til næste del.
Indstiller HTTPS
Installerer certbot og giver det domænenavnet (i formatet mysite.ru) og domænenavnet 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 Nginx omkonfigureres (glem ikke at indsætte 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 har forstået, hvad der skal ændres for PHP 7.3.
Her er faktisk alt meget simpelt. Vi omdirigerer bare 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 er nu tid til at sætte tilladelser i firewallen:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Nu skal alt fungere som det skal.
[Дополнительно] Установка Node.js
Hvis du pludselig har brug for at køre npm-kommandoer direkte på serveren, skal du installere Node.js.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Det er det, jeg stopper ved dette trin. Grundlæggende er jeg tilfreds med resultatet. Måske vil jeg flytte fra DigitalOcean til et sted tættere på Rusland og billigere. Men da jeg allerede har gennemgået alle verificeringsprocesser på deres websted og har gjort alt der, viste jeg det som et eksempel. Deres startpakke på 100 dollars – er en fremragende platform til træning.
P.S. En særlig tak til forfatteren , som var grundlaget for alle ovenstående handlinger. Den fungerer ikke i nogle tilfælde for Laravel 7, jeg har rettet det.
P.P.S. Hvis du tilfældigvis er en topingeniør, der tænker i bash-kommandoer, så døm venligst ikke for hårdt. Måske virker niveauet af denne artikel for lavt for dig, men jeg ville være glad for at finde noget sådant, når jeg havde brug for det. Hvis der er forslag til forbedringer, er jeg helt åben for det.
Kilde: habr.com
