그누보드/영카트 설치를 위한 서버 셋팅 방법

이 글은 클라우드/가상서버/서버호스팅 셋팅 안내입니다.

그누보드/영카트 설치를 위한 서버 요구조건이 있습니다.(5.5.8.x기준)

PHP 5.2.17 이상, MySQL 5.0 이상 or MySQL 5.0 이상의 기능을 만족하는 MariaDB, GD Library 2.0 이상, iconv

openssl, soap, cURL, mcrypt(PG를 위해)

리눅스 배포판 ubuntu20.04.x기반에서 안내합니다.


일반 사용자 추가 및 방화벽 활성작업

서버를 처음 설정할 때 초기 설정의 일부로 몇 가지 중요한 초기 단계를 수행해야 합니다.

이러한 단계는 서버의 보안과 유용성을 높이고 후속 작업을 위한 견고한 기반을 제공합니다.

루트(root)사용자로 아이피(또는 도메인) 주소(구입 또는 리눅스가 설치된 서버)에 접속합니다.

$ ssh root@your_server_ip
    

root사용자는 절대 관리자이기 때문에 절대 권한을 가지고 있고, 아주 작은 실수가 발생해도 대형 사고가 날 수 있습니다.

그래서 일반 사용자를 추가하여 평상시 작업을 진행하는 것이 보편적입니다.

$ adduser ubuntu(여기서 계정명 ubuntu는 여러분이 원하는 이름으로 교체하면 됩니다.)
    

사용자 암호부터 시작하여 몇 가지 질문을 받게 되는데 암호만 입력하고 나머지 질문은 건너뛰면 됩니다.

일반 사용자가 추가되면 해당 계정에 관리 권한을 부여합니다.

일반사용자 계정에 관리 권한을 부여하면 명령어 앞에 sudo라는 단어를 넣어 관리행위를 할 수 있습니다. 추후 대부분의 서버 작업은 이 계정을 이용합니다.

$ usermod -aG sudo ubuntu
    

이제, 리눅스에서 제공하는 기초 방화벽 설정을 진행해 보겠습니다.

기존 설치된 목록을 확인해 볼 수 있습니다.

$ ufw app list
    
Output
Available applications:
  OpenSSH
    

다음에 다시 로그인할 수 있도록 방화벽이 SSH 연결을 허용하는지 확인해야 합니다. 다음을 입력하여 이러한 연결을 허용할 수 있습니다.

$ ufw allow OpenSSH
$ ufw enable
    

'y'를 입력하여 활성화 시킵니다.

아래 명령으로 현재 상태를 확인할 수 있습니다.

$ ufw status
    
Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
    

현재 방화벽이 SSH를 제외한 모든 연결을 차단하고 있으므로 추가 서비스를 설치 및 구성할 경우 트래픽 유입을 허용하도록 방화벽 설정을 조정해야 합니다.

이제 root계정을 로그아웃하고 새로 추가한 계정(ubuntu)으로 로그인하여 작업을 계속 진행합니다.

LEMP 설치

그누보드/영카트 설치를 위해서는 웹서버와 PHP, MySQL이 설치되어 있어야 합니다.

대표적인 웹서버로는 Apache와 Nginx가 있습니다.

여기서는 LEMP(Linux + Nginx + MySQL + PHP)스택을 진행하겠습니다.

먼저, apt 패키지 색인을 업데이트합니다.

$ sudo apt update
  

Nginx를 설치합니다.

$ sudo apt install nginx
  

ufw 방화벽에서 Nginx에 대한 연결을 허용해야 합니다.

$ sudo ufw app list
  
Output
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  

나중에 SSL를 지원할 예정이므로 'Nginx Full'을 활성화합니다.

$ sudo ufw allow 'Nginx Full'
  

다음을 실행하여 변경 사항을 확인할 수 있습니다.

$ sudo ufw status
  
Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)
  

웹 브라우저에 받은 주소를 입력하면 Nginx의 기본 접속 페이지로 이동합니다.

http://server_domain 또는 http://IP
  
Welcome to Nginx Server!

이 페이지가 표시되면 Nginx를 성공적으로 설치하고 웹 서버에 대한 HTTP 트래픽을 활성화했음을 의미합니다.

MySQL를 설치합니다.

$ sudo apt install mysql-server
  

설치가 완료되면 MySQL과 함께 사전 설치된 보안 스크립트를 실행하는 것이 좋습니다.

이 스크립트는 안전하지 않은 일부 기본 설정을 제거하고 데이터베이스 시스템에 대한 액세스를 잠급니다.

$ sudo mysql_secure_installation
  

설치과정중에 mysql root암호는 잘 적어두고 기억해야 합니다.

PHP를 설치합니다.

$ sudo apt install php-fpm php-mysql
  

이제 LEMP 모두 설치가 되었습니다.

vsftp 설치

계정으로 접속하여 터미널에서 직접 홈페이지 작업을 할 수도 있지만 대부분은 로컬에서 편집기를 이용하여 작업을 하고 ftp로 작업한 내용을 올립니다.

이를 위해 vsftp를 설치합니다.

$ sudo apt install vsftpd
  

vi나 pico같은 편집기를 이용하여 vsftpd.conf 파일을 수정합니다.

$ sudo vi /etc/vsftpd.conf
  
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=002
file_open_mode=0777
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=10100
allow_writeable_chroot=YES
  

아래 파일을 생성하고 첫 줄에 root를 추가해 줍니다.

$ sudo vi /etc/vsftpd.chroot_list // 계정 root추가
  

vsftpd의 설정을 적용하고 재부팅시 시작하도록 설정

$ sudo systemctl restart vsftpd && sudo systemctl enable vsftpd
  

ufw방화벽에 ftp포트를 열어줍니다.

$ sudo ufw allow from any to any port 20,21,10000:10100 proto tcp
  

nginx virtual 설정

다음 명령을 실행하여 nginx 웹서버에 사이트를 설정할 수 있습니다.

$ sudo vi /etc/nginx/sites-available/default
  
server {
  // 사이트(도메인) 설정
  listen 80;
  server_name your_domain www.your_domain;
  root /var/www/your_domain;

  index index.html index.htm index.php;

  location / {
      try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~ /\.ht {
      deny all;
  }

}
  

위에서 새 사용자를 추가하고 사용자 계정 홈을 기준으로 설정해 주면 여러 사이트를 추가하기가 쉽습니다.

사용자 계정 중심으로 설정하면 ftp접속 위치도 자동으로 일치됩니다.

server {
  // 계정 디렉토리 기준으로 사이트(도메인) 설정
  listen 80;
  server_name your_domain www.your_domain;
  root /home/사용자계정/www;

  index index.html index.htm index.php;

  location / {
      try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~ /\.ht {
      deny all;
  }

}
  

설정이 끝나면 설정에 오류가 없는지 확인하고 웹서버를 다시 시작해 줍니다.

$ sudo nginx -t
$ sudo service nginx reload
  

soap 모듈 설치

KCP 결제대행사를 이용하려면 이 모듈이 필요합니다.

원하는 모듈이 정상적으로 설치되어 있는지 확인하려면 편집기로 phpinfo.php파일을 만들고 <?php phpinfo();?>을 작성후 저장한 후 웹브라우저로 해당 파일을 불러오면 됩니다.

특정 모듈을 확인할 때 키보드로 'CTRL + F'를 입력후 뜨는 팝업 창에 찾고자 하는 모듈명을 입력후 클릭하면 찾아줍니다.

이제 soap모듈을 설치합니다.

업데이트 명령을 실행하여 패키지 리포지토리를 업데이트하고 최신 패키지 정보를 가져옵니다.

$ sudo apt-get update -y
  

-y 플래그와 함께 설치 명령을 실행하여 패키지 및 종속성을 설치합니다.

$ sudo apt-get install -y php-soap
  

soap 모듈이 올바르게 설치되었는지 확인하십시오. 확인은 위에서 만든 phpinfo.php을 브라우저로 읽어서 확인합니다.

mcrypt 모듈 설치

KG이니시스 결제대행사 및 KAKAOPAY를 이용하려면 이 모듈이 필요합니다.

Mcrypt를 설치하려면 일부 개발자 종속성 패키지와 함께 소스에서 패키지를 빌드하는 데 필요한 일부 도구를 설치해야 합니다.

$ sudo apt install gcc make autoconf libc-dev pkg-config libmcrypt-dev php-pear php-dev
  

Pear와 Pecl이 패키지를 가져올 수 있는 채널을 업데이트합니다.

$ sudo pecl channel-update pecl.php.net
$ sudo pecl update-channels
  

Pecl 명령을 사용하여 시스템에 php-mcrypt 확장을 다운로드하고 설치합니다.

$ sudo pecl install mcrypt
  

php.ini 파일을 업데이트하여 PHP를 구성합니다.

$ sudo bash -c "echo extension=/usr/lib/php/20190902/mcrypt.so > /etc/php/7.4/cli/conf.d/mcrypt.ini"
  

아래 명령으로 정상 설치되었는지 확인합니다.

$ php -i | grep "mcrypt"
  
/etc/php/7.4/cli/conf.d/mcrypt.ini
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value
  

정상 설치되었다면 phpinfo.php파일을 브라우저로 읽어서 확인이 됩니다.

SSL 설치

이제는 웹사이트에 SSL적용이 필수가 되어가고 있습니다. 다행히 무료로 사용할 수 있는 서비스가 있습니다.

https://certbot.eff.org/ 에 접속하여 웹서버와 리눅스 배포버전을 선택하면 SSL 설치과정을 쉽게 보여줍니다.

Certbot Instructions Certbot!

도메인별로 개별 설정하는 방법과 와일드카드로 설정하는 방법을 제공합니다.

최신 버전의 snapd가 있는지 확인합니다.

$ sudo snap install core; sudo snap refresh core
  

Certbot을 설치합니다.

$ sudo snap install --classic certbot
  

certbot 명령을 실행할 수 있는지 확인합니다.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
  

아래 명령을 실행하여 원하는 도메인의 인증서를 선택하고 nginx구성을 https액세스가 되도록 자동으로 편집할 수 있게 합니다.

$ sudo certbot --nginx
  

Certbot에서 제공되는 인증서는 무료로 제공되지만 3개월마다 갱신해야 합니다.

$ sudo certbot renew --dry-run
  

갱신명령을 크론에 추가하여 자동으로 갱신되도록 하면 편리합니다.