
Ek het besluit om my portefeulje te maak deur Laravel 7 te gebruik. Sodat die hoofblad 'n bestemmingsbladsy sou wees, en al die inligting daarop verander kan word deur die adminpaneel te gebruik. Nie die punt nie. Dit het by ontplooiing gekom. Ek het 'n paar goeie tutoriale gevind oor hoe om dit te doen op 'n volwaardige bediener met al die probleme. Ek is nie baie sterk in ontplooiing nie; ek is oor die algemeen meer voor as vol stapel. En as ek nog in PHP kan skryf en toets, dan voordat ek die bediener bestuur, ens. Ek het nog nie grootgeword nie. Maar ek moes dit uitvind.
Nou gaan ons deur al die stappe, begin met bekendstelling via SSH en eindig met die werkende webwerf. Ons sal probeer om al die slaggate te vermy.
Jy kan dalk soortgelyke instruksies aanlyn vind. Ek het dit darem uiteindelik gevind. Dit is waar, nie op een plek nie, nie sonder die hulp van StackOverflow nie, en skaars in Russies. Ek het gely. Daarom het ek besluit om jou lewe te vereenvoudig.
Ons sal alles met 'n druppel op DigitalOcean doen. Dit is natuurlik nie nodig nie; kies enige gasheer. Wanneer jy 'n werkende bediener op Ubuntu bereik, kom terug. Vir diegene wat nog besluit om dit op DigitalOcean te doen, sal daar meer wenke wees oor die opstel van 'n domein. En .
Alle DigitalOcean-spesifieke stappe sal in voetnote soos hierdie gegee word.
Kom ons begin.
TL;DR (slegs basiese opdragte)
Skep 'n gebruiker
ssh root@[IP-адрес вашего дроплета]adduser laravelusermod -aG sudo laravelsu laravel
Voeg SSH daarby
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Voeg die publieke sleutel in
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/<Ваш домен>
Basiese opstelling:
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;
}
}Slegs HTTP-opstelling vir 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-instelling vir 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
Skep 'n druppel op DigitalOcean en registreer 'n nuwe SSH-sleutel
Ek glo werklik dat jy self sal uitvind hoe om by DigitalOcean te registreer. Dit is nie maklik nie, met baie verifikasies en ander dinge. As u voortdurend 'n netwerkfout kry wanneer u dokumente verifieer, probeer om alles deur 'n VPN te doen, dit behoort te help.
Klik in die spyskaart bo-aan Skep->Druppeltjies. Kies Ubuntu.
Sodra jy registreer, sal jy $100 op jou rekening ontvang. Maar moenie geflous word nie. Jy het net 60 dae om dit te spandeer. En dit is baie min. Jy sal dalk, soos ek, ’n duurder plan wil gebruik, sodat jy later, wanneer die regte geld begin vloei, na ’n goedkoper een kan oorskakel. Ek sal jou dadelik sê dat dit nie sal werk nie. Jy kan dit verhoog, maar jy kan dit nie verminder nie. So gaan dit. ek kies Standard->$5.
Ek kies die streek naaste aan ons Frankfurt. VPC-netwerk->verstek-fra1
Ons sal onmiddellik stawing via SSH uitvoer. Klik Nuwe SSH-sleutel. As jy nie SSH het nie, is daar baie eenvoudige instruksies aan die regterkant. Maak 'n bash-terminaal oop en plak
ssh-keygen. Dan gaan ons na die lêer met die publieke sleutel/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(of eenvoudigcat ~/.ssh/id_rsa.pub), kopieer die inhoud en plak dit in die venster aan die linkerkant. Enige naam.Ons kom met 'n gasheernaam vir die druppel.
druk Skep druppel
Skep 'n nuwe gebruiker
ssh root@[IP-адрес вашего дроплета]- Is jy seker jy wil voortgaan om te koppel (ja/nee/[vingerafdruk])?
yes - Voer jou SSH-wagwoord in
- Skep 'n gebruiker larwe:
adduser laravel - Voer jou wagwoord en ander inligting in (ek voer net volle naam in)
- Voeg die gebruiker by die sudo-groep:
usermod -aG sudo laravel
SSH vir nuwe gebruiker
- Skakel oor na die nuwe gebruiker:
su laravel
Ons voer alle aksies verder uit, tot die einde van die artikel, namens die laravel-gebruiker. Daarom, as jy skielik onderbreek word, teken weer aan en voer in su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Ons het die lêer in Vim oopgemaak. As jy glad nie daarmee vertroud is nie, kan jy in Nano werk, jou reg.
Die mees basiese Vim-opdragte
Om die Vim-redigeerder deur die hele artikel te gebruik, moet u net die volgende weet.
- Vim het verskillende modusse: Normale modus, waarin jy opdragte invoer en modusse en ander kies.
- Om enige modus te verlaat en terug te keer na normale modus, druk net
Esc - Beweeg rond: jy kan net pyle gebruik
- Gaan uit sonder om te stoor
<Normal mode>::q! - Gaan uit en stoor
<Normal mode>::wq - Skakel oor na teksinvoermodus
<Normal mode>:i(uit die Engels. voeg)
- Ons sit ons publieke sleutel in (wat ons hierbo gedoen het)
- Ons beskerm teen veranderinge:
chmod 600 ~/.ssh/authorized_keys
Installering van 'n firewall
- Kom ons kyk na al die beskikbare instellings:
sudo ufw app list - Laat OpenSSH toe (anders sluit dit ons):
sudo ufw allow OpenSSH - Kom ons begin die firewall:
sudo ufw enable,y - Ons kyk na:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Alles is reg.
Installeer Nginx
Tydens installasie sal jy soms gevra word "Is jy seker?" Antwoord y (wel, net as jy seker is).
sudo apt updatesudo apt install nginx
Voeg Nginx by die firewall-instellings
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)Gaan na jou IP. As alles goed gaan, behoort jy die volgende te sien.

MySQL installeer
sudo apt install mysql-server- Begin 'n outomatiese beskermingskrip
sudo mysql_secure_installation
Beantwoord die vrae wat gevra word. As jy nie weet wat om te antwoord nie, hier is 'n paar voorgestelde opsies:
Bekragtig wagwoord-inprop -
NVerwyder anonieme gebruikers? —
YVerhinder wortelaanmelding op afstand? —
NVerwyder toetsdatabasis en toegang daartoe? —
NHerlaai nou voorregtetabelle? —
YKom ons gaan na MySQL:
sudo mysqlKom ons kyk na die toegangsmetodes:
SELECT user,authentication_string,plugin,host FROM mysql.user;Stel 'n wagwoord vir root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';Kom ons kyk weer na die toegangsmetodes:
SELECT user,authentication_string,plugin,host FROM mysql.user;Pas die veranderinge toe en verlaat MySQL:
FLUSH PRIVILEGES;иexitNou moet jy gebruik om by MySQL aan te meld
mysql -u root -pen voer die wagwoord in
Installeer PHP
Kom ons gebruik 'n derdeparty-bewaarplek vanaf
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo apt update
Kom ons kies nou. Vir Laravel 7 kan jy PHP 7.3 of 7.4 kies. Die enigste verskil sal in die nommers 3 en 4 wees.
- 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 Prosesbestuurder (fpm) werk met PHP-versoeke. mysql, natuurlik, om met MySQL te werk.
Van nou af sal ek alles op 7.4 doen.
Stel Nginx op
sudo vim /etc/nginx/sites-available/<Ваш домен>
In plaas van "<Jou domein>" voer die domein in (byvoorbeeld, mysite.ru) wat jy in die toekoms wil gebruik. As jy nog nie een het nie, skryf enige, en herhaal dan net die stappe in hierdie hoofstuk vir jou domein wanneer jy dit kies.
Voer die volgende in:
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;
}
}As jy eerder weergawe 7.3 gekies het php7.4-fpm.sock skryf in php7.4-fpm.sock.
Luister na poort 80 aan server_namewanneer ons by die wortelversoek uitkom /var/www/html neem die indekslêer. Indien na server_name Daar is iets, ons soek so 'n lêer. As ons dit nie kry nie, gooi ons 404 uit. As dit eindig met .php, hardloop deur fpm... As daar is .ht, verbied (403).
- Maak 'n skakel van
sites-availableвsites-enabled:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/ - Verwyder tans die skakel na
default:sudo unlink /etc/nginx/sites-enabled/default - Kontroleer vir foute:
sudo nginx -t - Herlaai:
sudo systemctl reload nginx
Kontroleer die werk:
sudo vim /var/www/html/info.php- Ons skryf:
<?php phpinfo(); - Kom ons gaan na
<Ваш IP>/info.php
Jy behoort so iets te sien:

Nou kan hierdie lêer uitgevee word: sudo rm /var/www/html/info.php
Installeer 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 unzipKom ons gaan na MySQL:
mysql -u root -pSkep 'n databasis met die naam larwe:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Ons bied wortel toegang tot larwe:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';FLUSH PRIVILEGES;exitcd /var/www/htmlSkep 'n gids vir die projek:
sudo mkdir -p <Имя проекта>Ons verskaf die gebruiker larwe regte op die projek:
sudo chown laravel:laravel <Имя проекта>
Volgende moet jy die projek oordra. Byvoorbeeld, kloning vanaf Github.
cd ./<Имя проекта>git clone <ссылка на проект> .
Dit is die moeite werd om te oorweeg dat as jy nie statiese lêers gestoor het nie (byvoorbeeld van /public) op Github, dan sal jy dit natuurlik nie hê nie. Ek het byvoorbeeld 'n aparte draad geskep om dit op te los deploy, waaruit ek reeds gekloon het: git clone -b <имя ветки> --single-branch <ссылка на проект> ..
- Installeer afhanklikhede:
composer install - Skep .env:
vim .env
Die basiese weergawe daarvan lyk soos volg:
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>As jy jou .env kopieer, vervang APP_ENV met produksie, APP_DEBUG met vals en voer die korrekte instellings vir MySQL in.
- Migreer die databasis:
php artisan migrate - Genereer die kode:
php artisan key:generate
Verander toestemmings:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Die laaste ding wat oorbly is om Nginx vir Laravel te herkonfigureer:
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;
}
}Soos verlede keer, as jy eerder weergawe 7.3 gekies het php7.4-fpm.sock skryf in php7.4-fpm.sock.
Stel 'n domein op DigitalOcean op
Alles is eintlik baie eenvoudig. Jy koop 'n domein (enige plek), skakel oor na DigitalOcean by Skep->Domeine/DNS... In die veld Voeg 'n domein by jy gaan hierdie domein in en klik byvoeg. Gaan dan na die domeininstellings en na die veld GASTNAAM ingaan @. Kies 'n projek en klik Skep rekord.
Gaan nou na die webwerf waar jy die domein gekoop het, vind “DNS Servers” daar (of iets soortgelyks) en voer die DigitalOcean-bedieners in (naamlikns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Nou moet jy 'n bietjie (of baie) wag totdat hierdie instellings aanvaar word. Klaar!
Die enigste probleem is dat u webwerf slegs as HTTP sal oopmaak. Gaan na die volgende deel om HTTPS te hê.
Die opstel van HTTPS
Installeer certbot en gee dit die domeinnaam (formaat mysite.ru) en domeinnaam met 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.<Ваш домен>
Nou moet jy Nginx herkonfigureer (moenie vergeet om jou waardes te vervang nie):
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;
}
}Ek dink jy verstaan reeds wat verander moet word vir PHP 7.3.
Hier is alles eintlik eenvoudig. Ons herlei eenvoudig alle versoeke van HTTP (poort 80) na HTTPS (poort 443). En daar doen ons alles dieselfde as voorheen, maar met enkripsie.
Al wat oorbly is om die toestemmings in die firewall in te stel:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Nou moet alles werk soos dit moet.
[Gevorderd] Installeer Node.js
As jy skielik npm-opdragte direk op die bediener moet uitvoer, moet jy Node.js installeer.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Dis dit, ek het op hierdie stadium gestop. In beginsel is ek tevrede met die resultaat. Miskien sal ek van DigitalOcean oorskakel iewers nader aan Rusland en goedkoper. Maar aangesien ek reeds deur al die verifikasie rondtes op die webwerf gegaan het en alles daar gedoen het, het ek hulle deur voorbeeld gewys. Daarbenewens is hul begin $100 'n uitstekende springplank vir opleiding.
NS Spesiale dank aan die skrywer , wat as basis gedien het vir al die bogenoemde aksies. In sommige gevalle werk dit nie vir Laravel 7 nie, ek het dit reggemaak.
PPS As jy toevallig 'n top-ingenieur is wat in bash-opdragte dink, moet asseblief nie hard oordeel nie. U mag vind dat hierdie artikel van 'n lae vlak is, maar ek sou bly gewees het om een te vind toe ek dit nodig gehad het. As daar voorstelle vir verbetering is, is ek almal daarvoor.
Bron: will.com
