Portfoliomu Laravel 7-dən istifadə edərək düzəltməyə qərar verdim. Belə ki, əsas səhifə açılış səhifəsi olsun və oradakı bütün məlumatlar admin panel vasitəsilə dəyişdirilə bilsin. Məsələ deyil. Yerləşdirməyə gəldi. Bütün çətinlikləri olan tam hüquqlu bir serverdə bunu necə etmək barədə bir neçə yaxşı dərslik tapdım. Mən yerləşdirmədə çox güclü deyiləm; Mən ümumiyyətlə tam yığından daha öndəyəm. Və əgər mən hələ də PHP-də yazıb test edə bilirəmsə, serveri idarə etməzdən əvvəl və s. Mən hələ böyüməmişəm. Amma mən bunu başa düşməli idim.
İndi biz SSH vasitəsilə işə salmaqdan başlayaraq iş saytı ilə bitən bütün addımları keçəcəyik. Bütün tələlərdən qaçmağa çalışacağıq.
Oxşar təlimatları onlayn tapa bilərsiniz. Axır ki, mən onu tapdım. Düzdür, bir yerdə deyil, StackOverflow-un köməyi olmadan və çətin ki, rus dilində. əziyyət çəkdim. Buna görə də sizin həyatınızı sadələşdirməyə qərar verdim.
DigitalOcean-da hər şeyi bir damla ilə edəcəyik. Bu, əlbəttə ki, lazım deyil, hər hansı bir hostinq seçin. Ubuntu-da işləyən serverə çatanda geri qayıdın. Hələ də DigitalOcean-da bunu etməyə qərar verənlər üçün domen qurmaqla bağlı daha çox məsləhətlər olacaq. Və
Bütün DigitalOcean-a xas addımlar bu kimi qeydlərdə veriləcək.
Gəlin başlayaq.
TL;DR (yalnız əsas əmrlər)
İstifadəçi yaradın
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Ona SSH əlavə edin
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Ümumi açarı daxil edin
chmod 600 ~/.ssh/authorized_keys
Firewall
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
Nginx
sudo apt update
sudo apt install -y nginx
sudo ufw allow 'Nginx HTTP'
sudo ufw status
MySQL
sudo apt install -y mysql-server
sudo mysql_secure_installation
,NYNNY
sudo mysql
ALTER 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 update
-
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
-
sudo apt-add-repository ppa:ondrej/php
-
sudo apt update
-
7.3:
sudo apt install -y php7.3-fpm php7.3-mysql
-
7.4:
sudo apt install -y php7.4-fpm php7.4-mysql
-
sudo vim /etc/nginx/sites-available/<Ваш домен>
Əsas quraşdırma:
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;
}
}
Laravel üçün yalnız HTTP quraşdırma:
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;
}
}
Laravel üçün HTTPS parametri:
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/default
sudo nginx -t
sudo systemctl reload nginx
Laravel
-
7.3:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip
-
7.4:
sudo apt install -y php7.4-mbstring php7.4-xml composer unzip
-
mysql -u root -p
-
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
sudo mkdir -p <Имя проекта>
-
sudo chown laravel:laravel <Имя проекта>
-
cd ./<Имя проекта>
-
git clone <ссылка на проект> .
/git clone -b <имя ветки> --single-branch <ссылка на проект> .
-
composer install
-
vim .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 migrate
-
php artisan key:generate
-
sudo chown -R $USER:www-data storage
-
sudo chown -R $USER:www-data bootstrap/cache
-
chmod -R 775 storage
-
chmod -R 775 bootstrap/cache
HTTPS
-
sudo add-apt-repository ppa:certbot/certbot
-
sudo apt install -y python-certbot-nginx
-
sudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>
-
sudo nginx -t
-
sudo ufw allow 'Nginx HTTPS'
-
sudo ufw status
-
sudo systemctl reload nginx
DigitalOcean-da bir damla yaradın və yeni SSH açarını qeyd edin
Mən həqiqətən inanıram ki, siz DigitalOcean-da necə qeydiyyatdan keçəcəyinizi özünüz anlayacaqsınız. Bir çox yoxlama və başqa şeylərlə asan deyil. Sənədlərdən istifadə edərkən daim şəbəkə xətası alırsanız, hər şeyi VPN vasitəsilə etməyə çalışın, bu kömək etməlidir.
Yuxarıdakı menyuda vurun Yaratmaq->Damlalar. Seçin Ubuntu.
Qeydiyyatdan keçən kimi hesabınıza 100 dollar alacaqsınız. Amma aldanma. Onu sərf etmək üçün cəmi 60 gününüz var. Və bu çox azdır. Siz də mənim kimi daha bahalı plandan istifadə etmək istəyə bilərsiniz ki, sonradan real pul axmağa başlayanda daha ucuza keçəsiniz. Mən sizə dərhal deyəcəyəm ki, bu işləməyəcək. Siz onu artıra bilərsiniz, amma azalda bilməzsiniz. Beləliklə, gedir. Mən seçirəm standart->$5.
Bizə ən yaxın bölgəni seçirəm Frankfurt. VPC şəbəkəsi->default-fra1
Biz dərhal SSH vasitəsilə autentifikasiya həyata keçirəcəyik. basın Yeni SSH Açarı. SSH yoxdursa, sağda çox sadə təlimatlar var. Bash terminalını açın və yapışdırın
ssh-keygen
. Sonra açıq açarla fayla gedirik/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(və ya sadəcəcat ~/.ssh/id_rsa.pub
), məzmunu kopyalayın və sol tərəfdəki pəncərəyə yapışdırın. İstənilən ad.Damcı üçün bir host adı ilə gəlirik.
Push Damcı yaradın
Yeni istifadəçi yaradın
ssh root@[IP-адрес вашего дроплета]
- Qoşulmağa davam etmək istədiyinizə əminsiniz (bəli/xeyr/[barmaq izi])?
yes
- SSH parolunuzu daxil edin
- İstifadəçi yaradın laravel:
adduser laravel
- Şifrənizi və digər məlumatlarınızı daxil edin (yalnız tam adı daxil edirəm)
- İstifadəçini sudo qrupuna əlavə edin:
usermod -aG sudo laravel
Yeni istifadəçi üçün SSH
- Yeni istifadəçiyə keçin:
su laravel
Yazının sonuna qədər bütün hərəkətləri laravel istifadəçisi adından həyata keçiririk. Buna görə də, birdən müdaxilə etsəniz, yenidən daxil olun və daxil olun su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Faylı Vim-də açdıq. Əgər onunla ümumiyyətlə tanış deyilsinizsə, Nano-da işləyə bilərsiniz, bu sizin haqqınızdadır.
Ən əsas Vim əmrləri
Məqalə boyu Vim redaktorundan istifadə etmək üçün sadəcə aşağıdakıları bilməlisiniz.
- Vim-in müxtəlif rejimləri var: Normal rejim, burada əmrləri daxil edib rejimləri və başqalarını seçirsiniz.
- İstənilən rejimdən çıxmaq və normal rejimə qayıtmaq üçün basın
Esc
- Ətrafında hərəkət edin: sadəcə oxlardan istifadə edə bilərsiniz
- Yadda saxlamadan çıxın
<Normal mode>
::q!
- Çıxın və yadda saxlayın
<Normal mode>
::wq
- Mətn daxiletmə rejiminə keçin
<Normal mode>
:i
(İngilis dilindən. taxmaq)
- Açıq açarımızı daxil edirik (yuxarıda bunu etdik)
- Dəyişikliklərdən qoruyuruq:
chmod 600 ~/.ssh/authorized_keys
Firewall quraşdırılması
- Bütün mövcud parametrlərə baxaq:
sudo ufw app list
- OpenSSH-ə icazə verin (əks halda bizi kilidləyəcək):
sudo ufw allow OpenSSH
- Firewall-u işə salaq:
sudo ufw enable
,y
- Yoxlayırıq:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Hər şey yaxşıdır.
Nginx quraşdırılması
Quraşdırma zamanı sizdən bəzən "Əminsinizmi?" Cavab verin y
(yaxşı, yalnız əminsinizsə).
sudo apt update
sudo apt install nginx
Firewall parametrlərinə Nginx əlavə edilir
sudo ufw app list
sudo 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)
IP ünvanınıza keçin. Hər şey qaydasındadırsa, aşağıdakıları görməlisiniz.
MySQL quraşdırılması
sudo apt install mysql-server
- Avtomatik qorunma skriptinin işə salınması
sudo mysql_secure_installation
Verilən suallara cavab verin. Nə cavab verəcəyinizi bilmirsinizsə, burada təklif olunan bəzi seçimlər var:
-
Parol plaginini doğrulayın -
N
-
Anonim istifadəçilər silinsin? —
Y
-
Uzaqdan kök girişinə icazə verilsin? —
N
-
Test verilənlər bazası silinsin və ona daxil olun? —
N
-
İmtiyaz cədvəlləri indi yenidən yüklənsin? —
Y
-
MySQL-ə keçək:
sudo mysql
-
Giriş üsullarına baxaq:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Kök üçün parol təyin edin:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Giriş üsullarına yenidən baxaq:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Dəyişiklikləri tətbiq edin və MySQL-dən çıxın:
FLUSH PRIVILEGES;
иexit
-
İndi MySQL-ə daxil olmaq üçün istifadə etməlisiniz
mysql -u root -p
və parolu daxil edin
PHP quraşdırılması
Gəlin üçüncü tərəf deposundan istifadə edək
sudo apt update
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
sudo apt-add-repository ppa:ondrej/php
sudo apt update
İndi seçim edək. Laravel 7 üçün PHP 7.3 və ya 7.4 seçə bilərsiniz. Fərq yalnız 3 və 4 nömrələrində olacaq.
- 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 Proses Meneceri (fpm) PHP sorğuları ilə işləyir. mysql, əlbəttə ki, MySQL ilə işləmək üçün.
Bundan sonra hər şeyi 7.4-də edəcəyəm.
Nginx qurulması
sudo vim /etc/nginx/sites-available/<Ваш домен>
"<Domeniniz>" əvəzinə domeni daxil edin (məsələn, mysite.ru
) gələcəkdə istifadə etmək istədiyiniz. Əgər sizdə hələ yoxdursa, hər hansı birini yazın, sonra onu seçərkən domeniniz üçün bu fəsildəki addımları təkrarlayın.
Aşağıdakıları daxil edin:
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;
}
}
Əvəzində 7.3 versiyasını seçmisinizsə php7.4-fpm.sock
yazmaq php7.4-fpm.sock
.
80 nömrəli porta qulaq asın server_name
kök tələbinə gəldiyimiz zaman /var/www/html
indeks faylını götürün. Əgər sonra server_name
Bir şey var, biz belə bir fayl axtarırıq. Tapmasaq, 404-ü atırıq. Əgər bitərsə .php
, keçin fpm
... Varsa .ht
, qadağan et (403).
- -dən keçid yaratmaq
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Linkin silinməsi
default
:sudo unlink /etc/nginx/sites-enabled/default
- Səhvlərin yoxlanılması:
sudo nginx -t
- Yenidən başladın:
sudo systemctl reload nginx
İşin yoxlanılması:
sudo vim /var/www/html/info.php
- Biz yazırıq:
<?php phpinfo();
- Gəlin gedək
<Ваш IP>/info.php
Bunun kimi bir şey görməlisiniz:
İndi bu fayl silinə bilər: sudo rm /var/www/html/info.php
Laravel-i quraşdırın
-
7.3:
sudo apt install php7.3-mbstring php7.3-xml composer unzip
-
7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzip
-
MySQL-ə keçək:
mysql -u root -p
-
adı ilə verilənlər bazası yaradın laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Biz kök girişi təmin edirik laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Layihə üçün qovluq yaradın:
sudo mkdir -p <Имя проекта>
-
İstifadəçini təmin edirik laravel layihəyə hüquqlar:
sudo chown laravel:laravel <Имя проекта>
Sonra layihəni köçürməlisiniz. Məsələn, Github-dan klonlaşdırma.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Nəzərə almaq lazımdır ki, statik faylları saxlamamısınızsa (məsələn, /public
) Github-da, onda təbii ki, onlara sahib olmayacaqsınız. Məsələn, bunu həll etmək üçün ayrı bir mövzu yaratdım deploy
, mən artıq klonladım: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Asılılıqların quraşdırılması:
composer install
- .env yaradın:
vim .env
Onun əsas versiyası belə görünü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=<Ваш пароль от MySQL>
.env-ni kopyalasanız, APP_ENV-ni istehsalla, APP_DEBUG-u false ilə əvəz edin və MySQL üçün düzgün parametrləri daxil edin.
- Verilənlər bazasının köçürülməsi:
php artisan migrate
- Kodun yaradılması:
php artisan key:generate
İcazələrin dəyişdirilməsi:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Qalan son şey Nginx-i Laravel üçün yenidən konfiqurasiya etməkdir:
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;
}
}
Keçən dəfə olduğu kimi, əvəzinə 7.3 versiyasını seçsəniz php7.4-fpm.sock
yazmaq php7.4-fpm.sock
.
DigitalOcean-da domen qurmaq
Hər şey əslində çox sadədir. Domen alırsınız (istənilən yerdə), DigitalOcean-a keçin Yaratmaq->Domenlər/DNS. Bəli Domen əlavə edin bu domeni daxil edin və əlavə et klikləyin. Sonra domen parametrlərinə və sahəyə keçin HOST NAME daxil edin @. Layihəni seçin və vurun Rekord yaradın.
İndi domeni satın aldığınız sayta gedin, orada "DNS serverləri" tapın (və ya buna bənzər bir şey) və DigitalOcean serverlərinə daxil olun (yənins1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). İndi bu parametrlər qəbul edilənə qədər bir az (və ya çox) gözləmək lazımdır. Hazır!
Yeganə problem saytınızın yalnız HTTP olaraq açılmasıdır. HTTPS-ə sahib olmaq üçün növbəti hissəyə keçin.
HTTPS qurulur
Certbot quraşdırın və ona domen adını verin (format mysite.ru
) və www ilə domen adı (www.mysite.ru
).
sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-nginx
sudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>
İndi Nginx-i yenidən konfiqurasiya etməlisiniz (dəyərlərinizi əvəz etməyi unutmayın):
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;
}
}
Düşünürəm ki, PHP 7.3 üçün nəyin dəyişdirilməsi lazım olduğunu artıq başa düşürsünüz.
Burada, əslində, hər şey sadədir. Biz sadəcə olaraq bütün sorğuları HTTP (port 80)-dən HTTPS-ə (port 443) yönləndiririk. Və orada hər şeyi əvvəlki kimi edirik, ancaq şifrələmə ilə.
Qalan yalnız təhlükəsizlik duvarında icazələri təyin etməkdir:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
İndi hər şey lazım olduğu kimi işləməlidir.
[Qabaqcıl] Node.js quraşdırılması
Birdən npm əmrlərini birbaşa serverdə işə salmaq lazımdırsa, Node.js-i quraşdırmalısınız.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Budur, mən bu mərhələdə dayandım. Prinsipcə, nəticədən razıyam. Yəqin ki, DigitalOcean-dan Rusiyaya daha yaxın və daha ucuz bir yerə keçəcəyəm. Amma mən artıq saytda bütün yoxlama raundlarından keçmişəm və orada hər şeyi etdiyim üçün onları nümunə ilə göstərmişəm. Bundan əlavə, onların başlanğıc 100 dolları təlim üçün əla tramplindir.
PS Müəllifə xüsusi təşəkkürlər
PPS Əgər bash əmrlərində düşünən yüksək səviyyəli mühəndissinizsə, lütfən, sərt mühakimə etməyin. Bu məqaləni aşağı səviyyəli hesab edə bilərsiniz, amma ehtiyacım olanda onu tapmaqdan məmnun olardım. Təkmilləşdirmə üçün təkliflər varsa, mən bunun tərəfdarıyam.
Mənbə: www.habr.com