์ ๋ Laravel 7์ ์ฌ์ฉํ์ฌ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋ฉ์ธ ํ์ด์ง๋ฅผ ๋๋ฉ ํ์ด์ง๋ก ๋ง๋ค๊ณ , ๊ทธ ์์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ด๋ฆฌ์ ํจ๋์์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ์ต๋๋ค. ์์ ์ด ์๋๋๋ค. ๋ฐฐํฌ๊น์ง ์์ต๋๋ค. ๋ชจ๋ ๋ฌธ์ ๊ฐ ์๋ ๋ณธ๊ฒฉ์ ์ธ ์๋ฒ์์ ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ์ข์ ํํ ๋ฆฌ์ผ์ ์ฐพ์์ต๋๋ค. ๋๋ ๋ฐฐํฌ ๋ฅ๋ ฅ์ด ๊ทธ๋ค์ง ๋ฐ์ด๋์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ํ ์คํ๋ณด๋ค ๋ ์์ชฝ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ง PHP๋ก ์์ฑํ๊ณ ํ ์คํธํ ์ ์๋ค๋ฉด ์๋ฒ ๋ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ ์ ๋๋ ์์ง ์ฑ์ฅํ์ง ์์์ต๋๋ค. ํ์ง๋ง ๋๋ ๊ทธ๊ฒ์ ์์๋ด์ผ ํ์ด์.
์ด์ SSH๋ฅผ ํตํ ์คํ๋ถํฐ ์์ ์ฌ์ดํธ๊น์ง ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ํจ์ ์ ํผํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
์จ๋ผ์ธ์์๋ ์ ์ฌํ ์ง์นจ์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ, ๋๋์ด ์ฐพ์์ต๋๋ค. ์ฌ์ค, StackOverflow์ ๋์ ์์ด๋ ํ ๊ณณ๋ ์๋๊ณ ๋ฌ์์์ด๋ ๊ฑฐ์ ์์ต๋๋ค. ๋๋ ํ๋ค์๋ค. ๊ทธ๋์ ๋๋ ๋น์ ์ ์ถ์ ๋จ์ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ DigitalOcean์์ ๋ฌผ๋ฐฉ์ธ๋ก ๋ชจ๋ ๊ฒ์ ํ ๊ฒ์
๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ํ์ํ์ง ์์ต๋๋ค. ํธ์คํ
์ ์ ํํ์ญ์์ค. Ubuntu์์ ์๋ ์ค์ธ ์๋ฒ์ ๋๋ฌํ๋ฉด ๋ค์ ๋์์ค์ธ์. ์ฌ์ ํ DigitalOcean์์ ๋๋ฉ์ธ์ ์ค์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ฌ๋๋ค์ ์ํด ๋๋ฉ์ธ ์ค์ ์ ๋ํ ์ถ๊ฐ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ
๋ชจ๋ DigitalOcean ๊ด๋ จ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฃผ์ ์ ๊ณต๋ฉ๋๋ค.
์์ํฉ์๋ค.
TL;DR(๊ธฐ๋ณธ ๋ช ๋ น๋ง ํด๋น)
์ฌ์ฉ์ ์์ฑ
ssh root@[IP-ะฐะดัะตั ะฒะฐัะตะณะพ ะดัะพะฟะปะตัะฐ]
adduser laravel
usermod -aG sudo laravel
su laravel
SSH๋ฅผ ์ถ๊ฐํ์ธ์.
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- ๊ณต๊ฐ ํค ์ฝ์
chmod 600 ~/.ssh/authorized_keys
๋ฐฉํ๋ฒฝ
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
Nginx์
sudo apt update
sudo apt install -y nginx
sudo ufw allow 'Nginx HTTP'
sudo ufw status
MySQL์
sudo apt install -y mysql-server
sudo mysql_secure_installation
,NYNNY
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<ะะฐั ะฟะฐัะพะปั ะดะปั MySQL>';
SELECT user,authentication_string,plugin,host FROM mysql.user;
FLUSH PRIVILEGES;
exit
PHP
-
sudo apt update
-
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
-
sudo apt-add-repository ppa:ondrej/php
-
sudo apt update
-
7.3 :
sudo apt install -y php7.3-fpm php7.3-mysql
-
7.4 :
sudo apt install -y php7.4-fpm php7.4-mysql
-
sudo vim /etc/nginx/sites-available/<ะะฐั ะดะพะผะตะฝ>
๊ธฐ๋ณธ ์ค์ :
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name <ะะฐั ะดะพะผะตะฝ ะธะปะธ IP>;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Laravel์ ๋ํ HTTP ์ค์ ๋ง:
server {
listen 80;
listen [::]:80;
root /var/www/html/<ะะผั ะฟัะพะตะบัะฐ>/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name <ะะฐั ะดะพะผะตะฝ ะธะปะธ IP>;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Laravel์ HTTPS ์ค์ :
server {
listen 80;
listen [::]:80;
server_name <ะะฐั ะดะพะผะตะฝ> www.<ะะฐั ะดะพะผะตะฝ>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <ะะฐั ะดะพะผะตะฝ> www.<ะะฐั ะดะพะผะตะฝ>;
root /var/www/html/<ะะผั ะฟัะพะตะบัะฐ>/public;
ssl_certificate /etc/letsencrypt/live/<ะะฐั ะดะพะผะตะฝ>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<ะะฐั ะดะพะผะตะฝ>/privkey.pem;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
sudo ln -s /etc/nginx/sites-available/<ะะฐั ะดะพะผะตะฝ> /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
Laravel
-
7.3 :
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip
-
7.4 :
sudo apt install -y php7.4-mbstring php7.4-xml composer unzip
-
mysql -u root -p
-
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<ะะฐั ะฟะฐัะพะปั ะพั MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
sudo mkdir -p <ะะผั ะฟัะพะตะบัะฐ>
-
sudo chown laravel:laravel <ะะผั ะฟัะพะตะบัะฐ>
-
cd ./<ะะผั ะฟัะพะตะบัะฐ>
-
git clone <ัััะปะบะฐ ะฝะฐ ะฟัะพะตะบั> .
/git clone -b <ะธะผั ะฒะตัะบะธ> --single-branch <ัััะปะบะฐ ะฝะฐ ะฟัะพะตะบั> .
-
composer install
-
vim .env
APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://<ะะฐั ะดะพะผะตะฝ>
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=<ะะฐั ะฟะฐัะพะปั ะพั MySQL>
-
php artisan migrate
-
php artisan key:generate
-
sudo chown -R $USER:www-data storage
-
sudo chown -R $USER:www-data bootstrap/cache
-
chmod -R 775 storage
-
chmod -R 775 bootstrap/cache
HTTPS
-
sudo add-apt-repository ppa:certbot/certbot
-
sudo apt install -y python-certbot-nginx
-
sudo certbot certonly --webroot --webroot-path=/var/www/html/<ะะผั ะฟัะพะตะบัะฐ>/public -d <ะะฐั ะดะพะผะตะฝ> -d www.<ะะฐั ะดะพะผะตะฝ>
-
sudo nginx -t
-
sudo ufw allow 'Nginx HTTPS'
-
sudo ufw status
-
sudo systemctl reload nginx
DigitalOcean์์ ๋๋กญ๋ฆฟ์ ์์ฑํ๊ณ ์ SSH ํค๋ฅผ ๋ฑ๋กํ์ธ์.
์ ๋ ๊ทํ๊ฐ DigitalOcean์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ์ง์ ์์๋ผ ๊ฒ์ด๋ผ๊ณ ์ง์ฌ์ผ๋ก ๋ฏฟ์ต๋๋ค. ๋ง์ ๊ฒ์ฆ๊ณผ ๊ธฐํ ์ฌํญ์ผ๋ก ์ธํด ์ฝ์ง ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆํ ๋ ์ง์์ ์ผ๋ก ๋คํธ์ํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ VPN์ ํตํด ๋ชจ๋ ์์ ์ ์ํํด ๋ณด์ญ์์ค. ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์๋จ ๋ฉ๋ด์์ ๋ค์์ ํด๋ฆญํ์ธ์. ๋ง๋ค๊ธฐ->๋ฌผ๋ฐฉ์ธ. ์ ํํ๋ค Ubuntu.
๋ฑ๋กํ์๋ง์ ๊ทํ์ ๊ณ์ข๋ก $100๊ฐ ์ง๊ธ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ง ๋ง์ญ์์ค. 60์ผ๋ง ํฌ์ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋งค์ฐ ์ ์ต๋๋ค. ๋์ฒ๋ผ ๋ ๋น์ผ ์๊ธ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ์๋ ์์ผ๋ฏ๋ก ๋์ค์ ์ค์ ๋์ด ํ๋ฅด๊ธฐ ์์ํ๋ฉด ๋ ์ ๋ ดํ ์๊ธ์ ๋ก ์ ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ๋๋ค๊ณ ๋ฐ๋ก ๋ง์๋๋ฆด๊ฒ์. ๋๋ฆด ์๋ ์์ง๋ง ์ค์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋์ ๊ฐ๋ค. ๋๋ ์ ํํ๋ค ใ ใดใ ใน->$5.
๋๋ ์ฐ๋ฆฌ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ์ ์ ํํฉ๋๋ค ํ๋ํฌํธ๋ฅดํธ. VPC ๋คํธ์ํฌ->๊ธฐ๋ณธ-fra1
์ฆ์ SSH๋ฅผ ํตํด ์ธ์ฆ์ ์งํํ๊ฒ ์ต๋๋ค. ๋ธ๊น ํ๋ ์๋ฆฌ ์ SSH ํค. SSH๊ฐ ์๋ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ์ ๋งค์ฐ ๊ฐ๋จํ ์ง์นจ์ด ์์ต๋๋ค. Bash ํฐ๋ฏธ๋์ ์ด๊ณ ๋ถ์ฌ๋ฃ๊ธฐ
ssh-keygen
. ๊ทธ๋ฐ ๋ค์ ๊ณต๊ฐ ํค๊ฐ ์๋ ํ์ผ๋ก ์ด๋ํฉ๋๋ค./Users/<ะะฐัะต ะธะผั ะฟะพะปัะทะพะฒะฐัะตะปั>/.ssh/id_rsa.pub
(๋๋ ๊ฐ๋จํcat ~/.ssh/id_rsa.pub
) ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ์ผ์ชฝ ์ฐฝ์ ๋ถ์ฌ๋ฃ์ผ์ธ์. ์ด๋ค ์ด๋ฆ.์ฐ๋ฆฌ๋ ๋๋กญ๋ฆฟ์ ํธ์คํธ ์ด๋ฆ์ ์๊ฐํด๋ ๋๋ค.
๋ธ๊น ํ๋ ์๋ฆฌ ๋ฌผ๋ฐฉ์ธ ๋ง๋ค๊ธฐ
์ ์ฌ์ฉ์ ๋ง๋ค๊ธฐ
ssh root@[IP-ะฐะดัะตั ะฒะฐัะตะณะพ ะดัะพะฟะปะตัะฐ]
- ๊ณ์ ์ฐ๊ฒฐํ์๊ฒ ์ต๋๊น(์/์๋์/[์ง๋ฌธ])?
yes
- SSH ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ์ธ์
- ์ฌ์ฉ์ ์์ฑ laravel:
adduser laravel
- ๋น๋ฐ๋ฒํธ ๋ฐ ๊ธฐํ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ธ์. (์ ๋ 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๋ก ์ด๋ํ์ญ์์ค. ๋ชจ๋ ๊ฒ์ด ์ ์งํ๋๋ฉด ๋ค์์ด ํ์๋ฉ๋๋ค.
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
๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
์ด์ ์ด ํ์ผ์ ์ญ์ ํ ์ ์์ต๋๋ค: 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 ์์ฑ์์๊ฒ ํน๋ณํ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
PPS ๋ง์ฝ ๋น์ ์ด bash ๋ช ๋ น์ผ๋ก ์๊ฐํ๋ ์ต๊ณ ์ ์์ง๋์ด๋ผ๋ฉด, ๊ฐํนํ๊ฒ ํ๋จํ์ง ๋ง์ญ์์ค. ์ด ๊ธ์ด ์์ค์ด ๋ฎ๋ค๊ณ ๋๋ผ์ค ์๋ ์์ง๋ง, ํ์ํ ๋ ์ฐพ์๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ ์ ์ํ ์ ์์ด ์์ผ๋ฉด ๊ธฐ๊บผ์ด ๋ฐ์๋ค์ด๊ฒ ์ต๋๋ค.
์ถ์ฒ : habr.com