서버 설치 · 11 min read · Oct 20, 2025
Rocky Linux 9에서 Nginx로 FossBilling 설치하는 방법

FOSSBilling은 클라이언트와 판매자를 위해 쉽게 설계된 무료 오픈 소스 청구 시스템입니다. FOSSBilling은 BoxBilling의 포크입니다. 직관적인 인터페이스를 통해 클라이언트에게 뛰어난 경험을 제공하며 여러 결제 게이트웨이를 지원합니다. FOSSBilling은 소규모에서 중규모, 심지어 대규모 비즈니스에 적합합니다. FOSSBilling은 청구서 발행, 수입 결제 및 클라이언트 관리 및 커뮤니케이션을 자동화하는 데 도움을 줄 수 있습니다.
이 가이드에서는 Rocky Linux 9 서버에 FOSSBilling을 설치할 것입니다. 이 단계에서는 Nginx 웹 서버, MariaDB 데이터베이스 서버, PHP-FPM 8.2 및 SSL/TSL 인증서를 생성하기 위한 Certbot 도구의 설치가 포함됩니다. 마지막에는 일상적인 비즈니스에 사용할 수 있는 청구 및 클라이언트 관리 솔루션을 갖게 됩니다.
필수 조건
이 가이드를 완료하려면 다음 요구 사항이 필요합니다:
- Rocky Linux 9가 설치된 서버 - 이 예제에서는 호스트 이름이 ‘fossbilling-rocky‘인 Rocky Linux를 사용합니다.
- sudo/root 관리자 권한이 있는 비루트 사용자.
- permissive 모드로 실행 중인 SELinux.
- 서버 IP 주소를 가리키는 도메인 이름 - 이 예제에서는 서브 도메인 ‘fossbilling.howtoforge.local‘을 사용합니다.
이 요구 사항이 준비되면 FOSSBilling 설치를 완료할 수 있습니다.
Nginx 웹 서버 설치
FOSSBilling은 Nginx 및 Lighttpd 웹 서버에서 실행될 수 있습니다. 이 가이드에서는 웹 서버로 Nginx를 사용할 것입니다. 이 단계에서는 공식 Rocky Linux AppStream 리포지토리에서 Nginx를 설치합니다.
시작하려면 EPEL 리포지토리가 시스템에 추가되었는지 확인하십시오. 또는 아래의 dnf 명령어를 통해 설치할 수 있습니다.
sudo dnf install epel-release다음으로 아래의 dnf 명령어를 사용하여 Nginx 웹 서버를 설치합니다. 프롬프트가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 진행합니다.
sudo dnf install nginx출력:

Nginx가 설치되면 아래의 systemctl 명령어를 실행하여 Nginx 서비스를 시작하고 활성화합니다. 이렇게 하면 기본 HTTP 포트 80에서 Nginx가 시작되고 시스템 시작 시 자동으로 실행되도록 설정됩니다.
sudo systemctl start nginx
sudo systemctl enable nginx이제 아래의 systemctl 명령어 유틸리티를 사용하여 Nginx 서비스 상태를 확인합니다. Nginx 서비스가 실행 중이며 활성화되었다는 출력을 받아야 합니다.
sudo systemctl status nginx출력:

Nginx 서비스가 이제 실행 중이며, firewalld에서 HTTP 및 HTTPS 프로토콜을 모두 열어야 합니다. 이를 위해 아래의 firewall-cmd 명령어를 실행할 수 있습니다.
sudo firewall-cmd --add-service={http,https} --permanentHTTP 및 HTTPS 프로토콜이 firewalld에 추가되면 아래의 명령어를 실행하여 firewalld를 다시 로드하고 변경 사항을 적용합니다. 그런 다음 firewalld에서 활성화된 서비스 목록을 확인합니다.
HTTP 및 HTTPS 프로토콜이 firewalld에 추가된 것을 확인할 수 있어야 합니다.
sudo firewall-cmd --reload
sudo firewall-cmd --list-all출력:

이로써 Nginx 웹 서버를 설치하고 firewalld를 구성하여 HTTP 및 HTTPS 프로토콜을 열었습니다. 다음 단계에서는 MariaDB 데이터베이스 서버 설치를 시작합니다.
MariaDB 서버 설치
FOSSBilling은 사용자 데이터를 저장하기 위해 MySQL/MariaDB를 사용합니다. MySQL 8 이상 또는 MariaDB 서버 10.x가 필요합니다. 이 단계에서는 공식 Rocky Linux 리포지토리에서 MariaDB 서버를 설치합니다. 이는 MariaDB 10.5이며 최신 버전의 FOSSBilling과 호환됩니다.
아래의 dnf 명령어를 사용하여 Rocky Linux 시스템에 MariaDB 데이터베이스 서버를 설치합니다. 프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 진행합니다.
sudo install mariadb-server출력:

MariaDB가 설치되면 아래의 systemctl 명령어 유틸리티를 실행하여 MariaDB 서비스를 시작하고 활성화합니다.
sudo systemctl start mariadb
sudo systemctl enable mariadb다음으로 아래의 systemctl 명령어를 실행하여 MariaDB 서비스를 확인하고 서비스가 실행 중인지 확인합니다. 출력 ‘active (running)‘은 MariaDB 서버가 실행 중임을 확인합니다. 출력 ‘loaded (../mariadb.service; enabled;)‘은 MariaDB 서비스가 활성화되어 있으며 시스템 시작 시 자동으로 실행될 것임을 확인합니다.
sudo systemctl status mariadb출력:

MariaDB 서버가 실행 중인 상태에서 ‘mariadb-secure-installation’ 명령어를 통해 MariaDB를 보안합니다. 여기에는 MariaDB의 루트 비밀번호 설정, MariaDB 루트 사용자에 대한 원격 로그인 비활성화 등이 포함됩니다.
아래의 ‘mariadb-secure-installation‘ 명령어를 실행하여 MariaDB 배포를 보안합니다.
sudo mariadb-secure-installation아래의 몇 가지 MariaDB 구성에 대해 질문을 받게 됩니다:
- 로컬 인증을 unix_socket으로 전환하시겠습니까? 아니오를 위해 n을 입력합니다.
- MariaDB 루트 비밀번호를 설정하시겠습니까? 예를 위해 y를 입력한 후 새로운 MariaDB 루트 비밀번호를 입력하고 반복합니다.
- 기본 익명 사용자를 제거하시겠습니까? 확인을 위해 y를 입력합니다.
- 루트 사용자의 원격 로그인을 비활성화하시겠습니까? 확인을 위해 y를 입력합니다.
- 기본 데이터베이스 테스트를 제거하시겠습니까? 확인을 위해 y를 입력합니다.
- 테이블 권한을 다시 로드하고 변경 사항을 적용하시겠습니까? 확인을 위해 y를 입력합니다.
MariaDB 서버가 설치되고 실행 중인 상태에서, 다음으로 FOSSBilling 설치에 사용할 새로운 MariaDB 데이터베이스와 사용자를 생성합니다.
데이터베이스 및 사용자 생성
이 단계에서는 FOSSBilling 설치에 사용할 새로운 MariaDB 데이터베이스와 사용자를 생성합니다.
아래의 ‘mariadb‘ 명령어를 실행하여 루트 사용자로 MariaDB에 로그인합니다. 비밀번호를 입력하라는 메시지가 표시되면 MariaDB 루트 비밀번호를 입력하고 ENTER를 누릅니다.
sudo mariadb -u root -pMariaDB 셸에 로그인한 후, 새로운 MariaDB 데이터베이스와 사용자를 생성하기 위해 다음 쿼리를 실행합니다. 이 예제에서는 사용자 ‘fossbilling‘과 함께 새로운 데이터베이스 fossbillingdb를 생성합니다. 또한 아래 쿼리에서 기본 비밀번호를 변경해야 합니다.
CREATE DATABASE fossbillingdb;
CREATE USER fossbilling@localhost IDENTIFIED BY 'password';
GRANT ALL ON fossbillingdb.* TO fossbilling@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;출력:

마지막으로 아래 쿼리를 실행하여 MariaDB 사용자 fossbilling@localhost를 확인하여 사용자가 ‘fossbillingdb‘ 데이터베이스에 접근할 수 있는 권한이 있는지 확인합니다.
출력 ‘GRANT ALL PRIVILEGES ON fossbillingdb. to fossbilling@localhost‘는 사용자 fossbilling@localhost가 데이터베이스 ‘fossbillingdb*’에 접근할 수 있는 권한이 있음을 확인합니다.
MariaDB 셸에서 로그아웃하려면 quit를 입력합니다.
SHOW GRANTS FOR fossbilling@localhost;
quit출력:

이제 FOSSBilling을 위한 MariaDB 데이터베이스와 사용자를 생성했습니다. 다음 단계에서는 Rocky Linux 서버에 PHP 및 PHP-FPM을 설치합니다.
PHP-FPM 8.2 설치
FOSSBilling의 최신 버전은 PHP 8.x를 지원합니다. 이 단계에서는 Remi 리포지토리를 통해 PHP 및 PHP-FPM 8.2를 설치합니다. 먼저 Remi 리포지토리를 설정하고 PHP 및 PHP-FPM 패키지를 설치한 후, Nginx 웹 서버와 함께 PHP-FPM을 설정합니다.
아래의 dnf 명령어를 통해 PHP Remi 리포지토리를 추가합니다. 이 명령어는 Remi 리포지토리를 Rocky Linux 시스템에 설치합니다. RPM 파일 ‘remi-release-9.rpm‘는 RHEL 9 배포에 사용할 수 있음을 확인합니다. 또한 프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 진행합니다.
sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm출력:

다음으로 아래의 dnf 명령어를 실행하여 PHP에 대한 리포지토리 모듈을 재설정합니다. 그런 다음 시스템에서 사용할 수 있는 PHP 리포지토리 모듈 목록을 확인합니다.
sudo dnf module reset php
sudo dnf module list phpRemi 리포지토리에 대한 GPG 키 설정을 요청받으면 y를 입력하여 확인하고 ENTER를 누릅니다.

‘dnf module list php’ 명령어가 실행된 후, 공식 Rocky Linux AppStream 리포지토리와 Remi 리포지토리에서 제공하는 여러 PHP 버전을 확인할 수 있습니다.

아래의 명령어를 실행하여 ‘remi-8.2‘에 대한 PHP 리포지토리를 활성화합니다. 이렇게 하면 PHP 패키지를 설치할 때마다 Remi 리포지토리에서 PHP 8.2 패키지를 설치하게 됩니다.
프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 활성화합니다.
sudo dnf module enable php:remi-8.2출력:

PHP Remi 리포지토리가 구성되었으므로 PHP 패키지를 설치할 수 있습니다.
아래의 dnf 명령어를 실행하여 Rocky Linux 서버에 PHP 및 PHP-FPM 패키지를 설치합니다. 프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 진행합니다.
sudo dnf install php php-fpm php-mysql php-curl php-cli php-zip php-common php-mbstring php-xml출력:

Remi 리포지토리에 대한 GPG 키를 확인하라는 메시지가 표시됩니다. y를 입력하여 확인하고 ENTER를 누릅니다.

PHP가 설치된 후, 아래의 nano 편집기 명령어를 사용하여 PHP 구성 파일 ‘/etc/php.ini‘를 엽니다.
sudo nano /etc/php.ini기본 PHP 구성을 다음 줄로 변경합니다.
upload_max_filesize = 16M
post_max_size = 32M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000작업이 완료되면 ‘/etc/php.ini‘ 파일을 저장하고 종료합니다.
RHEL 기반 배포에서 Nginx와 함께 PHP-FPM을 실행하려면 PHP-FPM이 기본 사용자 및 그룹 ‘nginx‘로 실행되고 있는지 확인해야 합니다.
RHEL에서는 Nginx 웹 서버가 기본적으로 ‘nginx‘ 사용자로 실행됩니다. Debian 기반 배포에서는 Nginx와 Apache2 웹 서버가 동일한 사용자 및 그룹 ‘www-data‘로 실행됩니다.
아래의 nano 편집기 명령어를 사용하여 PHP-FPM 풀 구성 ‘/etc/php-fpm.d/www.conf‘를 엽니다.
sudo nano /etc/php-fpm.d/www.conf기본 ‘user‘ 및 ‘group‘ 매개변수를 ‘nginx‘로 변경합니다.
user = nginx
group = nginx작업이 완료되면 파일을 저장하고 닫습니다.
다음으로 아래의 systemctl 명령어 유틸리티를 실행하여 PHP-FPM 서비스를 시작하고 활성화합니다. 이렇게 하면 PHP-FPM 서비스가 기본 소켓 파일 ‘/run/php-fpm/www.sock‘로 시작되고 PHP-FPM이 시스템 시작 시 자동으로 시작되도록 설정됩니다.
출력 ‘Created symlink …‘는 PHP-FPM 서비스가 활성화되었음을 확인합니다.
sudo systemctl start php-fpm
sudo systemctl enable php-fpm출력:

이제 아래의 systemctl 명령어를 실행하여 PHP-FPM 서비스의 상태를 확인합니다. PHP-FPM이 ‘active (running)‘이라는 출력을 받아야 하며, 이는 PHP-FPM이 실행 중임을 확인합니다. 출력 ‘Loaded …/…/; enabled;‘는 PHP-FPM 서비스가 활성화되었음을 확인합니다.
sudo systemctl status php-fpm출력:

마지막으로 아래의 php 명령어를 실행하여 시스템에 설치된 PHP 버전을 확인합니다. 그런 다음 시스템에서 활성화된 확장 목록을 확인합니다.
PHP 8.2와 활성화된 PHP 확장 목록을 확인할 수 있으며, 확장 ‘curl’, ‘openssl’, ‘pdo_mysql’, 및 ‘zlib’가 활성화되어 있는지 확인합니다.
php --version
php -m출력:

이로써 Rocky Linux 시스템에 PHP 및 PHP-FPM 8.2를 설치했습니다. 또한 Nginx 웹 서버와 함께 PHP-FPM을 실행하도록 구성했습니다. 다음 단계에서는 소스 코드를 다운로드하여 FOSSBilling 설치를 시작합니다.
FOSSBilling 소스 코드 다운로드
이 단계에서는 FOSSBilling 소스 코드를 다운로드하고 FOSSBilling 설치 디렉토리를 ‘/var/www/fossbilling’로 설정합니다.
시작하기 전에 아래의 dnf 명령어를 실행하여 unzip 패키지를 시스템에 설치합니다.
sudo dnf install unzip -y이제 새로운 디렉토리 ‘/var/www/fossbilling‘를 만들고 작업 디렉토리로 이동합니다. 그런 다음 아래의 curl 명령어를 사용하여 FOSSBilling의 최신 안정 버전을 다운로드할 수 있습니다.
mkdir -p /var/www/fossbilling; cd /var/www/fossbilling
curl https://fossbilling.org/downloads/stable -L --output FOSSBilling.zip출력:

FOSSBilling 소스 코드가 다운로드되면 작업 디렉토리에서 FOSSBilling.zip 파일을 확인할 수 있습니다. 아래의 unzip 명령어를 실행하여 ‘FOSSBilling.zip‘ 파일을 추출합니다. 그런 다음 FOSSBilling 설치 디렉토리 ‘/var/www/fossbilling‘의 소유권을 사용자 및 그룹 ‘nginx‘로 변경합니다.
unzip FOSSBilling.zip
sudo chown -R nginx:nginx /var/www/fossbillingFOSSBilling 소스 코드가 다운로드되고 설치 디렉토리가 구성되었으므로, 다음으로 FOSSBilling 웹 애플리케이션을 실행하는 데 사용할 Nginx 서버 블록을 설정합니다.
Nginx 서버 블록 구성
이 단계에서는 FOSSBilling 웹 애플리케이션을 실행하는 데 사용할 새로운 Nginx 서버 블록 구성 파일을 설정합니다. 시작하기 전에 도메인 이름이 서버 IP 주소를 가리키고 있는지 확인합니다.
아래의 nano 편집기 명령어를 사용하여 새로운 Nginx 서버 블록 구성 파일 ‘/etc/nginx/conf.d/fossbilling.conf‘를 만듭니다.
sudo nano /etc/nginx/conf.d/fossbilling.conf다음 줄을 파일에 추가합니다. 설치할 대상 도메인 이름 ‘fossbilling.howtoforge.local‘을 변경해야 합니다.
server {
listen 80;
set $root_path '/var/www/fossbilling';
server_name fossbilling.howtoforge.local;
index index.html index.htm index.php;
root $root_path;
try_files $uri $uri/ @rewrite;
sendfile off;
include /etc/nginx/mime.types;
# Block access to sensitive files and return 404 to make it indistinguishable from a missing file
location ~* .(ini|sh|inc|bak|twig|sql)$ {
return 404;
}
# Block access to hidden files except for .well-known
location ~ /(?!well-known/) {
return 404;
}
# Disable PHP execution in /uploads
location ~* /uploads/.*\.php$ {
return 404;
}
# Deny access to /data
location ~* /data/ {
return 404;
}
location @rewrite {
rewrite ^/page/(.*)$ /index.php?_url=/custompages/$1;
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass need to be changed according your server setup:
# phpx.x is your server setup
# examples: /var/run/phpx.x-fpm.sock, /var/run/php/phpx.x-fpm.sock or /run/php/phpx.x-fpm.sock are all valid options
# Or even localhost:port (Default 9000 will work fine)
# Please check your server setup
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
}
location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
root $root_path;
expires off;
}
}작업이 완료되면 파일을 저장하고 종료합니다.
다음으로 아래의 명령어를 실행하여 Nginx 구성을 확인합니다. 그런 다음 변경 사항을 적용하기 위해 Nginx 서비스를 재시작합니다. Nginx 구성 테스트가 성공하면 ‘ test successful - syntax ok ‘와 같은 출력을 받아야 합니다.
sudo nginx -t
sudo systemctl restart nginx출력:

이 시점에서 Nginx 웹 서버에서 FOSSBilling이 실행되고 있습니다. 그러나 여전히 안전하지 않은 HTTP 연결입니다. 다음 단계에서는 Certbot 및 Letsencrypt를 통해 SSL/TLS 인증서로 FOSSBilling을 보안합니다.
SSL/TLS Letsencrypt로 FOSSBilling 보안
Nginx 서버 블록 구성이 생성되었으므로, 이제 Certbot 도구와 Letsencrypt의 무료 SSL 인증서를 사용하여 FOSSBilling 설치를 SSL/TLS 인증서로 보안합니다.
시작하기 전에 도메인 이름이 서버 IP 주소를 가리키고 있는지 확인하고, Letsencrypt에 등록하는 데 사용할 이메일 주소를 준비합니다.
이제 아래의 dnf 명령어를 실행하여 Certbot 및 Certbot Nginx 플러그인을 설치합니다. 프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 진행합니다.
sudo dnf install certbot python3-certbot-nginx출력:

Certbot이 설치된 후, 아래의 명령어를 실행하여 도메인 이름에 대한 SSL/TLS 인증서를 생성합니다. 또한 다음 명령어에서 도메인 이름과 이메일 주소를 변경해야 합니다.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d fossbilling.howtoforge.local이 명령어를 사용하면 도메인 이름에 대한 새로운 SSL/TLS 인증서가 생성됩니다. 또한 Nginx 서버 블록에서 HTTPS를 자동으로 설정하고 HTTP에서 HTTPS로 자동 리디렉션을 설정합니다. SSL/TLS 인증서는 ‘/etc/elstencrypt/live/fossbilling.howtoforge.local/‘ 디렉토리에 생성됩니다.
FOSSBilling 설치 시작
웹 브라우저를 열고 FOSSBilling 설치의 도메인 이름(예: https://fossbilling.howtoforge.local/)을 방문합니다.
FOSSBilling 설치 관리자가 이제 시스템 세부 정보를 확인하고 검증합니다. 요구 사항의 상태가 ‘Ok‘로 녹색으로 표시되는지 확인합니다. Next를 클릭하여 계속 진행합니다.

이제 생성한 MariaDB 데이터베이스 및 사용자 세부 정보를 입력하고 다시 Next를 클릭합니다.

다음으로 FOSSBilling의 새로운 관리자 세부 정보를 입력합니다. 사용자 이름, 이메일 주소, 비밀번호 및 기본 통화를 입력한 후, Next를 클릭하여 계속 진행합니다.

FOSSBilling 설치가 성공적으로 완료되면 ‘축하합니다! FOSSBilling이 성공적으로 설치되었습니다.’라는 메시지를 받게 됩니다.
또한 FOSSBilling 설치를 완료하기 위한 몇 가지 지침을 볼 수 있습니다.

Rocky Linux 서버 터미널로 돌아가서 FOSSBilling 설치를 마무리하기 위해 다음 명령어를 실행합니다.
FOSSBilling ‘install‘ 디렉토리를 제거합니다.
sudo rm -rf /var/www/fossbilling/installFOSSBilling 구성 파일 ‘config.php‘의 권한을 0644로 변경합니다. 이렇게 하면 다른 사용자 및 그룹에 대한 ‘쓰기‘ 권한이 제거됩니다.
sudo chmod 0644 /var/www/fossbilling/config.php아래의 명령어를 통해 FOSSBilling에 대한 새로운 cron을 생성합니다.
crontab -u nginx -e사용할 코드 편집기를 선택합니다. 그런 다음 파일에 다음 줄을 입력합니다.
*/5 * * * * php /var/www/fossbilling/cron.php작업이 완료되면 파일을 저장하고 편집기를 종료합니다.

이제 웹 브라우저로 돌아가서 Finish를 클릭합니다.
다음 페이지가 표시됩니다.

Client area 버튼을 클릭하면 FOSSBilling 홈페이지로 리디렉션됩니다.

Admin area 버튼을 클릭하면 관리자 로그인 페이지로 리디렉션됩니다.
이메일 주소와 비밀번호로 로그인한 후 ‘Sign in‘을 클릭합니다.

성공적으로 로그인하면 FOSSBilling 관리 대시보드를 볼 수 있습니다.

이로써 FOSSBilling 설치가 완료되었으며 Certbot 및 Letsencrypt를 통해 SSL/TLS 인증서로 보안되었습니다.
결론
이 가이드에서는 Rocky Linux 9 서버에 오픈 소스 청구 및 사용자 관리 시스템인 FOSSBilling을 설치했습니다. 또한 Rocky Linux 시스템에서 LEMP 스택(Nginx 웹 서버, MariaDB 데이터베이스 및 PHP-FPM)을 구성했습니다. 추가로 Certbot 및 Letsencrypt를 통해 생성된 SSL/TLS 인증서로 FOSSBilling 설치를 보안했습니다.
이제 FOSSBilling을 비즈니스에 사용할 수 있습니다. 더 많은 사용자를 추가하고 SMTP 서버를 설정하는 등 다양한 작업을 수행할 수 있습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.