Π Π΅ΡΠΈΠ» Ρ ΡΡΡ ΡΠ²ΠΎΡ ΠΏΠΎΡΡΡΠΎΠ»ΠΈΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π° 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;
}
}
Π’ΠΎΠ»ΡΠΊΠΎ HTTP Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ΄ 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 Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ΄ 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/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, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡΡ.
Π ΠΌΠ΅Π½Ρ ΡΠ²Π΅ΡΡ Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Create->Droplets. ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ Ubuntu.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ 100$ Π½Π° ΡΡΠ΅Ρ. ΠΠΎ Π½Π΅ ΠΎΠ±ΠΎΠ»ΡΡΠ°ΠΉΡΠ΅ΡΡ. Π£ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ 60 Π΄Π½Π΅ΠΉ, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ. Π ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ, Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»Π°Π½ ΠΏΠΎΠ΄ΠΎΡΠΎΠΆΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΠΆΠ΅ ΠΏΠΎΠΉΠ΄ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π΄Π΅Π½ΡΠ³ΠΈ, ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΡΡ Π½Π° ΠΏΠΎΠ΄Π΅ΡΠ΅Π²Π»Π΅. Π‘ΡΠ°Π·Ρ Π³ΠΎΠ²ΠΎΡΡ, Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ Π½Π΅Π»ΡΠ·Ρ. Π’Π°ΠΊΠΈΠ΅ Π΄Π΅Π»Π°. Π― Π²ΡΠ±ΠΈΡΠ°Ρ Standard->$5.
Π Π΅Π³ΠΈΠΎΠ½ Ρ Π²ΡΠ±ΠΈΡΠ°Ρ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ ΠΊ Π½Π°ΠΌ Frankfurt. VPC Network->default-fra1
ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΡΠ°Π·Ρ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΠ΅ΡΠ΅Π· SSH. ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ New SSH Key. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ SSH, ΡΠΏΡΠ°Π²Π° Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ. ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ bash-ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ
ssh-keygen
. ΠΠΎΡΠΎΠΌ Π·Π°Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΠ°ΠΉΠ» Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ/Users/<ΠΠ°ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ>/.ssh/id_rsa.pub
(ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎcat ~/.ssh/id_rsa.pub
), ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π² ΠΎΠΊΠ½ΠΎ ΡΠ»Π΅Π²Π°. ΠΠΌΡ Π»ΡΠ±ΠΎΠ΅.ΠΡΠΈΠ΄ΡΠΌΡΠ²Π°Π΅ΠΌ Π΄Π»Ρ Π΄ΡΠΎΠΏΠ»Π΅ΡΠ° Ρ ΠΎΡΡΠ½Π΅ΠΉΠΌ.
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Create Droplet
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ssh root@[IP-Π°Π΄ΡΠ΅Ρ Π²Π°ΡΠ΅Π³ΠΎ Π΄ΡΠΎΠΏΠ»Π΅ΡΠ°]
- Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes
- ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π²Π°Ρ ΠΏΠ°ΡΠΎΠ»Ρ ΠΎΡ SSH
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ laravel:
adduser laravel
- ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ Π΄ΡΡΠ³ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Ρ Π²Π²ΠΎΠΆΡ ΡΠΎΠ»ΡΠΊΠΎ Full Name)
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π³ΡΡΠΏΠΏΡ 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 Π΅ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ: ΠΎΠ±ΡΡΠ½ΡΠΉ (Normal mode), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ Π²Π²ΠΎΠ΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
- Π§ΡΠΎΠ±Ρ Π²ΡΠΉΡΠΈ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ
Esc
- ΠΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°ΡΡΡΡ: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ΅Π»ΠΊΠ°ΠΌΠΈ
- ΠΡΠΉΡΠΈ Π±Π΅Π· ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ
<Normal mode>
::q!
- ΠΡΠΉΡΠΈ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ
<Normal mode>
::wq
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ Π²Π²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ°
<Normal mode>
:i
(ΠΎΡ Π°Π½Π³Π». insert)
- ΠΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π½Π°Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Π²ΡΡΠ΅)
- ΠΠ°ΡΠΈΡΠ°Π΅ΠΌ ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
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
ΠΡΠ²Π΅ΡΡΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΎΡΠ²Π΅ΡΠ°ΡΡ, Π²ΠΎΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ:
-
Validate password plugin β
N
-
Remove anonymous users? β
Y
-
Disallow root login remotely? β
N
-
Remove test database and access to it? β
N
-
Reload privilege tables now? β
Y
-
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π² MySQL:
sudo mysql
-
Π‘ΠΌΠΎΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ°:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ root:
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
Π±Π΅ΡΠ΅ΠΌ index-ΡΠ°ΠΉΠ». ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ 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;
-
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ root Π΄ΠΎΡΡΡΠΏ ΠΊ 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 Π½Π° production, APP_DEBUG Π½Π° false ΠΈ Π²ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ 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 Π² Create->Domains/DNS. Π ΠΏΠΎΠ»Π΅ Add a domain Π²Ρ Π²ΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ ΡΡΠΎΡ Π΄ΠΎΠΌΠ΅Π½, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ Π² ΠΏΠΎΠ»Π΅ HOSTNAME Π²ΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ @. ΠΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΠ΅ Create record.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ Π½Π° ΡΠ°ΠΉΡ, Π³Π΄Π΅ ΠΏΠΎΠΊΡΠΏΠ°Π»ΠΈ Π΄ΠΎΠΌΠ΅Π½, Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ ΡΠ°ΠΌ "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 Π΄ΠΎΠ»Π»Π°ΡΠΎΠ² β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΠ»Π°ΡΠ΄Π°ΡΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ.
P.S. ΠΡΠ΄Π΅Π»ΡΠ½Π°Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΡ Π°Π²ΡΠΎΡΡ
P.P.S. ΠΡΠ»ΠΈ Π²Ρ Π²Π΄ΡΡΠ³ ΡΠΎΠΏΠΎΠ²ΡΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΡΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈΠ· bash, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΡΡΠ΄ΠΈΡΠ΅ ΡΡΡΠΎΠ³ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΡΡΠΎΠ²Π΅Π½Ρ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½ΠΈΠ·ΠΊΠΎΠ²Π°ΡΡΠΌ, Π½ΠΎ Ρ Π±ΡΠ» Π±Ρ ΡΠ°Π΄ Π½Π°ΠΉΡΠΈ ΡΠ°ΠΊΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΌΠ½Π΅ Π±ΡΠ»Π° Π½ΡΠΆΠ½Π°. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ, Ρ ΠΎΠ±Π΅ΠΈΠΌΠΈ ΡΡΠΊΠ°ΠΌΠΈ "Π·Π°".
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com