ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ืœ-Laravel 7 ื‘-Ubuntu & Nginx

ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ืœ-Laravel 7 ื‘-Ubuntu & Nginx

ื”ื—ืœื˜ืชื™ ืœืขืฉื•ืช ืืช ืชื™ืง ื”ืขื‘ื•ื“ื•ืช ืฉืœื™ ื‘ืืžืฆืขื•ืช Laravel 7. ื›ืš ืฉื”ืขืžื•ื“ ื”ืจืืฉื™ ื™ื”ื™ื” ื“ืฃ ื ื—ื™ืชื”, ื•ื›ืœ ื”ืžื™ื“ืข ืขืœื™ื• ื ื™ืชืŸ ื™ื”ื™ื” ืœืฉื ื•ืช ื‘ืืžืฆืขื•ืช ืคืื ืœ ื”ื ื™ื”ื•ืœ. ืœื ื”ื ืงื•ื“ื”. ื–ื” ื”ื’ื™ืข ืœืคืจื™ืกื”. ืžืฆืืชื™ ื›ืžื” ืžื“ืจื™ื›ื™ื ื˜ื•ื‘ื™ื ื›ื™ืฆื“ ืœืขืฉื•ืช ื–ืืช ื‘ืฉืจืช ืžืŸ ื”ืžื ื™ื™ืŸ ืขื ื›ืœ ื”ืฆืจื•ืช. ืื ื™ ืœื ื—ื–ืง ื‘ืžื™ื•ื—ื“ ื‘ืคืจื™ืกื”; ืื ื™ ื‘ื“ืจืš ื›ืœืœ ื™ื•ืชืจ ืงื“ืžื™ ืžืืฉืจ ืžืœื. ื•ืื ืื ื™ ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ื•ืœื‘ื“ื•ืง ื‘-PHP, ืื– ืœืคื ื™ ื ื™ื”ื•ืœ ื”ืฉืจืช ื•ื›ื•'. ืขื•ื“ ืœื ื”ืชื‘ื’ืจืชื™. ืื‘ืœ ื”ื™ื™ืชื™ ื—ื™ื™ื‘ ืœื”ื‘ื™ืŸ ืืช ื–ื”.

ื›ืขืช ื ืขื‘ื•ืจ ืขืœ ื›ืœ ื”ืฉืœื‘ื™ื, ื”ื—ืœ ืžื”ืฉืงื” ื“ืจืš SSH ื•ื›ืœื” ื‘ืืชืจ ื”ืขื‘ื•ื“ื”. ื ื ืกื” ืœื”ื™ืžื ืข ืžื›ืœ ื”ืžืœื›ื•ื“ื•ืช.

ื™ื™ืชื›ืŸ ืฉืชื•ื›ืœ ืœืžืฆื•ื ื”ื•ืจืื•ืช ื“ื•ืžื•ืช ื‘ืื™ื ื˜ืจื ื˜. ืื—ืจื™ ื”ื›ืœ, ืกื•ืฃ ืกื•ืฃ ืžืฆืืชื™ ืืช ื–ื”. ื ื›ื•ืŸ, ืœื ื‘ืžืงื•ื ืื—ื“, ืœื ื‘ืœื™ ืขื–ืจื” ืฉืœ StackOverflow, ื•ื‘ืงื•ืฉื™ ื‘ืจื•ืกื™ืช. ืกื‘ืœืชื™. ื–ื• ื”ืกื™ื‘ื” ืฉื”ื—ืœื˜ืชื™ ืœืคืฉื˜ ืืช ื—ื™ื™ืš.

ืื ื—ื ื• ื ืขืฉื” ื”ื›ืœ ืขื ื˜ื™ืคื” ื‘-DigitalOcean. ื–ื”, ื›ืžื•ื‘ืŸ, ืœื ื”ื›ืจื—ื™; ื‘ื—ืจ ื›ืœ ืื™ืจื•ื—. ื›ืืฉืจ ืืชื” ืžื’ื™ืข ืœืฉืจืช ืขื•ื‘ื“ ื‘ืื•ื‘ื•ื ื˜ื•, ื—ื–ื•ืจ. ืœืžื™ ืฉื‘ื›ืœ ื–ืืช ืžื—ืœื™ื˜ ืœืขืฉื•ืช ื–ืืช ื‘-DigitalOcean, ื™ื”ื™ื• ื˜ื™ืคื™ื ื ื•ืกืคื™ื ืœื”ื’ื“ืจืช ื“ื•ืžื™ื™ืŸ. ื• ืงื™ืฉื•ืจ ื”ืคื ื™ื” ืฉืœ $100.

ื›ืœ ื”ืฉืœื‘ื™ื ื”ืกืคืฆื™ืคื™ื™ื ืœ-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, ื–ื” ืืžื•ืจ ืœืขื–ื•ืจ.

ื‘ืชืคืจื™ื˜ ืœืžืขืœื”, ืœื—ืฅ ืฆื•ืจ->ื˜ื™ืคื•ืช. ื‘ื—ืจ ืื•ื‘ื•ื ื˜ื•.

ื‘ืจื’ืข ืฉืชื™ืจืฉื, ืชืงื‘ืœ 100$ ืœื—ืฉื‘ื•ืŸ ืฉืœืš. ืื‘ืœ ืืœ ืชืœืš ืฉื•ืœืœ. ื™ืฉ ืœืš ืจืง 60 ื™ื•ื ืœื‘ื–ื‘ื– ืื•ืชื•. ื•ื–ื” ืžืขื˜ ืžืื•ื“. ืื•ืœื™ ืชืจืฆื•, ื›ืžื•ื ื™, ืœื”ืฉืชืžืฉ ื‘ืชื›ื ื™ืช ื™ืงืจื” ื™ื•ืชืจ, ื›ืš ืฉื‘ื”ืžืฉืš, ื›ืฉื”ื›ืกืฃ ื”ืืžื™ืชื™ ื™ืชื—ื™ืœ ืœื–ืจื•ื, ืชื•ื›ืœื• ืœืขื‘ื•ืจ ืœื–ื•ืœื” ื™ื•ืชืจ. ืื ื™ ืื’ื™ื“ ืœืš ืžื™ื“ ืฉื–ื” ืœื ื™ืขื‘ื•ื“. ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืœ ืื•ืชื•, ืื‘ืœ ืืชื” ืœื ื™ื›ื•ืœ ืœื”ืงื˜ื™ืŸ ืื•ืชื•. ื›ืš ื–ื” ืžืžืฉื™ืš. ืื ื™ ื‘ื•ื—ืจ ืชึถืงึถืŸ->$5.

ืื ื™ ื‘ื•ื—ืจ ืืช ื”ืื–ื•ืจ ื”ืงืจื•ื‘ ืืœื™ื ื• ืคืจื ืงืคื•ืจื˜. ืจืฉืช VPC->default-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. ืื ืืชื” ืœื ืžื›ื™ืจ ืืช ื–ื” ื‘ื›ืœืœ, ืืชื” ื™ื›ื•ืœ ืœืขื‘ื•ื“ ื‘ื ื ื•, ื–ื›ื•ืชืš.

ืคืงื•ื“ื•ืช 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 ืฉืœืš. ืื ื”ื›ืœ ื”ื•ืœืš ื›ืฉื•ืจื”, ืืชื” ืืžื•ืจ ืœืจืื•ืช ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื.

ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ืœ-Laravel 7 ื‘-Ubuntu & Nginx

ื”ืชืงื ืช 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

ืืชื” ืืžื•ืจ ืœืจืื•ืช ืžืฉื”ื• ื›ื–ื”:

ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ืœ-Laravel 7 ื‘-Ubuntu & Nginx

ื›ืขืช ื ื™ืชืŸ ืœืžื—ื•ืง ืืช ื”ืงื•ื‘ืฅ ื”ื–ื”: 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 ื‘-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 ื‘- ืฆื•ืจ->ื“ื•ืžื™ื™ื ื™ื/DNS... ื‘ืฉื˜ื— ื”ื•ืกืฃ ื“ื•ืžื™ื™ืŸ ืืชื” ืžื–ื™ืŸ ืืช ื”ื“ื•ืžื™ื™ืŸ ื”ื–ื” ื•ืœื—ืฅ ืขืœ ื”ื•ืกืฃ. ืœืื—ืจ ืžื›ืŸ ืขื‘ื•ืจ ืืœ ื”ื’ื“ืจื•ืช ื”ื“ื•ืžื™ื™ืŸ ื•ืืœ ื”ืฉื“ื” ืฉื ืžืืจื— ืœื”ื™ื›ื ืก @. ื‘ื—ืจ ืคืจื•ื™ืงื˜ ื•ืœื—ืฅ ืฆื•ืจ ืจืฉื•ืžื”.
ื›ืขืช ืขื‘ื•ืจ ืœืืชืจ ื‘ื• ืงื ื™ืช ืืช ื”ื“ื•ืžื™ื™ืŸ, ืžืฆื ืฉื "ืฉืจืชื™ 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$ ืžืชื—ื™ืœื™ื ืฉืœื”ื ื”ื ืงืจืฉ ืงืคื™ืฆื” ืžืฆื•ื™ืŸ ืœืื™ืžื•ืŸ.

ื .ื‘ ืชื•ื“ื” ืžื™ื•ื—ื“ืช ืœืžื—ื‘ืจ ื”ืชืžืฆื™ืช ื”ื–ื•, ืฉืฉื™ืžืฉื” ื‘ืกื™ืก ืœื›ืœ ื”ืคืขื•ืœื•ืช ื”ื "ืœ. ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื ื–ื” ืœื ืขื•ื‘ื“ ืขื‘ื•ืจ Laravel 7, ืชื™ืงื ืชื™ ืืช ื–ื”.

PPS ืื ืืชื” ื‘ืžืงืจื” ืžื”ื ื“ืก ืžื•ื‘ื™ืœ ืฉื—ื•ืฉื‘ ื‘ืคืงื•ื“ื•ืช bash, ื‘ื‘ืงืฉื” ืืœ ืชืฉืคื•ื˜ ื‘ื—ื•ืžืจื”. ื™ื™ืชื›ืŸ ืฉืชืžืฆื ืืช ื”ืžืืžืจ ื”ื–ื” ื‘ืจืžื” ื ืžื•ื›ื”, ืื‘ืœ ื”ื™ื™ืชื™ ืฉืžื— ืœืžืฆื•ื ืื—ื“ ื›ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืื•ืชื•. ืื ื™ืฉ ื”ืฆืขื•ืช ืœืฉื™ืคื•ืจ, ืื ื™ ื‘ืขื“.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”