기술 가이드

CentOS 7에 Restyaboard 설치 및 구성

7 min read 서버 설치 업데이트됨 16 Oct 2025
CentOS 7에 Restyaboard 설치 및 구성
CentOS 7에 Restyaboard 설치 및 구성

개요

Restyaboard는 무료 오픈소스 칸반 보드 애플리케이션으로, Trello의 셀프 호스팅 대안입니다. PHP로 작성되었으며 데이터 저장소로 PostgreSQL을 사용합니다. 이 문서는 CentOS 7 환경에서 Restyaboard를 설치하고 운영하기 위한 권장 구성과 실무 팁, 문제 해결 방안을 포함합니다.

중요 정의: PHP-FPM — PHP를 FastCGI 방식으로 실행해 Nginx와 연동하는 서비스입니다.

사전 준비

  • 최소 CentOS 7 서버(루트 권한)
  • 네트워크 및 방화벽에서 포트 80(또는 443)이 허용되어야 함
  • 도메인(예: board.yourdomain.com)을 설정해 두면 편리함

중요: 이 가이드에서는 시스템 패키지와 레포지토리 추가, PHP-FPM을 소켓 방식으로 구성, PostgreSQL 9.6 설치, Restyaboard 파일 설치 및 Nginx 서버 블록 구성을 다룹니다.

단계 요약

  1. Nginx 설치
  2. PHP 7.0 + PHP-FPM 및 mbstring 등 모듈 설치/설정
  3. PostgreSQL 9.6 설치 및 데이터베이스 준비
  4. Restyaboard 다운로드 및 초기 데이터 로드
  5. Nginx 서버 블록과 권한 설정, 크론 작업 추가
  6. SELinux 처리 및 서비스 재시작

1단계 — Nginx 설치

설치 전 시스템 패키지를 최신 상태로 업데이트합니다.

yum -y update

CentOS 기본 YUM 리포지토리에는 nginx가 없으므로 EPEL을 추가해야 합니다.

yum -y install epel-release

이후 nginx를 설치합니다.

yum -y install nginx

설치가 완료되면 nginx를 시작하고 부팅 시 자동 시작하도록 설정합니다.

systemctl start nginx systemctl enable nginx

이제 nginx가 서버에서 실행 중이어야 합니다.

참고: 방화벽(firewalld)을 사용 중이라면 80/443 포트를 허용해야 합니다.


2단계 — PHP-FPM 및 mbstring 설치 및 구성

Restyaboard는 PHP 7.0을 지원하므로 PHP 7.0을 설치합니다. CentOS 기본 레포지토리에 PHP 7.0이 없으므로 Webtatic 레포지토리를 추가합니다.

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

필요한 PHP 패키지와 PHP-FPM, 확장 모듈을 설치합니다.

yum -y install php70w php70w-fpm php70w-devel php70w-cli php70w-curl php70w-pgsql php70w-mbstring php70w-ldap php70w-pear php70w-imap php70w-xml php70w-pecl-imagick ImageMagick

설치 후 기본 PHP-FPM 설정은 Apache를 위한 사용자로 설정되어 있으므로 nginx와 함께 동작하도록 사용자, 그룹, 리스닝 소켓을 변경해야 합니다. 편집할 파일: /etc/php-fpm.d/www.conf

(편의를 위해 nano 사용 예시를 포함합니다. nano가 없으면 yum -y install nano로 설치하세요.)

nano /etc/php-fpm.d/www.conf

파일에서 다음 줄을 찾아 apache를 nginx로 변경합니다.

; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

리스닝을 포트 대신 유닉스 소켓으로 변경합니다.

listen = 127.0.0.1:9000

다음과 같이 변경합니다.

listen = /run/php-fpm/php7.0-fpm.sock

다음 주석 처리된 listen 관련 항목을 찾아 소유권과 권한을 설정합니다.

;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660

다음 값으로 변경하세요.

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

추가로 php.ini에서 타임존을 설정하고 cgi.fix_pathinfo를 비활성화합니다.

nano /etc/php.ini

예시(타임존은 필요에 따라 변경):

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Kolkata

그리고 아래 항목을 찾아 주석 해제 및 값 변경:

cgi.fix_pathinfo=0

GeoIP 확장을 설치하고 활성화합니다.

yum -y install GeoIP-devel

/etc/php.ini 맨 끝에 다음 한 줄을 추가합니다.

extension=geoip.so

PHP-FPM을 시작하고 부팅 시 자동 시작하도록 설정합니다.

systemctl start php-fpm systemctl enable php-fpm

변경 사항 적용을 위해 nginx를 재시작합니다.

systemctl restart nginx

팁: php-fpm이 예상대로 소켓을 생성하지 않으면 /run/php-fpm/ 디렉터리의 소유권과 권한, php-fpm 로그(/var/log/php-fpm/)를 확인하세요.


3단계 — PostgreSQL 설치 및 데이터베이스 구성

Restyaboard는 PostgreSQL을 데이터베이스로 사용합니다. CentOS 기본 리포지토리에 원하는 버전이 없으므로 PostgreSQL 공식 레포지토리를 추가합니다.

rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

PostgreSQL 설치:

yum -y install postgresql96-server postgresql96-contrib

데이터베이스 초기화:

/usr/pgsql-9.6/bin/postgresql96-setup initdb

PostgreSQL 인증 설정을 수정해 MD5 기반 인증을 사용하도록 합니다. 편집 파일: /var/lib/pgsql/9.6/data/pg_hba.conf

nano /var/lib/pgsql/9.6/data/pg_hba.conf

원본(예시)에서 peer/ident를 변경:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

변경 후:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

PostgreSQL 시작 및 자동 시작 설정:

systemctl start postgresql-9.6 systemctl enable postgresql-9.6

postgres 시스템 사용자 비밀번호 변경:

passwd postgres

Postgres 계정으로 전환:

su - postgres

새 데이터베이스 사용자 생성:

createuser rb_user

psql 쉘로 진입:

psql

새로 생성한 사용자에 대해 암호 설정(예시):

ALTER USER rb_user WITH ENCRYPTED password 'StrongPassword';

(세미콜론 필요)

데이터베이스 생성:

CREATE DATABASE rb_data OWNER rb_user ENCODING 'UTF8' TEMPLATE template0;

psql에서 빠져나옵니다:

\q

그리고 postgres 계정에서 로그아웃하여 root로 복귀합니다.

보안 팁: 실제 운영 환경에서는 ‘StrongPassword’를 강력한 랜덤 문자열로 교체하고 비밀번호 관리 정책(주기적 변경, 별도 보관)을 적용하세요.


4단계 — Restyaboard 다운로드

의존성 설치가 완료되었다면 Restyaboard 배포판을 다운로드합니다.

cd /usr/share/nginx/html wget https://github.com/RestyaPlatform/board/releases/download/v0.4.2/board-v0.4.2.zip

최신 릴리스 링크는 Restyaboard GitHub 릴리스 페이지에서 확인하세요.

압축 해제(만약 unzip이 없다면 yum -y install unzip):

unzip board-v0.4.2.zip -d board

초기 SQL 데이터 가져오기:

psql -d rb_data -f "/usr/share/nginx/html/board/sql/restyaboard_with_empty_data.sql" -U rb_user

Restyaboard 구성 파일을 편집하여 데이터베이스 인증 정보를 업데이트합니다.

nano /usr/share/nginx/html/board/server/php/config.inc.php

원본 예시:

define('R_DB_HOST', 'localhost');
define('R_DB_USER', 'restya');
define('R_DB_PASSWORD', 'hjVl2!rGd');
define('R_DB_NAME', 'restyaboard');
define('R_DB_PORT', 5432);

환경에 맞게 수정:

define('R_DB_HOST', 'localhost');
define('R_DB_USER', 'rb_user');
define('R_DB_PASSWORD', 'StrongPassword');
define('R_DB_NAME', 'rb_data');
define('R_DB_PORT', 5432);

보안 팁: config.inc.php 파일의 접근 권한을 최소화하고, 저장소에 노출되지 않도록 주의하세요.


5단계 — Nginx 서버 블록 구성

Restyaboard 패키지에는 기본 nginx 서버 블록 파일이 포함되어 있습니다. 이를 nginx 설정 디렉터리로 복사합니다.

cp /usr/share/nginx/html/board/restyaboard.conf /etc/nginx/conf.d

파일을 열어 도메인과 루트 경로, PHP-FPM 소켓 경로 등을 수정합니다.

nano /etc/nginx/conf.d/restyaboard.conf

설정 예시에서 server_name과 root를 운영 도메인과 경로로 변경합니다.

원본 예시:

server {
        listen 80 default_server;
        server_name _;

변경:

server {
        listen 80;
        server_name board.yourdomain.com;

또한 root 경로를 Restyaboard 설치 폴더로 맞춥니다.

원본 예시들:

 root /usr/share/nginx/html;
 location / {
                root /usr/share/nginx/html/client;
        }
root /usr/share/nginx/html/client;

변경 후:

root /usr/share/nginx/html/board;
 location / {
                root /usr/share/nginx/html/board/client;
        }
root /usr/share/nginx/html/board/client

fastcgi_pass 항목에서 소켓 경로를 올바르게 지정합니다.

원본:

fastcgi_pass    unix:/run/php/php7.0-fpm.sock;

변경:

fastcgi_pass    unix:/run/php-fpm/php7.0-fpm.sock;

구성 파일을 저장한 뒤 파일 소유권과 권한을 설정합니다.

chown -R nginx:nginx /usr/share/nginx/html/board/
chmod -R go+w "/usr/share/nginx/html/board/media"
chmod -R go+w "/usr/share/nginx/html/board/client/img"
chmod -R go+w "/usr/share/nginx/html/board/tmp/cache"
chmod -R 0755 /usr/share/nginx/html/board/server/php/shell/*.sh

크론 작업을 추가해 예약 작업(알림, IMAP 폴링 등)을 활성화합니다.

echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/instant_email_notification.sh" >> /var/spool/cron/root
echo "0 * * * * /usr/share/nginx/html/board/server/php/shell/periodic_email_notification.sh" >> /var/spool/cron/root
echo "*/30 * * * * /usr/share/nginx/html/board/server/php/shell/imap.sh" >> /var/spool/cron/root
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/webhook.sh" >> /var/spool/cron/root
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/card_due_notification.sh" >> /var/spool/cron/root

주의: 운영 환경에서는 cron에 직접 비밀번호나 민감정보가 노출되지 않도록 스크립트 내부 보안을 검토하세요.


6단계 — SELinux 처리 및 서비스 재시작

기본적으로 제공된 프록시 구성은 SELinux 정책과 충돌할 수 있으므로 이 가이드에서는 SELinux를 비활성화하는 방법을 안내합니다. 먼저 임시로 끕니다(재부팅 없이 적용).

setenforce 0

영구 비활성화를 원하면 /etc/selinux/config 파일에서 SELINUX 값을 수정합니다.

nano /etc/selinux/config

변경 전:

SELINUX=enforcing

변경 후:

SELINUX=disabled

변경 후 nginx를 재시작합니다.

systemctl restart nginx

접속 테스트:

http://board.yourdomain.com

로그인: 기본 사용자 admin, 기본 비밀번호 restya (설치 후 즉시 관리자 비밀번호를 변경하세요).

이미지: 설치 후 보이는 로그인 화면

Restyaboard 로그인 화면

로그인 후 대시보드 화면

Restyaboard 대시보드

새 보드 만들기(왼쪽 상단 화살표 → Add Board or Organization)

새 보드 생성 화면

템플릿 선택 화면

보드 템플릿 선택

보드 생성 후 예시 화면

새 보드 예시

관리자 패널 접근(화면 오른쪽 하단의 Admin → 상단 바의 Settings)

관리자 패널 접근


운영 전 권장 검증 및 보안 사항

  • 관리자 비밀번호 즉시 변경 및 강력한 비밀번호 정책 적용
  • config.inc.php 접근 권한 최소화(600 또는 소유자 nginx로 제한)
  • HTTPS 설정: Let’s Encrypt 또는 상용 인증서로 TLS 적용
  • 정기 백업: PostgreSQL 덤프 스케줄과 파일 시스템(미디어) 백업
  • 로그 모니터링: nginx, php-fpm, postgres 로그 패스 및 회전 정책
  • 방화벽: 필요한 포트만 허용(80/443 외 공개 포트 최소화)
  • SELinux 비활성화 대신 정책 허용이 가능하면 정책을 조정해 활성화 유지 권장

보안 하드닝 제안(우선순위):

  1. TLS(HTTPS) 적용(긴급)
  2. 관리자 계정 2단계 인증 도입(가능한 경우)
  3. 정기 보안 업데이트 적용

트러블슈팅 체크리스트

  • nginx 502 혹은 PHP 오류 → php-fpm이 실행 중인지, 소켓 경로가 설정 파일과 일치하는지 확인
  • PostgreSQL 인증 실패 → pg_hba.conf와 config.inc.php의 DB 사용자/비밀번호 일치 여부 확인
  • 소스 파일 권한 문제(파일 업로드/이미지 표시 안됨) → /usr/share/nginx/html/board 디렉터리의 소유권과 쓰기 권한 점검
  • Cron이 동작하지 않음 → /var/spool/cron/root에 크론 엔트리 존재 여부, 쉘 스크립트 실행 권한 확인

간단한 진단 명령:

  • 시스템 서비스 상태 확인
systemctl status nginx
systemctl status php-fpm
systemctl status postgresql-9.6
  • PostgreSQL 접속 테스트
psql -U rb_user -d rb_data -h localhost
  • php-fpm 소켓 존재 확인
ls -l /run/php-fpm/php7.0-fpm.sock

롤백 및 백업 권장 절차 (간단 SOP)

  1. 설치 전 전체 서버 스냅샷(가능한 경우) 또는 최소한 /usr/share/nginx/html와 Postgres 데이터베이스 덤프 생성
  2. 데이터베이스 백업: pg_dump
pg_dump -U rb_user -F c -b -v -f "/root/rb_data_backup_$(date +%F).dump" rb_data
  1. 파일 시스템(미디어, 첨부) 백업
tar czf /root/board_media_backup_$(date +%F).tar.gz /usr/share/nginx/html/board/media
  1. 문제가 발생하면 최신 백업으로 복원

역할별 체크리스트

  • 시스템 관리자
    • nginx, php-fpm, postgres 설치 및 서비스 관리
    • TLS 설정 및 방화벽 구성
    • 시스템 보안 및 업데이트
  • 데이터베이스 관리자
    • 사용자 및 권한 관리
    • 정기 백업 및 복구 테스트
    • 성능 튜닝(인덱스, 메모리 설정)
  • 애플리케이션 관리자(팀 리더)
    • 관리자 계정 관리 및 권한 분배
    • 템플릿/보드 관리 정책 수립
  • 개발자
    • Restyaboard 코어 또는 플러그인 수정 시 테스트 환경 구성
    • 배포 자동화(스크립트) 작성

테스트 케이스 / 수락 기준

  • 웹 UI에 접속하여 로그인 가능해야 함(기본 admin → 비밀번호 변경 확인)
  • 새 보드 생성 및 카드 추가/이동이 정상 동작해야 함
  • 첨부 파일 업로드 및 다운로드가 성공해야 함
  • 이메일 알림(instant 및 periodic) 동작 확인: cron 스크립트 실행 결과 확인
  • DB 연결이 안정적이어야 하며, 트랜잭션 오류가 없어야 함

수락 기준 예시:

  • 3명 이상의 사용자로 동시 카드 이동 테스트 시 응답 지연이 2초 이하
  • 백업으로부터 복원 완료 후 데이터 무결성 확인

자주 묻는 문제(간단 FAQ)

Q: PHP-FPM이 소켓을 생성하지 않습니다. 무엇을 확인해야 하나요? A: php-fpm 설정의 listen 경로와 nginx 설정의 fastcgi_pass가 일치하는지, php-fpm 서비스가 실행 중인지, /run/php-fpm 디렉터리의 권한을 확인하세요.

Q: 이메일 알림이 작동하지 않습니다. A: 크론 작업이 등록되어 있는지, 해당 쉘 스크립트가 실행 권한을 가지는지, 시스템 MTA(메일 전송 에이전트) 설정 여부를 확인하세요.


마이그레이션 및 호환성 팁

  • 다른 데이터베이스에서 마이그레이션 시에는 Restyaboard SQL 스키마에 맞춰 변환 스크립트를 작성하세요.
  • PHP 버전이나 패키지 레포지토리가 오래된 시스템에서는 보안 패치를 적용하거나 컨테이너화를 고려하세요.
  • 운영 환경에서 PostgreSQL 버전 업그레이드는 데이터 덤프 후 재로딩 방식으로 안전하게 수행하는 것을 권장합니다.

요약

이 가이드는 CentOS 7 서버에 Restyaboard를 설치하고 운영하는 데 필요한 전체 절차를 제공합니다. 핵심 단계는 nginx 설치, PHP-FPM 구성, PostgreSQL 설정, Restyaboard 파일 설치 및 구성, Nginx 서버 블록/권한 설정, SELinux 처리 및 서비스 검증입니다. 설치 후에는 TLS 적용, 관리자 계정 보안, 정기 백업 및 로그 모니터링을 통해 안정적으로 운영하세요.

중요: 설치 직후 기본 관리자 계정 정보를 변경하고, 운영 환경에서는 SELinux를 비활성화하기보다 정책을 조정해 활성화 상태로 두는 것을 우선 검토하세요.

추가 리소스: Restyaboard GitHub(릴리스 페이지), PostgreSQL 공식 문서, PHP-FPM/Nginx 관련 운영 가이드

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Android에서 Facebook 동영상 프로필 사진 빠르게 추가하는 법
소셜 미디어

Android에서 Facebook 동영상 프로필 사진 빠르게 추가하는 법

WiKID 인증 도메인 생성 및 구성 가이드
인증

WiKID 인증 도메인 생성 및 구성 가이드

브라우저에서 ODT(LibreOffice) 파일 열기 및 편집 가이드
생산성

브라우저에서 ODT(LibreOffice) 파일 열기 및 편집 가이드

Start11로 Windows 11을 ChromeOS 스타일로 바꾸는 법
튜토리얼

Start11로 Windows 11을 ChromeOS 스타일로 바꾸는 법

CentOS 5.4에서 MySQL SSL 복제 설정 가이드
데이터베이스

CentOS 5.4에서 MySQL SSL 복제 설정 가이드

Linux에서 AppImage 여는 방법
리눅스

Linux에서 AppImage 여는 방법