
Ik besloot mijn portfolio te maken op Laravel 7. De homepage moest een landingspagina zijn, waarbij alle informatie via het beheerpaneel kon worden gewijzigd. Maar dat doet er niet toe. Het kwam aan op de implementatie. Ik vond een paar goede tutorials over hoe dit op een echte server te doen met alle ingewikkeldheden. Ik ben niet sterk in implementatie; ik ben meer een front-end ontwikkelaar dan een full-stack ontwikkelaar. Hoewel ik nog kan coderen en testen in PHP, ben ik nog niet op het punt gekomen om de serverbeheer enzovoorts aan te pakken. Maar ik moest me erin verdiepen.
Laten we alle stappen doorlopen, van het opstarten via SSH totdat de website werkt. We zullen proberen alle valkuilen te vermijden.
Misschien kunt u soortgelijke instructies op internet vinden. Uiteindelijk heb ik dat ook gedaan. Maar niet op één plek, niet zonder de hulp van StackOverflow en waarschijnlijk niet in het Nederlands. Ik heb me een tijdlang ingespannen. Daarom heb ik besloten om uw leven te vergemakkelijken.
We zullen alles doen met een droplet op DigitalOcean. Dit is echter niet verplicht; u kunt elke hostingprovider kiezen. Zodra u een werkende server op Ubuntu hebt, kunt u terugkomen. Voor degenen die toch voor DigitalOcean hebben gekozen, komen er nog tips voor het instellen van een domein. En ook .
Alle specifieke stappen voor DigitalOcean worden in vergelijkbare voetnoten gegeven.
Laten we beginnen.
TL;DR (alleen de belangrijkste commando's)
Maak een gebruiker aan
ssh root@[IP-adres van uw droplet]adduser laravelusermod -aG sudo laravelsu laravel
SSH toevoegen
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Plak de publieke sleutel
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;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/
Basisinstelling:
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;
}
}Alleen de HTTP-instellingen voor 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 instelling voor 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;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
Creëer een droplet op DigitalOcean en registreer een nieuwe SSH-sleutel
Ik geloof er oprecht in dat je zelf de registratie op DigitalOcean zult begrijpen. Het is niet eenvoudig, met veel verificaties en andere rompslomp. Als er zich een netwerkfout voordoet tijdens de verificatie met documenten, probeer het dan met een VPN, dat zou moeten helpen.
Klik bovenaan op Create->Droplets. Kies Ubuntu.
Zodra je je registreert, ontvang je $100 op je account. Maar laat je niet misleiden. Je hebt maar 60 dagen om ze uit te geven. Dat is heel kort. Je zou, net als ik, misschien willen upgraden naar een duurder plan om later, wanneer het echte geld binnenkomt, naar een goedkoper plan over te stappen. Ik zeg het meteen, dat kan niet. Je kunt alleen upgraden, niet downgraden. Dat is de deal. Ik kies Standard->$5.
De regio kies ik het dichtst bij ons Frankfurt. VPC Netwerk->default-fra1
We doen de authenticatie meteen via SSH. Klik op Nieuwe SSH-sleutel. Als je geen SSH hebt, staat er rechts een heel eenvoudige instructie. Open de bash-terminal, plak
ssh-keygen. Ga dan naar het bestand met de publieke sleutel/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(of gewooncat ~\/\.ssh\/id_rsa.pub), kopieer de inhoud en plak deze in het venster aan de linkerzijde. Naam is vrij.Bedenk een hostnaam voor de droplet.
Klik op Maak Droplet
Een nieuwe gebruiker aanmaken
ssh root@[IP-adres van uw droplet]- Weet je zeker dat je wilt doorgaan met verbinden (ja/nee/[vingerafdruk])?
ja - Voer je SSH-wachtwoord in
- Maak een gebruiker aan laravel:
adduser laravel - Voer het wachtwoord en andere informatie in (ik voer alleen de volledige naam in)
- Voeg de gebruiker toe aan de sudo-groep:
usermod -aG sudo laravel
SSH voor de nieuwe gebruiker
- Schakel over naar de nieuwe gebruiker:
su laravel
Alle verdere acties, tot het einde van dit artikel, worden uitgevoerd namens de gebruiker laravel. Dus als je plotseling bent onderbroken, log dan opnieuw in en voer su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
We hebben het bestand in Vim geopend. Als je daar helemaal niet bekend mee bent, kun je ook in Nano werken, dat is jouw keuze..
De meest basale Vim-commando's
Om tijdens het artikel met de Vim-editor te werken, hoef je alleen het volgende te weten.
- In Vim zijn er verschillende modi: de normale modus (Normal mode), waarin je commando's invoert en modi selecteert, en andere.
- Om uit elke modus te gaan en naar de normale modus te gaan, hoef je alleen maar op
Esc - Bewegen: je kunt gewoon de pijltjes gebruiken
- Verlaat zonder op te slaan
<Normal mode>::q! - Verlaat en sla op
<Normal mode>::wq - Ga naar de invoermodus
<Normal mode>:i(van het Engels: insert)
- Plak onze publieke sleutel (die we eerder hebben gemaakt)
- Bescherm tegen wijzigingen:
chmod 600 ~/.ssh/authorized_keys
Stel de firewall in
- Bekijk alle beschikbare instellingen:
sudo ufw app list - Sta OpenSSH toe (anders wordt je buitengesloten):
sudo ufw allow OpenSSH - Start de firewall:
sudo ufw enable,y - We controleren:
sudo ufw status
Status: actief
Naar Actie Van
-- ------ ----
OpenSSH TOESTAAN Overal
OpenSSH (v6) TOESTAAN Overal (v6)Alles is in orde.
Installeer Nginx
Bij de installatie zal je soms vragen krijgen "Ben je zeker?". Antwoord y (maar alleen als je zeker bent).
sudo apt updatesudo apt install nginx
Voeg Nginx toe aan de firewallinstellingen
sudo ufw app listsudo ufw allow 'Nginx HTTP'sudo ufw status
Status: actief
Naar Actie Van
-- ------ ----
OpenSSH TOESTAAN Overal
Nginx HTTP TOESTAAN Overal
OpenSSH (v6) TOESTAAN Overal (v6)
Nginx HTTP (v6) TOESTAAN Overal (v6)Ga naar uw IP. Als alles goed gaat, zou u het volgende moeten zien.

We installeren MySQL
sudo apt install mysql-server- We starten het automatische script voor bescherming
sudo mysql_secure_installation
Beantwoord de gestelde vragen. Als u niet weet wat te antwoorden, zijn hier enkele aanbevolen opties:
Validate password plugin —
NVerwijder anonieme gebruikers? —
YVerbied root-login op afstand? —
NVerwijder testdatabase en toegang ertoe? —
NHerlaad privilege-tabellen nu? —
YWe loggen in op MySQL:
sudo mysqlWe bekijken de toegangsmethoden:
SELECT user,authentication_string,plugin,host FROM mysql.user;We stellen een wachtwoord in voor root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';We bekijken de toegangsmethoden opnieuw:
SELECT user,authentication_string,plugin,host FROM mysql.user;We passen de wijzigingen toe en loggen uit van MySQL:
FLUSH PRIVILEGES;enexitNu, om in MySQL in te loggen, moet je gebruiken
mysql -u root -pen het wachtwoord invoeren
We installeren PHP
We maken gebruik van een externe repository van
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 kiezen we. Voor Laravel 7 kan PHP 7.3 of 7.4 worden gekozen. Het enige verschil is de cijfers 3 en 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) werkt met PHP-aanvragen. mysql, uiteraard, voor de interactie met MySQL.
Verder zal ik alles op 7.4 doen.
We configureren Nginx
sudo vim /etc/nginx/sites-available/
In plaats van "" typ het domein in (bijvoorbeeld, mysite.ru), dat je in de toekomst wilt gebruiken. Als je dat nog niet hebt, typ dan iets willekeurigs, herhaal gewoon de stappen in dit hoofdstuk voor jouw domein wanneer je het kiest.
Typ het volgende in:
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;
}
}Als u versie 7.3 heeft gekozen in plaats van php7.4-fpm.sock typ dan php7.4-fpm.sock.
We luisteren naar poort 80 op server_name, wanneer we een verzoek in de root ontvangen /var/www/html nemen we het indexbestand. Als er iets is na server_name zoeken we naar zo'n bestand. Als we het niet vinden, geven we een 404. Als het eindigt op .php, laten we het doorgaan via fpm. Als er een .ht, verbieden we (403).
- We maken een koppeling vanuit
sites-availableinsites-enabled:sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ - We verwijderen de koppeling naar
default:sudo unlink /etc/nginx/sites-enabled/default - We controleren op fouten:
sudo nginx -t - We herstarten:
sudo systemctl reload nginx
We controleren de werking:
sudo vim /var/www/html/info.php- We schrijven:
<?php phpinfo(); - Ga naar
/info.php
U zou iets dergelijks moeten zien:

Nu kan dit bestand worden verwijderd: sudo rm /var/www/html/info.php
We installeren 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 unzipWe loggen in op MySQL:
mysql -u root -pWe maken een database met de naam laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;We geven root toegang tot laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '';FLUSH PRIVILEGES;exitcd /var/www/htmlWe maken een map voor het project:
sudo mkdir -pWe geven de gebruiker laravel de rechten op het project:
sudo chown laravel:laravel
Je moet het project verplaatsen. Bijvoorbeeld door te klonen van Github.
cd ./git clone .
Houd er rekening mee dat als je geen statische bestanden hebt opgeslagen (bijvoorbeeld van /public) naar Github, je ze natuurlijk niet hebt. Bijvoorbeeld, om dit op te lossen heb ik een aparte tak gemaakt deploy, waarvan ik al gekloond heb: git clone -b --single-branch ..
- Afhankelijkheden installeren:
composer install - Creëren van .env:
vim .env
De basisversie ziet er zo uit:
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=Als u uw .env kopieert, vervang dan APP_ENV door production, APP_DEBUG door false en vul de juiste instellingen voor MySQL in.
- Migreren van de database:
php artisan migrate - Code genereren:
php artisan key:generate
Verander de permissies:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Het laatste dat overblijft, is om Nginx opnieuw in te stellen voor 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;
}
}Net als de vorige keer, als u versie 7.3 in plaats van php7.4-fpm.sock typ dan php7.4-fpm.sock.
Domein instellen op DigitalOcean
Eigenlijk is alles heel eenvoudig. U koopt een domein (waar dan ook), gaat naar DigitalOcean in Create->Domeinen/DNS. In het veld Domein toevoegen vult u dit domein in, drukt u op toevoegen. Vervolgens gaat u naar de domeininstellingen en in het veld HOSTNAME vult u in @. Kies een project en druk op Record aanmaken.
Ga nu naar de website waar u het domein hebt gekocht, vindt "DNS-servers" (of iets dergelijks) en vult de servers van DigitalOcean in (namelijkns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Nu moet u een beetje (of veel) wachten totdat deze instellingen zijn aanvaard. Klaar!
Het enige probleem is dat uw site alleen via HTTP toegankelijk zal zijn. Voor HTTPS gaan we naar het volgende deel.
HTTPS instellen
Installeer certbot en geef het de naam van het domein (formaat mysite.ru) en de naam van het domein met www (www.mysite.nl).
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 moeten we Nginx opnieuw instellen (vergeet niet uw waarden in te vullen):
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;
}
}Ik denk dat u al hebt begrepen wat er moet worden veranderd voor PHP 7.3.
Dit is in feite heel eenvoudig. We leiden gewoon alle aanvragen van HTTP (poort 80) om naar HTTPS (poort 443). En daar doen we alles precies hetzelfde, maar dan met encryptie.
Het enige wat overblijft, is de permissies in de firewall instellen:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Nu zou alles moeten werken zoals het hoort.
[Дополнительно] Установка Node.js
Als u ooit npm-commando's rechtstreeks op de server moet uitvoeren, moet u Node.js installeren.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Dat is alles, ik ben op dit punt gestopt. In principe ben ik tevreden met het resultaat. Misschien ga ik naar een goedkopere hosting dichter bij Rusland. Maar omdat ik al alle verificatierondes op de site heb doorlopen en alles daar heb gedaan, heb ik het met hun voorbeeld laten zien. Bovendien is hun startbedrag van 100 dollar een uitstekende basis voor training.
P.S. Een speciale dank aan de auteur , die de basis vormde voor al deze acties. Het werkt op sommige punten niet voor Laravel 7, dat heb ik aangepast.
P.P.S. Als je toevallig een topingenieur bent die denkt in bash-commando's, oordeel dan alsjeblieft niet te hard. Misschien lijkt deze artikeleniveau te laag voor jou, maar ik zou het geweldig hebben gevonden als ik zoiets had gevonden toen ik het nodig had. Als je suggesties voor verbetering hebt, dan sta ik daar volledig voor open.
Bron: habr.com
