Ubuntu 16.04 LTS 에서 APM 설치

콜트·2021년 1월 3일
2

라이징 프로그래머2의 서버반 1주차 과제가 시작되었다. 과제 중 일부인 Apache, PHP, MySQL의 소스설치를 진행하면서 그 과정을 기록해두려고 한다. 가상머신의 설치와 가상머신에 Linux 계열 OS를 설치하는 부분은 추후에 정리해서 추가하도록 하겠다.

실습에 사용된 OSLinux 기반 OSUbuntu 중에서 16.04 LTS 버전이다.


Apache 설치

1. 필수 라이브러리 설치

Advanced Package Tool의 약자로 우분투(Ubuntu)를 포함한 데비안(Debian)계열의 리눅스에서 쓰이는 패키지 관리 도구인 apt를 이용하여 필수 라이브러리를 설치한다.

2. PCRE 설치

  1. wget 명령어를 이용하여 다운로드 링크로부터 pcre-8.44.tar.gz 파일을 다운로드한다.

  2. 다운로드한 pcre-8.44.tar.gz의 아카이브(디렉토리의 구조, 파일의 속성들을 보존하면서 여러 개의 파일을 하나의 큰 파일로 묶은 것) 및 압축을 해제한다.

  3. 압축을 해제하여 생성된 pcre-8.44 디렉토리로 이동.

  4. ./configure--prefix=옵션을 통해 이후 컴파일을 통해 pcre가 설치될 디렉토리를 지정해준다(여기서는 /usr/local/pcre-8.44).

  5. make 명령어 실행.

  6. make 명령이 정상적으로 완료됨.

  7. make install 명령어 실행.

  8. make install 명령이 정상적으로 완료됨.

3. Apache 웹서버 컴파일 & 설치

  1. wget 명령어를 이용하여 다운로드 링크로부터 httpd-2.4.46.tar.gz 파일 다운로드.

  2. httpd-2.4.46.tar.gz 아카이브 및 압축 해제

  3. 압축 해제되어 생성된 디렉토리 내부의 /srclib 디렉토리에 wget 명령어를 통해 apr-1.7.0.tar.gz 파일 다운로드.

  4. 다운로드된 apr-1.7.0.tar.gz 아카이브 및 압축 해제

  5. 압축해제되어 생성된 apr-1.7.0 디렉토리를 apr이라는 디렉토리로 변경(이름 바꾸기라 생각하자)하고 마찬가지로 wget 명령어를 이용하여 apr-util-1.6.1.tar.gz 파일 다운로드.

  6. 다운로드된 apr-util-1.6.1.tar.gz 아카이브 및 압축 해제

  7. 앞서 설치한 pcre를 다시 설치한 것이다. 사실 필요없는 과정이다. 앞서 설치한 pcre-8.44 디렉토리를 mv 명령어를 통해 옮겨주면 되기 때문이다.

  8. mv 명령어를 이용해 pcre-8.44 디렉토리를 pcre 디렉토리로 만든다.

  9. Apache 웹서버를 설치하기 이전에, 먼저 ./configure와 옵션들로 설정을 진행한다.

  10. 에러가 발생했다. 잘 살펴보면 zlib location... not found라는 문구가 보인다. zlib라는 라이브러리가 없어서 발생한 에러인듯 하다.

  11. 에러를 해결하기 위해 apt-get install libssl-dev 를 통해 필수 라이브러리를 다시 설치했다. 여기서 dpkg -l 명령어를 이용하면 설치된 라이브러리 목록을 확인할 수 있다. 제일 아래쪽에 zlib가 보일 것이다.

  12. 필수 라이브러리를 설치한 뒤, 다시 설정을 진행해보면 다음과 같이 설정이 완료된 모습을 볼 수 있다.

  13. make 명령어 실행.

  14. make 명령이 정상적으로 완료된 모습.

  15. make install 명령어 실행.

  16. make install 명령이 정상적으로 완료된 모습.

4. Apache 웹서버 환경 설정

  1. Apache 웹서버 설치가 완료되었으므로 환경 설정을 위해 해당 디렉토리에 설정파일인 httpd.confvi 편집기로 연다.

  2. ServerName localhost를 추가해준다(추가해주는 위치는 상관이 없다고 한다). 이렇게 추가해주면 나중에 브라우저에서 localhost라는 URL로 접근하여 동작을 확인할 수 있다.

5. 서비스 등록 파일 apache2.service 생성

  1. /apps/apache24/bin/ 디렉토리에 서비스 등록 파일인 apache2.service를 생성해준다.

  2. apache2.service의 내용은 다음과 같다.

  3. apache2.service 파일을 생성하였다면 chmod +x apache2.service 명령어를 통해 실행권한을 부여한다. 여기서 +x는 모든 사용자에게 실행 권한을 추가한다는 의미이다.

6. Apache 서비스 등록

systemctl enable <서비스명> 명령어를 이용해 apache2 서비스를 부팅시 자동으로 시작하도록 한다.

7. Apache 서비스 실행 및 서비스 상태 확인

systemctl start <서비스명>를 통해 서비스를 실행할 수 있고, systemctl status <서비스명> 명령어를 통해 해당 서비스의 상태를 확인할 수 있다.

8. 브라우저에서 Apache 작동 확인

  • 가상머신 내 브라우저에서 localhost로 접근하면 다음과 같이 Apache가 잘 작동하는 것을 확인할 수 있다. 이렇게 화면이 나오면 설치가 완료된 것이다.
  • 또는 ifconfig 명령어를 통해 확인할 수 있는 inet addr로 접근해도 Apache가 잘 작동하는 것을 확인할 수 있다.


MySQL 설치

1. 리눅스 정보 조회, 리눅스 비트 확인

현재 설치된 운영체제의 정보와 비트를 확인한다.

2. 관련패키지 설치

MySQL을 설치하기 위해 필요한 패키지들을 설치한다.

3. MySQL 계정 만들기

mysql이라는 그룹과 유저를 추가해준다.

4. cmake 설치

camke 패키지를 설치한다.

cmake 수동 설치 방법(option)

wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
tar xvf cmake-2.8.4.tar.gz
cd make-2.8.4
./bootstrap
make all
sudo make install

5. MySQL 소스 다운로드

  1. 권한 에러 발생.

  2. sudo 명령어를 통해 실행.

6. MySQL 소스 압축풀기

mysql-5.7.20의 압축을 푼다.

7. MySQL 컴파일 및 설치

  1. 각종 옵션들과 함께 cmake를 실행한다.

  2. make를 실행한다.

  3. make install을 실행한다.

8. MySQL 데이터베이스 초기화

데이터베이스를 초기화한다. 자세히 보면 --datadir, --basedir 옵션이 있는데 이를 눈여겨 보자.

9. MySQL 설치 디렉토리 mysql 계정으로 권한 수정

/usr/local/mysql 디렉토리를 mysql 계정으로 권한을 수정한다.

10. 환경설정

  1. vi 편집기로 /usr/local/mysql/my.cnf라는 파일을 생성한다.

  2. 다음은 /usr/local/mysql/my.cnf 파일의 내용이다. 입력해주자.

11. MySQL 서비스 등록

  1. /usr/local/mysql/support-files/mysql.server 파일을 /etc/init.d/mysqld로 복사한다.

  2. 복사된 /etc/init.d/mysqld 파일을 수정하기 위해 vi 편집기로 연다.

  3. 앞서 데이터베이스를 초기화해줄 때 입력해준 옵션인 basedirdatadir에 해당 옵션값을 설정해준다.

  4. 수정완료!

  5. 부팅시 mysql이 자동으로 실행되도록 update-rc.d를 이용하여 서비스를 등록한다.

  6. service 명령어로 실행 및 정지상태를 확인해본다.

12. root 암호 초기화

/usr/local/mysql 디렉토리에 위치한 상태에서 /bin/mysql-u root -p 옵션과 함께 실행한다(처음에는 패스워드가 설정되어 있지 않으므로 엔터만 입력해도 넘어가진다). 이후 use mysqlmysql 데이터베이스를 사용하도록 한 뒤, update user set authentication_string = password('sql') where user = 'root';를 입력해서 user 테이블의 root라는 유저의 패스워드를 sql로 변경한다.

13. 사용자 추가 및 ERROR 1820(HY000) 오류 해결

사용자를 추가하려고 하면 ERROR 1820(HY000) 오류가 발생한다. 현재 USER 테이블의 상태를 바꾸려면 먼저 패스워드를 리셋해야 한다고 한다. 따라서 SET PASSWORD = PASSWORD('sql');을 입력해서 sql로 패스워드를 설정해준다. 이후 사용자를 추가하고 권한을 설정해준다.

이로써 MySQL 설치도 완료했다.


PHP 설치

1. 컴파일 관련 라이브러리 설치

PHP를 컴파일 하기 위해 필요한 관련 라이브러리들을 설치한다.

2. PHP 컴파일

  1. wget명령어를 통해 웹 다운로드 링크로부터 php-7.4.12.tar.gz 파일을 다운로드 받는다.

  2. php-7.4.12.tar.gz 파일의 아카이브 및 압축을 해제한다.

  3. 소스파일 설치를 위한 환경 설정을 해준다(./configure 옵션...). ./configure --prefix = /usr/local/mysql 하게 되면 어떤 파일을 /usr/local/mysql 이라는 곳에 설치 하겠다는 뜻이다.

  4. 에러 발생. 아래쪽에 보면 No such file or directory라고 되어있다. 출처에서 사용된 /bluesanta/~~~~의 디렉토리가 존재하지 않기 때문에 발생한 에러인듯 하다. 빼먹지 말고 본인 상황에 맞게 디렉토리 설정을 제대로 해줘야 한다.

  5. 디렉토리 설정을 제대로 해준 뒤 다시 실행.

  6. 살펴보면 mysql_config not found, Please reinstall the mysql distribution이라 되어있다. mysql_config를 찾지 못해서 생긴 오류인듯하다.

  7. --with-mysqli옵션과 --with-pdo-mysql옵션의 값을 mysql이 설치된 디렉토리로 재설정해주고 다시 실행. 내 경우에는 각각 /usr/local/mysql/bin/mysql_config, /usr/local/mysql/bin/mysql 이었다.

  8. 컴파일 완료!

  9. make 명령을 실행한다.

  10. build가 완료되었다. make test를 잊지말라고 한다(?).

3. PHP 모듈 테스트

  1. make test를 실행한다.

  2. 에러와 함께 test가 실패했다고 나오는데.. 참고했던 자료에서는 여기서 넘어갔다. 크게 문제가 있는 부분은 아닌듯 하다(?).

4. PHP 설치

make install 명령어를 실행한다.

5. php.ini 복사

php.ini-production/apps/php-7.4.12/php.ini라는 파일로 복사한다.

6. apps/apache24/conf/httpd.conf에 내용 추가

  1. apache 설정 파일인 httpd.conf를 수정하기위해 연다.

  2. PHP를 설치하여 설치된 LoadModule php7_module modules/libphp7.so 모듈 아래에 PHPIniDir "/apps/php-7.4.12"를 추가한다(PHPIniDir는 PHP 설정 파일인 php.ini가 존재하는 디렉토리를 의미한다. 여기서는 /apps/php-7.4.12를 지정하는데, 이는 직전에 php.ini-productionphp.ini로써 복사한 디렉토리이다).

  3. SSI로 검색한 뒤,

  4. ApachePHP를 연동하기 위해 AddHandlerAddType을 추가해준다.

7. Apache 웹서버 재실행

  1. 변동사항을 적용하기 위해 apache2 서비스를 재실행한다.

  2. systemctl status apache2 명령어를 입력해 재실행된 것을 확인할 수 있다.

8. PHP 확인을 위한 파일 생성

  1. /var/www/html/ 디렉토리에 파일을 만들어야 한다고 한다. 해당 디렉토리가 존재하지 않길래 직접(...) 만들어서 phpinfo.php 파일을 만들었다.

  2. phpinfo.php 파일의 내용

  3. 그런데 브라우저에서 localhost/phpinfo.php로 접근해보니 Not Found 화면이 나와서 httpd.conf 설정 파일을 확인해보았다. 살펴보니, DocumentRoot/apps/apache24/htdocs로 되어있는걸 볼 수 있었는데, phpinfo.php라는 요청이 들어오면 해당 디렉토리에 있는 phpinfo.php 파일을 찾는데, 이때 해당 디렉토리에 대한 설정이라고 한다. 즉, 설정에 따라 /apps/apache24/htdocsphpinfo.php 파일을 위치시켜야 한다는 뜻이다.

  4. phpinfo.php 파일을 /apps/apache24/htdocs 디렉토리로 옮겨준다.

9. phpinfo 확인

제대로 phpinfo.php 창이 나오는 것을 확인할 수 있다. 이로써 PHP 설치 및 Apache 웹서버와 PHP의 연동까지 완료했다.


느낀점

간단하지만 직접 서버를 구축하면서 localhost에서 머무르는 것이 아닌 외부에서도 접근할 수 있는 것을 만들었다는 사실에 뿌듯했다(서버를 켜두고 휴대폰으로 ip와 주소를 입력해서 접근하면 동일한 화면이 나온다! 꺅!).

Linuxvi 편집기의 명령어에 관해서 공부할 필요성을 느꼈다. 참고자료를 바탕으로 하나씩 따라가며 실습해본 것이라 명령어들에 대해서 하나하나 찾아가며 공부해야 했다. 차근차근 공부하면서 좀 더 친해져야겠다.

그리고 공식 문서를 보는 습관을 들이는 것이 좋겠다는 생각이 들었다. 결국 수많은 블로그와 웹사이트들에서 제시하는 방법들은 개개인의 상황이 반영되어 있기 때문에 같은 내용이지만 조금씩 차이가 있을 수밖에 없는 듯 하다. 그러한 연유로, 공식 문서로 접근하는 것이 정석적인 방법이라고 느껴졌다(영어 공부가 필요할 듯 하다...). 이는 오류를 해결하면서 공식 문서를 열람했던 적이 있는데, 확실히 도움이 많이 되었던 것이 크게 작용한듯 하다.


참고자료


profile
개발 블로그이지만 꼭 개발 이야기만 쓰라는 법은 없으니, 그냥 쓰고 싶은 내용이면 뭐든 쓰려고 합니다. 코드는 깃허브에다 작성할 수도 있으니까요.

0개의 댓글