Ubuntu เช…เชจเซ‡ Nginx เชชเชฐ Laravel 7 เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชฎเชพเชตเชตเซ€

Ubuntu เช…เชจเซ‡ Nginx เชชเชฐ Laravel 7 เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชฎเชพเชตเชตเซ€

เชฎเซ‡เช‚ เชฒเชพเชฐเชพเชตเซ‡เชฒ 7 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเชพเชฐเซ‹ เชชเซ‹เชฐเซเชŸเชซเซ‹เชฒเชฟเชฏเซ‹ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เชœเซ‡เชฅเซ€ เชฎเซเช–เซเชฏ เชชเซƒเชทเซเช  เชเช• เชฒเซ‡เชจเซเชกเชฟเช‚เช— เชชเซƒเชทเซเช  เชนเชถเซ‡, เช…เชจเซ‡ เชคเซ‡เชจเชพ เชชเชฐเชจเซ€ เชฌเชงเซ€ เชฎเชพเชนเชฟเชคเซ€ เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฌเชฟเช‚เชฆเซ เชจเชฅเซ€. เชคเซ‡ เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชฎเชจเซ‡ เชฌเชงเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชธเชพเชฅเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเชตเชฟเชงเชพเชฏเซเช•เซเชค เชธเชฐเซเชตเชฐ เชชเชฐ เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซเช‚ เชคเซ‡ เช…เช‚เช—เซ‡เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชธเชพเชฐเชพ เชŸเซเชฏเซเชŸเซ‹เชฐเชฟเชฏเชฒเซเชธ เชฎเชณเซเชฏเชพ. เชนเซเช‚ เชœเชฎเชพเชตเชŸเชฎเชพเช‚ เช–เซ‚เชฌ เชฎเชœเชฌเซ‚เชค เชจเชฅเซ€; เชนเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเชŸเซ‡เช• เช•เชฐเชคเชพเช‚ เชตเชงเซ เช†เช—เชณ เช›เซเช‚. เช…เชจเซ‡, เชœเซ‹ เชนเซเช‚ เชนเชœเซ€ เชชเชฃ PHP เชฎเชพเช‚ เชฒเช–เซ€ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€ เชถเช•เซเช‚ เช›เซเช‚, เชคเซ‹ เชธเชฐเซเชตเชฐเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชตเช—เซ‡เชฐเซ‡. เชนเซเช‚ เชนเชœเซ€ เชฎเซ‹เชŸเซ‹ เชฅเชฏเซ‹ เชจเชฅเซ€. เชชเชฐเช‚เชคเซ เชฎเชพเชฐเซ‡ เชคเซ‡ เชฌเชนเชพเชฐ เช•เชพเชขเชตเซเช‚ โ€‹โ€‹โ€‹โ€‹เชนเชคเซเช‚.

ะกะตะนั‡ะฐั ะฟั€ะพะนะดะตะผัั ะฟะพ ะฒัะตะผ ัˆะฐะณะฐะผ, ะฝะฐั‡ะธะฝะฐั ั ะทะฐะฟัƒัะบะฐ ั‡ะตั€ะตะท SSH ะธ ะทะฐะบะฐะฝั‡ะธะฒะฐั ั€ะฐะฑะพั‡ะธะผ ัะฐะนั‚ะพะผ. ะŸะพัั‚ะฐั€ะฐะตะผัั ะพะฑะพะนั‚ะธ ะฒัะต ะฟะพะดะฒะพะดะฝั‹ะต ะบะฐะผะฝะธ.

เชคเชฎเซ‡ เช‘เชจเชฒเชพเช‡เชจ เชธเชฎเชพเชจ เชธเซ‚เชšเชจเชพเช“ เชถเซ‹เชงเซ€ เชถเช•เชถเซ‹. เช›เซ‡เชตเชŸเซ‡, เชฎเชจเซ‡ เชคเซ‡ เชฎเชณเซ€ เช—เชฏเซเช‚. เชธเชพเชšเซเช‚, เชเช• เชœเช—เซเชฏเชพเช เชจเชนเซ€เช‚, เชธเซเชŸเซ‡เช•เช“เชตเชฐเชซเซเชฒเซ‹เชจเซ€ เชฎเชฆเชฆ เชตเชฟเชจเชพ เชจเชนเซ€เช‚, เช…เชจเซ‡ เชญเชพเช—เซเชฏเซ‡ เชœ เชฐเชถเชฟเชฏเชจเชฎเชพเช‚. เชฎเซ‡เช‚ เชธเชนเชจ เช•เชฐเซเชฏเซเช‚. เชคเซ‡เชฅเซ€ เชœ เชฎเซ‡เช‚ เชคเชฎเชพเชฐเซเช‚ เชœเซ€เชตเชจ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡.

เช…เชฎเซ‡ 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;
        }
}

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 เชฆเซเชตเชพเชฐเชพ เชฌเชงเซเช‚ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹, เชคเซ‡ เชฎเชฆเชฆ เช•เชฐเชถเซ‡.

เชŸเซ‹เชš เชชเชฐเชจเชพ เชฎเซ‡เชจเซ‚เชฎเชพเช‚, เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เชฌเชจเชพเชตเซ‹->เชŸเซ€เชชเชพเช‚. เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช‰เชฌเซเชจเซเชŸเซ.

เชœเชฒเชฆเซ€ เชคเชฎเซ‡ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเชพเชตเชถเซ‹, เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เชเช•เชพเช‰เชจเซเชŸเชฎเชพเช‚ $100 เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡. เชชเชฐเช‚เชคเซ เชฎเซ‚เชฐเซเช– เชฌเชจเชถเซ‹ เชจเชนเซ€เช‚. เชคเซ‡เชจเซ‡ เช—เชพเชณเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฎเชพเชคเซเชฐ 60 เชฆเชฟเชตเชธ เช›เซ‡. เช…เชจเซ‡ เช† เชฌเชนเซ เช“เช›เซเช‚ เช›เซ‡. เชคเชฎเซ‡, เชฎเชพเชฐเซ€ เชœเซ‡เชฎ, เชตเชงเซ เช–เชฐเซเชšเชพเชณ เชฏเซ‹เชœเชจเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช—เซ‹ เช›เซ‹, เชœเซ‡เชฅเซ€ เชชเช›เซ€เชฅเซ€, เชœเซเชฏเชพเชฐเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชจเชพเชฃเชพเช‚ เชตเชนเซ‡เชตเชพ เชฒเชพเช—เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชธเชธเซเชคเซ€ เชฏเซ‹เชœเชจเชพ เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€ เชถเช•เซ‹. เชนเซเช‚ เชคเชฎเชจเซ‡ เชคเชฐเชค เชœ เช•เชนเซ€เชถ เช•เซ‡ เชคเซ‡ เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชตเชงเชพเชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฃ เช˜เชŸเชพเชกเซ€ เชถเช•เชคเชพ เชจเชฅเซ€. เชคเซ‡เชฅเซ€ เชคเซ‡ เชœเชพเชฏ เช›เซ‡. เชนเซเช‚ เชชเชธเช‚เชฆ เช•เชฐเซเช‚ เช›เซเช‚ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก->$5.

เชนเซเช‚ เช…เชฎเชพเชฐเซ€ เชธเซŒเชฅเซ€ เชจเชœเซ€เช•เชจเซ‹ เชชเซเชฐเชฆเซ‡เชถ เชชเชธเช‚เชฆ เช•เชฐเซเช‚ เช›เซเช‚ เชซเซเชฐเซ‡เชจเซเช•เชซเชฐเซเชŸ. VPC เชจเซ‡เชŸเชตเชฐเซเช•->default-fra1

เช…เชฎเซ‡ เชคเชฐเชค เชœ SSH เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เช•เชฐเซ€เชถเซเช‚. เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เชจเชตเซ€ SSH เช•เซ€. เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ SSH เชจเชฅเซ€, เชคเซ‹ เชœเชฎเชฃเซ€ เชฌเชพเชœเซเช เช–เซ‚เชฌ เชœ เชธเชฐเชณ เชธเซ‚เชšเชจเชพเช“ เช›เซ‡. เชฌเซ‡เชถ เชŸเชฐเซเชฎเชฟเชจเชฒ เช–เซ‹เชฒเซ‹ เช…เชจเซ‡ เชชเซ‡เชธเซเชŸ เช•เชฐเซ‹ ssh-keygen. เชชเช›เซ€ เช†เชชเชฃเซ‡ เชธเชพเชฐเซเชตเชœเชจเชฟเช• เช•เซ€ เชธเชพเชฅเซ‡ เชซเชพเช‡เชฒ เชชเชฐ เชœเชˆเช เช›เซ€เช /Users/<ะ’ะฐัˆะต ะธะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั>/.ssh/id_rsa.pub (เช…เชฅเชตเชพ เชซเช•เซเชค cat ~/.ssh/id_rsa.pub), เชธเชฎเชพเชตเชฟเชทเซเชŸเซ‹เชจเซ€ เชจเช•เชฒ เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชกเชพเชฌเซ€ เชฌเชพเชœเซเชจเซ€ เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชชเซ‡เชธเซเชŸ เช•เชฐเซ‹. เช•เซ‹เชˆเชชเชฃ เชจเชพเชฎ.

เช…เชฎเซ‡ เชŸเซ€เชชเซเช‚ เชฎเชพเชŸเซ‡ เชฏเชœเชฎเชพเชจเชจเชพเชฎ เชธเชพเชฅเซ‡ เช†เชตเซ€เช เช›เซ€เช.

เชฆเชฌเชพเชฃ Create Droplet

เชจเชตเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฌเชจเชพเชตเซ‹

  • 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 เช†เชฆเซ‡เชถเซ‹

เชธเชฎเช—เซเชฐ เชฒเซ‡เช–เชฎเชพเช‚ เชตเชฟเชฎ เชธเช‚เชชเชพเชฆเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชจเซ€เชšเซ‡เชจเชพ เชœเชพเชฃเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

  • เชตเชฟเชฎเชฎเชพเช‚ เชตเชฟเชตเชฟเชง เชฎเซ‹เชกเซเชธ เช›เซ‡: เชธเชพเชฎเชพเชจเซเชฏ เชฎเซ‹เชก, เชœเซ‡เชฎเชพเช‚ เชคเชฎเซ‡ เช†เชฆเซ‡เชถเซ‹ เชฆเชพเช–เชฒ เช•เชฐเซ‹ เช›เซ‹ เช…เชจเซ‡ เชฎเซ‹เชกเซเชธ เช…เชจเซ‡ เช…เชจเซเชฏ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช›เซ‹.
  • เช•เซ‹เชˆเชชเชฃ เชฎเซ‹เชกเชฎเชพเช‚เชฅเซ€ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชตเชพ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฎเซ‹เชก เชชเชฐ เชชเชพเช›เชพ เช†เชตเชตเชพ เชฎเชพเชŸเซ‡, เชซเช•เซเชค เชฆเชฌเชพเชตเซ‹ 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 เชชเชฐ เชœเชพเช“. เชœเซ‹ เชฌเชงเซเช‚ เชฌเชฐเชพเชฌเชฐ เชšเชพเชฒเซ‡ เช›เซ‡, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชœเซ‹เชตเซเช‚ เชœเซ‹เชˆเช.

Ubuntu เช…เชจเซ‡ Nginx เชชเชฐ Laravel 7 เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชฎเชพเชตเชตเซ€

MySQL เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

  • sudo apt install mysql-server
  • เชธเซเชตเชšเชพเชฒเชฟเชค เชธเซเชฐเช•เซเชทเชพ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชฒเซ‹เช‚เชš เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ sudo mysql_secure_installation

เชชเซ‚เช›เซ‡เชฒเชพ เชชเซเชฐเชถเซเชจเซ‹เชจเชพ เชœเชตเชพเชฌ เช†เชชเซ‹. เชœเซ‹ เชคเชฎเชจเซ‡ เช–เชฌเชฐ เชจ เชนเซ‹เชฏ เช•เซ‡ เชถเซเช‚ เชœเชตเชพเชฌ เช†เชชเชตเซ‹, เชคเซ‹ เช…เชนเซ€เช‚ เช•เซ‡เชŸเชฒเชพเช• เชธเซ‚เชšเชตเซ‡เชฒเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡:

  • Validate password plugin โ€” N

  • Remove anonymous users? โ€” Y

  • เชฐเซเชŸ เชฒเซ‹เช—เชฟเชจ เชฐเชฟเชฎเซ‹เชŸเชฒเซ€ เชจเชพเชฎเช‚เชœเซ‚เชฐ เช•เชฐเซ€เช? - N

  • Remove test database and access to it? โ€” N

  • เชตเชฟเชถเซ‡เชทเชพเชงเชฟเช•เชพเชฐ เช•เซ‹เชทเซเชŸเช•เซ‹ เชนเชตเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เชก เช•เชฐเซ€เช? - 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 เชชเซเชฐเซ‹เชธเซ‡เชธ เชฎเซ‡เชจเซ‡เชœเชฐ (fpm) PHP เชตเชฟเชจเช‚เชคเซ€เช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. mysql, เช…เชฒเชฌเชคเซเชค, MySQL เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.

เชนเชตเซ‡เชฅเซ€ เชนเซเช‚ 7.4 เชจเชพ เชฐเซ‹เชœ เชฌเชงเซเช‚ เช•เชฐเซ€เชถ.

Nginx เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

  • sudo vim /etc/nginx/sites-available/<ะ’ะฐัˆ ะดะพะผะตะฝ>

"<Your domain>" เชจเซ‡ เชฌเชฆเชฒเซ‡ เชกเซ‹เชฎเซ‡เชจ เชฆเชพเช–เชฒ เช•เชฐเซ‹ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, 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

เชคเชฎเชพเชฐเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชœเซ‹เชตเซเช‚ เชœเซ‹เชˆเช:

Ubuntu เช…เชจเซ‡ Nginx เชชเชฐ Laravel 7 เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชฎเชพเชตเชตเซ€

เชนเชตเซ‡ เช† เชซเชพเช‡เชฒ เช•เชพเชขเซ€ เชถเช•เชพเชฏ เช›เซ‡: sudo rm /var/www/html/info.php

เชฒเชพเชฐเชพเชตเซ‡เชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹

  • 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 <ะ˜ะผั ะฟั€ะพะตะบั‚ะฐ>

เช†เช—เชณ เชคเชฎเชพเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช—เซ€เชฅเชฌเชฅเซ€ เช•เซเชฒเซ‹เชจเชฟเช‚เช—.

  • cd ./<ะ˜ะผั ะฟั€ะพะตะบั‚ะฐ>
  • git clone <ััั‹ะปะบะฐ ะฝะฐ ะฟั€ะพะตะบั‚> .

เชคเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เชœเซ‹ เชคเชฎเซ‡ เชธเซเชฅเชฟเชฐ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเชพเชšเชตเซ€ เชจเชฅเซ€ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฅเซ€ /public) เช—เซ€เชฅเชฌ เชชเชฐ, เชชเช›เซ€ เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชคเซ‡ เชจเชนเซ€เช‚ เชนเซ‹เชฏ. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฎเซ‡เช‚ เช†เชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เชฅเซเชฐเซ‡เชก เชฌเชจเชพเชตเซเชฏเซ‹ เช›เซ‡ 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 เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เช—เซ‹เช เชตเชตเชพเชจเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡:

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 เชœเซ‹ เชคเชฎเซ‡ เชŸเซ‹เชšเชจเชพ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐ เชฌเชจเซ‹ เช›เซ‹ เชœเซ‡ เชฌเซ‡เชถ เช•เชฎเชพเชจเซเชกเชฎเชพเช‚ เชตเชฟเชšเชพเชฐเซ‡ เช›เซ‡, เชคเซ‹ เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช•เช เซ‹เชฐเชคเชพเชฅเซ€ เชจเชฟเชฐเซเชฃเชฏ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚. เชคเชฎเชจเซ‡ เช† เชฒเซ‡เช– เชจเซ€เชšเชพ เชธเซเชคเชฐเชจเซ‹ เชฒเชพเช—เชถเซ‡, เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เชคเซ‡ เชถเซ‹เชงเซ€เชจเซ‡ เช†เชจเช‚เชฆ เชฅเชฏเซ‹ เชนเซ‹เชค. เชœเซ‹ เชธเซเชงเชพเชฐเชฃเชพ เชฎเชพเชŸเซ‡ เชธเซ‚เชšเชจเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เชนเซเช‚ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช›เซเช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹