LEMP는 Linux + Nginx + MariaDB + PHP 조합을 의미한다. Nginx의 N 대신 발음하기 좋게 EngineX의 E를 쓴다
방화벽 설치
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
|
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 설치
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
|
http://localhost 로 접속하여 웹브라우저 상에서 셋업
SSL 설정
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
2
|
certbot revoke --cert-path /etc/letsencrypt/live/test.com/cert.pem
certbot delete --cert-name test.com
|