본문 바로가기
코딩, 개발 꾸준히 하면 볕날선생만큼 한다.

2021년 12월 17일 기준 VPS에다가 LEMP 스택 쌓아서 워드프레스 설치하기 (+Canonical Ubuntu 20.04 Minimal | 2021.12.03-0 , VM.Standard.E2.1.Micro | 가상 머신, 1 core OCPU, 1 GB memory, 0.48 Gbps network bandwidth 환경 기준)

by 볕날선생 2021. 12. 15.
728x90
반응형

How to install lemp stack on ubuntu 20.04

스왑 파일 생성 - 메모리 부족 방지

sudo apt update && sudo apt upgrade

sudo fallocate -l 3G /swapfile                                    #3기가로 할거라면

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

 

그리고

나노편집기 아래처럼 열어서 | 없다면 sudo apt install nano 쳐서 나노편집기 설치

 

sudo nano /etc/fstab

 

셋째줄에 추가하고 컨트롤+x y 엔터(저장)

 

/swapfile swap swap defaults 0 0

 

방화벽 설정 아래처럼

sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 

저장

sudo netfilter-persistent save

 

체크

sudo iptables --list

 

재부팅

sudo reboot


How to Install WordPress with LEMP on Ubuntu 20.04

시간설정

sudo timedatectl set-timezone Asia/Seoul

 

체크 타임존 아시아/서울로 되어있는지

timedatectl

 

엔진엑스 Nginx 설치

sudo apt install nginx

 

설치 잘 되었나 체크

nginx -v

 

액티브 러닝 나오는지 체크

service nginx status

 

엔진엑스 재시작

sudo service nginx restart

 

혹시나 아파치2 우분투 20.04 버젼에서 실행되는거 멎게하기

sudo systemctl unmask nginx.service

또는(안먹으면)

sudo /etc/init.d/apache2 stop

 

엔진엑스 사랑해 재시작

sudo systemctl start nginx 

sudo systemctl enable nginx

 

글고 엔진엑스 세팅

sudo nano /etc/nginx/nginx.conf

첫줄에 user www-data; 

로 나온다면 컨트롤 + x 누르고 나오면 되고

만약 user nginx; 

로 되어있다면 user www-data; 

로 바꿔주고 컨트롤 + x , y , 엔터 (저장)

 

진짜 마지막 재시작

sudo systemctl reload nginx


PHP 8.1 - fpm 설치하기 ( 아파치는 기본 PHP 를 쓰지만, 엔진엑스는 PHP-FPM을 씁니다.)

현재 최신버젼 확인 https://www.php.net/downloads.php

2021년 12월 14일 기준 8.1 이네요.

 

nginx 기준 설치 

sudo apt install php8.1-fpm

 

E: Unable to locate package php8.1-fpm 

E: Couldn't find any package by glob 'php8.1-fpm'

근데 안먹네요... php 8.0으로 해봐도 안되네요. 흠.

E: Unable to locate package php8.0-fpm 

E: Couldn't find any package by glob 'php8.0-fpm'

 

아래 명령어처럼 쳐봐도 8.0으로 해봐도 다 안됩니다. 흠...

sudo apt install php8.1 php8.1-fpm php8.1-cli -y

 

아래 명령어 해놔도 안되고요. 

sudo apt install software-properties-common

 

참! 그리고 php 8.0은 제이슨 json이 기본 내장되어있다고 하네요. 

 

그리하여 php 7.4를 깝니다. 

sudo apt install -y php7.4 php7.4-fpm php7.4-cli php7.4-bcmath php7.4-bz2 php7.4-dev php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-curl php7.4-gd php7.4-mysql php7.4-mysqlnd php7.4-gmp php7.4-imagick php7.4-zip php7.4-intl php7.4-xml php7.4-xmlrpc php7.4-dba php7.4-soap php7.4-ctype php7.4-pdo php7.4-redis php7.4-geoip php7.4-simplexml php7.4-exif php7.4-fileinfo php-pear php-fpm

 

설치 겁나 잘되네요. 설치 잘 되었나 액티브 러닝 상태 확인

service php7.4-fpm status

 

알아서 자동실행 설정 Nginx 엔진엑스는 php**-fpm 만 사용하니까요.

sudo systemctl enable php7.4-fpm
sudo systemctl start php7.4-fpm

 

이정도하면 어차피 설치는 잘 되었을겁니다. 간소화로

cd /var/www/html

sudo rm index.nginx-debian.html

<?php phpinfo(); ?> 넣고 테스트하느라 info.php 맹글었다면 아래도 추가 

sudo rm info.php

 

그리고 엔진엑스 디폴트파일 삭제 

sudo rm -rf /etc/nginx/sites-available/default

 

근데 삭제 전에 파일내용이 뭔지 메모!

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

지우고 나서

새롭게 디폴트 파일 맹글어 설정

sudo nano /etc/nginx/sites-available/default

 

아래 내용 복사 하고 열린 나노 편집기에 마우스 오른쪽 버튼(붙여넣기) 그다음 컨트롤 엑스 y 엔터 (저장)

server {
listen 80 ;
listen [::]:80 ;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
access_log /var/log/nginx/web.access.log;
error_log /var/log/nginx/web.error.log;

location / {
try_files $uri $uri/ /index.php?$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_cache off;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include mime.types;
}
location ~ /\.ht {
deny all;
}
}

문법 잘 맞나 확인

sudo nginx -t

 

다시 불러오고 재시작

sudo systemctl reload nginx

sudo service nginx restart


마리아~ 아베마리아 마리아 디비 설치

최신버젼 확인

https://mariadb.org/download/?t=repo-config 

 

용복넷, 하루카산 두개가 있는데 용복넷을 기존에 자주 이용하였으나 속도가 좀 느려서 하루카산으로 써봤다.
sudo apt-get install software-properties-common dirmngr apt-transport-https
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el,s390x] https://ftp.harukasan.org/mariadb/repo/10.6/ubuntu focal main'

 

그리고

sudo apt update && sudo apt upgrade

 

마리아 디비 설치

sudo apt install mariadb-server

 

잘 깔렸나(설치되었나) 확인하기 (액티브 러닝만 뜨면 됨)

service mysql status


잠깐 SSL 설정하기

루아 디엔에스 가입 후 설정

https://api.luadns.com/

 

가입하고 메일인증하고 도메인주소랑 IP 주소를 매칭시킨다.

LUA DNS 들어가서 상단 ZONES 탭에 호스팅케이알이나 가비아같은 도메인 판매 사이트에서 구매한 도메인 주소를 ADD ZONE 눌러서 -> ADD NEW RECORD 두번 눌러서 -> 추가된 5번 째 줄에는 NAME * / CONTENT 아이피주소 / TTL 5분 그리고 추가된 6번째 줄에는 NAME 빈칸 / CONTENT 아이피주소 / TTL 5분 입력하고 저장 SAVE 한다.

 

그다음 엔진엑스 SSL CERTBOT 설치한다.

sudo apt install certbot python3-certbot-nginx

 

세팅 변경 server_name _; 변경하기

sudo nano /etc/nginx/sites-available/default

들어가서

server_name _; 행에 있는걸 server_name 도메인주소.com; 

으로 변경하고 저장 컨트롤 x y 엔터 (저장) 한다.

 

그다음 서버 재시작

sudo service nginx restart

 

인증서 발급

sudo certbot --nginx -d 도메인주소.com

 

이메일주소 입력 엔터

어그리 A 입력 엔터

Y 입력 엔터

 

그리고 1 또는 2 골라라라 나오는데 간단히 설명해서

1은 http 로 들어온 사람 -> https 로 리다이렉트 리디렉트 안한다

2는 리디렉트 리다이렉트 한다 이거다.

혼용이나 혼용 아니냐 문제인데 그건 각자의 선택으로.

 

이제 주소 쳐보면 자동으로 자물쇠가 잠긴게 확인된다.

 

자동으로 갱신도 하게 맹글어야겠지

아래 명령어로 갱신테스트 해보고

sudo certbot renew --dry-run

 

실제 수동 갱신은 

sudo certbot renew 

명령어다 참고만 하시도록!

 

만료일자 먼저 체크하기

sudo certbot certificates

익스파이어 데이가 나온다. 그게 만료일자다.

 

크론탭 설치 (우분투 기준으로 적는다.)

크론탭은 스케쥴러로 자동으로 어떤 작업을 수행해주는 작업명령툴이다.

sudo apt-get update && sudo apt-get install cron

 

크론 설치가 완료되었다면 크론탭 설치를 하면 된다 쉽다.

아래 명령어로 현재 설정된 크론탭 스케쥴이 있는지 보고

sudo crontab -l

아래 명령어로 스케쥴을 수정 및 편집 추가하는 거다.

sudo crontab -e 

 

그런데 우리는? certbot 을 설치했지? 그렇다는 말은 자동으로 갱신이 된다는 말이다.

sudo nano /etc/crontab 

치면 언제 갱신되는지 나옴.

 

!!!!!!!!!

중요

!!!!!!!!!

혹시나 리디렉션 리다이렉트 리디렉트를 원치 않았는데, 잘못 리디렉션을 했다 하면, certbot이나 cron crontab SSL 인증서 삭제하지 말고, 그냥 새로운 주소로 덮어 씌워라. 계속 리디렉션 되는거 풀려고 지웠다가 접속조차 못한 경우가 발생하니.(sudo nano /etc/nginx/sites-available/default 들어가서 server_name _; 으로 바꿔주면 초기 아이피주소 혹은 초기 도메인으로 접속은 가능할 수도 있다! 때에 따라 안되기도 함.)

 

첨부터 sudo nano /etc/nginx/sites-available/default 드가서 서버네임 오른쪽에 새로이 하려는 세팅할 주소 적고 리디렉션 할래 2 안할래 1 선택할때 1로 잘 선택해서 하면 된다.

 

애초에 주소 적고 리디렉션 안한다고 선택 하면 편할일~ 으이고

 

시간이 오래 지났다. 디비 설정하자.


디비설정 마리아디비

언어설정 먼저

sudo nano /etc/mysql/conf.d/mariadb.cnf

켜서 

 

아래 내용 복붙

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4

 

컨트롤 엑스 와이 엔터(저장)

 

마리아 디비 재시작

sudo service mariadb restart

퍼티 껐다 키기

sudo shutdown now -r

 

sudo mysql_secure_installation

이라고 칩니다. 

그러면 순서대로

Enter current password for root (enter for none): 라고 뜰텐데 그냥 엔터 를 치면 됩니다. Enter
Switch to unix_socket authentication [Y/n] N
Change the root password? [Y/n] Y
New password : 마리아 디비에서 사용할 비번 잘 생각해서 칩니다. 
Re-enter new password: 다시한번 위에서 설정한 비번을 칩니다.
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] N
Remove test database and access to it? [Y/n] Y
Reload Privilege tables now? [Y/n] Y

Thanks for using MariaDB! 

그리고 명령어 줄이 다시 뜹니다. 

아래 명령어를 쳐서 php-mysql 모듈이 잘 설치되었나 확인합니다.

sudo apt-cache policy php7.4-mysql

만약 위 명령어를 쳤는데 installed : (none) 이라고 나타나면 

sudo apt-get install php7.4-mysql

을 쳐서 설치해줌 됩니다.

 

mysql -u root -p

명령어를 치면 위에서 만든 마리아 디비 에서 사용할 비밀번호를 치라고 나옵니다. 비번을 쳐주면 

MariaDB [(none)]> 

이라고 마리아 디비 / mysql 에서 사용하는 명령어 줄이 나옵니다. 

디비 저장소를 이제 만들겁니다. 

 

MariaDB [(none)]> CREATE DATABASE 본인이 원하는 데이터베이스 저장소 이름;

 

그리고 나서 

 

MariaDB [(none)]> SHOW DATABASES;

 

라고 치면 

+--------------------+
| Database                |
+--------------------+
| information_schema |
| 데이터베이스이름    |  # 생성한 DB 데이터베이스 저장소
| mysql                    |
| performance_schema |
+--------------------+
4 rows in set (0.000 sec)

 

이렇게 나올겁니다. 

 

이제 마리아 디비 MariaDB 를 사용할 계정을 생성할 겁니다. 아까는 마리아 디비 접속 비번을 설정해주었던 거고, 이후에 마리에 디비 접속 이후 사용자에 대한 계정을 생성한다고 보면 됩니다.

 

MariaDB [(none)]> CREATE USER 사용할아아디@localhost;

 

라고 쳐서 아이디를 만들고 잘 기억해두셔야 합니다.

 

그리고 방금 만든 아이디의 비번을 만들어야겠죠. 

 

MariaDB [(none)]> SET PASSWORD FOR 방금만든아이디@localhost=PASSWORD("비밀번호");

 

마리아 DB 에 접속 한 이후에 그 안에서 이용할 계정의 아이디 랑 비밀번호 가 잘 만들어 졌습니다. 

이제 이 만들어진 계정의 생성한 DB 저장소 의 권한을 줘야겠죠. 

 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON 위에서만든DB이름.* TO 방금만든아이디@localhost IDENTIFIED BY '방금설정한비번';

 

권한을 적용합니다.

 

MariaDB [(none)]> FLUSH PRIVILEGES;

 

잘 적용 되었으니 이제 마리아DB 에서 나갑니다.

 

MariaDB [mysql]> exit;

Bye ~!


워프설치

cd /var/www/html

 

워프 다운 html 폴더에 워프.zip 파일을 다운한다.sudo wget https://ko.wordpress.org/latest-ko_KR.zip

 

압축 풀기 언집이 안깔려있다면 sudo apt install unzip 쳐서 설치하고 푼다.

sudo unzip latest-ko_KR.zip

 

압축풀고 wordpress 폴더에 있는 거 html 폴더로 다 옮긴다

sudo cp -a /var/www/html/wordpress/. /var/www/html

 

기존 zip파일과 wordpress 빈폴더를 지운다

sudo rm latest-ko_KR.zip

sudo rm -r -f wordpress

 

그리고 워드프레스 필수 폴더들을 만들어준다.

sudo mkdir /var/www/html/wp-content/upgrade && sudo mkdir /var/www/html/wp-content/uploads && sudo mkdir /var/www/html/wp-content/temp

 

 

이제 워드프레스 설정을 해준다.

sudo cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php

워드프레스 설정 파일은 wp-config.php 에 담겨져 있는데요. 이걸 나노 에디터 로 불러와서 수정해줄 겁니다.

sudo nano /var/www/html/wp-config.php

열린 wp-config.php 파일을 살펴보면 아래와 같은 줄이 있을겁니다.


/** The name of the database for WordPress */
define( 'DB_NAME', '아까 생성한 마리아DB 데이터베이서 저장소 폴더 이름' );

/** MySQL database username */
define( 'DB_USER', 'MariaDB 계정 아이디' );

/** MySQL database password */
define( 'DB_PASSWORD', '마리이디비 계정 비번' );

그리고 아래에 


define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );

 

줄이 있는데 하나하나 커서를 위치시켜서 컨트롤 + 케이 ctrl+K 를 눌러서 지운다음에

 http://api.wordpress.org/secret-key/1.1/salt/ 

접속해서 생성된 난수를 그대로 복붙 합니다.

ctrl 컨트롤 + 엑스 X 를 누르고 (Save Modified Buffer ?) Y 를 누르고 엔터! 


이제 거의 끝나갑니다.

권한 부여

sudo chown -R www-data:www-data /var/www/html

sudo usermod -a -G www-data ubuntu

 

413 Request Entity Too Large 오류발생 예방

 

1. 엔진엑스 Nginx.conf 파일 위치를 찾는다

sudo find / -name nginx.conf

 

명령어를 입력하면 엔진엑스 파일의 위치가 나온다

sudo nano /etc/nginx/nginx.conf

나의 경우 위치가 /etc/nginx/ 폴더에 위치해 있었고 수정을 위해 나노 에디터를 실행했다.

 

여기에 추가할 게 

http { 

바로 아랫부분에 이렇게 써준다 

client_max_body_size 원하는용량M;

 

256M기준

---------------------------------------

http { 
client_max_body_size 256M;

##
#Basic Settings
##
보너스로 이 위치에 이것도 써주면 좋다 (502 Bad Gateway 오류 뜨는걸 막기 위해) 버퍼크기 및 응답시간 수정
fastcgi_buffers 8 64k;
fastcgi_buffer_size 64k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

----------------------------------------

 

2. PHP업로드 용량도 수정해줘야 한다. 

sudo find / -name php.ini

 

을 쳐서 위치를 확인하고

나의 경우는 아래 위치에 있었다.

sudo nano /etc/php/7.4/fpm/php.ini

 

/etc/php/7.4/아래 fpm에 있는 파일을 나노 에디터로 열고 

컨트롤 + W 를 눌러서 문구를 찾는다.

upload_max_filesize = 128M
file_uploads = On
max_execution_time = 300
memory_limit = 512M
post_max_size = 128M
max_input_time = 180
max_input_vars = 1680

short_open_tag = On

cgi.fix_pathinfo = 0

date.timezone = Asia/Seoul

여기서 cli 에 있는 php.ini 는 memory_limit = -1 로 나왔는데 -1 은 무제한/최대치로 php 스크립트에 대한 메모리를 부여하는 값이다. 그대로 둬도 무방하다. 

모두 했으면 모두다 Ctrl + X 누르고 Y 누르고 Enter 엔터 누르고 저장하고 (nginx.conf 파일과 cli/php.ini 파일과 fpm/php.ini 파일 2개를 수정하고 저장해야겠지.)

 

엔진엑스는 

sudo nginx -t 
쳐서 문법 맞나 확인하고 썩세스 오케이 뜨는거 확인 하면
sudo service nginx restart 

쳐서 엔진엑스 재시작 그리고 

PHP FPM도 

sudo service php7.4-fpm restart

 

쳐서 재시작 하고 워드프레스 사이트 열어서 F5키 한번 누르고 

 

워드프레스 nginx 413 Request Entity Too Large 오류 메세지로 인해 업로드 하지 못했던 플러그인.zip 파일을 업로드 하면 된다.


워프 설치하자 주소창 쓰면 된다 끝!

728x90
반응형