갈루아의 반서재

728x90


여기서는 우분투 18.04 서버 + LEMP stack (Linux, Nginx, MySQL, and PHP) 기반으로 워드프레스를 설치하는 방법을 알아본다. 


Prerequisites


본격적인 진행에 앞서 다음의 준비를 마쳐야 한다. 

- sudo 사용자 생성 

- LEMP 스택 설치 : 이미 앞선 게시물에서 별도로 다룬바 있다 

2018/10/27 - [리눅스 Linux] - 우분투 18.04 에 LEMP 스택 설치하기 How To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Ubuntu 18.04

- SSL 을 통한 사이트 보안

도메인이 있는 경우 https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04

도메인이 없는 경우 https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-18-04


Step 1 — Creating a MySQL Database and User for WordPress


워드프레스는 MySQL 을 이용하여 사이트 데이터를 관리하고 저장한다. 앞서 MySQL 은 이미 설치를 마쳤고, 본 단계에서는 워드프레스에서 사용할 데이터베이스와 사용자를 생성한다. 

먼저 root (administrative) 계정으로 MySQL 에 접속한다. 만약 기본설정인 auth_socket 인증 플러그인을 사용중이라면 sudo 를 이용하여 MySQL 에 접속할 수 있다. 다음과 같다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(dominika) founder@hilbert:~/dominika$ sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
 
Copyright (c) 20002018, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql>
 
cs

만약 인증방법을 패스워드 사용으로 바꾸었으면 다음 포맷으로 로그인을 하면 된다. 

1
(dominika) founder@hilbert:~/dominika$ mysql -u root -p
cs

먼저 워드프레스가 컨트롤할 수 있는 별도의 데이터베이스를 만들자. 그 데이터베이스 이름을 본 가이드에서는 redsparrow 라고 편의상 부르기로 한다. 다음과 같이 데이터베이스를 생성할 수 있다.

1
2
3
mysql> CREATE DATABASE redsparrow DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.02 sec)
 
cs

MySQL 명령문은 반드시 세미 콜론 (;) 으로 끝나야되는 점에 주의한다.

다음으로 별도의 MySQL 사용자 계정을 생성한다. 다음의 명령문으로 계정을 생성하고, 암호를 입력하고, 방금 생성한 데이터베이스에 접근 권한을 부여할 수 있다. 

1
2
3
4
5
mysql> GRANT ALL ON redsparrow.* TO 'jennifer'@'localhost' IDENTIFIED BY '***********';
Query OK, 0 rows affected, 1 warning (0.02 sec)
 
mysql>
 
cs

이제 워드프레스 사용을 위한 데이터베이스와 사용자 계정 생성을 마쳤다. 현재 인스턴스가 변경사항을 인지할 수 있도록 flush 명령을 사용하자.  

1
mysql> FLUSH PRIVILEGES;
cs

exit 로 해당 쉘을 빠져나온다. 

1
2
3
4
 
mysql> exit
Bye
 
cs


Step 2 — Installing Additional PHP Extensions


앞서 LEMP 스택을 설치할 때, PHP 가 MySQL 과 통신하기 위한 최소한의 익스텐션만 요구했음을 기억하자. 워드프레스와 많은 플러그인은 추가적인 PHP 익스텐션을 요구한다. 다음과 같이 유용한 PHP 익스텐션을 다운로드 받아 설치할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
(dominika) founder@hilbert:~/dominika$ sudo apt update
Hit:1 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Hit:4 https://packages.microsoft.com/repos/vscode stable InRelease
Hit:5 http://archive.canonical.com/ubuntu bionic InRelease
Get:6 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
Fetched 247 kB in 1s (179 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
47 packages can be upgraded. Run 'apt list --upgradable' to see them.
 
cs


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
(dominika) founder@hilbert:~/dominika$ sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  grub-pc-bin
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  libxmlrpc-epi0 libzip4 php7.2-curl php7.2-gd php7.2-intl php7.2-mbstring php7.2-soap php7.2-xml php7.2-xmlrpc php7.2-zip
The following NEW packages will be installed:
  libxmlrpc-epi0 libzip4 php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip php7.2-curl php7.2-gd php7.2-intl php7.2-mbstring php7.2-soap
  php7.2-xml php7.2-xmlrpc php7.2-zip
0 upgraded, 18 newly installed, 0 to remove and 47 not upgraded.
Need to get 1001 kB of archives.
After this operation, 3715 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 libzip4 amd64 1.1.2-1.1 [37.8 kB]
Get:2 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-curl amd64 7.2.10-0ubuntu0.18.04.1 [28.9 kB]
Get:3 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 php-curl all 1:7.2+60ubuntu1 [1996 B]
Get:4 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-gd amd64 7.2.10-0ubuntu0.18.04.1 [27.1 kB]
Get:5 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 php-gd all 1:7.2+60ubuntu1 [1996 B]
Get:6 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 php7.2-intl amd64 7.2.10-0ubuntu0.18.04.1 [124 kB]
Get:7 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 php-intl all 1:7.2+60ubuntu1 [2012 B]
Get:8 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 php7.2-mbstring amd64 7.2.10-0ubuntu0.18.04.1 [483 kB]
Get:9 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 php-mbstring all 1:7.2+60ubuntu1 [2008 B]
Get:10 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 php7.2-soap amd64 7.2.10-0ubuntu0.18.04.1 [113 kB]
Get:11 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 php-soap all 1:7.2+60ubuntu1 [2000 B]
Get:12 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-xml amd64 7.2.10-0ubuntu0.18.04.1 [107 kB]
Get:13 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 php-xml all 1:7.2+60ubuntu1 [2024 B]
Get:14 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libxmlrpc-epi0 amd64 0.54.2-1.2 [30.5 kB]
Get:15 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-xmlrpc amd64 7.2.10-0ubuntu0.18.04.1 [12.7 kB]
Get:16 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 php-xmlrpc all 1:7.2+60ubuntu1 [2004 B]
Get:17 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 php7.2-zip amd64 7.2.10-0ubuntu0.18.04.1 [20.3 kB]
Get:18 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 php-zip all 1:7.2+60ubuntu1 [1996 B]
Fetched 1001 kB in 5s (211 kB/s)
Selecting previously unselected package libzip4:amd64.
(Reading database ... 90845 files and directories currently installed.)
Preparing to unpack .../00-libzip4_1.1.2-1.1_amd64.deb ...
Unpacking libzip4:amd64 (1.1.2-1.1) ...
Selecting previously unselected package php7.2-curl.
Preparing to unpack .../01-php7.2-curl_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-curl (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-curl.
Preparing to unpack .../02-php-curl_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-curl (1:7.2+60ubuntu1) ...
Selecting previously unselected package php7.2-gd.
Preparing to unpack .../03-php7.2-gd_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-gd (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-gd.
Preparing to unpack .../04-php-gd_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-gd (1:7.2+60ubuntu1) ...
Selecting previously unselected package php7.2-intl.
Preparing to unpack .../05-php7.2-intl_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-intl (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-intl.
Preparing to unpack .../06-php-intl_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-intl (1:7.2+60ubuntu1) ...
Selecting previously unselected package php7.2-mbstring.
Preparing to unpack .../07-php7.2-mbstring_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-mbstring (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-mbstring.
Preparing to unpack .../08-php-mbstring_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-mbstring (1:7.2+60ubuntu1) ...
Selecting previously unselected package php7.2-soap.
Preparing to unpack .../09-php7.2-soap_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-soap (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-soap.
Preparing to unpack .../10-php-soap_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-soap (1:7.2+60ubuntu1) ...
Selecting previously unselected package php7.2-xml.
Preparing to unpack .../11-php7.2-xml_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-xml (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-xml.
Preparing to unpack .../12-php-xml_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-xml (1:7.2+60ubuntu1) ...
Selecting previously unselected package libxmlrpc-epi0:amd64.
Preparing to unpack .../13-libxmlrpc-epi0_0.54.2-1.2_amd64.deb ...
Unpacking libxmlrpc-epi0:amd64 (0.54.2-1.2) ...
Selecting previously unselected package php7.2-xmlrpc.
Preparing to unpack .../14-php7.2-xmlrpc_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-xmlrpc (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-xmlrpc.
Preparing to unpack .../15-php-xmlrpc_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-xmlrpc (1:7.2+60ubuntu1) ...
Selecting previously unselected package php7.2-zip.
Preparing to unpack .../16-php7.2-zip_7.2.10-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-zip (7.2.10-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-zip.
Preparing to unpack .../17-php-zip_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-zip (1:7.2+60ubuntu1) ...
Setting up php7.2-gd (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/gd.ini with new version
Setting up php7.2-xml (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/dom.ini with new version
 
Creating config file /etc/php/7.2/mods-available/simplexml.ini with new version
 
Creating config file /etc/php/7.2/mods-available/wddx.ini with new version
 
Creating config file /etc/php/7.2/mods-available/xml.ini with new version
 
Creating config file /etc/php/7.2/mods-available/xmlreader.ini with new version
 
Creating config file /etc/php/7.2/mods-available/xmlwriter.ini with new version
 
Creating config file /etc/php/7.2/mods-available/xsl.ini with new version
Processing triggers for php7.2-fpm (7.2.10-0ubuntu0.18.04.1) ...
Setting up php7.2-curl (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/curl.ini with new version
Setting up php-curl (1:7.2+60ubuntu1) ...
Setting up php7.2-mbstring (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/mbstring.ini with new version
Setting up php-xml (1:7.2+60ubuntu1) ...
Setting up php7.2-soap (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/soap.ini with new version
Setting up libzip4:amd64 (1.1.2-1.1) ...
Setting up libxmlrpc-epi0:amd64 (0.54.2-1.2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Setting up php-mbstring (1:7.2+60ubuntu1) ...
Setting up php7.2-intl (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/intl.ini with new version
Setting up php-gd (1:7.2+60ubuntu1) ...
Setting up php-intl (1:7.2+60ubuntu1) ...
Setting up php7.2-xmlrpc (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/xmlrpc.ini with new version
Setting up php7.2-zip (7.2.10-0ubuntu0.18.04.1) ...
 
Creating config file /etc/php/7.2/mods-available/zip.ini with new version
Setting up php-soap (1:7.2+60ubuntu1) ...
Setting up php-zip (1:7.2+60ubuntu1) ...
Setting up php-xmlrpc (1:7.2+60ubuntu1) ...
Processing triggers for php7.2-fpm (7.2.10-0ubuntu0.18.04.1) ...
 
cs

설치가 끝났으면 새롭게 설치한 기능들이 반영되도록 PHP 프로세서를 구동하는 PHP-FPM 프로세스를 재시작한다. 

1
(dominika) founder@hilbert:~/dominika$ sudo systemctl restart php7.2-fpm
cs

이제 필요한 PHP 익스텐션을 모두 갖췄다.


Step 3 — Configuring Nginx


이제 nGINX 서버 블락 파일에 몇 가지 소소한 설정을 해볼 것이다. 앞선 LEMP 스택 설치가 완료되었다고 가정한다. 여기서는 /etc/nginx/sites-available/dominika.com 을 설정 파일로 사용할 것이다. 이 부분은 설정에 맞게 고쳐서 본 가이드를 따라하자. 그리고 /var/www/html 를 워드프레스를 설치할 루트 디렉토리로 사용할 것이다. 사이트의 서버 블락 파일을 sudo 권한으로 오픈한다. 

1
(dominika) founder@hilbert:~/dominika$ sudo nano /etc/nginx/sites-available/dominika.com
cs

메인 서버 블락 안에 몇 개의 로케이션 블록을 넣도록 하자. 정규표현식을 사용하여 아래 빨간 텍스트의 내용을 추가한다. 

/etc/nginx/sites-available/dominika.com

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
31
server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.com;
 
        location / {
                try_files $uri $uri/ =404;
        }
 
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
 
       location ~ /\.ht {
                deny all;
        }
 
       location = /favicon.ico { log_not_found off; access_log off; }
 
       location = /robots.txt { log_not_found off; access_log off; allow all; }
 
       location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
 
           expires max;
 
           log_not_found off;
  }
}
 
cs

/ 로케이션 블록안에 기존의 내용을 주석처리하고 다음과 같은 내용으로 try_files 을 수정한다. 

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
31
server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.com;
 
        location / {
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php$is_args$args;
        }
 
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
 
       location ~ /\.ht {
                deny all;
        }
 
       location = /favicon.ico { log_not_found off; access_log off; }
 
       location = /robots.txt { log_not_found off; access_log off; allow all; }
 
       location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
 
           expires max;
 
           log_not_found off;
  }
}
cs

저장하고 파일을 닫는다. 

구문 오류가 없는지 검증해보자. 

1
2
3
(dominika) founder@hilbert:~/dominika$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
cs


1
(dominika) founder@hilbert:~/dominika$ sudo systemctl reload nginx
cs

그럼  워드프레스를 다운로드 받아서 셋팅을 해보자. 


Step 4 — Downloading WordPress


이제 워드프레스를 다운로드 받아보자. 보안상의 이유로 최신 버전을 받기를 권장한다. 쓰기 가능한 디렉토리로 이동한 후 다음과 같이 최신 버전을 다운로드 받아 압축을 풀도록 하자. 

1
2
3
4
5
(dominika) founder@hilbert:~/dominika$ cd /tmp
(dominika) founder@hilbert:/tmp$ curl -LO https://wordpress.org/latest.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 8538k  100 8538k    0     0   692k      0  0:00:12  0:00:12 --:--:--  764k
cs

압축된 파일을 워드프레스 디렉토리에 푼다.

1
2
3
(dominika) founder@hilbert:/tmp$ tar xzvf latest.tar.gz
wordpress/
 
cs

압축해제한 파일을 도큐먼트 루트로 이동시키기에 앞서, 샘플 환경설정 파일부터 복사를 해두자. 

1
(dominika) founder@hilbert:/tmp$ cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
cs

이제 워드프레스 디렉토리의 모든 파일을 도큐먼트 루트로 이동시킨다. -a 플래그를 이용하여 권한이 그래도 유지되도록 한다. 소스 디렉토리 맨 마지막에  . 을 포함하여 숨겨진 파일을 포함하여 해당 디렉토리의 모든 내용이 복사되도록 한다. 

1
(dominika) founder@hilbert:/tmp$ sudo cp -/tmp/wordpress//var/www/html
cs

이제 www-data 사용자와 그룹에 소유권을 부여할 차례다. 이는 Nginx 를 구동시킬 때 필요한 사용자 계정 및 그룹으로, Nginx 는 웹사이트 서비스 제공 및 자동 업데이트를 위해 해당 디렉토리에 읽기/쓰기 권한이 필요하기 때문이다. 

1
(dominika) founder@hilbert:/tmp$ sudo chown -R www-data:www-data /var/www/html
cs


Step 5 — Setting up the WordPress Configuration File


메인 워드프레스 설정 파일을 변경해야 한다. 워드프레스는 보안생성기를 제공하고 있는데, 이를 활용하여 설치에 필요한 보안키들을 생성하자. 

1
(dominika) founder@hilbert:/tmp$ curl -s https://api.wordpress.org/secret-key/1.1/salt/
cs

실행하면 다음과 같은 유일한 값들을 받게 될 것이다. 

내용을 복사한 다음 워드프레스 설저어 파일을 열어보자. 

1
(dominika) founder@hilbert:/tmp$ sudo nano /var/www/html/wp-config.php
cs

아래 부분을 찾아서 위의 값으로 대체한다. 해당 라인을 모두 지운 후 복사한 값을 붙여넣자.

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

다음으로 데이터베이스 설정을 수정하자. 데이터베이스 이름, 사용자, 그리고 MySQL 내에 설정했던 패스워드 등의 정보를 입력해야 한다. 그리고 하나 더 파일시스템 쓰기와 관련한 메서드 설정이다. 우리의 경우는 필요한 곳에 쓰기 퍼미션을 부여했으므로, "direct" 라고 설정해야 한다. 이 부분 설정이 잘못되면 가끔 FTP 인증을 하라는 메시지가 뜨게 된다. 설정 파일 어디에든 아래 라인을 삽입하면 된다. 

1
define('FS_METHOD''direct');
cs

아래와 같은 모양일 것이다. 저장하고 파일을 닫는다. 

/var/www/wordpress/wp-config.php


Step 6 — Completing the Installation Through the Web Interface


이것으로 서버 환경 설정은 끝났다. 이제 웹인터페이스에서 나머지 설치작업을 하도록 하자. 

웹브라우저를 열고, 도메인 이름 또는 ip 주소를 입력한다. 이후 프로세스를 진행하면 되겠다.


원문보기 https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-18-04


728x90