한번에 끝내는 CentOS 웹서버세팅 (센토스 서버세팅)

HYEONG HWAN, MUN/ 8월 3, 2015/ 미분류/ 15 comments

Last updated : 2016-11-08

CentOS 에서의 웹서버 구축 방법을 요청하셔서 작성해 봅니다.
Ubuntu, CentOS, Fedora, ArchLinux 등에서 어떤 것이 가장 좋은 운영체제 일까요?

본인에게 편한 운영체제가 가장 좋습니다. (일방적으로 하나의 좋은 것이 있다면 다들 그것만 쓰고 나머지는 도태되겠죠.) 참고로 저에겐 Ubuntu 가 편합니다.

 


현재 배포된 CentOS 버전은 아래와 같습니다.

참조 : https://ko.wikipedia.org/wiki/CentOS

scr1108

 

이 글에서는 CentOS 7.0 또는 그 이상 버전에서 사용가능한 설정 방법을 설명하도록 하겠습니다.

 

참고로 운영체제 이미지는 다음의 위치에서 다운로드 가능합니다.

https://www.centos.org/download/

scr1108-3

Everything ISO : 운영체제 파일 + 패키지 파일 이 모두 담겨있음. 인터넷이 안되는 환경에서 사용할 수 있음.

Minimal ISO : 운영체제 파일. 패키지는 인터넷 연결을 통해 설치해야 함. 일반적으로 이 이미지를 CD 장치 또는 DVD 에 기록 후 사용합니다.

 


 

1) 리눅스 버전체크

#uname -a
Linux lael-centos 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

2) CentOS 버전체크

#cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

3) 하드용량체크

#df -h

스크린샷 2015-08-03 오전 12.50.52

대략 다 더하면 50GB의 여유공간이 있다.

 

 

4) 메모리 체크

#free -m

스크린샷 2015-08-03 오전 12.51.41

전체 3832MB의 메모리중 현재 3669MB 가 사용가능하다.

 

4-1) CPU 코어수 확인

cpu정보 프로세스를 읽어서 processor 항목이 몇개인지 갯수를 셉니다.

#cat /proc/cpuinfo | grep processor | wc -l

스크린샷 2015-04-08 오전 12.42.54

위의 사진은 6 core 를 뜻합니다.

한번 정도는 다음의 명령어를 확인해 보세요.

#cat /proc/cpuinfo | grep processor
#cat /proc/cpuinfo

 

5) 자잘한 업글

 

yum란 Yellow dog Updater, Modified 을 뜻합니다. (노란강아지 업데이터 수정버전. 별뜻 없으며 작명이 이렇게 되었을 뿐.)

우리는 yum 라는 센트오에스에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.

 

패키지 목록 갱신 및 업데이트 체크.

#yum update

 

6) 시스템 시간 설정

이것을 하지 않으면 EST 시간을 불러올 것이다.

#ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

tzselect

 

 

7) Hostname 설정

이 서버에 이름을 정하는 것이다. 이름을 잘 정해 두어야 나중에 다중 서버작업을 할 때 헷갈리지 않는다.

v3

위의 뜻은 “li599-115 서버에 root 사용자” 라는 뜻이다.

글 쓰는 지금 단어를 빨리 생각해보았는데  newhistory 라는 것이 떠오르더라.

이제 이 서버는 newhistory 라는 이름으로 만들 것입니다.

#vi /etc/hostname

빈 파일일 건데(또는 기존 hostname이 쓰여있을것임.) 원하는 이름으로 바꾼다. newhistory

권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어 lael.be 같은 것.

 

적용한다.

#hostname -F /etc/hostname

 

서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.

v4

 

8)방화벽 포트에서 http 80  허용하기

당신의 서버에 방화벽이 이미 설치되어 있을 수도 있고, 설치되어 있지 않을 경우도 있다.

클라우드 사업자에 따라서 기본 패키지로 설치하는 경우가 많으니 이 글에서는 방화벽 설정까지 서술하도록 하겠다.

#yum install firewalld

설치되지 않았다면 설치 안내 메시지가 출력되고, 설치되어 있다면 이미 최신버전이 설치되어 있다는 메시지가 출력된다.
 

CentOS 7 에는 방화벽 기본값모두 차단으로 되어 있고 허용할 포트를 따로 등록해 주어야 한다.

root 로그인 상태에서

#firewall-cmd --zone=public --add-port=80/tcp --permanent

 

방화벽 설정 새로고침

#firewall-cmd --reload

 

9) Apache2 설치

#yum install httpd

CentOS 7.1 에서는 Apache 2.4.6 이 설치된다.

 

버전체크

#httpd -v

스크린샷 2015-08-04 오전 12.11.47

 

웹서버 실행

#service httpd start

 

확인해본다.
http://256.123.213.213 (서버의아이피)
웹브라우져에 기본 설명페이지가 뜨면 성공.

 

기본 파일을 대체한다.
#touch /var/www/html/index.html

 

10) PHP 5.x 설치

#yum install php
자동으로 아파치 중단시키고  설정파일에 php를 등록시키고 재 구동시킨다.(바로 적용됨)

CentOS 7.1 에서는 php 5.4.16 이 설치된다.

기타 주로 사용되는 모듈을 설치한다.

 

 

- 이미지처리 모듈

#yum install php-gd

 

- 다국어 처리 모듈

#yum install php-mbstring

 

-추가로 설치하고 싶은 모듈이 있으면

#yum search php-

라고 입력해서 설치가능한 패키지를 검색후 install 하도록 하자.

 

11) Mysql 설치

 

#yum install mariadb
#yum install mariadb-server

MariaDB 5.5.41 버전이 설치된다.

 

MariaDB 시작

#service mariadb start

 

MariaDB 기본 환경설정
#/usr/bin/mysql_secure_installation
대문자로 쓰여져 있는 것이 기본값이다. root 비밀번호만 설정하고 나머지는 엔터(기본값 설정)를 입력하자.
Y 입력하고 엔터 입력해도 된다.
스크린샷 2015-08-04 오전 12.25.30

 

 

#yum install php-mysql

php와 mysql 의 연동모듈 설치.

 

11 - 2) 기본 언어셋 설정(중요)

이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.

#vi /etc/my.cnf

 

[mysqld] 항목에 다음 2 줄을 추가한다.
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

 

스크린샷 2015-08-04 오전 12.28.11

 

변경사항 적용

#service mariadb restart

12) 계정생성 및 동작테스트

laelbe 사용자 계정 생성
#adduser laelbe
비밀번호 설정
#passwd laelbe
보통 웹루트는 홈디렉토리에 하지 않습니다.
저는 주로 www 디렉토리를 사용합니다.사용자변경 후 www 디렉토리를 생성하고 빠져나오기
#su -l laelbe
#mkdir www
#exit

13) 웹사이트 Apache 환경설정 파일 작성

다음의 내용을 작성한다.

#vi /etc/httpd/conf/httpd.conf

 

파일 맨 밑줄에 다음의 Include 구문 추가.  VirtualHost 설정 파일을 따로 분리합니다.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

추가

스크린샷 2015-08-04 오전 12.34.19

 

extra 폴더 생성 및 그 하위에 httpd-vhosts.conf 파일 생성

스크린샷 2015-08-04 오전 12.35.02

 

httpd-vhosts.conf
<VirtualHost *:80>
  DocumentRoot "/home/laelbe/www"
  ServerName laelbe.com
  ServerAlias www.laelbe.com

  <Directory /home/laelbe/www/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all

    require all granted
  </Directory>

</VirtualHost>

 

호스트를 추가할 경우 위의 httpd-vhosts.conf 파일 하단에 추가하시면 됩니다.


<VirtualHost *:80>
  DocumentRoot "/home/laelbe/www"
  ServerName laelbe.com
  ServerAlias www.laelbe.com

  <Directory /home/laelbe/www/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all

    require all granted
  </Directory>

</VirtualHost>

<VirtualHost *:80>
  DocumentRoot "/home/test1/www"
  ServerName test1.laelbe.com

  <Directory /home/test1/www/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all

    require all granted
  </Directory>

</VirtualHost>

아파치 설정파일 구문 및 동작검사

오타나 잘못된 설정구문이 있는지 미리 확인해 본다.

설정파일을 변경했으면 반드시 이 명령어를 통해 문법을 검사하도록 하자.

#service httpd configtest

 

아파치 새로고침 (새로운 virtualhost 추가나 삭제시에)

기존 연결된 사용자는 그대로 두고 새로운 접속자부터 새로운 설정이 적용되게 한다.

서비스가 운영중인 상황에서는 되도록 restart 대신 reload 를 사용하도록 하자.

#service httpd reload

 

- reload 를 할지 restart 를 할지엔지니어의 판단에 맡긴다. 몇가지 크리티컬한 상황은 다음과 같다.

1. 대용량 파일의 다운로드 중 restart 되면 -> 다운로드가 중단됨. 파일이 깨짐.

2. 글쓰기, 내용 작성 후 쓰기 버튼 클릭 / 글 첨부파일 업로드 중 restart 되면 -> 작성된 내용이 날아가게 됨.

3. 동작이 긴 PHP 파일 실행중 restart 되면 -> 중간 상태에서 끊어짐.

중단 없이 restart 하는 방법도 있는데, 난이도가 많이 올라가므로 따로 다루지는 않는다.

 

아파치 재시작 (새로운 확장모듈의 추가, 포트변경 등)

모든 연결을 강제 종료하고 서비스를 stop 한 후에 다시 start 하는 동작이다. restart = stop & start

주의 : 위의 configtest 에서 실패한 상태에서 restart를 하면 httpd 가 stop 된 후에 start 되지 않는다. 즉 서비스 중단 상태가 된다.

#service httpd restart

 

권한 설정 (/home/ 바로 하위레벨의 폴더의 권한을 701로 설정)
#chmod 701 /home/*

 

부팅시 자동실행
#chkconfig httpd on
#chkconfig mariadb on
확인하기
#systemctl list-unit-files | grep httpd
#systemctl list-unit-files | grep mariadb
스크린샷 2015-08-04 오전 12.52.31

 

14) 리눅스 보안강화 모듈 해제하기

CentOS는 SELinux 라고 보안강화 모듈이 기본으로 설치 및 활성화 되어 있다.

이것이 당신의 웹 소프트웨어 업로드 및 파일 쓰기 기능을 막을 것이다.

쓸말은 많은데 그냥 끄도록 하자. 방화벽만 잘 설정하고 유지보수가 잘되는 좋은 웹소프트웨어를 사용한다면 보안에 큰 무리는 없을 것이다.

# setenforce 0
# vi /etc/sysconfig/selinux

파일 중간의 SELINUX=enforcing 을 SELINUX=disabled 로 변경 후 저장

 

--

Apache 와 PHP 와 MySQL 을 모두 사용하는 phpmyadmin 을 다운받아서 설치하신 후 로그인하면 됩니다.

phpmyadmin 은 전세계적으로 가장많이 쓰이는 데이터베이스 관리 오픈소스 프로그램이며

https://www.phpmyadmin.net/ 에서 다운받을 수 있습니다. 압축풀고 서버에 업로드 한 후 접속해보시면 됩니다.

 

phpmyadmin 로그인이 된다면 정상적으로 서비스 할 수 있는 상태입니다.

스크린샷 2015-08-04 오전 1.00.03

15 Comments

  1. 8)에서 80번 포트 열어준 뒤 firewall-cmd –reload 가 빠진 것 같습니다 🙂

    1. 앗 내용확인 감사합니다. 🙂

  2. 윈도우 서버로 사무실 서버 운영하다가 리눅스 서버로 변경하게 되었는데 항상 여기서 많은 정도 얻어가고 있습니다. 항상 좋은 정보 감사드립니다 🙂

    궁금한 점이 있는데,
    # firewall-cmd –zone=public –add-service=http –permanent
    # firewall-cmd –zone=public –add-port=80/tcp –permanent

    두 개의 명령어가 차이점이 있나요?

    1. 제가 봤을 땐 동일한 구분 같네요.
      별칭(http) 보다는 숫자(80/tcp)로 설정하시는 것이 덜 헷갈리실 거에요. 숫자로 설정하세요.
      참고로 DNS를 제외한 모든 서비스는 TCP 입니다.
      http(80/tcp), https(443/tcp), ftp(21/tcp), ssh(22/tcp)

  3. http 서비를 허용하면 해당하는 서비스의 기본 설정 값을 불러오게 되더군요.
    80/tcp로 하셔도 무방하지만, http 오픈 소스 로드 밸런서를 쓴다면 http옵션으로 등재하시는게 좋습니다.

    약간 생각해본다면… Zone도 약간 수정해주면 더 좋겠지만, 기본적으로 테스트 환경 구성이면
    글 작성자 분이 좋게 작성해주신거같아서 지나가다가 한번 더 참고하고 갑니다.

    SElinux 부분은 permissive로 두고 문제가 되는 부분은 semanage로 설정하는 편이
    보안에는 훨씬 도움될 것으로 사료됩니다.

    1. 의견 감사합니다. 그런데 해당내용을 글에 담기에는 난이도가 있다고 생각하여 본문에 반영하지는 못할것 같습니다.

  4. firewall-cmd –reload 직접 사용해보니 이건 안되더라구요
    firewall-cmd –-reload 하나더 추가해 주셔야 잘됩니다.

    1. 알려주셔서 감사합니다. 수정하였습니다.

  5. 작성자님 글 잘 보았습니다.
    똑같이 하고있는데, 13번에 파일디렉토리를 눈으로 확인하는 방법을 알고싶습니다.
    특정 프로그램을 사용해야 confirm extra등의 파일들이 눈으로 확인가능한가요?
    도와주세요ㅠㅠ

    1. editplus로 해결했습니다. 감사합니다.

  6. 하나하나 쭉~ 따라가면서 입력했는데 잘 되네요.
    감사합니다.
    Oracle Client 설치 및 동작 설정도 부탁하면 안될까요?

  7. 저기 extra 폴더가 확인이 안되고 그쪽부터 잘되지 않아요…

    1. 사진처럼 만들어주셔야되요.
      본문을 보강해서 다시 적어두었습니다.

  8. 현재 아파치인데 nginx로 변경하려면 어떠한 과정을 거쳐야 하는지 강좌 부탁드려요.

    1. nginx 설치 강좌가 이미 있습니다. https://blog.lael.be/post/2600
      설치하시고 소스 이전하시면 됩니다.

Leave a Comment

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*