Skip to content

Woosung blog

우분투 20.04에 워드프레스 설치하기

Google Cloud, Ubuntu

읽는 시간 : 3 분 소요

wordpress cover

무료 홈페이지 주소 받기

https://blog.wsgvet.com/free-homepage-address-freenom

클라우드 플레어 가입 및 네임서버 변경하기

https://blog.wsgvet.com/cloudflare-sign-in-and-change-nameserver

구글 클라우드 플랫폼 가입, 도메인 연결, Nginx 설치

https://blog.wsgvet.com//sign-in-google-cloud-platform-and-connect-domain-and-hello-world

구글 클라우드 컴퓨트 엔진에서 우분투 기본 설정하기

https://blog.wsgvet.com/google-cloud-compute-engine-ubuntu-basic-setting

letsencrypt 와일드카드 인증서 발급 및 MariaDB 설치하기

https://blog.wsgvet.com/letsencrypt-wildcard-certification-issue-and-mariadb-install

위 5개 글에 따라 따라오셨다면 이제 이 글을 보시면 됩니다.

구글 클라우드 무료 티어에서도 생각보다 빠릿하게 돌아가더라구요!


php7.4 패키지 설치 및 기본설정하기

1sudo apt update && sudo apt upgrade

위 명령어로 현재 패키지 리스트 업데이트 및 최신 패키지를 설치합니다.

1sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip zip unzip

위 명령어로 워드프레스에 필요한 패키지를 설치합니다.

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

위 명령어로 들어가면 엄청나게 많은 글의 내용이 나오는데요.

1short_open_tag = On
2memory_limit = 256M
3cgi.fix_pathinfo = 0
4upload_max_filesize = 100M
5post_max_size = 101M
6max_execution_time = 360
7date.timezone = Asia/Seoul

위 항목을 찾아서 다 바꿔줍니다.

찾는 방법은 컨트롤 + W 누르면 밑에 검색창이 나오는데, 앞부분을 복사해서 붙여넣고 엔터를 치면 찾아집니다.

예를들어 short_open_tag를 바꾸고 싶다면 short_open_tag 를 넣고 엔터를 치면 해당부분으로 갑니다.

참고로 short_open_tag는 처음 검색하면 설명 부분이 나오는데 한번더 검색하면 제대로 나옵니다.

cgi.fix_pathinfo는 아마도 ;cgi.fix_pathinfo = 1 이렇게 되어있을텐데요. 앞에 ; 은 주석으로 처리한다는 뜻이므로 이것도 빼야겠죠.

;cgi.fix_pathinfo = 1cgi.fix_pathinfo = 0  이렇게 바꿔줘야 하는 것입니다.

그 뒤에 수정하면 됩니다. 전부 찾아서 다 바꾼 후

컨트롤 + O, 엔터, 컨트롤 + X를 누르면 저장 후 빠져나와집니다.

1sudo systemctl reload php7.4-fpm

위 명령어로 설정을 적용해줍니다.


MariaDB에서 DB 생성하기

1sudo mysql -u root -p

위 명령어로 MariaDB로 들어갑니다.

1CREATE DATABASE wpdb;

위 명령어로 wpdb라는 DB를 만듭니다.

1CREATE USER 'wpdbuser'@'localhost' IDENTIFIED BY 'password';

위 명령어로 wpdbuser라는 MariaDB의 유저를 생성하고 그 비밀번호를 password로 합니다.

password를 꼭 자신에게 맞는 비번으로 바꾸세요! 이 비번은 DB입력할때 꼭 필요한 비번입니다.

1GRANT ALL ON wpdb.* TO 'wpdbuser'@'localhost' WITH GRANT OPTION;

위 명령어로 wpdbuser유저가 wpdb라는 DB의 모든 권한을 가지게 됩니다.

1FLUSH PRIVILEGES;
2EXIT;

저장 후 빠져나옵니다.


워드프레스 최신판 설치하기

1cd /tmp
2wget https://wordpress.org/latest.tar.gz
3tar -xvzf latest.tar.gz
4sudo mv wordpress /var/www/wordpress

위 4개의 명령어로 워드프레스 최신판을 다운로드하고, 압축을 풀고, /var/www/wordpress에 위치하게 합니다.

1sudo chown -R www-data:www-data /var/www/wordpress/
2sudo chmod -R 755 /var/www/wordpress/

위 두 명령어로 해당 폴더의 소유권을 www-data에게 주고, 권한을 755로 줍니다.


Nginx 설정파일 만들기

(1) 워드프레스 전용 rewirte 설정파일 만들어주기

1sudo nano /etc/nginx/snippets/wp-conf.conf

위 명령어로 설정파일 만들기에 들어갑니다.

1charset utf-8;
2server_tokens off;
3client_max_body_size 100M;
4autoindex off;
5
6location ~ \.(gif|jpg|png)$ {
7 add_header Vary "Accept-Encoding";
8 add_header Cache-Control "public, no-transform";
9 expires max;
10 }
11location ~* \.(mp4|css|js)$ {
12 expires max;
13 log_not_found off;
14 }
15location ~*.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ {
16 expires max;
17 log_not_found off;
18 access_log off;
19 }
20location / {
21 try_files $uri $uri/ /index.php?$args;
22 }
23location ~ /\.ht {
24 deny all;
25 }
26location ~ \.php$ {
27 include snippets/fastcgi-php.conf;
28 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
29 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
30 include fastcgi_params;
31 }

위 내용을 그대로 복사 후 붙여넣기 해줍니다.

컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.


(2) SSL 관련 설정파일 만들기

1sudo nano /etc/nginx/snippets/wp-ssl.conf

위 명령어로 SSL 설정파일 만들기에 들어갑니다.

1ssl_certificate /etc/nginx/ssl/fullchain.pem; # SSL 풀체인 인증서 경로. 자신의 환경에 맞게 바꾸세요.
2ssl_certificate_key /etc/nginx/ssl/privkey.pem; # SSL 프라이빗 키 경로. 자신의 환경에 맞게 바꾸세요.
3ssl_trusted_certificate /etc/nginx/ssl/chain.pem; # SSL 인증서 경로. 자신의 환경에 맞게 바꾸세요.
4
5ssl_dhparam snippets/dhparams.pem;
6ssl_session_cache shared:SSL:10m;
7ssl_session_timeout 1d;
8ssl_session_tickets off;
9
10ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1;
11ssl_stapling on;
12ssl_stapling_verify on;
13resolver 8.8.8.8 8.8.4.4 valid=300s;
14resolver_timeout 10s;
15
16ssl_protocols TLSv1.2 TLSv1.3;
17ssl_prefer_server_ciphers off;
18ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
19
20add_header X-Frame-Options SAMEORIGIN;
21add_header X-Content-Type-Options nosniff;
22add_header X-XSS-Protection "1; mode=block";
23add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

위 내용을 메모장에 복사 후 수정한 뒤에 붙여넣기 해줍니다.

제일 위에 인증서 경로를 자신의 환경에 맞게 수정해주세요.

제가 알려드릴 acme.sh로 인증서를 발급받으면 수정할 필요가 없습니다.

다 바꾼 후 컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.


(3) dhparams.pem 생성하기

1sudo openssl dhparam -out /etc/nginx/snippets/dhparams.pem 2048

위 명령어로 dhparams.pem 파일을 생성합니다.

대략 10~20초면 생성이 됩니다.


SSL 인증서를 미리 만들었다면 (4) 서버 설정파일 만들기로 넘어가면 됩니다.

SSL 인증서가 없다면

  1. .cf, .ga, .gq, .ml .tk 무료 도메인을 가지고 있는 경우
LuaDNS API를 이용한 무료도메인 와일드카드 SSL 인증서 발급 받기

위 링크를 통해서 클라우드플레어가 아닌 LuaDNS를 통해 무료도메인도 와일드카드 인증서를 발급받을 수 있습니다.

webroot 방식보다 DNS 방식으로 발급 받는 것이 훨씬 편하므로 강력 추천드립니다.

DNS 인증이 아닌 webroot 방식으로 인증서를 발급 받으려면 바로 밑에 무료 도메인 전용 인증서 생성하기를 참고하세요!

  1. .com, .net, .co.kr 등 유료 도메인을 가지고 있는 경우
DNS 인증을 통한 acme.sh Letsencrypt SSL 인증서 발급받기

위 링크에서 클라우드플레어를 통하여 매우 쉽게 와일드카드 인증서 및 자동갱신을 설정할 수 있습니다.

인증서를 생성했다면 밑의 무료 도메인 전용 인증서 생성하기는 건너뛰고 (4) 서버 설정파일 만들기로 넘어가면 됩니다!


무료 도메인 전용 인증서 생성하기

이제 Letsencrypt의 webroot 방식으로 인증서를 생성할 수 있습니다.

1sudo nano /etc/nginx/sites-available/wordpress

위 명령어로 Nginx설정파일을 만들고 들어갑니다.

1server {
2 listen 80;
3 listen [::]:80;
4
5 server_name www.some.ga some.ga; #some.ga를 자신이 원하는 도메인으로 수정하세요.
6
7 access_log off;
8
9 root /var/www/wordpress;
10 index index.php;
11
12 include snippets/wp-conf.conf;
13}

위 내용에서 some.ga 부분을 자신의 도메인으로 바꿔주세요.

그리고 컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.


1sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

위 명령어로 설정파일을 활성화되게 해줍니다.

1sudo rm -f /etc/nginx/sites-enabled/default

위 명령어로 기존 활성화된 default 서버 링크만 삭제해줍니다.

1sudo nginx -t

위 명령어로 설정에 이상이 없는지 확인합니다.

1$ sudo nginx -t
2 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3 nginx: configuration file /etc/nginx/nginx.conf test is successful

위와 같이 oksuccessful이 나오면 성공입니다.

1sudo service nginx restart

위 명령어로 nginx를 재시작 해줍니다.


이제 acme.sh를 통한 webroot 인증서 발급을 위한 준비는 끝났습니다.

acme.sh 설치하기

1sudo su

위 명령어로 root 계정으로 들어갑니다.

root 계정이 아니면 권한 문제가 생길 수 있습니다. 공식 매뉴얼에는 sudo 명령어를 추천하지 않습니다.

1curl https://get.acme.sh | sh

위 명령어로 설치할 수 있습니다. 만약에 안된다면

1wget -O - https://get.acme.sh | sh

위 명령어로도 설치할 수 있습니다.

설치할 때 빨간색 글자가 나올 수도 있는데, 무시해도 됩니다.

SSH 터미널(Putty 등)을 끄고, 다시 접속합니다.

SSH에 다시 접속하면 별다른 작업을 하지 않아도 root 계정으로 acme.sh 명령어를 바로 쓸 수 있습니다.


인증서 발급 받기

1sudo su
2mkdir /etc/nginx/ssl

우선 위와 같이 root로 로그인 후 SSL 인증서가 저장될 폴더를 생성합니다.

1acme.sh --issue -w /var/www/wordpress -d example.com -d www.example.com -d blog.example.com -d home.example.com -d nas.example.com --key-file /etc/nginx/ssl/privkey.pem --fullchain-file /etc/nginx/ssl/fullchain.pem --cert-file /etc/nginx/ssl/chain.pem --reloadcmd "systemctl reload nginx.service"

위와 같이 webroot 방식으로 발급받으면 멀티도메인 거의 무제한(100개까지)으로 발급 받을 수 있습니다.

발급 받고 싶은 도메인 주소도 -d example.com 형식으로 추가해주면 됩니다.

example.com만 자신의 도메인으로 수정해주세요!

1[Tue 02 Jun 2020 10:35:49 PM KST] Your cert is in /root/.acme.sh/aced.ga/aced.ga.cer
2[Tue 02 Jun 2020 10:35:49 PM KST] Your cert key is in /root/.acme.sh/aced.ga/aced.ga.key
3[Tue 02 Jun 2020 10:35:49 PM KST] The intermediate CA cert is in /root/.acme.sh/aced.ga/ca.cer
4[Tue 02 Jun 2020 10:35:49 PM KST] And the full chain certs is there: /root/.acme.sh/aced.ga/fullchain.cer
5[Tue 02 Jun 2020 10:35:49 PM KST] Installing cert to:/etc/nginx/ssl/chain.pem
6[Tue 02 Jun 2020 10:35:49 PM KST] Installing key to:/etc/nginx/ssl/privkey.pem
7[Tue 02 Jun 2020 10:35:49 PM KST] Installing full chain to:/etc/nginx/ssl/fullchain.pem
8[Tue 02 Jun 2020 10:35:49 PM KST] Run reload cmd: systemctl reload nginx.service
9[Tue 02 Jun 2020 10:35:49 PM KST] Reload success

위와 같이 잘 발급되고, 원하는 위치에 인증서가 이동된 것을 확인할 수 있습니다.

참고로 ECDSA 인증서를 발급 받고 싶으시면

위 명령어에서 --keylength ec-256 (prime256v1, ECDSA P-256) 또는 --keylength ec-384 (secp384r1, ECDSA P-384)를 넣어주면 됩니다.

1acme.sh --issue --keylength ec-256 -w /var/www/wordpress -d aced.ga -d www.aced.ga -d blog.aced.ga -d home.aced.ga -d nas.aced.ga --key-file /etc/nginx/ssl/privkey.pem --fullchain-file /etc/nginx/ssl/fullchain.pem --cert-file /etc/nginx/ssl/chain.pem --reloadcmd "systemctl reload nginx.service"

위와 같이 실행하면 ECDSA P-256 인증서가 생성됩니다.

다른 상세한 사항은 DNS 인증을 통한 acme.sh Letsencrypt SSL 인증서 발급받기를 참조하세요!

acme.sh를 통해서 인증서를 생성하면 60일 뒤에 자동으로 갱신해줍니다. 그러니 자동갱신에 대한 걱정은 안하셔도 됩니다 ^^


(4) 서버 설정파일 만들기

1sudo nano /etc/nginx/sites-available/wordpress

위 명령어로 설정파일로 들어갑니다.

기존에 있는 내용을 컨트롤 + K 를 눌러 모두 삭제하세요.

1server {
2 listen 80;
3 server_name example.com www.example.com;
4 location / {
5 rewrite ^/(.*)$ https://example.com/$1 permanent;
6 }
7}
8
9server {
10listen 443 ssl http2;
11listen [::]:443 ssl http2;
12
13index index.html index.php;
14
15access_log off;
16
17server_name example.com www.example.com;
18if ($host != 'example.com' ) {
19rewrite ^/(.*)$ https://example.com/$1 permanent;
20}
21
22root /var/www/wordpress;
23index index.php;
24
25include snippets/wp-conf.conf;
26include snippets/wp-ssl.conf;
27}

위 내용을 그대로 붙이지 말고, 메모장에 붙여넣기 한 뒤에 example.com 을 자신의 홈페이지 주소로 바꿔야 됩니다.

다 바꾼 후 붙여넣습니다. 그 뒤에 컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.

1sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

위 명령어로 설정파일을 활성화되게 해줍니다. 무료 도메인 설정 때 했다면 안해도 됩니다. 2번 해도 상관없습니다 ^^;;

1sudo rm -f /etc/nginx/sites-enabled/default

위 명령어로 기존 활성화된 default 서버 링크만 삭제해줍니다.

1sudo nginx -t

위 명령어로 설정에 이상이 없는지 확인합니다.

1nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
2nginx: configuration file /etc/nginx/nginx.conf test is successful

위 내용이 나온다면 성공한 것입니다.

1sudo service nginx restart

위 명령어로 nginx를 재시작해줍니다.

이제 서버쪽 설정은 모두 끝났습니다!


워드프레스 접속 및 초기 설정하기

이제 주소창에 설정한 주소 를 넣어보세요.

01 conf

위와 같이 언어설정부터 나옵니다.

한국어를 선택 후 계속을 눌러주세요.

02 start

설치시작!을 누르세요

03 db config

위와 같이 아까 DB 만들었던 그 내용을 넣으면 됩니다.

데이터베이스 이름에 wpdb 를 넣고

사용자명에 wpdbuser 를 넣고

암호는 password 대신에 넣었던 자신의 비번을 넣으면 됩니다.

데이터베이스 호스트와 테이블 접두어는 그대로 두고 전송을 누릅니다.

04 start install

설치 실행하기를 누릅니다.

05 install

사이트 제목은 원하는 이름을 넣으면 됩니다.

사용자명은 접속 ID입니다.

암호는 원하는대로 넣으시고

이메일 주소도 자신의 주소를 넣으면 됩니다.

나중에 바꿀때 인증 메일을 받을 수 있게 실제 사용하는 이메일을 넣는게 좋겠죠

그리고 검색 엔진 접근 여부는 이 사이트에 검색 엔진이 들어와서 검색에 걸리도록 할지 말지 결정하는 것입니다.

그리고 다  되었다면 워드프레스 설치하기를 누르세요.

06 success

이제 성공!이 떴습니다. 자신의 아이디가 나오고 로그인을 누르세요

07 login

사용자명에 아이디를 넣고 암호에 비번을 넣고 로그인을 합니다.

08 fin

드디어 메인 관리자 페이지가 떴습니다!  고생하셨어요!!!


참조사이트

How to Install WordPress on Ubuntu 20.04 | 18.04 with Nginx and Let’s Encrypt | Website for Students

https://websiteforstudents.com/how-to-install-wordpress-on-ubuntu-20-04-18-04-with-nginx-and-lets-encrypt