Мен өз портфолиомды Laravel 7 арқылы жасауды шештім. Негізгі бет бастапқы бет болып, ондағы барлық ақпаратты әкімші панелі арқылы өзгертуге болатындай. Мәселе емес. Ол орналастыруға келді. Мен мұны барлық қиындықтары бар толыққанды серверде қалай жасауға болатыны туралы бірнеше жақсы оқулық таптым. Мен орналастыруда онша күшті емеспін; Мен толық стектен гөрі алдыңғы қатардамын. Егер мен әлі де PHP-де жазып, сынай алсам, серверді басқармас бұрын, т.б. Мен әлі өскен жоқпын. Бірақ мен оны анықтауға тура келді.
Енді біз SSH арқылы іске қосудан бастап жұмыс сайтына дейін барлық қадамдарды орындаймыз. Біз барлық қателіктерден аулақ болуға тырысамыз.
Ұқсас нұсқауларды Интернеттен таба аласыз. Ақырында мен оны таптым. Рас, бір жерде емес, StackOverflow көмегінсіз емес және орыс тілінде әрең. қиналдым. Сондықтан мен сіздің өміріңізді жеңілдетуді шештім.
Біз DigitalOcean-да тамшы арқылы бәрін жасаймыз. Бұл, әрине, қажет емес; кез келген хостингті таңдаңыз. Ubuntu жүйесінде жұмыс істейтін серверге жеткенде, оралыңыз. Оны әлі де DigitalOcean-де жасауды шешетіндер үшін доменді орнату бойынша көбірек кеңестер болады. Және де
DigitalOcean-ға тән барлық қадамдар осы сияқты ескертулерде беріледі.
Бастайық.
TL;DR (тек негізгі пәрмендер)
Пайдаланушы жасаңыз
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Оған SSH қосыңыз
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Ашық кілтті енгізіңіз
chmod 600 ~/.ssh/authorized_keys
Брандмауэр
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/<Ваш домен>
Негізгі орнату:
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 үшін тек HTTP орнатуы:
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 үшін HTTPS параметрі:
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 жүйесінде тамшы жасаңыз және жаңа SSH кілтін тіркеңіз
DigitalOcean-ға қалай тіркелуге болатынын өзіңіз анықтайсыз деп сенемін. Бұл оңай емес, көптеген тексерулер және басқа да нәрселер. Құжаттарды пайдалануды тексеру кезінде үнемі желі қатесі туындаса, барлығын VPN арқылы орындап көріңіз, ол көмектесуі керек.
Жоғарғы жағындағы мәзірде түймесін басыңыз жасау->Тамшылары. Біз таңдаймыз Ubuntu.
Тіркелгеннен кейін сіздің шотыңызға $100 түседі. Бірақ алданып қалмаңыз. Оны жұмсауға бар болғаны 60 күніңіз бар. Және бұл өте аз. Сіз мен сияқты қымбатырақ жоспарды пайдаланғыңыз келуі мүмкін, осылайша кейінірек нақты ақша ағыла бастағанда, сіз арзанырақ жоспарға ауыса аласыз. Мен сізге бұл жұмыс істемейтінін бірден айтамын. Сіз оны көбейте аласыз, бірақ азайта алмайсыз. Осылайша жүреді. Мен тандаймын стандартты->$5.
Бізге ең жақын аймақты таңдаймын Франкфурт. VPC желісі->әдепкі-fra1
Біз SSH арқылы аутентификацияны дереу орындаймыз. басыңыз Жаңа SSH кілті. Егер сізде SSH болмаса, оң жақта өте қарапайым нұсқаулар бар. Bash терминалын ашып, қойыңыз
ssh-keygen
. Содан кейін біз ашық кілтпен файлға барамыз/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(немесе жайcat ~/.ssh/id_rsa.pub
), мазмұнын көшіріп, сол жақтағы терезеге қойыңыз. Кез келген атау.Біз тамшыға арналған хост атауын ойлап табамыз.
Мұнда басыңыз Тамшы жасау
Жаңа пайдаланушы жасаңыз
ssh root@[IP-адрес вашего дроплета]
- Қосылуды жалғастырғыңыз келетініне сенімдісіз бе (иә/жоқ/[саусақ ізі])?
yes
- SSH құпия сөзін енгізіңіз
- Пайдаланушы жасаңыз laravel:
adduser laravel
- Құпия сөзіңізді және басқа ақпаратты енгізіңіз (тек толық аты-жөнін енгіземін)
- Пайдаланушыны sudo тобына қосыңыз:
usermod -aG sudo laravel
Жаңа пайдаланушыға арналған SSH
- Жаңа пайдаланушыға ауысу:
su laravel
Біз барлық әрекеттерді мақаланың соңына дейін laravel пайдаланушысының атынан жасаймыз. Сондықтан, кенеттен үзіліп қалсаңыз, қайта кіріп, кіріңіз su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Біз файлды Vim бағдарламасында аштық. Егер сіз онымен мүлдем таныс болмасаңыз, Nano-да жұмыс істей аласыз, бұл сіздің құқығыңыз.
Ең негізгі Vim командалары
Мақала бойы Vim редакторын пайдалану үшін келесіні білу жеткілікті.
- Vim-де әртүрлі режимдер бар: Қалыпты режим, онда пәрмендерді енгізіп, режимдерді және басқаларды таңдайсыз.
- Кез келген режимнен шығып, қалыпты режимге оралу үшін жай ғана басыңыз
Esc
- Жылжыту: сіз жай ғана көрсеткілерді пайдалана аласыз
- Сақтамай шығыңыз
<Normal mode>
::q!
- Шығыңыз және сақтаңыз
<Normal mode>
::wq
- Мәтін енгізу режиміне ауысу
<Normal mode>
:i
(ағылшын тілінен. кірістіру)
- Біз ашық кілтті енгіземіз (жоғарыда орындадық)
- Біз өзгерістерден қорғаймыз:
chmod 600 ~/.ssh/authorized_keys
Брандмауэр орнату
- Барлық қол жетімді параметрлерді қарастырайық:
sudo ufw app list
- OpenSSH рұқсатын беру (әйтпесе ол бізді құлыптайды):
sudo ufw allow OpenSSH
- Брандмауэрді іске қосайық:
sudo ufw enable
,y
- Тексеру:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Бәрі жақсы.
Nginx орнатылуда
Орнату кезінде сізден кейде «Сіз сенімдісіз бе?» Деп сұралады. Жауап y
(жақсы, егер сіз сенімді болсаңыз ғана).
sudo apt update
sudo apt install nginx
Брандмауэр параметрлеріне Nginx қосу
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 мекенжайыңызға өтіңіз. Егер бәрі жақсы болса, келесіні көру керек.
MySQL орнату
sudo apt install mysql-server
- Автоматты қорғау сценарийін іске қосу
sudo mysql_secure_installation
Қойылған сұрақтарға жауап беріңіз. Егер сіз не деп жауап беретініңізді білмесеңіз, мұнда бірнеше ұсынылған нұсқалар берілген:
-
Құпия сөз плагинін растау -
N
-
Анонимді пайдаланушыларды жою керек пе? —
Y
-
Түбірлік жүйеге қашықтан кіруге тыйым салу керек пе? —
N
-
Сынақ дерекқорын жою және оған кіру керек пе? —
N
-
Артықшылық кестелерін қазір қайта жүктейсіз бе? —
Y
-
MySQL-ке барайық:
sudo mysql
-
Қол жеткізу әдістерін қарастырайық:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Түбірге құпия сөз орнатыңыз:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Қол жеткізу әдістерін қайтадан қарастырайық:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Өзгерістерді қолданып, MySQL-тен шығыңыз:
FLUSH PRIVILEGES;
иexit
-
Енді MySQL жүйесіне кіру үшін сізге пайдалану керек
mysql -u root -p
және құпия сөзді енгізіңіз
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
Енді таңдайық. Laravel 7 үшін PHP 7.3 немесе 7.4 таңдауға болады. Жалғыз айырмашылық 3 және 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) PHP сұрауларымен жұмыс істейді. mysql, әрине, MySQL-мен жұмыс істеу үшін.
Бұдан былай барлығын 7.4-те жасаймын.
Nginx орнату
sudo vim /etc/nginx/sites-available/<Ваш домен>
«<Доменіңіз>» орнына доменді енгізіңіз (мысалы, mysite.ru
) болашақта пайдаланғыңыз келетін. Егер сізде әлі жоқ болса, біреуін жазыңыз, содан кейін оны таңдаған кезде доменіңіз үшін осы тараудағы қадамдарды қайталаңыз.
Келесіні енгізіңіз:
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;
}
}
Оның орнына 7.3 нұсқасын таңдасаңыз php7.4-fpm.sock
жазыңыз php7.4-fpm.sock
.
80 портты қосулы тыңдаңыз server_name
түбірлік сұрауға келгенде /var/www/html
индекс файлын алыңыз. Егер кейін server_name
Бірдеңе бар, біз осындай файлды іздейміз. Егер біз оны таппасақ, 404-ті лақтырамыз. Егер ол аяқталса .php
, өтіңіз fpm
... Бар болса .ht
, тыйым салу (403).
- Сілтеме жасау
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Сілтеме жойылуда
default
:sudo unlink /etc/nginx/sites-enabled/default
- Қателерді тексеру:
sudo nginx -t
- Қайта жүктеу:
sudo systemctl reload nginx
Жұмысты тексеру:
sudo vim /var/www/html/info.php
- Біз жазамыз:
<?php phpinfo();
- Жылжыту
<Ваш IP>/info.php
Сіз келесідей нәрсені көруіңіз керек:
Енді бұл файлды жоюға болады: sudo rm /var/www/html/info.php
Laravel орнатыңыз
-
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-ке барайық:
mysql -u root -p
-
Аты бар мәліметтер қорын жасаңыз laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Біз түбірлік қатынасты қамтамасыз етеміз laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Жоба үшін қалта жасаңыз:
sudo mkdir -p <Имя проекта>
-
Біз пайдаланушыны қамтамасыз етеміз laravel жобаға құқықтар:
sudo chown laravel:laravel <Имя проекта>
Әрі қарай жобаны тасымалдау керек. Мысалы, Github-тан клондау.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Егер сіз статикалық файлдарды сақтамаған болсаңыз (мысалы, /public
) Github-да, әрине, сізде олар болмайды. Мысалы, мен мұны шешу үшін жеке ағын жасадым deploy
, одан мен қазірдің өзінде клондадым: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Тәуелділіктерді орнату:
composer install
- .env жасау:
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>
Егер .env файлын көшірсеңіз, APP_ENV нұсқасын өндіріспен, APP_DEBUG қолданбасын жалғанмен ауыстырыңыз және 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
Соңғысы - Nginx-ті 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 <Ваш домен или 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;
}
}
Өткен жолы сияқты, оның орнына 7.3 нұсқасын таңдасаңыз php7.4-fpm.sock
жазыңыз php7.4-fpm.sock
.
DigitalOcean жүйесінде домен орнату
Барлығы іс жүзінде өте қарапайым. Сіз домен сатып аласыз (кез келген жерде), DigitalOcean-ге ауысыңыз жасау->Домендер/DNS... Алаңда Домен қосыңыз осы доменді енгізіп, қосу түймесін басыңыз. Содан кейін домен параметрлеріне және өріске өтіңіз HOST NAME енгізіңіз @. Жобаны таңдап, басыңыз Жазба жасау.
Енді сіз доменді сатып алған сайтқа өтіңіз, сол жерден «DNS серверлерін» табыңыз (немесе ұқсас нәрсені) және DigitalOcean серверлерін енгізіңіз (атап айтқандаns1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Енді осы параметрлер қабылданғанша сәл (немесе көп) күту керек. Дайын!
Жалғыз мәселе - сіздің сайтыңыз тек HTTP ретінде ашылады. HTTPS болуы үшін келесі бөлікке өтіңіз.
HTTPS орнату
Certbot орнатыңыз және оған домен атауын беріңіз (формат mysite.ru
) және www бар домен атауы (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.<Ваш домен>
Енді Nginx-ті қайта конфигурациялау қажет (мәндерді ауыстыруды ұмытпаңыз):
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;
}
}
Менің ойымша, сіз PHP 7.3 үшін нені өзгерту керектігін түсіндіңіз.
Мұнда, шын мәнінде, бәрі қарапайым. Біз барлық сұрауларды HTTP (80 порт) HTTPS (порт 443) түріне қайта бағыттаймыз. Мұнда біз бәрін бұрынғыдай жасаймыз, бірақ шифрлау арқылы.
Брандмауэрдегі рұқсаттарды орнату ғана қалады:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Енді бәрі өз ретімен жұмыс істеуі керек.
[Қосымша] Node.js орнату
Егер кенеттен npm пәрмендерін серверде тікелей іске қосу қажет болса, Node.js орнатуыңыз қажет.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
Міне, мен осы кезеңде тоқтадым. Негізінде мен нәтижеге қанағаттанамын. Мүмкін мен DigitalOcean-дан Ресейге жақынырақ және арзанырақ жерге ауысатын шығармын. Бірақ мен сайттағы барлық тексеру раундтарынан өтіп, барлығын сол жерде жасағандықтан, мен оларды мысалмен көрсеттім. Сонымен қатар, олардың бастапқы 100 доллары жаттығу үшін тамаша трамплин болып табылады.
PS Авторға ерекше рахмет
PPS Егер сіз bash пәрмендерін ойлайтын үздік инженер болсаңыз, дөрекі үкім шығармаңыз. Сіз бұл мақаланы төмен деңгейде деп санайтын шығарсыз, бірақ мен оны қажет кезде табуға қуанышты болар едім. Егер жақсартуға қатысты ұсыныстар болса, мен бәріне дайынмын.
Ақпарат көзі: www.habr.com