Ubuntu ๋ฐ Nginx์—์„œ Laravel 7์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

Ubuntu ๋ฐ Nginx์—์„œ Laravel 7์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์ €๋Š” Laravel 7์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ํŽ˜์ด์ง€๋ฅผ ๋žœ๋”ฉ ํŽ˜์ด์ง€๋กœ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ด€๋ฆฌ์ž ํŒจ๋„์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์š”์ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฐฐํฌ๊นŒ์ง€ ์™”์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ณธ๊ฒฉ์ ์ธ ์„œ๋ฒ„์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐฐํฌ ๋Šฅ๋ ฅ์ด ๊ทธ๋‹ค์ง€ ๋›ฐ์–ด๋‚˜์ง€ ์•Š์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ’€ ์Šคํƒ๋ณด๋‹ค ๋” ์•ž์ชฝ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์ง PHP๋กœ ์ž‘์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์„œ๋ฒ„ ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์ „์— ๋‚˜๋Š” ์•„์ง ์„ฑ์žฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์•Œ์•„๋‚ด์•ผ ํ–ˆ์–ด์š”.

์ด์ œ SSH๋ฅผ ํ†ตํ•œ ์‹คํ–‰๋ถ€ํ„ฐ ์ž‘์—… ์‚ฌ์ดํŠธ๊นŒ์ง€ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ํ•จ์ •์„ ํ”ผํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜จ๋ผ์ธ์—์„œ๋„ ์œ ์‚ฌํ•œ ์ง€์นจ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๋“œ๋””์–ด ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, StackOverflow์˜ ๋„์›€ ์—†์ด๋Š” ํ•œ ๊ณณ๋„ ์•„๋‹ˆ๊ณ  ๋Ÿฌ์‹œ์•„์–ด๋„ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํž˜๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹น์‹ ์˜ ์‚ถ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” DigitalOcean์—์„œ ๋ฌผ๋ฐฉ์šธ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŒ…์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. Ubuntu์—์„œ ์ž‘๋™ ์ค‘์ธ ์„œ๋ฒ„์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์‹œ ๋Œ์•„์˜ค์„ธ์š”. ์—ฌ์ „ํžˆ 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์„ ํ†ตํ•ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ ๋‹ค์Œ์„ ํด๋ฆญํ•˜์„ธ์š”. ๋งŒ๋“ค๊ธฐ->๋ฌผ๋ฐฉ์šธ. ์„ ํƒํ•˜๋‹ค 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
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐ ๊ธฐํƒ€์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. (์ €๋Š” 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์—๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ณ  ๋ชจ๋“œ ๋“ฑ์„ ์„ ํƒํ•˜๋Š” ์ผ๋ฐ˜ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋ชจ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์ผ๋ฐ˜ ๋ชจ๋“œ๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด ๋‹ค์Œ์„ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค. 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

์งˆ๋ฌธ์— ๋‹ตํ•˜์‹ญ์‹œ์˜ค. ๋ฌด์—‡์— ๋Œ€๋‹ตํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์„ ์ถ”์ฒœํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ - 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 ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž(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

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

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;

  • ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์— ๋Œ€ํ•œ ๋ฃจํŠธ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 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๋ฅผ 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

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ์ผ์€ Laravel์šฉ 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๋Š” ํ›ˆ๋ จ์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋ฐœํŒ์ž…๋‹ˆ๋‹ค.

PS ์ž‘์„ฑ์ž์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ์š”์ , ์ด๋Š” ์œ„์˜ ๋ชจ๋“  ์ž‘์—…์˜ โ€‹โ€‹๊ธฐ์ดˆ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” Laravel 7์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ ์ด๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

PPS ๋งŒ์•ฝ ๋‹น์‹ ์ด bash ๋ช…๋ น์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ์ตœ๊ณ ์˜ ์—”์ง€๋‹ˆ์–ด๋ผ๋ฉด, ๊ฐ€ํ˜นํ•˜๊ฒŒ ํŒ๋‹จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด ๊ธ€์ด ์ˆ˜์ค€์ด ๋‚ฎ๋‹ค๊ณ  ๋Š๋ผ์‹ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ํ•„์š”ํ•  ๋•Œ ์ฐพ์•„๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐœ์„ ์„ ์œ„ํ•œ ์ œ์•ˆ์ด ์žˆ์œผ๋ฉด ๊ธฐ๊บผ์ด ๋ฐ›์•„๋“ค์ด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€