Linux + Nginx + MariaDB + PHP 셋업하고 WordPress 설치하기

LEMP는 Linux + Nginx + MariaDB + PHP 조합을 의미한다. Nginx의 N 대신 발음하기 좋게 EngineX의 E를 쓴다

# 방화벽 설치

  • ufw 와 gufw 설치
1
sudo apt install ufw gufw
  • 포트개방 및 폐쇄
1
2
3
4
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5900/tcp  // vncserver port
sudo ufw deny 22/tcp  // ssh port
  • ufw 활성화
1
sudo ufw enable
  • 방화벽 설정확인
1
sudo ufw status verbose

# Nginx 설치

1
2
sudo apt install nginx
sudo service nginx start

이 시점에서 서버의 80번 포트로 접속할수 있게 된다.

# PHP 설치

  • Nginx는 PHP를 네이티브로 지원하지 않으므로 Fastcgi Process Manager(FPM)로 구현된 PHP를 설치한다.
1
sudo apt install php php-fpm
  • php-fpm을 사용하도록 설정하기 위해 설정파일을 만든다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
sudo nano /etc/nginx/sites-available/default

// 다음 행 마지막에 index.php 추가
index index.html index.htm index.nginx-debian.html;

// 다음 행의 주석처리를 해제
#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; 
#}
  • 서비스 재시작
1
sudo service nginx reload

# MariaDB 설정

  • 설치
1
sudo apt install mariadb-server php-mysql
  • 셋업
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 셋업 시작
sudo mysql_secure_installation

// 초기 셋업
Enter current password for root (enter for none): 엔터
Set root password? [Y/n] y
New password: 패스워드 입력
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

// 로그인
sudo mysql -uroot -p

// 워드프레스용 DB 생성
create database wordpress;

// 워드프레스 DB에 접근할 수 있는 유저 생성
create user 사용자이름 identified by '패스워드';

// 생성한 유저에 워드프레스 DB에 대한 모든 권한을 부여
grant all privileges on wordpress.* to '사용자이름'@'localhost' identified by '패스워드';

// 권한변경을 적용
flush privileges;

# WordPress 설치

  • html 폴더 안의 모든 파일 삭제
1
2
cd /var/www/html/
sudo rm *
  • 설치 작업
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 워드프레스 다운로드
sudo wget http://wordpress.org/latest.tar.gz

// 다운로드한 파일의 압축해제
sudo tar xzf latest.tar.gz

// 워드프레스 폴더안의 모든파일을 현재 폴더로 이동
sudo mv wordpress/* .

// 압축파일과 빈 워드프레스 폴더를 삭제
sudo rm -rf wordpress latest.tar.gz
  • WordPress 셋업

http://localhost 로 접속하여 웹브라우저 상에서 셋업

# SSL 설정

  • Let`s encrypt 설치
1
sudo apt install letsencrypt
  • HTTP-based DCV 방식으로 서버 인증
1
sudo letsencrypt certonly --webroot --webroot-path=/var/www/html -d qualitybitz.com -d www.qualitybitz.com
  • 인증성공시 인증서 발급

/etc/letsencrypt/live/test.com/ 폴더에 cert.pem(인증서 파일), chain.pem(인증서 발급자 파일), fullchain.pem(cert.pem 과 chain.pen 을 하나로 합쳐놓은 파일),privkey.pem(인증암호를 해독하는 개인키) 가 생성된다

Apache2는 cert.pem, chain.pem, privkey.pem 을 사용하고, Nginx는 fullchain.pem, privkey.pem 을 사용한다.

  • Nginx 설정 /etc/nginx/sites-available/default를 다음과 같이 수정한다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    server_name www.test.com test.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 default_server;
    listen [::]:443 default_server;
 
    root /var/www/html;
    index index.html index.htm index.php;
    server_name _;
 
    location / {
        try_files $uri $uri/ =404;
    }
 
    ssl                  on;
    ssl_certificate      /etc/letsencrypt/live/test.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/test.com/privkey.pem;
    ssl_ciphers  HIGH:!aNULL:!MD5;
 
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}
  • 인증서 갱신
1
sudo letsencrypt renew
  • 인증서 삭제
1
2
certbot revoke --cert-path /etc/letsencrypt/live/test.com/cert.pem
certbot delete --cert-name test.com
Licensed under CC BY 4.0
Built with Hugo
Theme Stack designed by Jimmy