라이징 프로그래머2
의 서버반 1주차 과제가 시작되었다. 과제 중 일부인 Apache
, PHP
, MySQL
의 소스설치를 진행하면서 그 과정을 기록해두려고 한다. 가상머신의 설치와 가상머신에 Linux
계열 OS
를 설치하는 부분은 추후에 정리해서 추가하도록 하겠다.
실습에 사용된 OS
는 Linux
기반 OS
인 Ubuntu
중에서 16.04 LTS
버전이다.
Advanced Package Tool
의 약자로 우분투(Ubuntu)
를 포함한 데비안(Debian)계열의 리눅스
에서 쓰이는 패키지 관리 도구인 apt
를 이용하여 필수 라이브러리를 설치한다.
wget
명령어를 이용하여 다운로드 링크로부터 pcre-8.44.tar.gz
파일을 다운로드한다.
다운로드한 pcre-8.44.tar.gz
의 아카이브(디렉토리의 구조, 파일의 속성들을 보존하면서 여러 개의 파일을 하나의 큰 파일로 묶은 것) 및 압축을 해제한다.
압축을 해제하여 생성된 pcre-8.44
디렉토리로 이동.
./configure
의 --prefix=
옵션을 통해 이후 컴파일을 통해 pcre
가 설치될 디렉토리를 지정해준다(여기서는 /usr/local/pcre-8.44
).
make
명령어 실행.
make
명령이 정상적으로 완료됨.
make install
명령어 실행.
make install
명령이 정상적으로 완료됨.
wget
명령어를 이용하여 다운로드 링크로부터 httpd-2.4.46.tar.gz
파일 다운로드.
httpd-2.4.46.tar.gz
아카이브 및 압축 해제
압축 해제되어 생성된 디렉토리 내부의 /srclib
디렉토리에 wget
명령어를 통해 apr-1.7.0.tar.gz
파일 다운로드.
다운로드된 apr-1.7.0.tar.gz
아카이브 및 압축 해제
압축해제되어 생성된 apr-1.7.0
디렉토리를 apr
이라는 디렉토리로 변경(이름 바꾸기라 생각하자)하고 마찬가지로 wget
명령어를 이용하여 apr-util-1.6.1.tar.gz
파일 다운로드.
다운로드된 apr-util-1.6.1.tar.gz
아카이브 및 압축 해제
앞서 설치한 pcre
를 다시 설치한 것이다. 사실 필요없는 과정이다. 앞서 설치한 pcre-8.44
디렉토리를 mv
명령어를 통해 옮겨주면 되기 때문이다.
mv
명령어를 이용해 pcre-8.44
디렉토리를 pcre
디렉토리로 만든다.
Apache
웹서버를 설치하기 이전에, 먼저 ./configure
와 옵션들로 설정을 진행한다.
에러가 발생했다. 잘 살펴보면 zlib location... not found
라는 문구가 보인다. zlib
라는 라이브러리가 없어서 발생한 에러인듯 하다.
에러를 해결하기 위해 apt-get install libssl-dev
를 통해 필수 라이브러리를 다시 설치했다. 여기서 dpkg -l
명령어를 이용하면 설치된 라이브러리 목록을 확인할 수 있다. 제일 아래쪽에 zlib
가 보일 것이다.
필수 라이브러리를 설치한 뒤, 다시 설정을 진행해보면 다음과 같이 설정이 완료된 모습을 볼 수 있다.
make
명령어 실행.
make
명령이 정상적으로 완료된 모습.
make install
명령어 실행.
make install
명령이 정상적으로 완료된 모습.
Apache
웹서버 설치가 완료되었으므로 환경 설정을 위해 해당 디렉토리에 설정파일인 httpd.conf
를 vi
편집기로 연다.
ServerName localhost
를 추가해준다(추가해주는 위치는 상관이 없다고 한다). 이렇게 추가해주면 나중에 브라우저에서 localhost
라는 URL로 접근하여 동작을 확인할 수 있다.
/apps/apache24/bin/
디렉토리에 서비스 등록 파일인 apache2.service
를 생성해준다.
apache2.service
의 내용은 다음과 같다.
apache2.service
파일을 생성하였다면 chmod +x apache2.service
명령어를 통해 실행권한을 부여한다. 여기서 +x
는 모든 사용자에게 실행 권한을 추가한다는 의미이다.
systemctl enable <서비스명>
명령어를 이용해 apache2
서비스를 부팅시 자동으로 시작하도록 한다.
systemctl start <서비스명>
를 통해 서비스를 실행할 수 있고, systemctl status <서비스명>
명령어를 통해 해당 서비스의 상태를 확인할 수 있다.
localhost
로 접근하면 다음과 같이 Apache
가 잘 작동하는 것을 확인할 수 있다. 이렇게 화면이 나오면 설치가 완료된 것이다.ifconfig
명령어를 통해 확인할 수 있는 inet addr
로 접근해도 Apache
가 잘 작동하는 것을 확인할 수 있다.현재 설치된 운영체제의 정보와 비트를 확인한다.
MySQL
을 설치하기 위해 필요한 패키지들을 설치한다.
mysql
이라는 그룹과 유저를 추가해준다.
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
권한 에러 발생.
sudo
명령어를 통해 실행.
mysql-5.7.20
의 압축을 푼다.
각종 옵션들과 함께 cmake
를 실행한다.
make
를 실행한다.
make install
을 실행한다.
데이터베이스를 초기화한다. 자세히 보면 --datadir
, --basedir
옵션이 있는데 이를 눈여겨 보자.
/usr/local/mysql
디렉토리를 mysql
계정으로 권한을 수정한다.
vi
편집기로 /usr/local/mysql/my.cnf
라는 파일을 생성한다.
다음은 /usr/local/mysql/my.cnf
파일의 내용이다. 입력해주자.
/usr/local/mysql/support-files/mysql.server
파일을 /etc/init.d/mysqld
로 복사한다.
복사된 /etc/init.d/mysqld
파일을 수정하기 위해 vi
편집기로 연다.
앞서 데이터베이스를 초기화해줄 때 입력해준 옵션인 basedir
과 datadir
에 해당 옵션값을 설정해준다.
수정완료!
부팅시 mysql
이 자동으로 실행되도록 update-rc.d
를 이용하여 서비스를 등록한다.
service
명령어로 실행 및 정지상태를 확인해본다.
/usr/local/mysql
디렉토리에 위치한 상태에서 /bin/mysql
을 -u root -p
옵션과 함께 실행한다(처음에는 패스워드가 설정되어 있지 않으므로 엔터만 입력해도 넘어가진다). 이후 use mysql
로 mysql
데이터베이스를 사용하도록 한 뒤, update user set authentication_string = password('sql') where user = 'root';
를 입력해서 user
테이블의 root
라는 유저의 패스워드를 sql
로 변경한다.
사용자를 추가하려고 하면 ERROR 1820(HY000)
오류가 발생한다. 현재 USER
테이블의 상태를 바꾸려면 먼저 패스워드를 리셋해야 한다고 한다. 따라서 SET PASSWORD = PASSWORD('sql');
을 입력해서 sql
로 패스워드를 설정해준다. 이후 사용자를 추가하고 권한을 설정해준다.
이로써 MySQL
설치도 완료했다.
PHP를 컴파일 하기 위해 필요한 관련 라이브러리들을 설치한다.
wget
명령어를 통해 웹 다운로드 링크로부터 php-7.4.12.tar.gz
파일을 다운로드 받는다.
php-7.4.12.tar.gz
파일의 아카이브 및 압축을 해제한다.
소스파일 설치를 위한 환경 설정을 해준다(./configure 옵션...
). ./configure --prefix = /usr/local/mysql
하게 되면 어떤 파일을 /usr/local/mysql
이라는 곳에 설치 하겠다는 뜻이다.
에러 발생. 아래쪽에 보면 No such file or directory
라고 되어있다. 출처에서 사용된 /bluesanta/~~~~
의 디렉토리가 존재하지 않기 때문에 발생한 에러인듯 하다. 빼먹지 말고 본인 상황에 맞게 디렉토리 설정을 제대로 해줘야 한다.
디렉토리 설정을 제대로 해준 뒤 다시 실행.
살펴보면 mysql_config not found
, Please reinstall the mysql distribution
이라 되어있다. mysql_config
를 찾지 못해서 생긴 오류인듯하다.
--with-mysqli
옵션과 --with-pdo-mysql
옵션의 값을 mysql
이 설치된 디렉토리로 재설정해주고 다시 실행. 내 경우에는 각각 /usr/local/mysql/bin/mysql_config
, /usr/local/mysql/bin/mysql
이었다.
컴파일 완료!
make
명령을 실행한다.
build
가 완료되었다. make test
를 잊지말라고 한다(?).
make test
를 실행한다.
에러와 함께 test
가 실패했다고 나오는데.. 참고했던 자료에서는 여기서 넘어갔다. 크게 문제가 있는 부분은 아닌듯 하다(?).
make install
명령어를 실행한다.
php.ini-production
을 /apps/php-7.4.12/php.ini
라는 파일로 복사한다.
apache
설정 파일인 httpd.conf
를 수정하기위해 연다.
PHP
를 설치하여 설치된 LoadModule php7_module modules/libphp7.so
모듈 아래에 PHPIniDir "/apps/php-7.4.12"
를 추가한다(PHPIniDir
는 PHP 설정 파일인 php.ini
가 존재하는 디렉토리를 의미한다. 여기서는 /apps/php-7.4.12
를 지정하는데, 이는 직전에 php.ini-production
를 php.ini
로써 복사한 디렉토리이다).
SSI
로 검색한 뒤,
Apache
와 PHP
를 연동하기 위해 AddHandler
와 AddType
을 추가해준다.
변동사항을 적용하기 위해 apache2
서비스를 재실행한다.
systemctl status apache2
명령어를 입력해 재실행된 것을 확인할 수 있다.
/var/www/html/
디렉토리에 파일을 만들어야 한다고 한다. 해당 디렉토리가 존재하지 않길래 직접(...) 만들어서 phpinfo.php
파일을 만들었다.
phpinfo.php
파일의 내용
그런데 브라우저에서 localhost/phpinfo.php
로 접근해보니 Not Found
화면이 나와서 httpd.conf
설정 파일을 확인해보았다. 살펴보니, DocumentRoot
가 /apps/apache24/htdocs
로 되어있는걸 볼 수 있었는데, phpinfo.php
라는 요청이 들어오면 해당 디렉토리에 있는 phpinfo.php
파일을 찾는데, 이때 해당 디렉토리에 대한 설정이라고 한다. 즉, 설정에 따라 /apps/apache24/htdocs
에 phpinfo.php
파일을 위치시켜야 한다는 뜻이다.
phpinfo.php
파일을 /apps/apache24/htdocs
디렉토리로 옮겨준다.
제대로 phpinfo.php
창이 나오는 것을 확인할 수 있다. 이로써 PHP
설치 및 Apache
웹서버와 PHP
의 연동까지 완료했다.
간단하지만 직접 서버를 구축하면서 localhost
에서 머무르는 것이 아닌 외부에서도 접근할 수 있는 것을 만들었다는 사실에 뿌듯했다(서버를 켜두고 휴대폰으로 ip
와 주소를 입력해서 접근하면 동일한 화면이 나온다! 꺅!).
Linux
와 vi
편집기의 명령어에 관해서 공부할 필요성을 느꼈다. 참고자료를 바탕으로 하나씩 따라가며 실습해본 것이라 명령어들에 대해서 하나하나 찾아가며 공부해야 했다. 차근차근 공부하면서 좀 더 친해져야겠다.
그리고 공식 문서를 보는 습관을 들이는 것이 좋겠다는 생각이 들었다. 결국 수많은 블로그와 웹사이트들에서 제시하는 방법들은 개개인의 상황이 반영되어 있기 때문에 같은 내용이지만 조금씩 차이가 있을 수밖에 없는 듯 하다. 그러한 연유로, 공식 문서로 접근하는 것이 정석적인 방법이라고 느껴졌다(영어 공부가 필요할 듯 하다...). 이는 오류를 해결하면서 공식 문서를 열람했던 적이 있는데, 확실히 도움이 많이 되었던 것이 크게 작용한듯 하다.