우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53)

|

준비물

  • 도메인 (반드시 필요)
  • AWS 계정
  • EC2 인스턴스 (1GB 이상)
  • Mysql (Mariadb 미지원)
  • Nginx

사전 설정

image 136
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 14

지역을 서울로 설정합니다.

image 151
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 15

EC2 는 무료 인스턴스로 작업할 경우 install에서 멈출 가능성이 있습니다.
t2.micro 정도로 높이면 좋습니다.

image 152
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 16

비용이 부담된다면 AWS LightSail을 활용하는 것도 좋습니다

image 139
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 17

HTTP와 HTTPs 트래픽을 허용합니다. 만약 여기서 추가하지 않았을 경우
아래의 방법으로 해결할 수 있습니다.

  • EC2 메뉴 > 네트워크 및 보안
  • 보안 그룹 선택
  • 인바운드 규칙에 80 포트, 443 포트 추가

도메인 연결

image 147
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 18

탄력적 IP 설정

탄력적 IP (Elastic IP) 를 설정하면 EC2 주소가 바뀌어도 바로 적용이 가능합니다.

image 148
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 19

EC2에서 네트워크 및 보안 > 탄력적 IP 에 들어와 설정합니다.

탄력적 IP 삭제

이 때는 해당 탄력적 IP에서 릴리스를 누르면 삭제할 수 있습니다.

키 발급, 접속

ubuntu 계정으로 접근합니다

로그인 설정

sudo passwd root

최고 관리자 계정(root) 에 접근하기 위해 비밀번호를 설정합니다.

sudo apt-get update

업데이트를 진행합니다.

sudo apt-get upgrade
sudo su

최고 관리자 계정(root) 로 로그인합니다. 이 때 설정한 비밀번호를 입력하면 됩니다.

su(switch user) 명령어는 해킹의 위험이 있을 수 있습니다. sudo(Subsititude user do) 로
관리자 권한을 얻으면 대행 가능한 계정이 어떤 것인지 모르기 때문에 공격포인트가 없어집니다.

외부 로그인 설정

경고 : 이 방법은 더이상 권장하지 않습니다.
비밀번호를 생성하면 무차별 대입 공격(Broute Force Attack)의 표적이 될 수 있습니다

sudo nano /etc/ssh/sshd_config

외부 로그인 설정을 위해 SSH 설정에 접근합니다.
설정이 완료되면 SFTP로 접근할 수 있습니다.

  • 직접 로그인
    PermitRootLogin yes
  • 비밀번호 로그인
    PasswordAuthentication yes

SSH 암호 키로 로그인 하는 것이 안전한 것은 사실이지만
비밀번호 로그인을 위해 PermitRootLoginPasswordAuthentication 설정을 찾아서
위와 같이 변경합니다

그 다음 Ctrl + XYEnter 를 입력하여 저장 후 에디터를 종료합니다.

Nginx 설치

sudo apt-get install nginx

명령어를 통해 Nginx 를 설치합니다.

sudo ufw allow 'Nginx Full'

Nginx에 사용될 포트를 모두 엽니다.

우분투 유저 생성

adduser <유저명>

고스트는 새로운 유저를 만들어야합니다.

usermod -aG sudo <유저명>

유저에게 권한을 부여합니다.

시간 설정

sudo timedatectl set-timezone 'Asia/Seoul'

시간을 설정해야 합니다. 위의 코드를 복사하여 터미널에서 실행합니다.

date

터미널에 date 를 입력하여 시간이 정상적으로 적용되었는지 체크합니다.

유저 값 변환

sudo nano /etc/passwd
  • 수정 전 : root:x:0:0:root:/var/www/html:/bin/bash
  • 수정 후 : root:x:0:0:root:/var/www/html:/bin/bash

FTP , 터미널 영역의 시작점을 변경합니다.

  • 수정 후 : rading:x:33:33:,,,:/var/www/html:/bin/bash

권한을 33:33 으로 변경합니다. www-data 로 권한을 변경하게 됩니다.

Mysql DB 설치

참조 : [MySQL] MySQL5.7 설치 in ubuntu (velog.io)

sudo apt-get install mysql-server

sudo systemctl start mysql

시스템 시작할 때 mysql DB가 자동으로 시작할 수 있도록 설정합니다.

인증 매개변수 변경하기

. Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

비밀번호 설정을 아무리 해도 뜨는 에러
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '비밀번호';

우분투 18.04 이후에는 인증 매개변수를 미리 설정해놓아야 합니다.

스킵 sudo mysql_secure_installation

root 의 비밀번호를 입력한 다음
Lightsail 의 경우 전부 N 을 입력, EC2 의 경우 전부 Y를 입력합니다.

Maria DB에서 나가려면 exit; 를 입력하거나 Ctrl + Z 를 누르면 됩니다.

노드 설치하기

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash

sudo apt-get install -y nodejs

고스트 설치하기

image 135
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 20
npm install -g [email protected]

진행 도중에 위와 같은 에러가 나올 수 있습니다.
NPM을 업데이트합니다.

sudo npm install ghost-cli@latest -g

고스트 CLI 를 설치합니다. 앞으로 고스트 명령어를 사용할 수 있습니다.

sudo mkdir -p /var/www/사이트명

고스트를 설치할 폴더를 생성합니다. 사이트명이 어렵다면 ghost 로 이름 지어 진행하세요.

sudo chown <유저명>:<유저명> /var/www/사이트명

방금 생성한 유저에게 폴더 권한을 부여합니다.

sudo chmod 775 /var/www/sitename

폴더에 775 권한을 부여합니다.

고스트 파일 설치하기

su - <유저명>

이전에 만들었던 유저명으로 로그인합니다. 고스트 설치시 반드시 진행해야 합니다.

ghost install

설치 파일에 아무것도 없는지 체크한 다음 설치를 진행합니다.
만약 파일이 있는 경우 ls 명령어로 파일을 체크, rm 파일명 으로 제거하면 됩니다.
중요한 파일인지 한번 더 체크하세요

자료를 모두 받으면 설정을 진행해야 합니다.

  • Enter your blog URL : http://localhost:2368 (그대로 진행)
  • Enter your MySQL hostname : localhost
  • Enter your MySQL username : root
  • Enter your MySQL password : 입력
  • Enter your Ghost database name : 생성할데이터베이스명
  • Do you wish to set up “ghost” mysql user? : yes
  • Do you wish to set up Systemd : yes
  • Do you want to start Ghost : yes

위의 내용을 참고하여 진행합니다. localhost여도 상관없습니다.
포트도 외부에서 사용할거 아니니 2368이 아니어도 무시하고 다음 단계로 진행합니다.

image 150
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 21

여기서 끝난게 아닙니다. 위의 스킵된 설정을 해주어야 합니다.

사이트 연결

고스트가 설치된 폴더에서 권한이 있는 유저(위에서 만든 유저)가 명령어를 입력해야 합니다.

ghost config url https://example.com

Route53을 통해 서버를 먼저 연결합니다. 그에 맞춰 도메인 주소를 연결합니다.

ghost restart

고스트를 재시작합니다.
아직은 고스트에 외부 접근이 불가합니다. 아래의 방법을 진행해주세요.

nginx SSL 설정

ghost setup nginx

nginx 설정을 먼저 시작합니다.
etc/nginx/site-enabled 폴더에 에 자동으로 아래의 파일을 추가합니다.

  • ghost.sobima.net.conf
  • ghost.sobima.net-ssl.conf
ghost setup ssl
image 146
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 22

SSL 인증을 진행합니다.
이메일 주소를 입력한 다음 엔터를 누릅니다. 자동으로 세팅이 완료됩니다.

관리자 접속

image 143
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 23

https://example.com/ghost 에 접근합니다. 뒤에 /ghost 입력하면 됩니다
설치를 진행합니다. 제목과 이름, 이메일 주소를 입력하여 마무리합니다.

image 144
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 24

설치가 완료되면 위와 같은 화면이 뜨게 됩니다.
Write your first post 를 클릭하여 새로운 글을 생성합니다.

image 145
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 25

/ 를 입력하면 위와 같이 블록을 불러올 수 있습니다.
마크다운 명령어가 적용되니 참고하여 활용하시면 됩니다.

에러 해결

설치가 멈추었을 때

image 140
우분투 | EC2에 고스트(Ghost blog) 설치하기 (Nginx, Node, AWS, Route53) 26

여기서 멈춘다면 지금 서버의 메모리가 부족해서 생기는 문제일 가능성이 큽니다.
서버 증설을 하여 이 문제를 해결할 수 있습니다

DB설치가 안된 것 같을 때

  • mysql -u root -p 를 입력하여 MySQL에 접근합니다
  • SHOW DATABASES; 를 입력합니다.
  • 데이터베이스가 있는지 확인합니다
  • exit; 로 MySQL에서 나갑니다.

설정이 잘 되었는지 체크

ghost setup nginx 명령어를 입력했다면 자동으로 설정됩니다.
정상적인 설치가 이루어지지 않았을 때 아래의 코드를 참고하여 진행해주세요.

http {
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

설정 파일에 위의 값이 잘 적혀있는지 확인합니다.

server {
    listen 80;
    listen [::]:80;

    server_name ghost.sobima.net;
    root /var/www/rading/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;
        
    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name ghost.sobima.net;
    root /var/www/rading/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    ssl_certificate /etc/letsencrypt/ghost.sobima.net/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/ghost.sobima.net/ghost.sobima.net.key;
    include /etc/nginx/snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;
        
    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 1g;
}

위의 두개의 설정파일이 정상적으로 생성되어있는지 확인합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

클릭하여 복사