
Jag bestÀmde mig för att skapa min portfolio pÄ Laravel 7. SÄ att startsidan skulle vara en landningssida, och all information pÄ den skulle kunna Àndras via adminpanelen. Det Àr inte det viktigaste. Nu handlar det om distributionen. Jag hittade nÄgra bra handledningar om hur man gör det pÄ en riktig server med alla finesser. Jag Àr inte sÄ stark pÄ distribution, jag Àr egentligen mer frontend Àn fullstack. Om jag kan skriva och testa i PHP, sÄ har jag fortfarande en bit kvar till att hantera en server och liknande. Men jag var tvungen att sÀtta mig in i det.
Nu gÄr vi igenom alla steg, frÄn att starta via SSH till en fungerande webbplats. Vi ska försöka undvika alla fallgropar.
Du kanske kan hitta liknande instruktioner pÄ internet. För i slutÀndan hittade jag dem. Visserligen inte pÄ ett stÀlle, inte utan hjÀlp av StackOverflow, och knappast pÄ ryska. Jag kÀmpade med det. SÄ jag bestÀmde mig för att förenkla livet för dig.
Allt vi gör kommer att utföras med en droplet pÄ DigitalOcean. Det Àr sjÀlvklart inte nödvÀndigt, vÀlj vilken webbhotell som helst. NÀr du Àr framme vid en fungerande server pÄ Ubuntu, kom tillbaka. För dem som ÀndÄ har beslutat sig för att anvÀnda DigitalOcean, kommer det Àven att finnas fler tips för domÀninstÀllningar. Och ocksÄ .
Alla specifika steg för DigitalOcean kommer att ges i liknande fotnoter.
LÄt oss börja.
TL;DR (bara de viktigaste kommandona)
Skapa en anvÀndare
ssh root@[IP-adressen till din droplet]adduser laravelusermod -aG sudo laravelsu laravel
LĂ€gg till SSH
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Klistra in den offentliga nyckeln
chmod 600 ~/.ssh/authorized_keys
BrandvÀgg
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;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Àggande instÀllning:
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;
}
}Bara HTTP-instÀllningen för 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-konfiguration för 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:ECDHE-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;exitcd /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
Skapa en droplet pÄ DigitalOcean och registrera en ny SSH-nyckel
Jag litar verkligen pÄ att ni sjÀlva kommer att förstÄ registreringen pÄ DigitalOcean. Det Àr inte enkelt, med mÄnga verifieringar och annan krÄngel. Om ni fÄr nÀtverksfel vid verifieringen med dokument, försök att göra allt via VPN, det borde hjÀlpa.
I menyn högst upp klickar vi pÄ Skapa->Droplets. VÀlj Ubuntu.
SÄ snart du har registrerat dig fÄr du 100 $ pÄ kontot. Men kom ihÄg att du har bara 60 dagar pÄ dig att anvÀnda dem, vilket Àr ganska kort. Du kan, precis som jag, vilja vÀlja en dyrare plan för att sedan byta till en billigare nÀr de riktiga pengarna börjar komma in. Jag sÀger direkt att det inte gÄr. Du kan öka, men inte minska. SÄ Àr lÀget. Jag vÀljer Standard->$5.
Regionen jag vÀljer Àr den nÀrmaste oss Frankfurt. VPC NÀtverk->default-fra1
Vi kommer att göra autentiseringen via SSH direkt. Klicka pĂ„ Ny SSH Nyckel. Om du inte har SSH, finns det en vĂ€ldigt enkl instruktion till höger. Ăppna bash-terminalen, klistra in
ssh-keygen. GĂ„ sedan till filen med den offentliga nyckeln/Users/<ĐаŃĐ” ĐžĐŒŃ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлŃ>/.ssh/id_rsa.pub(eller baracat ~\/\.ssh\/id_rsa.pub), kopiera innehĂ„llet och klistra in det i fönstret till vĂ€nster. Namnet kan vara vad som helst.Vi vĂ€ljer ett vĂ€rdnamn för droplet.
Klicka pÄ Skapa Droplet
Skapa en ny anvÀndare
ssh root@[IP-adressen till din droplet]- Ăr du sĂ€ker pĂ„ att du vill fortsĂ€tta ansluta (ja/nej/[fingeravtryck])?
ja - Ange ditt SSH-lösenord
- Skapa en anvÀndare laravel:
adduser laravel - Ange lösenordet och annan information (jag anger bara FullstÀndigt namn)
- LÀgg till anvÀndaren i sudo-gruppen:
usermod -aG sudo laravel
SSH för den nya anvÀndaren
- Byt till den nya anvÀndaren:
su laravel
Alla ÄtgÀrder frÄn och med nu, fram till slutet av artikeln, görs under anvÀndarnamnet laravel. SÄ om du skulle bli avbruten, logga in igen och ange su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Vi har öppnat filen i Vim. Om du inte Àr bekant med det kan du arbeta i Nano, det Àr upp till dig.
De mest grundlÀggande kommandona i Vim
För att anvÀnda redigeraren Vim genom artikeln behöver du veta följande.
- I Vim finns det olika lÀgen: normalt (Normal mode), dÀr du anger kommandon och vÀljer lÀgen samt andra.
- För att gÄ ur vilket lÀge som helst och komma till normalt lÀge, tryck pÄ
Esc - Navigera: du kan anvÀnda piltangenterna
- Avsluta utan att spara
<Normal mode>::q! - Avsluta och spara
<Normal mode>::wq - GÄ till textinmatningslÀge
<Normal mode>:i(frÄn eng. insÀttning)
- Klistra in vÄr offentliga nyckel (som vi har skapat ovan)
- Skydda mot Àndringar:
chmod 600 ~/.ssh/authorized_keys
Installera brandvÀggen
- Se alla tillgÀngliga instÀllningar:
sudo ufw app list - TillÄt OpenSSH (annars blir vi blockerade):
sudo ufw allow OpenSSH - Starta brandvÀggen:
sudo ufw enable,y - Kontrollerar:
sudo ufw status
Status: aktiv
Till Ă
tgÀrd FrÄn
-- ------ ----
OpenSSH TILLĂ
T Ăverallt
OpenSSH (v6) TILLĂ
T Ăverallt (v6)Allt ser bra ut.
Installera Nginx
Vid installation frĂ„gar de ibland "Ăr du sĂ€ker?". Svara y (bara om du Ă€r sĂ€ker).
sudo apt updatesudo apt install nginx
LÀgg till Nginx i brandvÀggens instÀllningar
sudo ufw app listsudo ufw allow 'Nginx HTTP'sudo ufw status
Status: aktiv
Till Ă
tgÀrd FrÄn
-- ------ ----
OpenSSH TILLĂ
T Ăverallt
Nginx HTTP TILLĂ
T Ăverallt
OpenSSH (v6) TILLĂ
T Ăverallt (v6)
Nginx HTTP (v6) TILLĂ
T Ăverallt (v6)GĂ„ till din IP. Om allt gĂ„r bra bör du se följande.

Installerar MySQL
sudo apt install mysql-server- Kör automatiskt skydds-skript
sudo mysql_secure_installation
Svara pÄ de stÀllda frÄgorna. Om du inte vet vad du ska svara, hÀr Àr rekommenderade alternativ:
Validate password plugin â
NTa bort anonyma anvĂ€ndare? â
YFörhindra root-inloggning pĂ„ distans? â
NTa bort testdatabas och Ă„tkomst till den? â
NLadda om privilegietabellerna nu? â
YLoggar in i MySQL:
sudo mysqlSer Ätkomstmetoder:
SELECT user, authentication_string, plugin, host FROM mysql.user;SÀtter lösenord för root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';Ser Ätkomstmetoder igen:
SELECT user, authentication_string, plugin, host FROM mysql.user;TillÀmpa Àndringar och logga ut frÄn MySQL:
FLUSH PRIVILEGES;ochexitNu, för att logga in i MySQL mÄste du anvÀnda
mysql -u root -poch ange lösenordet
Installerar PHP
Vi anvÀnder ett tredjepartsrepository frÄn
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Àljer vi. För Laravel 7 kan du vÀlja PHP 7.3 eller 7.4. Skillnaden kommer endast vara siffrorna 3 och 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) hanterar PHP-förfrÄgningar. mysql, naturligtvis, för att arbeta med MySQL.
DÀrefter kommer jag att anvÀnda 7.4.
Konfigurerar Nginx
sudo vim /etc/nginx/sites-available/
IstÀllet för "<Ditt domÀnnamn>" skriv in domÀnen (till exempel, mysite.ru), som du vill anvÀnda i framtiden. Om du inte har en sÄdan Ànnu, skriv vilken som helst, upprepa bara stegen i detta avsnitt för din domÀn nÀr du har valt den.
Skriv följande:
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;
}
}Om du valde version 7.3 istÀllet för php7.4-fpm.sock skriv in php7.4-fpm.sock.
Lyssnar pÄ port 80 pÄ server_name, nÀr en förfrÄgan kommer in i roten /var/www/html tar vi index-filen. Om det finns nÄgot efter server_name letar vi efter en sÄdan fil. Om vi inte hittar den, fÄr vi 404. Om det slutar pÄ .php, kör vi genom fpm. Om det finns .ht, förbjuda (403).
- Vi gör en lÀnk frÄn
sites-availablepÄsites-enabled:sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ - Tar bort lÀnken till
default:sudo unlink /etc/nginx/sites-enabled/default - Kontrollerar för fel:
sudo nginx -t - Startar om:
sudo systemctl reload nginx
Kontrollerar funktionalitet:
sudo vim /var/www/html/info.php- Skriv:
<?php phpinfo(); - GĂ„ till
<Din IP>/info.php
Du bör se nÄgot liknande:

Nu kan den hÀr filen tas bort: sudo rm /var/www/html/info.php
Installerar 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 unzipLoggar in i MySQL:
mysql -u root -pSkapar en databas med namnet laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Ger root-Ätkomst till laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;exitcd /var/www/htmlSkapar en mapp för projektet:
sudo mkdir -pGer anvÀndaren laravel behörigheter pÄ projektet:
sudo chown laravel:laravel
DÀrefter mÄste projektet flyttas. Till exempel, genom kloning frÄn Github.
cd ./git clone .
Det Àr vÀrt att tÀnka pÄ att om du inte har sparat statiska filer (till exempel frÄn /public) pÄ Github, sÄ kommer du givetvis inte att ha dem. Jag, till exempel, skapade en separat gren deploy, frÄn vilken jag sedan klonade: git clone -b --single-branch ..
- Installerar beroenden:
composer install - Skapar .env:
vim .env
Basversionen ser ut sÄ hÀr:
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=Om du kopierar din .env, ersÀtt APP_ENV med production, APP_DEBUG med false och skriv in rÀtt instÀllningar för MySQL.
- Migrerar databasen:
php artisan migrate - Genererar kod:
php artisan key:generate
Ăndrar behörigheter:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Det sista som ÄterstÄr Àr att konfigurera Nginx för 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 tidigare, om du valde version 7.3 istÀllet för php7.4-fpm.sock skriv in php7.4-fpm.sock.
InstÀllning av domÀn pÄ DigitalOcean
Allt Àr faktiskt vÀldigt enkelt. Du köper en domÀn (var som helst), gÄr till DigitalOcean i Skapa->Domains/DNS. I fÀltet LÀgg till en domÀn anger du denna domÀn, klickar pÄ lÀgg till. Sedan gÄr du till domÀninstÀllningarna och i fÀltet HOSTNAME anger du @. VÀlj projekt och klicka pÄ Skapa post.
Nu gÄr du till webbplatsen dÀr du köpte domÀnen, hittar 'DNS-servrar' (eller nÄgot liknande) och skriver in DigitalOcean-servrarna (precis somns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Nu mÄste du vÀnta lite (eller lÀnge) medan dessa instÀllningar accepteras. Klart!
Det enda problemet Àr att din webbplats kommer att öppnas endast som HTTP. För att fÄ HTTPS, gÄ till nÀsta del.
Konfigurerar HTTPS
Installerar certbot och ger den domÀnnamnet (formatet mysite.ru) och domÀnnamnet 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 mÄste du omkonfigurera Nginx (glöm inte att sÀtta in dina vÀrden):
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:ECDHE-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;
}
}Jag tror att du redan har förstÄtt vad som behöver Àndras för PHP 7.3.
HÀr Àr allt faktiskt ganska enkelt. Vi omdirigerar alla förfrÄgningar frÄn HTTP (port 80) till HTTPS (port 443). Och dÀr gör vi allt som tidigare, men redan med kryptering.
KvarstÄr att sÀtta behörigheter i brandvÀggen:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Nu bör allt fungera som det ska.
[ĐĐŸĐżĐŸĐ»ĐœĐžŃДлŃĐœĐŸ] ĐŁŃŃĐ°ĐœĐŸĐČĐșа Node.js
Om du plötsligt behöver köra npm-kommandon direkt pÄ servern, behöver du installera Node.js.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Det Àr allt, jag stannade vid det hÀr steget. I princip Àr jag nöjd med resultatet. Kanske kommer jag att flytta frÄn DigitalOcean till nÄgot nÀrmare Ryssland och billigare. Men eftersom jag redan har genomgÄtt alla verifieringssteg pÄ sidan och gjort allt dÀr, anvÀnder jag deras exempel. Dessutom Àr deras start pÄ 100 dollar en utmÀrkt plattform för trÀning.
P.S. Stort tack till författaren , som var grunden för alla ovanstÄende ÄtgÀrder. Den fungerar inte i vissa avseenden för Laravel 7, det har jag fixat.
P.P.S. Om du rÄkar vara en toppingenjör som tÀnker i bash-kommandon, var snÀll och döm inte för hÄrt. Det kan hÀnda att nivÄn pÄ den hÀr artikeln kÀnns lÄg för dig, men jag skulle verkligen ha uppskattat att hitta nÄgot sÄdant nÀr jag behövde det. Om du har förslag pÄ förbÀttringar, Àr jag helt öppen för det.
KĂ€lla: habr.com
