Yongtae Jeon

server. 2017 서버셋팅 노트 - 구글 클라우드 플랫폼

20171022

사용하는 서버 시스템을 conoha에서 google cloud로 다시 옮기기로 합니다.

서버 셋팅도 다시 해야겠죠. 서버 인스턴스는 우분투 16.04LTS 버전으로 선택했습니다.

이번에도 최대한 기본 패키지 매니저를 이용하는 방법으로 셋팅하려고 합니다.

1. 구글 클라우드 VM인스턴스 SSH 연결

방법1.

구글 클라우드 콘솔에서 클릭 한번으로 SSH 연결할 수 있지만, 브라우저상에 구현된 SSH 클라이언트는 사용성이 떨어지는 느낌입니다. 구글 클라우드 SDK의 gcloud 도구로 접속하기로 합니다. 공식문서에서 가이드하는 방법으로 SDK를 설치합니다.

그런데 제 경우에는 gcloud init 를 했을 때 command not found 에러가 났는데요. google-cloud-sdk 폴더에서 아래 명령을 실행시키고 해결하였습니다.

source ./path.bash.inc
source ./completion.bash.inc

cloud init로 클라우드 계정 정보를 연동시키면, 다음과 같이 SSH로 VM에 접속할 수 있습니다.

gcloud compute ssh instance-1 --zone asia-northeast1-c

최초 접속 과정에서 개인키/공개키 쌍이 생성되고 사용자 컴퓨터에 다음과 같이 저장됩니다.

공개키는 서버로 전송되어 서버 인스턴스에 저장됩니다.

Your identification has been saved in /Users/사용자명/.ssh/google_compute_engine.
Your public key has been saved in /Users/사용자명/.ssh/google_compute_engine.pub.
방법2.

방법1에서 저장된 ssh 개인키를 다른 ssh 클라이언트에서도 사용할 수 있습니다.

ssh -i /Users/사용자명/.ssh/google_compute_engine 사용자명@호스트주소

또는 개인키/공개키 쌍을 새로 생성해 사용할 수도 있습니다.

ssh-keygen

gcloud를 사용할 때와는 달리 공개키를 서버에 자동으로 전송해 등록해주지 않기 때문에, 직접 서버에 등록해야 합니다.

구글클라우드 콘솔에서 다음 항목에 추가하면 됩니다.

Compute Engine - 메타데이터 - SSH키

해당 정보는 서버 인스턴스의 아래 경로에 저장됩니다.

~/.ssh/authorized_keys

서버에 등록된 공개키에 대응하는 ssh 개인키를 sftp 연결시에도 이용할 수 있는데요. FileZilla 의 경우에는 개인키파일을 ppk 형식으로 변환시킨 후 사용하도록 되어있습니다. 변환은 FileZilla가 알아서 해주는데요. 암호화를 지원하지 않기 때문에 개인키가 평문으로 존재하게 되어서 보안 수준이 낮아집니다.

2. root 계정 활성화

Ubuntu 루트계정 패스워드를 변경하며 root 계정을 활성화합니다.

sudo passwd root

앞으로의 작업은 루트계정으로 로그인해서 진행합니다.

루트계정으로 로그인하기 위해서는 위에서 서버에 등록한 퍼블릭키 정보 안의 사용자명을 root로 변경해주어야 합니다.

3. JDK 설치

open jdk를 사용합니다.

How To Install Java with Apt-Get on Ubuntu 16.04

apt-get update
apt-get install default-jre
apt-get install default-jdk
update-alternatives --config java

/etc/environment 에 JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 추가을 추가합니다.

4. 아파치 설치

apt-get install apache2
apt-get install libapache2-mod-jk

아파치 서버를 재시작합니다.

/etc/init.d/apache2 restart

5. MariaDB 설치

다음 명령으로 설치하려는 OS 정보를 확인합니다.

lsb_release -a

저의 경우에는 다음과 같은 릴리즈 정보를 출력해주었습니다.

No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.3 LTS
Release:	16.04
Codename:	xenial

그 후 아래 URL에서 확인된 정보대로 OS를 선택합니다.

https://downloads.mariadb.org/mariadb/repositories/#mirror=kaist

그러면 MariaDB repository 정보를 추가하고, 다운로드받아 설치하기 위한 명령어 순서를 친절하게 알려주죠. 시키는대로 하면 됩니다.

저의 경우에는 다음과 같이 실행했습니다.

#레파지토리 등록
apt-get install software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu xenial main'

#설치
apt update
apt install mariadb-server

혹시 레파지토리를 잘못 등록했을 때 지우고 싶으면 -r 옵션을 뒤에 붙여서 다시 실행하면 됩니다.

add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu xenial main' -r

설치가 완료된 후 UTF-8 인코딩을 사용하도록 하기 위해서 /etc/mysql/my.cnf 파일에 다음 내용을 추가합니다.

[client]

default-character-set=utf8

[mysqld]

init_connect="SET collation_connection=utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_general_ci

skip-character-set-client-handshake

[mysql]

default-character-set=utf8

원격에서의 접속을 허용하려면 설정중 아래 라인을 주석처리합니다.(https://opentutorials.org/module/1175/7779)

#변경전
bind-address = 127.0.0.1
#변경후
#bind-address = 127.0.0.1

설정을 바꾼 후에는 서비스를 재시작해야 합니다.

service mysql restart

데이터베이스를 생성합니다.

mysql -uroot -p
create database 데이터베이스이름

사용자를 생성하고 권한을 부여합니다. 사용자는 원격 호스트에서 접속할 수 있도록 설정하였습니다.

create user '사용자이름'@'%' identified by '패스워드';

로컬에서만 접속하려면 ‘%’가 아니라 ‘localhost’를 사용해야 합니다.

혹시 잘못 입력했을 때는 다음과 같이 사용자를 삭제할 수 있습니다.

drop user '사용자이름'@'%';

사용자가 잘 생성되었는지 확인해봅니다.

use mysql;
select host, user from user;

사용자에게 특정 데이터베이스에 대한 권한을 부여합니다.

grant all privileges on 데이터베이스이름.* to 사용자이름@'%';

이전에 사용하고 있던 서버의 데이터베이스를 백업합니다.

mysqldump -uroot -p 데이터베이스이름 > ./backup.sql

새로 구축한 MariaDB에 데이터를 이전합니다.

mysql -uroot -p 데이터베이스이름 < ./backup.sql

다음과 같은 내용으로 백업 스크립트를 만들었습니다.

#!/bin/bash
mysqldump -u사용자이름 -p패스워드 데이터베이스이름 > /some/path/backup_$(date +%Y%m%d).sql
find /some/path/ -ctime +5 -exec rm -f {} \;
mysql -u사용자이름 -p패스워드 백업데이터베이스이름 < /some/path/backup_$(date +%Y%m%d).sql

6. 셋팅 중지

하다보니까 구글 클라우드 플랫폼보다는 아마존 AWS가 좋을 것 같은 생각이 들었습니다.

그래서 구글 클아우드 플랫폼 서버 셋팅 작업은 여기에서 중지하였습니다.