Press "Enter" to skip to content

우분투 20.04 (Ubuntu)에 WordPress 설치하기

1. 소개

WordPress 야 말로 요즘 인터넷에서 웹사이트와 블로그를 만드는데 굉장히 인기있는 오픈 소스 기술입니다. 한국에서는 몇몇 기업들이 WordPress를 사용하고 있으나, 개인적으로는 많이 사용하고 있진 않아보입니다.

본 글에서 소개하는 우분투 홈서버에 WordPress 설치법을 따라하기 위해서는 다음과 같은 내용들이 전제조건이 되어야 합니다. 아래글들을 찾아보지 않았다면 아래 단계를 수행후에 이 페이지로 돌아오도록 합니다.

아래 링크들을 클릭하여 이전글들을 참조해주세요.

또한 터미널 내에서 텍스트를 편집하기 위해서 터미널 전용 텍스트 편집기를 설치해주도록 하겠습니다.
Ubuntu에는 다양한 편집기가 있으니 원하시는 것을 설치하셔도 좋습니다만, 저는 제일 기본적인 vim 텍스트 편집기를 설치해보도록 하겠습니다.

$ apt install vim

계속하시겠습니까? 라는 메세지가 출력되면 Y를 입력하여 설치를 진행하도록 합니다.
이제 홈서버에 워드프레스를 올리기 위한 기본적인 작업은 마쳤습니다.

이전 글에서 계속 언급했듯이 이번 글도 우분투의 터미널에서 진행 될 것입니다.
터미널을 열어주시고 sudo su를 이용하여 관리자로 접속을 해주세요.

2. 1단계: WordPress용 MySQL 데이터베이스 및 사용자 생성하기

우리가 제일 먼저 해야할 것은 데이터베이스를 생성하는 것입니다.
WordPress는 MySQL을 사용하여 사이트 및 사용자 정보를 관리하고 저장합니다.
우리는 벌써 MySQL을 서버에 설치하였지만, WordPress에서 사용할 데이터베이스와 사용자를 만들어야 합니다.

시작하려면 다음 명령을 실행하여 MySQL 관리자 계정으로 로그인합니다.
앞서 말씀드렸다시피 여기서 사용할 계정은 우분투 계정과 비밀번호가 아니라 MySQL을 설치할 때 설정해주신 비밀번호를 사용해 주셔야 됩니다.

$ mysql -u root -p

그러면 MySQL을 설치할 때 루트 계정에 대하여 설정한 암호를 입력하라는 메세지가 표시 됩니다.
암호를 입력해주시고 MySQL로 진입해주세요.


만약! 루트 계정 비밀번호를 까먹으셨다면,,,

다음을 통하여 관리자의 비밀번호를 업데이트 할 수 있습니다.

$ mysql -u root

비밀번호없이 MySQL로 진입하여 MySQL 프롬프트를 받게 되면 여기서 암호를 업데이트 할 수 있습니다. 아래의 커맨드에서 new_password 자리를 여러분의 비밀번호로 다시 바꿔주세요!
(+ 마지막에 위치한 세미콜론 ; 까지 입력을 마쳐주셔야 됩니다. 꼭이요!)

ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘new_password’;

비밀번호가 변경되었다면 EXIT; 명령어를 입력하여 MySQL을 빠져나옵니다.

$ mysql -u root -p

위와 같이 커맨드를 다시입력해 준 뒤, MySQL 관리자로 다시 재진입해줍니다.


자, 그럼 모두 MySQL에 진입하셨을겁니다.
이제 데이터베이스를 생성해 주도록 하겠습니다.
여러분 원하시는 대로 아무 이름을 지정할 수 있습니다.
여기서는 wordpress 라는 데이터베이스를 생성해보도록 하겠습니다.
wordpress대신에 여러분이 원하는 이름을 마음껏 지정해보세요.

다음의 커맨드를 입력할 때 무조건! 마지막에 위치한 세미콜론 ; 까지 입력을 마쳐주셔야 됩니다.
꼭이요!

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

이제 데이터베이스 생성은 마쳤습니다.
이 데이터베이스에 접근하고 사용할 사용자를 만들어 보도록 하겠습니다.

See also  우분투 20.04 (Ubuntu) 데스크탑 설치하기

여기서는 user라는 이름으로 사용자를 만들 것이며, 비밀번호는 password 라고 지칭하겠습니다.
여러분이 원하시는 사용자 이름과 비밀번호로 바꿔서 사용해주시길 바랍니다.

mysql> CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

이제 사용자와 비밀번호 생성이 완료 되었습니다.
데이터베이스도 있고 사용자도 있으니, 이 둘을 연결시켜주어야 합니다.

mysql> GRANT ALL ON wordpress.* TO 'user'@'%';

이제 WordPress용으로 만든 데이터베이스와 사용자, 그리고 이 둘을 연결하는 권한까지 마무리 하였습니다.
이 변경내용을 MySQL 이 알 수 있도록 명령어를 입력해 줍니다.
이해하기 쉽게 새로고침 한다 생각하시면 좋을 것 같습니다.

mysql> FLUSH PRIVILEGES;

다음을 입력하여 MySQL을 종료합니다.

mysql> EXIT;

3. 2단계: 웹사이트를 위한 가상호스트 만들기

WordPress를 설치하기에 앞서 여러분들의 웹사이트를 위한 가상 호스트를 먼저 만들어주어야 합니다.

쉽게 이해하기 위해서 누군가 여러분의 도메인을 입력했을때, 그 신호가 상대방의 컴퓨터에서 WWW으로 전송되고, 그 이후에 IP를 찾아서 여러분의 집까지 도달하고, 그리고 집안에서 여러분의 서버컴퓨터에 도달하는데까지는 우리가 설정해둔것입니다.

이제 서버 컴퓨터 내에서 어떠한 폴더로 진입하여 홈페이지를 불러올지를 설정하는 단계정도로 이해하시면 쉬울 것같습니다.

Apache 웹 서버를 사용할때는 이러한 가상 호스트를 여러개 생성하여 한 홈서버 내에서 수십개, 수백개의 홈페이지 운영도 가능하게 됩니다.

여기에서는 jake 라는 디렉토리명으로 예제를 설명해드리도록 하겠습니다.
하지만 여러분 입맛에 맞게 원하시는 대로 변경해도 됩니다!

아래와 같이 jake 에 대한 디렉토리를 만들도록 하겠습니다.

$ mkdir /var/www/jake

이제 현재 시스템 사용자를 참조하는 환경변수를 사용하여 디렉토리 소유권을 할당해 주도록 하겠습니다.

$ sudo chown -R $USER:$USER /var/www/jake

때로는 웹 루트 디렉토리 권한이 정확하게 설정되지 않을때가 있습니다. 다음을 입력하여 권한수정을 해주도록 합니다.

$ chmod -R 755 /var/www/jake

이제 텍스트 편집기를 사용하여 Apache 디렉토리에서 새 구성 파일을 열도록 합니다.
본 글에서는 앞서 설명드렸던것과 같이 vim 텍스트 에디터를 사용합니다.

$ vi /etc/apache2/sites-available/jake.conf

새로운 비어있는 파일을 만들었습니다. 다음을 복사하여 붙여넣되 도메인명이나 디렉토리명은 여러분들것과 똑같이 만들어주시면 됩니다.

<VirtualHost *:80>

    ServerName jakeson.net

    ServerAlias www.jakeson.net

    ServerAdmin jake@jakeson.net

    DocumentRoot /var/www/jake

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    AllowOverride All

</VirtualHost>

이제 저장하고 텍스트 편집기를 나가야 합니다.

ESC를 누른뒤, :wq를 눌러줍니다. w는 저장을 의미하고 q는 나가는 것을 의미합니다.
Enter 를 입력해주면 저장하고 나오게 됩니다.

이제 방금 만들어준 설정파일을 활성화 해주도록 합니다.

$ a2ensite jake.conf

Apache에서는 기본적으로 활성화된 기본 사이트가 있습니다. 이를 비활성화 시켜주도록 합니다.

$ a2dissite 000-default.conf

다음으로 구성 오류를 테스트해 보겠습니다.

$ apache2ctl configtest

다음 출력이 표시되어야 합니다.

Output

Syntax OK

변경사항을 저장하고 사용하기 위하여 Apache를 다시 시작해주도록 합니다.

$ systemctl restart apache2

4. 3단계: WordPress 다운로드 및 설치하기

이제 WordPress를 위한 소프트웨어들이 구성되었습니다.
다음은 항상 최신버전의 WordPress를 설치 할 수 있도록 커맨드를 설정해두었습니다.

See also  우분투 20.04 (Ubuntu) 홈서버를 위한 포트포워딩 설정

최신 버전의 WordPress를 다운받기 위해 임시 디렉토리로 이동하여 다운받아보도록 하겠습니다.

$ cd /tmp

$ curl -O https://wordpress.org/latest.tar.gz

압축 파일을 추출하여 WordPress 디렉토리 구조를 만듭니다.

$ tar xzvf latest.tar.gz

WordPress는 .htaccess를 이용하여 Apache가 디렉토리별로 구성 변경을 처리할 수 있도록 작업을 진행합니다. 따라서 지금 만드려는 홈페이지의 고유 .htaccess를 만들어줍니다.

$ touch /tmp/wordpress/.htaccess

우리가 방금 다운받은 WordPress 에는 샘플 구성파일이 존재합니다.
이 샘플을 우리가 읽어야 하는 파일로 이름을 변경해주겠습니다.

$ cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

또한 upgrade라는 디렉토리를 생성하여 WordPress가 자체적으로 소프트웨어를 업데이트 할수 있도록, 그리고 업데이트를 할때 권한문제가 발생하지 않도록 해줍니다.

$ mkdir /tmp/wordpress/wp-content/upgrade

이제 임시 폴더에 다운받아 놓고, 수정해 둔 폴더 (디렉토리를) 문서 루트로 복사해 와야합니다.
모든 숨겨진 파일과 디렉토리 내의 모든 항목을 복사해야하기 때문에 디렉토리 끝에 점을 사용합니다.
또한, jake 라는 디렉토리 명은 여러분들이 원하는 디렉토리 명으로 변경해줍니다.

$ sudo cp -a /tmp/wordpress/. /var/www/jake

5. 4단계: WordPress 디렉토리 구성하기

이제 기본적으로 WordPress를 실행하기 위한 파일들을 가져왔습니다.
웹 기반 WordPress를 수행하기 전에 몇가지 항목을 조정해주도록 하겠습니다.

소유권 및 권한 조정하기

모든 파일의 소유권을 www-data 사용자 및 그룹에 부여함으로써 Apache 웹서버가 실행될때 손쉽게 웹사이트 정보를 제공하고 자동 업데이트를 수행해줍니다.

chown 이라는 명령어를 통해 파일 소유권을 수정할 수 있도록 해줍니다.

$ chown -R www-data:www-data /var/www/jake

다음으로 WordPress 디렉토리 및 파일에 대한 권한을 설정하기 위해 다음과 같이 명령을 실행해 줍니다.

$ find /var/www/jake/ -type d -exec chmod 750 {} \;

$ find /var/www/jake/ -type f -exec chmod 640 {} \;

대부분 이정도 권한으로 WordPress를 효과적으로 작업이 가능하지만 일부 플러그인에서는 추가 조정이 필요할 수도 있습니다.

WordPress 구성 파일 설정하기

이제 기본 WordPress 구성 파일을 일부 변경해야 합니다.
WordPress는 안전한 생성기를 제공하므로 여러분의 홈페이지만의 고유 비밀키를 조정해 주어야합니다.

WordPress 비밀키 생성기를 통하여 보안 값을 가져오도록 합니다.

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

여러분들의 홈페이지를 구성하려 한다면 매번 고유한 비밀키를 생성하시기 바랍니다.
아래는 예시로 보여주는 고유값이므로 아래의 값을 복사하여 사용하지 마시기바랍니다!

아래 값은 예시입니다! 이런식으로 보여질겁니다.
Output

define('AUTH_KEY',         '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H');

define('SECURE_AUTH_KEY',  'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3');

define('LOGGED_IN_KEY',    'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88');

define('NONCE_KEY',        'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g');

define('AUTH_SALT',        'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES  07VC*Lj*lD&?3w!BT#-');

define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY');

define('LOGGED_IN_SALT',   'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|');

define('NONCE_SALT',       'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');

이들은 보안 키를 설정하기 위해 구성 파일에 직접 붙여넣을 수 있는 구성 라인입니다. 
여러분들이 직접 받은 출력을 복사합니다.
간단히 마우스로 드래그 하여 우측키를 누르면 Copy 할 수 있습니다.

See also  우분투 20.04 (Ubuntu)에 Let's Encrypt 설치하기

이 비밀키를 입력하기 위해서 텍스트 편집기를 이용하여 WordPress 구성파일을 열어보겠습니다.

sudo nano /var/www/jake/wp-config.php

해당 설정에 대한 예제 값이 포함된 섹션을 찾습니다.

. . .

define('AUTH_KEY',         'put your unique phrase here');

define('SECURE_AUTH_KEY',  'put your unique phrase here');

define('LOGGED_IN_KEY',    'put your unique phrase here');

define('NONCE_KEY',        'put your unique phrase here');

define('AUTH_SALT',        'put your unique phrase here');

define('SECURE_AUTH_SALT', 'put your unique phrase here');

define('LOGGED_IN_SALT',   'put your unique phrase here');

define('NONCE_SALT',       'put your unique phrase here');

. . .

해당 줄을 삭제하고 명령줄에서 복사한 값을 붙여넣습니다.

. . .

define('AUTH_KEY',         '여러분들이 받은 비밀키');

define('SECURE_AUTH_KEY',  '여러분들이 받은 비밀키');

define('LOGGED_IN_KEY',    '여러분들이 받은 비밀키');

define('NONCE_KEY',        '여러분들이 받은 비밀키');

define('AUTH_SALT',        '여러분들이 받은 비밀키');

define('SECURE_AUTH_SALT', '여러분들이 받은 비밀키');

define('LOGGED_IN_SALT',   '여러분들이 받은 비밀키');

define('NONCE_SALT',       '여러분들이 받은 비밀키');

. . .

같은 파일내의 시작부분에서 일부 데이터베이스 연결을 수정하도록 합시다.
이전에 MySQL 내에서 구성한 데이터베이스 이름, 데이터베이스 사용자 및 관련 암호를 조정해야합니다.

. . .

// ** MySQL settings - You can get this info from your web host ** //

/** The name of the database for WordPress */

define( 'DB_NAME', 'wordpress' );

/** MySQL database username */

define( 'DB_USER', 'user' );

/** MySQL database password */

define( 'DB_PASSWORD', 'password' );

/** MySQL hostname */

define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */

define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */

define( 'DB_COLLATE', '' );

. . .

define('FS_METHOD', 'direct');

또한 아래 define(‘FS_METHOD’, ‘direct’); 라인도 복사하여 아까 붙여 넣었던 비밀키 아래에 정렬을 해줍니다. 사실 아무데나 복사하여 붙여 넣으셔도 상관은 없습니다.

이제 모든 설정이 완료되었습니다. 다음으로 크롬이나 파이어폭스등을 이용하여 WordPress 설치를 완료해 보도록 하겠습니다.

6. 5단계: 웹브라우저를 통해 설치 완료하기

웹브라우저를 아무거나 열고, 여러분의 도메인을 입력해줍니다.

https://www.jakeson.net

그러면 사용하려는 언어를 선택하도록 페이지가 뜰 것입니다.

맨 밑으로 내려보면 한국어도 나올 것입니다.
원하시는 언어를 선택후 Continue를 클릭해주세요.

그러면 WordPress 기본 설정 페이지로 이동하게 됩니다.

WordPress 사이트의 이름을 선택하고, 사용자 이름도 선택해줍니다.
고유한 것을 선택하고 보안을 위해 “admin”과 같은 일반적인 사용자 이름은 피하는 것이 좋습니다. 
이메일 주소를 입력하고 검색 엔진이 여러분의 사이트를 인덱싱하지 못하도록 할지 여부를 선택하세요.

Install WordPress를 클릭해주면 서버가 알아서 가지고 있는 파일들로 WordPress를 설치하게 됩니다.

이제 설정하신 ID 와 PW를 이용하여 로그인하면 WordPress 관리 대시보드로 이동하게 됩니다.

이제 서버구성은 끝이 났으며, 외부망에서도 여러분의 홈서버로 접속하여 워드프레스에 접속할 수 있습니다. 이제 워드프레스 디자인/테마설정등을 할 수 있습니다.

그전에 Let’s Encrypt를 이용하여, 무료 TLS/SSL 인증서를 얻고 설치하여 암호화된 HTTPS를 활성화 시켜보도록 하겠습니다. 아직까지 크롬이나 파이어폭스에서 여러분들의 웹사이트 주소 옆을 보시면 자물쇠가 빨간색으로 표시 될 것입니다. 아직 암호화가 되지 않아 위험한 홈페이지로 분류되기 때문입니다.

다음장에서 암호화된 HTTPS를 활성화 하는 인증방법에 대해서 알아보도록 하겠습니다!