
Päätin rakentaa portfolioni Laravel 7:llä. Halusin pääsivun olevan laskeutumissivu ja kaikkien sillä olevien tietojen olevan muokattavissa hallintapaneelin kautta. Ei iso juttu. Oli aika ottaa käyttöön. Löysin pari hyvää tutoriaalia siitä, miten se tehdään täysimittaisella palvelimella kaikkine monimutkaisuuksineen. En ole kovin vahva käyttöönotossa; olen enemmän front-end-kehittäjä kuin full-stack-kehittäjä. Ja vaikka osaan kirjoittaa ja testata PHP:tä, en ole aivan verrattavissa palvelimen hallintaan ja vastaaviin. Mutta minun piti selvittää se.
Käymme nyt läpi kaikki vaiheet SSH:n kautta käynnistämisestä toimivan verkkosivuston luomiseen. Yritämme välttää kaikki sudenkuopat.
Saatat löytää vastaavia ohjeita netistä. Niin minä sentään löysin. On totta, ne eivät olleet yhdessä paikassa, ja se vaati jonkin verran apua StackOverflow'lta, eivätkä ne luultavasti ole venäjäksi. Se oli hankalaa. Joten päätin tehdä asioista helpompia sinulle.
Teemme kaiken DigitalOceanilla olevan dropletin avulla. Tämä on tietenkin valinnaista; voit vapaasti valita minkä tahansa hostingin. Pääset tuotantopalvelimelle osoitteessa Ubuntu, tule takaisin. Niille, jotka päättävät silti käyttää DigitalOceania, on lisää vinkkejä verkkotunnuksen perustamiseen. Ja myös .
Kaikki DigitalOceania koskevat vaiheet annetaan tällaisissa alaviitteissä.
Aloitetaan.
TL;DR (Vain peruskomennot)
Luo käyttäjä
ssh root@[IP-адрес вашего дроплета]adduser laravelusermod -aG sudo laravelsu laravel
Lisätään siihen SSH
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys- Syötä julkinen avain
chmod 600 ~/.ssh/authorized_keys
Palomuuri
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/<Ваш домен>
Perusasetukset:
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;
}
}Vain HTTP-asennus Laravelille:
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-asetukset Laravelille:
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
Luo droplet DigitalOceanissa ja rekisteröi uusi SSH-avain
Uskon vilpittömästi, että pystyt selvittämään, miten rekisteröityä DigitalOceaniin itse. Se on monimutkaista, ja siihen liittyy paljon vahvistuksia ja muuta hölynpölyä. Jos saat jatkuvasti verkkovirheitä dokumenteilla vahvistaessasi, kokeile VPN:ää; sen pitäisi auttaa.
Klikkaa ylävalikossa luoda->pisaroita. Valitsemalla Ubuntu.
Heti rekisteröitymisen jälkeen saat 100 dollaria tilillesi. Mutta älä innostu liikaa. Sinulla on vain 60 päivää aikaa käyttää se. Ja se on hyvin vähän. Saatat, kuten minä, haluta käyttää kalliimpaa sopimusta, jotta myöhemmin, kun oikeaa rahaa alkaa tulla, voit vaihtaa halvempaan. Kerron sinulle heti, että se ei ole mahdollista. Voit nostaa sitä, mutta et voi laskea sitä. Näin se on. Minä valitsen... Standard->$5.
Valitsen lähimpänä meitä olevan alueen. Frankfurt. VPC verkko->oletusarvoinen-fra1
Todennamme itsesi suoraan SSH:n kautta. Klikkaa Uusi SSH-avainJos sinulla ei ole SSH:ta, oikealla on hyvin yksinkertainen ohje. Avaa bash-pääte, liitä
ssh-keygenSitten siirrymme tiedostoon, jossa on julkinen avain./Users/<Ваше имя пользователя>/.ssh/id_rsa.pub(tai yksinkertaisesticat ~/.ssh/id_rsa.pub), kopioi sisältö ja liitä se vasemmalla olevaan ikkunaan. Nimi on mikä tahansa.Keksitään dropletille isäntänimi.
lehdistö Luo pisara
Luo uusi käyttäjä
ssh root@[IP-адрес вашего дроплета]- Haluatko varmasti jatkaa yhteyden muodostamista (kyllä/ei/[sormenjälki])?
yes - Anna SSH-salasanasi
- Luo käyttäjä laravel:
adduser laravel - Anna salasanasi ja muut tiedot (itse annan vain koko nimeni)
- Lisää käyttäjä sudo-ryhmään:
usermod -aG sudo laravel
SSH uudelle käyttäjälle
- Vaihtaminen uuteen käyttäjään:
su laravel
Kaikki jatkotoimenpiteet artikkelin loppuosassa suoritetaan Laravel-käyttäjänä. Joten jos toiminto keskeytettiin, kirjaudu sisään uudelleen ja kirjoita su laravel
mkdir ~/.sshchmod 700 ~/.sshvim ~/.ssh/authorized_keys
Olemme avanneet tiedoston Vimissä. Jos et ole lainkaan perehtynyt siihen, voit käyttää Nanoa, se on oikeutesi..
Vimin peruskomennot
Jotta voit käyttää Vim-editoria koko artikkelin ajan, sinun tarvitsee tietää vain seuraavat asiat.
- Vimissä on eri tiloja: normaali tila, jossa syötetään komentoja ja valitaan tiloja, ja loput.
- Poistuaksesi mistä tahansa tilasta ja palataksesi normaalitilaan, paina vain
Esc - Liikkuminen: voit käyttää nuolinäppäimiä
- Poistu tallentamatta
<Normal mode>::q! - Poistu ja tallenna
<Normal mode>::wq - Vaihda tekstinsyöttötilaan
<Normal mode>:i(englanniksi. lisätä)
- Lisäämme julkisen avaimemme (jonka teimme yllä)
- Suojaa muutoksilta:
chmod 600 ~/.ssh/authorized_keys
Palomuurin asentaminen
- Katsotaanpa kaikkia käytettävissä olevia asetuksia:
sudo ufw app list - Salli OpenSSH (muuten meidät lukitaan ulos):
sudo ufw allow OpenSSH - Käynnistetään palomuuri:
sudo ufw enable,y - tarkista:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Kaikki on hyvin.
Nginxin asentaminen
Asennuksen aikana sinulta joskus kysytään "Oletko varma?" Vastaus y (no, vain jos olet varma).
sudo apt updatesudo apt install nginx
Nginxin lisääminen palomuuriasetuksiin
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)Siirry IP-osoitteeseesi. Jos kaikki menee hyvin, sinun pitäisi nähdä seuraava.

MySQL:n asentaminen
sudo apt install mysql-server- Käynnistämme automaattisen suojausskriptin
sudo mysql_secure_installation
Vastaa alla oleviin kysymyksiin. Jos olet epävarma, tässä on joitakin vastausehdotuksia:
Salasanan validointi -laajennus —
NPoistetaanko anonyymit käyttäjät? —
YEstääkö pääkäyttäjän kirjautuminen etänä? —
NPoistetaanko testitietokanta ja pääsy siihen? —
NLataako käyttöoikeustaulukot uudelleen nyt? —
YSiirrytään MySQL:ään:
sudo mysqlKatsotaanpa käyttötapoja:
SELECT user,authentication_string,plugin,host FROM mysql.user;Aseta salasana rootille:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';Tarkastellaanpa vielä kerran käyttötapoja:
SELECT user,authentication_string,plugin,host FROM mysql.user;Ota muutokset käyttöön ja poistu MySQL:stä:
FLUSH PRIVILEGES;иexitKirjaudu nyt MySQL:ään käyttämällä
mysql -u root -pja syötä salasana
PHP:n asentaminen
Käytetään kolmannen osapuolen arkistoa osoitteesta
sudo apt updatesudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-httpssudo apt-add-repository ppa:ondrej/phpsudo apt update
Valitsemme nyt. Laravel 7:lle voit valita PHP 7.3:n tai 7.4:n. Ainoa ero on numerot 3 ja 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) käsittelee PHP-kyselyitä. MySQL käsittelee tietenkin MySQL-kyselyitä.
Tästä eteenpäin teen kaiken 7.4.
Nginxin konfigurointi
sudo vim /etc/nginx/sites-available/<Ваш домен>
Korvaa "<Oma verkkotunnus>" omalla verkkotunnuksellasi (esim. mysite.ru), jota haluat käyttää tulevaisuudessa. Jos sinulla ei vielä ole sellaista, anna jokin ja toista sitten tämän luvun vaiheet verkkotunnuksellesi, kun olet valinnut sen.
Syötämme seuraavat tiedot:
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;
}
}Jos valitsit version 7.3 php7.4-fpm.sock astu sisään php7.4-fpm.sock.
Kuuntele porttia 80 päällä server_namekun saamme pyynnön juuresta /var/www/html otamme indeksitiedoston. Jos sen jälkeen server_name Siellä on jotain, etsimme tällaista tiedostoa. Jos emme löydä sitä, heitämme 404-virheen. Jos se päättyy .php, ajamme sen läpi fpm... Jos on .ht, kiellämme (403).
- Teemme linkin siitä
sites-availableвsites-enabled:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/ - Poistamme linkin kohteeseen
default:sudo unlink /etc/nginx/sites-enabled/default - Virheiden tarkistaminen:
sudo nginx -t - Käynnistä uudelleen:
sudo systemctl reload nginx
Työn tarkistaminen:
sudo vim /var/www/html/info.php- Me kirjoitamme:
<?php phpinfo(); - Mene
<Ваш IP>/info.php
Sinun pitäisi nähdä jotain tällaista:

Nyt tämä tiedosto voidaan poistaa: sudo rm /var/www/html/info.php
Laravelin asentaminen
7.3:
sudo apt install php7.3-mbstring php7.3-xml composer unzip7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzipSiirrytään MySQL:ään:
mysql -u root -pLuo tietokanta nimellä laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Myönnä pääkäyttäjän oikeudet laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';FLUSH PRIVILEGES;exitcd /var/www/htmlLuo kansio projektille:
sudo mkdir -p <Имя проекта>Tarjoamme käyttäjälle laravel projektin oikeudet:
sudo chown laravel:laravel <Имя проекта>
Seuraavaksi sinun on siirrettävä projekti. Esimerkiksi kloonaamalla se Githubista.
cd ./<Имя проекта>git clone <ссылка на проект> .
On syytä ottaa huomioon, että jos et ole tallentanut staattisia tiedostoja (esimerkiksi /public) Githubissa, niin sinulla ei luonnollisestikaan ole niitä. Esimerkiksi loin erillisen haaran tätä varten. deploy, josta olen jo kloonannut: git clone -b <имя ветки> --single-branch <ссылка на проект> ..
- Asenna riippuvuudet:
composer install - Luo .env-tiedosto:
vim .env
Sen perusversio näyttää tältä:
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>Jos kopioit .env-tiedostoa, korvaa APP_ENV arvolla production ja APP_DEBUG arvolla false. Anna myös oikeat MySQL-asetukset.
- Tietokannan migrointi:
php artisan migrate - Luo koodi:
php artisan key:generate
Oikeuksien muuttaminen:
sudo chown -R $USER:www-data storagesudo chown -R $USER:www-data bootstrap/cachechmod -R 775 storagechmod -R 775 bootstrap/cache
Viimeinen jäljellä oleva asia on Nginxin uudelleenkonfigurointi Laravelia varten:
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;
}
}Aivan kuten viime kerralla, jos valitsit version 7.3 php7.4-fpm.sock astu sisään php7.4-fpm.sock.
Verkkotunnuksen perustaminen DigitalOceanissa
Se on todella yksinkertaista. Ostat verkkotunnuksen (mistä tahansa), siirryt DigitalOceaniin luoda->Verkkotunnukset/DNS... Kentällä Lisää verkkotunnus Syötä tämä verkkotunnus ja napsauta Lisää. Siirry sitten verkkotunnusasetuksiin ja kenttään Isäntä sinä astut sisään @Valitse projekti ja napsauta Luo tietue.
Siirry nyt verkkosivustolle, jolta ostit verkkotunnuksen, etsi "DNS-palvelimet" (tai vastaava) ja anna DigitalOceanin palvelimet (nimittäinns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com). Nyt sinun täytyy odottaa vähän (tai paljon), kunnes nämä asetukset hyväksytään. Valmis!
Ainoa ongelma on, että sivustosi avautuu vain HTTP-yhteydellä. Käyttääksesi HTTPS:ää, siirry seuraavaan osioon.
HTTPS:n määrittäminen
Asennamme certbotin ja välitämme sille verkkotunnuksen (muodossa mysite.ru) ja verkkotunnus, jossa on 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.<Ваш домен>
Nyt sinun on määritettävä Nginx uudelleen (älä unohda korvata arvojasi):
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;
}
}Luulen, että ymmärrät jo, mitä PHP 7.3:ssa pitää muuttaa.
Se on itse asiassa aika yksinkertaista. Ohjaamme yksinkertaisesti kaikki pyynnöt HTTP:ltä (portti 80) HTTPS:lle (portti 443). Sitten teemme saman asian kuin ennenkin, mutta salauksella.
Jäljellä on enää asettaa käyttöoikeudet palomuuriin:
sudo nginx -tsudo ufw app listsudo ufw allow 'Nginx HTTPS'sudo ufw statussudo systemctl reload nginx
Nyt kaiken pitäisi toimia niin kuin pitääkin.
[Valinnainen] Node.js:n asentaminen
Jos sinun täytyy yhtäkkiä suorittaa npm-komentoja suoraan palvelimella, sinun on asennettava Node.js.
sudo apt updatesudo apt install -y nodejs npmnodejs -v
Siinä kaikki, olen lopettanut tähän. Olen periaatteessa tyytyväinen tulokseen. Saatan siirtyä DigitalOceanista jonnekin lähemmäs Venäjää ja halvempaan paikkaan. Mutta koska olen jo käynyt läpi kaikki verkkosivuston vahvistusvaiheet ja tehnyt kaiken siellä, käytin heidän esimerkkiään. Sitä paitsi heidän 100 dollarin aloitussummansa on loistava lähtökohta.
P.S. Erityiskiitokset kirjoittajalle , joka toimi kaikkien yllä olevien vaiheiden perustana. Se ei toimi Laravel 7:ssä joillakin tavoilla, mutta olen korjannut sen.
P.S. Jos olet huipputason insinööri, joka ajattelee bash-komennoilla, älä tuomitse minua liian ankarasti. Saatat pitää tätä artikkelia hieman heikkolaatuisena, mutta löytäisin mielelläni tällaisen, kun sitä tarvitsisin. Jos sinulla on parannusehdotuksia, olen täysin niiden kannalla.
Lähde: will.com
