본문 바로가기
공부/프로그래밍

[aws,ec2,wordpress] 한달에 10달러로 워드프레스 설치하고 나만의 블로그 만들기

by demonic_ 2020. 4. 14.
반응형

글을 읽기에 앞서 두가지 유의점이 있다.

1) AWS에 가입이 되어있어야 진행이 가능하다

2) AWS와 일반 리눅스서버에 설치할 때 명령어가 조금 다르므로 일반 리눅스에 설치한다면 이 글은 별 도움이 되지 않을것이다.

 

여기선 AWS EC2에서 제공하는 무료티어인 t2.micro 를 기준으로 설치했다.

신규가입일 경우 1년동안 무료로 사용할 수 있다.

 


AWS 콘솔에 로그인 한 후(혹은 회원가입 한 후) EC2 => 인스턴스 메뉴로 들어간다.

 

 

EC2에 들어가서 인스턴스 시작을 클릭한다.

클릭하면 아래와같은 화면이 나오는데, 그중 Amazon Linux 2 AMI (HVM), SSD Volumn Type 으로 선택한다.

 

 

티어는 t2.micro로 생성한다. 새로 생성한 계정이라면 1년간 무료로 사용할 수 있다.

 

 

인스턴스 구성이 나오는데 여기서는 딱히 건드릴게 없으니 넘어간다

 

스토리지란 쉽게 이야기하면 디스크 용량인데, 기본값으로 설정하면 8G밖에 주지 않는다. 앞으로 쭉 글을 쓸거라면 이부분을 여유롭게 늘려주도록 하자.(늘린만큼 돈이 나가긴 하지만 부담될 정돈 아니다. 조금 넉넉하게 시작하고 싶다면 50G 를 추천한다)

 

 

태그는 서버가 여러대일때 관리차원에서 유용하다. 여기서는 간단하게 name만 추가했다.

 

보안그룹은 새 보안그룹을 생성했으며 wordpress 라는 이름을 사용한다(초기 설정값으로 해도 무방)

 

 

마지막으로 시작전 검토하는 단계다.

이전 설정에 문제가 없다면 여기서 특별히 수정해야 할 건 없다

 

 

시작하기를 누르면 키페어에 관해 묻는다.

이전 것이 있다면 이전것으로, 새로 만든다면 그림처럼 생성하고 다운로드 받는다

(절대 잊어버리면 안된다)

wordpress.pem 파일을 다운받게 된다(이름 생성은 마음대로 해도 되지만, 지금은 진행을 위해 wordpress로 하자)

다운받은 파일

 

 

EC2화면으로 돌아가면 인스턴스가 생성되어 있고 퍼블릭 IP가 생성되어 있음을 확인할 수 있다

 

 

 

 

# EC2에 접속하기

ssh 를 이용해 접속한다

ssh -i wordpress.pem ec2-user@15.164.164.61

만약 다음과 같은 에러가 발생한다면 다운받은 wordpress.pem 파일의 권한이 너무 높아서 생긴 문제다

Permissions 0644 for '/Users/dgpark/wordpress.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/dgpark/wordpress.pem": bad permissions
ec2-user@15.164.164.61: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

권한 축소를 해준다

chmod 400 wordpress.pem 

 

접속에 성공했다면 리눅스 버전을 확인하자

$ cat /etc/*release*

NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Amazon Linux release 2 (Karoo)
cpe:2.3:o:amazon:amazon_linux:2

yum을 최신버전으로 업데이트 한다

sudo yum update -y

 

 

# nginx 설치

- nginx 저장소를 추가

sudo vi /etc/yum.repos.d/nginx.repo

 

- 아래내용 입력

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

- 설치

sudo yum install -y nginx

(참조) EC2는 방화벽을 보안그룹에서 설정할 수 있어 다음 명령어가 필요 없지만 일반 리눅스의 경우 firewalld를 설정해야 한다. 혹시나 해서 여기다 명령어를 적어둔다

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload

- nginx 설정

sudo vi /etc/nginx/conf.d/default.conf

 

 

안의 내용을 모두 지우고 다음으로 대체한다

설정 중에 php연결도 미리 해두었다.

그리고 root 폴더를 location 밖으로 꺼냈는데, 그 이유는 php 설정하는 것에서 SCRIPT_FILENAME 중 $document_root 를 사용하는데 location 안에 들어가면 참조하지 못한다.

server {
    listen       80;
    server_name  localhost;

    charset utf-8;
    #access_log  /var/log/nginx/host.access.log  main;

    root    /var/www/wordpress;

    location / {
        #root   /usr/share/nginx/html;
        index   index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        # /var/run/php-fpm/php-fpm.sock 경로에 파일이 있는지 확인
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

 

- 재시작 및 서비스 등록

systemctl restart nginx
systemctl status nginx
# 서버가 재시작해도 자동 실행하도록 설정
systemctl enable nginx

 

그럼 브라우저에서 IP로 접속해보자. 아마 다음과 같이 실패할 것이다.

방화벽 확인 및 등록해야 한다

 

AWS 콘솔로 돌아가 확인한다.

EC2를 클릭하고 밑에 보면 보안그룹이 있고, 인바운드를 클릭하면 다음과 같이 뜬다.

 

22번 포트(ssh)만 열려 있어서 브라우저 접속이 안되는 것이다.

http(80번 포트)와 https(443번 포트)를 오픈 설정한다.

 

보안그룹을 클릭하면 다음과 같은 화면으로 이동된다.

아래 인바운드 규칙 편집을 클릭한다.

 

규칙추가를 클릭한 다음 http를 선택하고, 소스쪽에는 위치무관을 클릭하여 누구나 접속이 가능하도록 한다.

https 도 동일하게 설정한다

 

규칙을 저장하면 처음 설정창에 다음과 같이 인바운드 규칙이 추가된다.

 

이제 브라우저로 접속하면 접속은 되지만 오류메세지가 나올 것이다. php 연결은 해두었는데 아직 설정하지 않아서 그렇다

 

오류를 확인할 수 있는 파일 경로는 다음과 같다.

tail -f /var/log/nginx/error.log 

확인해보면 php-fpm 연결에 실패했다고 뜬다

[crit] 3509#3509: *119 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 218.39.65.100, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "15.164.164.61"

 

 

 

# php 설치

aws 에서 제공한 리눅스 이미지에는 기본 php가 5.4.16으로 설치된다

설치하지 말고 amazon-linux-extras 를 이용해 php7 버전을 설치하도록 한다

 

sudo yum install php 를 하게되면 다음처럼 5.4.16 버전이 뜬다.

 

php7 설치

sudo amazon-linux-extras install -y php7.2

설치를 하면 php7.2, php-fpm, php-mysqlnd(php-mysql) 등이 함께 설치된다

$ sudo amazon-linux-extras install -y php7.2
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-php7.2 epel nginx remi-safe
...

 

 

# php-fpm 설정파일 수정

sudo vi /etc/php-fpm.d/www.conf
; 아래가 기본설정으로 되어있는데 바꾼다
;listen = /run/php-fpm/www.sock 
listen = /var/run/php-fpm/php-fpm.sock;

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

user = nginx
group = nginx

서비스를 재시작 한다

sudo systemctl restart php-fpm
sudo systemctl status php-fpm
# 서버 재시작시 자동 실행
sudo systemctl enable php-fpm

 

 

# nginx와 php 연결

이미 위에서 연결설정을 해놨지만 확인차 다시 보자.

sudo vi /etc/nginx/conf.d/default.conf
...

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }

...

nginx 를 재시작한다

sudo systemctl restart nginx
sudo systemctl status nginx

 

 

 

# php버전 확인

info.php 파일 생성 및 확인

sudo mkdir /var/www/wordpress
sudo vi /var/www/wordpress/info.php

파일 내 다음처럼 입력하고 저장한다

<?php phpinfo(); ?>

 

이제 IP를 이용해 접속해보도록 한다.

http://[EC2에 등록된 퍼블릭 IP]/info.php

 

php 버전을 확인할 수 있다.

내용안에 Mysql 세션이 별도로 있어야 워드프레스를 사용할 수 있다

 

마지막으로 MARIADB(DB)를 설치해야 하지만 그건 워드프레스를 설치하면서 요구하는 부분이 있는데 거기서 설치하도록 하겠다.


 

지금까지 EC2 설정을 마무리 했으니 워드프레스를 설치해보자

 

# 워드프레스 설치

설치 프로그램을 다운로드 받는다

sudo wget "http://wordpress.org/latest.tar.gz"

 

nginx에 설정한 root폴더인 /var/www/ 폴더에 압축해제

sudo tar -xvzf latest.tar.gz -C /var/www/

 

소유자를 nginx로 변경한다

sudo chown -R nginx: /var/www/wordpress

ls -al /var/www/wordpress

 

설정파일 생성

cd /var/www/wordpress
sudo cp wp-config-sample.php wp-config.php

 

 

이제 도메인(IP)를 다시 접속해보면 설치프로그램이 떠야하지만 다음과 같은 에러메세지가 나온다.

DB 연결이 안되어 있기 때문이다.

 

이제 mariadb(혹은 mysql) 를 설치한다

 

 

# mariadb 설치

sudo yum install -y mariadb-server

sudo systemctl start mariadb

mysql 초기 설정 시작

sudo mysql_secure_installation
Enter current password for root (enter for none): 엔터를 누름

# 비밀번호 설정 물음
Set root password? [Y/n] y

# anonymous 유저 삭제
Remove anonymous users? [Y/n] y

# root 원격 로그인 비활성화
Disallow root login remotely? [Y/n] y

# (임의생성된) test 데이터베이스 접근 삭제
Remove test database and access to it? [Y/n] y

mysql root 로 접속하기

mysql -u root -p

Enter password: 

 

 

wordpress 데이터베이스 생성하기

계정과 데이터베이스는 wordpress 로, 비밀번호는 wordpresspassword 로 설정했다.

create database wordpress;
grant all privileges on wordpress.* to wordpress@localhost identified by 'wordpresspassword';
grant all privileges on wordpress.* to wordpress@'%' identified by 'wordpresspassword';
flush privileges;

 

이제 설치된 데이터베이스 정보를 워드프레스 설정에 입력한다

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

 

아래 4개에 각각 입력

define( 'DB_NAME', 'wordpress' );

define( 'DB_USER', 'wordpress' );

define( 'DB_PASSWORD', 'wordpresspassword' );

define( 'DB_HOST', 'localhost' );

 

저장하고 브라우저에접속하면 다음과 같이 Install 화면이 뜬다.

 

 

끝.

반응형

댓글