본문 바로가기

외부 활동/UMC 2기 서버[NODE]

1주차 - 서버개요 +Ubuntu APM 수동 설치 챌린지 과제

#해당 UMC 2기 관련 포스팅은 같은 서버 5조 팀원들과 함께 공부한 내용을 담고 있으며

서버 5조의 UMC 2기 워크북을 참고 하였다. + 웅(조장) 블로그 https://with611.tistory.com

+ https://yeni-days.tistory.com/2?category=1020921

 

 

 local 환경에서 APM설치하기(Apache, Php, Mysql)

-->비트나미를 사용해서 한번에 세개를 모두 설치한다. 

Window는 WAMP를 설치

apache는 8080포트로 연결이 되었는것을 확인하였다.

위 사진 처럼 로컬호스트의 8080포트로 이동을 한다. //127.0.0.1은 locahost를 나타는 특별한 IP이다.

 

챌린지 과제

 

1주차 챌린지 과제는 가상머신을 사용하여 우분투 환경에서 비트나미와 같은 패키지를 사용하지 않고

APM를 설치하는 것이다.

 

*소스 설치의 관례*

설치를 할때는 아무곳에서나 설치를 하면 안되고 /usr/local 에 설치를 해야 한다.

-->이 부분을 놓쳐 상당한 시간을 삽질을 했다.

소스설치 관례           //아직 이 부분이 이해가 안된다.

/usr/local에 설치하는 것이 관례이다.

  1. 소스파일을 내려받고
  2. ./configure로 설정을 한다.
  3. make로 컴파일을 한 뒤
  4. make install로 설치한다.
  • configure: 소스파일에 대한 환경설정을 해주는 명령어다. (뒤에 옵션을 넣음) 서버환경에 맞추어 makefile을 생성해주는 과정이다.
  • make: 소스를 컴파일 하는 것이다. 컴파일이란 소스파일을 사용자가 실행 가능한 파일로 만들어 주는 과정을 말한다.
  • make install: make를 통해 만들어진 설치파일을 설치하는 과정이다.
  • 한마디로 build된 프로그램을 실행할 수 있게 파일들을 알맞은 위치에다가 복사를 한다.

 

 

Apache

 

필수 패키지 설치

$ sudo su
/usr/local# apt-get install make
/usr/local# apt-get install build-essential
/usr/local# apt-get install gcc
/usr/local# apt-get install --reinstall make
/usr/local# apt-get install libexpat1-dev
/usr/local# apt-get install g++
/usr/local# apt-get install net-tools
/usr/local# apt-get install curl

 

소스설치 파일 다운로드 및 압축해제

$ sudo su
/usr/local# mkdir apache
(소스파일 설치)
/usr/local# wget http://mirror.navercorp.com/apache//apr/apr-1.7.0.tar.gz
/usr/local# wget http://mirror.navercorp.com/apache//apr/apr-util-1.6.1.tar.gz
/usr/local# wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz/
/usr/local# wget https://dlcdn.apache.org//httpd/httpd-2.4.51.tar.gz
(압축해제)
/usr/local# tar xvfz apr-1.7.0.tar.gz
/usr/local# tar xvfz apr-util-1.6.1.tar.gz
/usr/local# tar xvfz pcre-8.45.tar.gz
/usr/local# tar xvfz httpd-2.4.51.tar.gz
만약 pcre-8.45.tar.gz 파일이 무슨 .html 형식으로 다운받아진다면,
pcre-8.45 에서 직접 다운받은 후 압축해제 해준다.

  • mkdir: 디렉토리를 생성하는 명령어이다.
  • wget: 웹 서버로부터 파일을 다운받는다.
  • tar xvfz: tar.gz 압축을 한 번에 풀어준다.
  • APR: APR(아파치 포터블 런타임)는 아파치 HTTP 서버 2.x.의 핵심이며 휴대용 라이브러리이다. 이런 APR은 고급 IO 기능(예:sendfile, epoll and OpenSSL 등)에 대한 접근을 포함하여 OS 수준의 기능 (난수 생성, 시스템 상태), 그리고 기본 프로세스 처리(공유 메모리, NT 파이프와 유닉스 소켓) 등 많은 용도로 사용되고 있다.
  • PCRE: PCRE( Perl Compatible Regular Expressions )는 펄 호환 정규 표현식으로서, 정규식 패턴 일치를 구현하는 함수의 집합이다. 요즘에는 Apache, PHP, KDE 등을 포함한 오프 소스 프로젝트에서 사용되고 있으며, 아파치 2.4 버전을 설치할 때는 pcre를 설치해야 한다.

 

apr 설치

/usr/local# cd apr-1.7.0
/usr/local/apr-1.7.0# ./configure --prefix=/usr/local/apr
여기서 오류가 난다면
/usr/local/apr-1.7.0# cp -arp libtool libtoolT 다운로드를 해준다.
/usr/local/apr-1.7.0# make
/usr/local/apr-1.7.0# make install

 

apt-util 설치

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

 

pcre 설치

/usr/local# cd pcre-8.45
/usr/local/pcre-8.43# ./configure --prefix=/usr/local/pcre
/usr/local/pcre-8.43# make
/usr/local/pcre-8.43# make install

 

Apache 설치

/usr/local# cd httpd-2.4.51
/usr/local/httpd-2.4.51# ./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
/usr/local/httpd-2.4.46# make
/usr/local/httpd-2.4.46# make install

 

Apache 실행

실행: httpd -k start, 종료: httpd -k stop
/usr/local# sudo apache2.4/bin/httpd -k start
/usr/local# ps -ef | grep httpd | grep -v grep
/usr/local# sudo netstat -anp | grep httpd
/usr/local# sudo curl http://127.0.0.1

브라우저를 열고 127.0.0.1 에 접속시 'It works!' 라는 문구가 뜨면 성공이다

 

Mysql

필수 패키지 설치

$ sudo su
/usr/local# apt-get update
/usr/local# apt-get install cmake
/usr/local# apt-get install libssl-dev
/usr/local# apt-get install libboost-all-dev
/usr/local# apt-get install libncurses5-dev libncursesw5-dev
/usr/local# apt-get install perl
(이건 앞에서 설치해서 중복할 필요 없다.)
/usr/local# apt-get install make
/usr/local# apt-get install gcc
/usr/local# apt-get install g++

 

소스설치 파일 다운로드 및 압축해제

/usr/local# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19.tar.gz
/usr/local# tar xvfz mysql-8.0.19.tar.gz

 

MySQL 설치

 

/usr/local# cd mysql-8.0.19
/usr/local/mysql-8.0.19# mkdir dir_mysql (이름 아무거나 상관없다 여기서는 그냥 이름을 dir_mysql로 했다.)
/usr/local/mysql-8.0.19# cd ..
/usr/local# cd src
/usr/local/src# sudo wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz
/usr/local/src# sudo tar xvfz boost_1_70_0.tar.gz
/usr/local/src# cd ..
/usr/local# cd usr/local/mysql-8.0.19/dir_mysql
/usr/local/mysql-8.0.19/dir_mysql# cmake \
.. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_70_0
/usr/local/mysql-8.0.19/dir_mysql# make
/usr/local/mysql-8.0.19/dir_mysql# make install

 

MySQL DB 초기화

mysql 그룹 및 유저 생성
/usr/local/mysql-8.0.19/dir_mysql# groupadd mysql
/usr/local/mysql-8.0.19/dir_mysql# useradd -r -g mysql -s /bin/false mysql

디렉토리 생성
/usr/local# cd mysql
/usr/local/mysql# mkdir mysql-files (이름 아무거나 상관없음)

권한주기
/usr/local/mysql# chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql# chown mysql:mysql mysql-files
/usr/local/mysql# chmod 750 mysql-files

기본 DB 생성
/usr/local/mysql# bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
실행하면 다음과 같은 문장이 뜬다.
...
..[Server] A temporary password is generated for root@localhost: <12자리 랜덤 문자>
여기서 12자리 랜덤 문자 자리의 임시 비밀번호를 기억해두자.

 

MySQL 서버 실행 및 비밀번호 재설정

MySQL 서버 실행
/usr/local/mysql# bin/mysqld_safe --user=mysql &
입력 후 터미널 창이 멈춘게 아니다. 바로 다음 문장을 입력하자.
bin/mysql -u root -p
Enter password: 12자리 랜덤 문자
그럼 터미널이 mysql> 로 바뀌었을 것이다.
그래도 만약 서버가 실행되는지 보고싶다면, 새 터미널 창에서 다음 문장을 입력해보자.
$ ps -ef | grep mysqld
..뭐가 막 뜨면 잘 실행중인거임.

비밀번호 재설정 및 서버 종료
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '<새 비밀번호>'; //소문자로 해도 된다.
mysql> exit
/usr/local/mysql# bin/mysqladmin -u root -p shutdown

끝!

 

php

 

필수 패키지 설치

$ sudo su
/usr/local# apt-get install libxml2-dev
/usr/local# apt-get install libjpeg-dev
/usr/local# apt-get install libpng-dev
/usr/local# apt-get install libsqlite3-dev

 

소스설치 파일 다운로드 및 압축해제

/usr/local# wget https://www.php.net/distributions/php-8.1.0.tar.gz
/usr/local# tar tar xvfz php-8.1.0.tar.gz

 

php 설치

/usr/local# cd php-8.1.0
/usr/local/php-8.1.0# ./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
/usr/local/php-8.1.0# make
/usr/local/php-8.1.0# make test
/usr/local/php-8.1.0# make install

 

Apache, PHP 연동

모듈 설치확인
아파치 설정 파일인 httpd.conf 파일을 열어 PHP 모듈이 설치됐는지 확인한다.
/usr/local# cd apache2.4/conf
/usr/local/apache2.4/conf# gedit httpd.conf
그럼 httpd.conf파일이 열리는데, 약 165줄 근처의 다음 문장을 찾아보자.
165 LoadModule php_module module/libphp.so
있다면 잘 설치 된것이다.
다음은 380줄 근처로 이동해서 <IfModule mime_module>을 찾은 뒤 아래에 다음 문장을 입력한다.
AddType application/x-httpd-php .php .html
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
결과적으론 다음과 같이 작성되어 있어야한다.
...
380 <IfModule mime_module>
381   AddType application/x-httpd-php .php .html
382   AddType application/x-compress .Z
383   AddType application/x-gzip .gz .tgz
384   #
...

php.ini 파일 세팅
/usr/local# cd php-8.1.0
/usr/local/php-8.1.0# cp php.ini-production /usr/local/lib/php.ini

테스트용 php 파일 작성
/usr/local# cd apache2.4/htdocs
/usr/local/apache2.4/htdocs# vi phpinfo.php
<?php
  phpinfo();
?>

연결 확인
/usr/local# apache2.4/bin/httpd -k start
/usr/local# ps -ef | grep httpd | grep -v grep
/usr/local# sudo netstat -anp | grep httpd
/usr/local# sudo curl http://127.0.0.1

브라우저를 열고 127.0.0.1/phpinfo.php 에 접속시 php정보가 뜨면 성공!

안 뜰 경우 phpinfo.php 문서의 코드에서 띄어쓰기가 잘 되었는지 확인해보자.