GCP VM에서 APM 컴파일 설치로 웹서버 구축하기

JIYOON·2021년 6월 1일
1

Web Server

목록 보기
1/5
post-thumbnail

1️⃣ GCP 시작하기

01. GCP의 이해

1) 클라우드 서비스(Cloud Service)

제공업체가 인터넷을 통해 사용자에게 제공하는 인프라, 플랫폼 또는 소프트웨어를 말한다. 클라우드를 통해 소프트웨어를 다운로드하지 않고 인터넷만 있으면 액세스할 수 있다.

클라우딩 컴퓨터 서비스의 쉬운 이해 + IaaS, PaaS, SaaS에 대한 설명 by 얄팍한 코딩사전

GCP(Google Cloud Platform)는 컴퓨트, 스토리지, 네트워킹, 빅데이터, 머신 러닝 등의 서비스를 제공하는 클라우드이다!




02. GCP에서 VM 생성하기

1) 가상 머신(Virtual Machine)

컴퓨팅 환경을 소프트웨어로 구현한 것으로, 컴퓨터를 에뮬레이션하는 소프트웨어이다.

빠르게 훑어보는 구글 클라우드 플랫폼 pdf by 한빛미디어


  1. 계정 가입
  2. 프로젝트 생성
  3. VM 인스턴스 생성
  • 인스턴스 이름 설정
  • 리전 서울로 선택 (*리전 : 리소스를 호스팅할 수 있는 특정한 지리적 위치)

리전 설정 시 서울을 선택해줘야 하는 이유 : 데이터를 국내에 저장할 수 있도록 지원하여 데이터 및 애플리케이션 접속 지연시간을 줄일 수 있음


  • 머신 구성 - 일반 용도 - 2세대인 E2 선택
  • 머신 유형 - 원하는 것으로, standard4 선택
    (* vCPU : 가상 프로세스 코어)
  • 부팅 디스크 - Ubuntu 선택
    (* 부팅 : PC 전원 켜진 뒤 운영체제가 메모리에서 동작하기 시작할 때까지의 과정)

리눅스의 두 가지 방식 : 오픈소스 컴퓨터 운영체제(OS). 리눅스는 CLI 방식과 GUI 방식 두 가지로 사용 가능하다. CLI 방식은 텍스트 터미널을 통해 작업 명령을 문자열의 형태로 입력하고 출력 역시 문자열의 형태로 주어진다. GUI 방식은 그래피컬한 방식을 이용하여 컴퓨터를 제어한다. X Window라는 그래픽 환경 기반의 시스템 소프트웨어를 통해 Windows와 같은 GUI 환경을 제공할 수 있다.

리눅스 사용 이유 : 운영체제는 PC에서 돌아가는 운영체제와 서버 쪽에서 사용되는 운영체제가 있는데, window와 macOS가 PC 운영체제에 속한다. 리눅스는 PC에서도 사용되지만 웹 서비스를 제공하는 서버 컴퓨터를 운영하는 것에 적합하다. 특히 웹사이트나 서버 운영에 자주 같이 쓰이는 소프트웨어 번들인 LAMP 중 PHP와 MYSQL이 잘 돌아가는 플랫폼이 리눅스이기에 자주 사용된다.

Ubuntu : 리눅스의 배포본 중의 하나인 Debian의 종류 중 하나이다. 리눅스를 쉽게 다운받고 설치할 수 있도록 패키지화하여 배포하는 것을 배포본이라 한다. Ubuntu 외에도 RedHat, RedHat의 버전 중 하나인 CentOS 등이 있다.


- 액세스 범위 - 모든 Cloud API에 대한 전체 액세스 허용 선택 (* 액세스 : 승인받은 연결된 앱을 통해 인증되지 않은 사용자가 접근하는 것을 제한할 수 있다.) - 방화벽 - HTTP 트래픽, HTTPS 트래픽 허용 (* 방화벽 : firewall이라고도 불리며 보안규칙에 기반하여 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템이다.) - 만들기

리눅스와 우분투에 대한 설명 by 생활코딩
X window에 대한 설명 by 양햄찌


추가 공부 : 하드웨어 기본 작동 원리를 더 공부해야 할 듯 하다. 아래 링크 정확하게 이해 못 함.
프로세서, CPU, MPU, MCU, 코어의 개념과 차이 by melonicedlatte
프로세서와 프로세서의 차이 by taeho





03. VM 접속하기

  1. VM 인스턴스에서 생성한 인스턴스의 이름 클릭
  2. 원격 액세스의 SSH 클릭
    (* SSH(Secure Shell Protocol) : 네트워크 프로토콜 중 하나로 네트워크 상의 다른 컴퓨터에 로그인할 수 있게 해주는 응용 프로그램, 컴퓨터와 컴퓨터가 안전하게 통신할 수 있도록 해준주는 셸)




2️⃣ APM 컴파일 설치

01. 기본 세팅

다음 명령어들을 셸에 입력한다.

$ sudo apt-get update

저장소 내 패키지 정보 최신으로 업데이트

리눅스에서는 특정 명령을 실행하거나 파일에 접근하기 위해 root 권한이 필요한데, 이를 위해서 su 혹은 sudo 명령어를 사용한다

apt-get 명령어를 통해 패키지를 설치하고 업데이트, 검색, 제거할 수 있다.
apt-get 명령어 모음 : ubuntu documentation


$ apt list --upgradable

업그레이드 가능한 패키지 목록 확인

$ sudo apt upgrade

패키지 최신 정보를 바탕으로 패키지를 최신으로 업그레이드

$ sudo apt autoremove

패키지 업그레이드 후 불필요해진 패키지를 자동으로 삭제

앞으로도 패키지 설치 전 전체적으로 업데이트 및 업그레이드하는 작업을 해주는 것이 좋다.


$ cat /etc/issue : 우분투의 버전을 확인한다. 제 경우에는 Ubuntu 20.04.2 LTS였습니다. 구글에 검색하실 때 우분투의 버전과 같이 검색해주세요!

cat 명령어 : 파일 내용을 간단하게 출력하거나 두 개 이상의 파일을 연결해서 출력할 때 사용되는 명령어이다. 파일을 생성하거나 병합할 때 사용하기도 한다.

우분투 버전을 확인하는 더 다양한 방법 by steady-snail
리눅스 cat 명령어 사용법 정리 by 빌노트


리눅스 패키지 설치 시 기본 명령어
./configure : 설치 전에 도구와 라이브러리가 설치돼 있는지 컴파일 환경을 검사하고 빌드 환경을 만들어준다. 이 단계에서 에러가 나면 빌드 환경이 갖춰져 있지 않다는 뜻이므로 문서를 잘 읽고 필요한 프로그램 및 라이브러리를 설치해야 한다.
make : 소스 코드를 컴파일해준다. (컴파일: 주어진 언어로 작성된 프로그램을 다른 언어의 프로그램으로 변환하는 프로세스이다. 소스파일을 사용자가 실행 가능한 파일로 만들어준다.)
make install : 컴파일한 프로그램을 설치한다.
(
make && make install 명령어를 통해 make 와 make install을 한 번에 실행시킬 수 있다.)

리눅스 패키지 설치 기본 명령어에 대한 더 자세한 설명 by 내맘대로긍정




02. Apache 컴파일설치(수동설치)

0) 마음가짐

컴파일이 잘 될 것이라는 믿음을 가지고 기도한다.

1) 환경

GCP VM Instance, Ubuntu 20.04.2 LTS


2) Apache란

대표적인 서버 프로그램으로 Apache와 더불어 nginx가 자주 쓰인다.

Apache 컴파일 설치 공식문서


3) 필수 라이브러리 설치

의존성 : 어떤 프로그램이 설치되는 데 필요한 다른 프로그램 및 라이브러리를 의미한다.

$ sudo su

sudo 명령어는 원래 root가 아닌 사용자가 root에 준하는 능력으로 sudo 다음에 나오는 명령을 실행할 수 있게 하는 명령어이고, su 명령어는 다른 계정으로 전환하는 명령어이다.
sudo su는 일시적으로 일반 사용자가 내리는 명령을 root 권한으로 내리는 명령어이며, 현재 계정을 독립적으로 root로 전환해버린다.

sudo su 명령어를 사용하는 이유
우분투 패키지 설치 시 원래는 보안성 문제를 방지하기 위해 root 접근자로 바로 로그인해서 사용하지 않습니다. 그래서 일반 유저로 로그인 후 root 권한이 필요한 명령어를 사용할 때만 sudo 명령어를 통해 잠시 권한을 받아 사용하는 것입니다. 하지만 앞으로 다운받을 패키지가 많기에 매번 sudo 명령어를 사용하는 것이 번거로워 sudo su 명령어를 통해 권한을 유지하는 것입니다.

sudo su 명령어에 대한 좀 더 자세한 설명 by 불곰


$ cd /usr/local

리눅스 패키지는 /usr/local 에 설치하는 것이 관례이다. cd 명령어를 이용해 현재의 작업 디렉터리의 위치를 변경한다. Change Directory의 준말이다.

cd usr 입력 후 cd local 을 입력해도 같은 디렉토리로 이동된다.


$ apt-get install gcc zlibc zlib1g zlib1g-dev libssl-dev openssl libxml2-dev libexpat1-dev g++ net-tools curl

❗️ 대부분의 블로그에서 apr, apr-util, pcre를 먼저 다운받으라고 알려주시는데 그럼 의존성 문제 때문에 에러가 많이 나는 것 같습니다. 위의 코드는 다수의 필수 라이브러리를 다운받는 코드입니다. 제가 기나긴 삽질을 거치면서 다운받은 것들이므로 어떤 게 무슨 작용을 하는지 모두 설명하지는 못합니다.🥲 다시 한 번 다운해보고 대체되는 라이브러리들을 지우긴 했습니다. 에러가 나면 위의 것들 중에서 하나는 설치가 돼있지 않기 때문에 나는 오류인 듯 합니다. 저처럼 왕초보이신 분들은 따라하시고 아니신 분들은 적절한 것만 다운받으시면 될 것 같습니다.

gcc : Apache 공식문서에서 추천하는 컴파일러이다.
zlibc : 데이터 파일의 압축을 푸는 라이브러리이다.
openssl : 컴퓨터 네트워크 간의 보안을 도와주는 라이브러리이다.
net-tools : netstat 명령어를 가능하게 하며, 네트워크 연결상태 등을 보여준다.
curl : 웹 요청도구이다. curl 명령어 뒤에 붙인 url 주소에 따른 HTML 정보를 콘솔에 출력한다.


4) 의존성 패키지 설치 - APR

아파치 서버의 핵심 라이브러리입니다. /usr/local 디렉토리에 설치합니다.

$ wget http://mirror.navercorp.com/apache//apr/apr-1.7.0.tar.gz
$ wget http://mirror.navercorp.com/apache//apr/apr-util-1.6.1.tar.gz
$ tar xvfz apr-1.7.0.tar.gz
$ tar xvfz apr-util-1.6.1.tar.gz

wget : web get의 약어로, 웹상의 파일을 다운받을 때 사용한다.
tar xvfz : tar.gz 형식으로 압춘된 파일을 압축해제하는 명령어이다.


$ wget https://www.apache.org/dist/apr/apr-1.7.0.tar.gz.sha256
$ sha256sum --check apr-1.7.0.tar.gz.sha256

❗️파일의 해시값을 확인하고 유효성을 검증하는 프로그램이라고 합니다. 저는 다운받지 않았습니다.

$ cd /usr/local/apr-1.7.0

apr-1.7.0 디렉토리로 이동한다.

$ cp -arp libtool libtoolT

libtoolT라는 라이브러리를 설치한다. 이것 때문에 삽질을 정말 오랜 시간 했다. 나의 웬쑤,,,
libtool : 컴파일된 포터블 라이브러리를 만드는 데 이용한다.

$ sudo apt-get install build-essential

build-essential을 설치해준다. 이것도 오류가 뜨는 원인들 중의 하나입니다.

$ ./configure --prefix=/usr/local/apr

/usr/local/apr 디렉토리로 설치한다. --prefix 옵션은 프로그램을 설치하는 위치를 설정해준다.

$ make
$ make install

컴파일, 설치한다. 오류가 난다면, 에러 메시지를 검색하여 따라한 뒤 위의 명령어를 다시 시행해준다.


5) 의존성 패키지 설치 - APR-UTIL

$ cd ..

부모 디렉토리로 이동하는 명령어입니다. 이 포스팅에서는 디렉토리 이동 시 절대경로로 이동하긴 하지만 저는 처음에 이것도 몰라서 헤맸으므로 적어봅니다. 만약 이 명령어를 입력했다면 현재 /usr/local위치에 있으므로 cd apr-util-1.6.1을 통해 아래와 같은 경로로 이동할 수 있습니다. 이를 상대 경로라 합니다. 현재 소속된 디렉토리에서 바로 이동할 때 사용하는 방법입니다. 아래에 사용된 cd 명령어는 절대경로로, 리눅스의 최상위 폴더인 루트 디렉토리부터 목표 폴더까지 모든 경로를 입력하여 이동하는 방법입니다.

리눅스 CD 명령어와 절대경로, 상대경로 by timecraft

$ cd /usr/local/apr-util-1.6.1
$ ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-util 
$ make
$ make install

6) 의존성 패키지 설치 - PCRE

정규식 패턴 일치를 구현하는 함수의 집합이다.

$ cd /usr/local
$ wget ftp://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
$ tar xvfz pcre-8.43.gar.gz
$ cd /usr/local/pcre-8.43
$ ./configure --prefix=/usr/local/pcre
$ make
$ make install

7) Apache2.4.46 설치

Apache 공식사이트 설치 및 컴파일 방법
위의 링크에서 필요한 버전의 아파치 다운로드 링크를 확인할 수 있다.

$ cd /usr/local
$ wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.gz
$ tar xvfz httpd-2.4.46.tar.gz

다운 후 다음 명령어를 통해 컴파일 옵션을 조정한다.

$ $ ./configure --prefix=/usr/local/apache2.4 \
--enable-module=so --enable-rewrite --enable-so \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-pcre=/usr/local/pcre \
--enable-mods-shared=all

./configure명령어에 옵션을 추가하여 실행한다.
위 옵션을 통해 local 파일에 설치한 apr, apr-util, pcre를 사용하는 것을 볼 수 있다.

configure 옵션에 대한 공식 문서 설명

$ make
$ make install

컴파일 및 설치한다.


8) Apache2.4 실행

$ /usr/local/apache2.4/bin/httpd -k start

Apache를 실행하는 명령어이다.

$ ps -ef|grep httpd|grep -v grep

Apache가 실행되고 있는지 프로세스를 확인한다.

$ netstat -anp|grep httpd

네트워크 상태를 보여준다.

$ curl http://127.0.0.1

웹 요청도구로 로컬서버로 연결하는 웹페이지 링크를 볼 수 있다. 하지만 이 포스팅에서는 GCP의 VM 인스턴스 내에서 아파치가 실행되고 있으므로 클릭하면 에러가 뜬다. VM 인스턴스 세부정보에서 외부 IP를 복사하여 이동한다. 화면에 It works!가 뜨면 성공!🥰


추가 : Apache2.4 종료

$ sudo /usr/local/apache2.4/bin/httpd -k stop
$ ps -ef|grep httpd|grep -v grep

ps 명령어를 통해 httpd 프로세스가 실행되고 있지 않은 것을 확인할 수 있다.


9) Apache를 서비스에 등록하기

$ cp /usr/local/apache2.4/bin/apachectl /etc/init.d/httpd

위 명령어를 입력하면 번거롭게 긴 명령어로 아파치를 실행, 종료시키지 않아도 된다. 다음의 명령어로 간단하게 사용하는 것이 가능해진다.
cp 명령어 : 파일 및 디렉토리를 복사합니다.

$ service httpd start
$ service httpd status
$ service httpd stop

다음 명령어를 통해 아파치가 자동 실행되도록 한다.

$ cd /usr/local
$ update-rc.d httpd defaults

이제 아파치 설치 및 설정을 모두 끝냈다! 🥳 🎉


03. PHP 설치

1) 의존성 패키지 설치

$ sudo apt-get install libxml2-dev
$ sudo apt-get install libjpeg-dev
$ sudo apt-get install libpng-dev
$ sudo apt-get install libsqlite3-dev

2) PHP 다운로드

$ cd /usr/local
$ sudo wget https://www.php.net/distributions/php-7.4.1.tar.gz
$ sudo tar xvfz php-7.4.1.tar.gz

PHP 다운로드 공식 문서


3) 컴파일과 설치

$ cd php-7.4.1
$ sudo ./configure \
--with-apxs2=/usr/local/apache2.4/bin/apxs \
--enable-mysqlnd \
--with-mysql-sock=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-imap-ssl \
--with-iconv \
--enable-gd \
--with-jpeg \
--with-libxml \
--with-openssl

$ make
$ make test
$ make install

4) 설치 확인

$ cd /usr/local/apache2.4/modules
$ ls -l

아파치에 새로운 모듈인 libphp7.so(php 모듈)이 추가된 것을 확인한다.




04. Apache와 PHP 연동

1) Apache 설정

$ vi /usr/local/apache2.4/conf/httpd.conf

vi 명령어로 파일을 연다. httpd.conf는 Apache 설정파일이다.
설정파일 내에 LoadModule php7_module modules/libphp7.so가 있다면 php 모듈이 설치된 것이다.

AddType application/x-httpd-php .php .html

403 입력후 Shift+g를 통해 403번째 줄로 이동할 수 있다. AddType 옵션들 밑에 위의 코드를 입력한다. i를 눌러 입력 모드로 전환한 후 입력하고 esc를 통해 입력모드를 종료한다. :wq를 입력하여 저장하고 빠져나온다.

VI/VIM 편집기 커맨드 모음 by heejeong Kwon


2) PHP 설정

$ cd /usr/local/php-7.4.1
$ cp php.ini-production /usr/local/lib/php.ini

프로덕션용 설정 파일인 php.ini-production을 /usr/local/lib/php.ini에 복사한다.


3) 연동 확인

$ cd /usr/local/apache2.4/htdocs
$ vi phpinfo.php

아파치의 웹 콘텐츠가 위치하는 htdocs로 이동하여 php파일을 작성한다.

<?php
phpinfo();
?>

위의 코드를 입력하면 된다. 위에서 설명한 것과 같이 vi 커맨드를 활용한다.

❗️이 부분에서 PHP가 정상적으로 설치가 됐음에도 불구하고 이상하게 코드 적용이 안 돼서 애를 먹었다. Bitnami MAMP를 설치한 뒤 mampstack 폴더 > docs > demo > htdocs에 있는 phpinfo.php 파일을 복사 붙여넣기해서 해결할 수 있었다.

Apache를 종료하지 않았다면 VM 인스턴스 외부 IP로 접속하여 phpinfo 창을 확인할 수 있다.
[VM 외부 IP]/phpinfo.php 로 접속한다.





3️⃣ VM 외부접속하기

위에서 phpinfo가 뜨지 않았다면 VM 인스턴스 외부 IP 접속을 허용하는 몇 단계가 필요하다.


01. GCP 고정 IP 설정

외부 IP 주소가 있으면 연결된 프로젝트 리소스를 다른 네트워크 또는 인터넷에서 사용할 수 있다.

GCP Console > VPC 네트워크 > 외부 IP 주소 > 고정 주소 예약으로 들어간다.
이름과 리전을 설정하고 예약하면 외부 IP 주소 연결이 생성된다.

GCP Console > Compute Engine > VM 인스턴스 > 연결하고자 하는 인스턴스 이름을 클릭한다.
VM 인스턴스 세부정보 > 네트워크 인터페이스 > nic0: default default(기본 네트워크)를 클릭
외부 IP > 임시 > IP 주소 만들기 > 예약 > 저장

고정 IP 설정에 대한 공식 안내


02. GCP 방화벽 외부 접속 허용

GCP Console > VPC 네트워크 > 방화벽 > 방화벽 이름 지정, 트래픽 방향 수신 선택 (외부에서 접근하는 것을 허용하다.), 소스 IP 범위 '모든 IP' 선택, 프로토콜 및 포트는 'tcp','udp' 선택
GCP Console > Compute Engine > VM 인스턴스 > 연결하고자 하는 인스턴스 이름을 클릭한다.
VM 인스턴스 세부정보 > 네트워크 태그에서 방금 설정한 방화벽 이름을 지정한다.

GCP 방화벽 설정에 관한 자세한 글 by Kibua20


03. 접속 확인

[VM 외부 IP]/phpinfo.php 로 접속하여 확인한다.


phpinfo 창이 뜬다면 해당 포스팅 과제는 끝난 것이다! 🥳 🎉





4️⃣ 추가 : MYSQL 컴파일설치(수동설치)

수행한 과제에서는 MySQL을 설치하지 않았다.
이번에 수행한 과제들을 블로그에 모두 정리하고 시간이 날 때 MySQL 설치도 적어보려 한다.
GCP MySQL 외부 접속 허용에 관한 글 by biosina1





✅ Reference

AMP 컴파일 설치 by dev_Lumin
AMP 컴파일 설치 by Nuke Olaf
AMP 컴파일 설치 by oyeon
AMP 컴파일 설치 by yuus95
AMP 컴파일 설치 by 민혁리즘

0개의 댓글