YGH

[홈서버 만들기] 9. 블로그

2020년 11월 17일

개요

워드프레스는 php언어로 만들어졌고 웹사이트 제작 툴이다.

블로그, 홈쇼핑 사이트 등에 주로 쓰이며 다양하게 커스터마이징도 할 수 있다.

php 설치

우선 nginx에 사용하기 위해 php-fpm 패키지를 먼저 설치하자.

이 패키지를 설치하지 않고 php를 먼저 설치해버리면 필요 없는 웹서버 Apache가 자동으로 설치된다고 하기 때문에 주의하자.

$ sudo apt install php-fpm

남은 php모듈들을 설치하자.

$ sudo apt install php php-curl php-gd php-imagick php-mbstring php-mysql php-xml php-zip

php에 기본으로 설정되어 있는 업로드 용량이 작은데 원활한 사용을 위해 이걸 늘려보자.

vim을 사용할 때  :  을 입력 후 명령모드에서 /[찾을내용] 을 입력하면 그 내용이 있는 줄로 이동해준다.

이를 이용해서 아래 내용을 적절히 조절하자.

이 설정 값들은 웹 페이지에 올릴 수 있는 최대 파일 크기라고 생각하면 된다.

다음에 설치할 웹 스토리지 Nextcloud 에서는 이 값들을 훨씬 크게 잡을 것이니 무엇인지 잘 기억해 두도록 하자.

post_max_size = 160M
upload_max_filesize = 128M

설정한 값들을 적용하기 위해 서비스를 재시작 하자.

$ sudo service php7.4-fpm restart

데이터베이스 생성

이전 게시글에서 MariaDB를 설치했을 것이다.

WordPress에 사용할 새로운 데이터베이스를 만들어보자.

우선, root 계정으로 데이터베이스 관리 시스템에 접속한다.

$ sudo mysql -u root -p

데이터베이스를 생성하며 문자셋을 utf8mb4 로 설정하자.

> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

만든 데이터베이스를 관리할 새로운 계정을 만들자.

계정명은 데이터베이스명과 통일하였고 비밀번호 부분은 개인적으로 설정하면 된다.

> CREATE USER 'wp'@'localhost' IDENTIFIED BY '[비밀번호]';

생성한 계정에 워드프레스용 데이터베이스에 대한 모든 권한을 부여하자.

> GRANT ALL PRIVILEGES ON wordpress.* to 'wp'@'localhost';

변경사항들을 적용하고 데이터베이스 관리 시스템을 종료하자.

> FLUSH PRIVILEGES;
> exit;

WordPress 다운로드 및 설정

SSH를 통해 워드프레스 공식 홈페이지에서 바로 파일을 다운로드 받아보자.

$ cd /var/www
$ sudo wget http://wordpress.org/latest.tar.gz

tar.gz 으로 된 압축 파일을 풀고 nginx 기본 디렉토리를 제거하자.

$ sudo tar -xvzf latest.tar.gz
$ sudo rm -r html

WordPress 설정 파일을 만들고 값을 조절하자.

$ cd www
$ sudo cp wp-config-sample.php wp-config.php
$ sudo vim wp-config.php

데이터베이스 내용을 입력해 주자.

방금 정한 비밀번호만 입력해주고 나머지는 똑같이 수정하면 된다.

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wp' );
define( 'DB_PASSWORD', '[비밀번호]' );
define( 'DB_CHARSET', 'utf8mb4' );

WordPress 여러가지 인증에 사용되는 랜덤 값을 입력해 줘야한다.

윈도우PC에서 크롬으로 아래 링크에 들어가서 모든 내용을 복사하자.

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

PuTTY로 SSH 접속중인 쉘의 vim 입력 모드에서 마우스 우 클릭하여 붙여넣기를 하고 기존 값들은 지우자.

FTP를 사용하지 않고 WordPress의 테마 및 플러그인 등을 간편하게 업그레이드하기 위해 아래 설정도 추가하자.

define('FS_METHOD', 'direct');

WordPress 파일들을 웹 사용자에 맞게 소유권한을 변경해주자.

$ sudo chown -R www-data:www-data .

아래 명령을 통해 파일들의 권한이 잘 변경되었는지 www-data 가 보이는지 확인하자.

$ ls -l
total 212
-rw-r--r--  1 www-data www-data   405 Feb  6  2020 index.php
-rw-r--r--  1 www-data www-data 19915 Feb 12  2020 license.txt
-rw-r--r--  1 www-data www-data  7278 Jun 26 13:58 readme.html
-rw-r--r--  1 www-data www-data  7101 Jul 28 17:20 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Sep  1 18:54 wp-admin
-rw-r--r--  1 www-data www-data   351 Feb  6  2020 wp-blog-header.php
-rw-r--r--  1 www-data www-data  2332 Jul 23 00:52 wp-comments-post.php
-rw-r--r--  1 www-data www-data  3197 Sep 26 09:31 wp-config.php
-rw-r--r--  1 www-data www-data  2913 Feb  6  2020 wp-config-sample.php
drwxr-xr-x  4 www-data www-data  4096 Sep  1 18:54 wp-content
-rw-r--r--  1 www-data www-data  3940 Feb  6  2020 wp-cron.php
drwxr-xr-x 24 www-data www-data 12288 Sep  1 18:54 wp-includes
-rw-r--r--  1 www-data www-data  2496 Feb  6  2020 wp-links-opml.php
-rw-r--r--  1 www-data www-data  3300 Feb  6  2020 wp-load.php
-rw-r--r--  1 www-data www-data 48761 Jul  7 03:59 wp-login.php
-rw-r--r--  1 www-data www-data  8509 Apr 14 11:32 wp-mail.php
-rw-r--r--  1 www-data www-data 20181 Jul  6 10:50 wp-settings.php
-rw-r--r--  1 www-data www-data 31159 Jul 23 21:11 wp-signup.php
-rw-r--r--  1 www-data www-data  4755 Feb  6  2020 wp-trackback.php
-rw-r--r--  1 www-data www-data  3236 Jun  8 19:55 xmlrpc.php

Nginx 서버 블록 설정을 위해 아래 명령어를 통해 워드프레스가 있는 폴더 경로를 기억하자.

$ cd www
$ pwd

Nginx 서버 블록 설정

Nginx 설치때 만든 서버 블록 파일을 WordPress에 맞게 설정하자.

server {
        listen 80 default_server;
        server_name ygh.kr;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2 default_server;
        server_name ygh.kr;
        root /var/www/wordpress;

        access_log /var/log/nginx/wordpress.access.log;
        error_log /var/log/nginx/wordpress.error.log;

        ssl_certificate /etc/letsencrypt/live/ygh.kr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ygh.kr/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/ygh.kr/chain.pem;
        ssl_dhparam /etc/ssl/dhparam.pem;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_ecdh_curve secp384r1; 
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header Strict-Transport-Security max-age=15552000;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;

        client_max_body_size 0;
        index index.php index.html;

        location / {
                try_files $uri $uri/ /index.php?$args;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }
}

nginx 구문 검사와 재시작을 통해 설정은 적용하자.

$ sudo nginx -t
$ sudo service nginx restart

WordPress 설치

웹 브라우저로 홈서버에 접속하여 설치를 마무리하자.

주소는 https://ygh.kr 와 같이 개인 서버 주소 입력하면 된다.

첫 화면에 언어 선택이 나오는데 “한국어”를 선택해주자.

블로그에 게시글을 작성하고 댓글을 관리하는 최고 권한 관리자 계정을 만드는 것이다.

계정을 만들고 로그인까지 쭉 진행하자.

관리자 로그인 시 첫 화면은 블로그 관리자 페이지가 나온다.

왼쪽 상단의 집 모양을 누르면 블로그 홈페이지로 가게된다.

성공적으로 설치되었다.

구글링을 통해 테마도 바꾸고 플러그인도 설치하여 자신만의 개성 있는 블로그를 꾸며 보자.

글 작성법이나 댓글 관리법은 관리자 페이지에서 직접 만져보며 익히자.