웹사이트 검색

Debian 11에 BoxBilling을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. PHP 설치 및 구성
  3. Nginx 및 MariaDB 설치
  4. MariaDB 데이터베이스 설정
  5. BoxBilling을 위한 새 데이터베이스 및 사용자 설정\n
  6. BoxBilling 소스 코드 다운로드
  7. BoxBilling용 Nginx 구성
  8. BoxBilling 설치 및 구성
  9. BoxBilling 사후 설치\n
  10. BoxBilling 관리 페이지에 로그인
  11. 결론

BoxBilling은 PHP로 작성된 커뮤니티 기반 청구 소프트웨어입니다. 고객과 판매자 모두가 쉽게 사용할 수 있도록 설계된 무료 오픈 소스 청구입니다. BoxBilling은 직관적인 인터페이스로 고객에게 훌륭한 경험을 제공하고 여러 지불 게이트웨이도 지원합니다.

이 튜토리얼에서는 Debian 11 Bullseye에 Nginx, PHP-FPM 및 MariaDB와 함께 BoxBilling을 설치하는 방법을 보여줍니다.

전제 조건

  • Debian 11 서버 Bullseye.
  • sudo 루트 권한이 있는 사용자.\n
  • 서버 IP 주소를 가리키는 도메인 이름 또는 하위 도메인입니다. 특히 프로덕션 환경에서.\n

PHP 설치 및 구성

먼저 Debian 시스템에 PHP-FPM을 설치하고 구성합니다. 최신 버전의 BoxBilling에는 Debian 저장소의 기본 PHP 버전인 PHP-FPM 7.4 이상이 필요했습니다.

시작하기 전에 아래의 apt 명령을 사용하여 Debian 패키지 인덱스를 새로 고칩니다.

sudo apt update

리포지토리를 새로 고친 후 다음 명령을 실행하여 BoxBilling에 대한 모든 추가 확장과 함께 PHP-FPM을 설치합니다.

sudo apt install php-fpm php-cli php-common php-zip php-mysql php-gd php-intl php-curl php-imap php-mbstring php-xml php-json libpcre3 openssl git unzip -y

모든 PHP 설치가 완료되면 nano 편집기를 사용하여 php.ini 파일을 편집합니다.

sudo nano /etc/php/7.4/fpm/php.ini
sudo nano /etc/php/7.4/cli/php.ini

memory_limit, max_execution_timedate.timezone 옵션을 원하는 환경으로 변경하세요. 이 예에서는 2GB RAM 메모리가 있는 서버를 사용하고 있었으므로 PHP에 memory_limit를 512MB로 할당합니다. data.timezone 옵션의 경우 시간대를 변경하십시오.

memory_limit = 512M
max_execution_time = 360
date.timezone = Europe/Paris

파일을 저장하고 종료합니다.

이제 PHP-FPM 서비스를 다시 시작하고 아래의 systemctl 명령을 실행하여 새 구성을 적용합니다.

sudo systemctl restart php7.4-fpm

마지막으로 아래 명령어를 사용하여 PHP-FPM 서비스를 확인합니다.

sudo systemctl status php7.4-fpm

PHP-FPM 서비스가 실행 중일 때 출력이 표시됩니다.

Nginx 및 MariaDB 설치

이 단계에서는 Nginx 웹 서버와 MariaDB 데이터베이스를 설치합니다. BoxBilling 애플리케이션에는 최소한 MySQL v8이 필요하지만 MariaDB와 같은 다른 MySQL 구현도 지원합니다.

아래 apt 명령을 사용하여 Debian 11 서버에 Nginx 및 MariaDB를 설치합니다.

sudo apt install nginx-full mariadb-server -y

Nginx 및 MariaDB 설치가 완료되면 다음 명령을 실행하여 Nginx 서비스 및 MariaDB 서비스를 확인합니다.

sudo systemctl status nginx
sudo systemctl status mariadb

이제 Nginx 및 MariaDB 서비스가 활성화되어 실행 중이므로 출력을 가져와야 합니다.

MariaDB 데이터베이스 설정

MariaDB 설치 후 MariaDB의 루트 비밀번호를 설정하는 것이 좋습니다. mysql_secure_installation 명령을 사용하여 MariaDB 루트 암호를 설정하고 기본 보안으로 MariaDB를 배포합니다.

터미널 서버에서 mysql_secure_installation 명령을 실행합니다.

mysql_secure_installation

이제 MariaDB의 루트 비밀번호를 입력하라는 메시지가 표시됩니다. 기본 MariaDB 설치는 루트 암호 없이 제공되므로 계속하려면 ENTER를 누르십시오.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

이제 Y를 입력하여 루트 사용자의 기본 인증을 unix_socket_authentication 방식으로 전환합니다. 이렇게 하면 루트 사용자가 항상 로컬 시스템에서 MariaDB에 연결됩니다.

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!

Y를 입력하여 MariaDB의 루트 암호를 변경한 다음 MariaDB의 새 암호를 입력하고 반복합니다.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

Y를 입력하여 MariaDB에서 기본 익명 사용자를 제거합니다.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

루트 사용자에 대한 원격 로그인을 비활성화하려면 Y를 입력합니다.

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

기본 데이터베이스 테스트와 그 위에 있는 모든 권한을 제거하려면 Y를 입력합니다.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

마지막으로 MariaDB에 대한 테이블 권한을 다시 로드하여 새 변경 사항을 적용합니다.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

그리고 MariaDB 루트 암호를 구성했으며 이제 MariaDB 서버가 보호됩니다.

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

BoxBilling을 위한 새 데이터베이스 및 사용자 설정

이 단계에서는 BoxBilling 설치를 위한 새 데이터베이스 및 사용자를 생성합니다. BoxBilling과 관련된 모든 데이터는 MariaDB 데이터베이스에 저장됩니다.

이제 다음 명령을 사용하여 MariaDB 셸에 로그인합니다.

mysql -u root -p

다음 쿼리를 실행하여 비밀번호 dbpassBoxBilling으로 새 데이터베이스 및 사용자 boxbilling을 생성한 다음 데이터베이스 boxbilling에 대한 모든 권한을 [email 사용자에게 부여합니다. 그런 다음 모든 테이블 권한을 다시 로드하여 MariaDB에 새 변경 사항을 적용합니다.

CREATE DATABASE boxbilling;
CREATE USER WITH GRANT OPTION;
FLUSH PRIVILEGES;

이제 exit를 입력하여 MariaDB 셸에서 로그아웃합니다. 그리고 BoxBilling 설치를 위한 새로운 MariaDB 데이터베이스 및 사용자를 생성했습니다.

BoxBilling 소스 코드 다운로드

BoxBilling은 다양한 방법으로 설치할 수 있습니다. 소스 코드에서 최신 버전의 BoxBilling을 설치하고 Composer를 사용하여 모든 PHP 종속성을 설치하거나 안정적인 버전의 BoxBilling을 다운로드하여 웹 루트 디렉터리로 이동할 수 있습니다.

이 단계에서는 안정적인 최신 버전의 BoxBilling을 설치합니다. 이 글을 쓰는 시점에서 안정적인 최신 BoxBilling 버전은 v4.22입니다.

새 웹 루트 디렉터리 /var/www/boxbilling을 만들고 작업 디렉터리를 그 디렉터리로 이동합니다.

mkdir -p /var/www/boxbilling/
cd /var/www/boxbilling

wget 명령을 사용하여 안정적인 최신 버전의 BoxBilling 소스 코드를 다운로드하고 unzip 명령을 사용하여 BoxBilling.zip 파일을 추출합니다.

wget https://github.com/boxbilling/boxbilling/releases/download/4.22.1.3/BoxBilling.zip
unzip Boxbilling.zip

이제 새 디렉터리 캐시를 만들고 /var/www/boxbilling/업로드하세요.

mkdir -p /var/www/boxbilling/bb-data/{cache,uploads}

다음으로 아래 명령을 사용하여 /var/www/boxbilling 디렉토리의 소유권을 사용자 및 그룹 www-data로 변경합니다.

sudo chown -R www-data:www-data /var/www/boxbilling

www-data 사용자가 캐시업로드 디렉토리에 쓸 수 있도록 허용합니다.

sudo chmod u+rw /var/www/boxbilling/bb-data/{cache,uploads}

이제 BoxBilling 소프트웨어용 Nginx 웹 서버를 설정할 준비가 되었습니다.

BoxBilling을 위한 Nginx 구성

이 단계에서는 BoxBilling을 위한 새로운 Nginx 서버 블록을 추가합니다. 서버 블록 구성을 만들기 전에 서버를 가리키는 도메인 이름이 있는지 확인하십시오. 또한 도메인에 대해 생성된 SSL 인증서가 있는지 확인하고 Letsencrypt에서 무료 SSL 인증서를 사용할 수 있습니다.

작업 디렉토리를 /etc/nginx/sites-available으로 이동하고 nano 편집기를 사용하여 새 서버 블록 구성 boxbilling.conf를 만듭니다.

cd /var/www/sites-available/
nano boxbilling.conf

다음 구성을 복사하여 붙여넣습니다. 그리고 SSL 인증서의 도메인 이름과 경로를 변경해야 합니다.

server {
    listen 80;
    server_name billing.example.io;
    return 302 https://$server_name$request_uri;
}

server {
  listen 443 ssl http2;

     set $root_path '/var/www/boxbilling';

     server_name  billing.example.io;

     index index.html index.htm index.php;
     root $root_path;
     try_files $uri $uri/ @rewrite;
     sendfile off;

  ssl_certificate /etc/letsencrypt/live/billing.example.io/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/billing.example.io/privkey.pem;

  ssl_protocols TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
  ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
  ssl_session_timeout  10m;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off; # Requires nginx >= 1.5.9
  # ssl_stapling on; # Requires nginx >= 1.3.7
  # ssl_stapling_verify on; # Requires nginx => 1.3.7
  resolver 8.8.8.8 8.8.4.4 valid=300s;
  resolver_timeout 5s;
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

     location @rewrite {
         rewrite ^/(.*)$ /index.php?_url=/$1;
     }

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

     # Disable PHP execution in bb-uploads and bb-data
     location ^~ /bb-uploads/ { }
     location ^~ /bb-data/ {
       deny all;
     }

     location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
         root $root_path;
         expires off;
         proxy_no_cache 1;
         proxy_cache_bypass 1;
     }

     location ~ /\.ht {
         deny all;
     }
 }

파일을 저장하고 종료합니다.

그런 다음 다음 명령을 실행하여 서버 블록 구성 boxbilling.conf을 활성화하고 Nginx 구성을 확인합니다.

ln -s /etc/nginx/sites-available/boxbilling.conf /etc/nginx/sites-enabled/
sudo nginx -t

Nginx 구성이 올바른 경우 Syntax OK와 같은 출력 메시지가 표시됩니다.

마지막으로 Nginx 서비스를 다시 시작하여 새 구성을 적용합니다.

sudo systemctl restart nginx

BoxBilling 설치 및 구성

이 시점에서 BoxBilling 및 Nginx 웹 서버를 구성했습니다. 이제 웹 브라우저에서 BoxBilling 설치 및 구성을 시작합니다.

웹 브라우저를 열고 주소 표시줄에 BoxBilling 도메인 이름을 입력합니다.

https://boxbilling.example.io/

모든 요구 사항이 녹색인지 확인하십시오. 이는 시스템이 BoxBilling 설치에 적합함을 의미합니다.

라이선스 상자 동의함을 체크하고 다음 버튼을 클릭합니다.

BoxBilling에 대한 데이터베이스와 사용자를 입력하고 NEXT 버튼을 다시 클릭합니다.

이제 BoxBilling에 대한 새 관리 사용자, 이메일 및 비밀번호를 입력하고 다음을 클릭하십시오.

그리고 BoxBilling을 성공적으로 설치했지만 BoxBilling 서버에 적용해야 하는 추가 설정이 필요합니다.

FINISH 버튼을 클릭하면 BoxBilling 설치가 완료됩니다.

BoxBilling 홈페이지로 이동하시면 아래와 같은 페이지를 보실 수 있습니다.

BoxBilling 사후 설치

Boxbilling 설치가 완료되면 설치 디렉터리를 제거하고 bb-config.php 파일의 권한을 변경하여 BoxBilling 응용 프로그램에 대한 새 cronjob을 생성해야 합니다.

다음 명령을 사용하여 BoxBilling install 디렉터리를 제거합니다.

rm -rf /var/www/boxbilling/install

bb-config.php의 권한을 644로 변경합니다. 이는 사용자 www-data만 이 파일에 쓸 수 있음을 의미합니다.

sudo chmod 644 /var/www/boxbilling/bb-config.php

이제 사용자 www-data에 대한 새 cronjob을 만듭니다. BoxBilling 애플리케이션은 주로 www-data 사용자와 함께 Nginx 웹 서버에서 실행됩니다.

export EDITOR=nano
sudo crontab -u www-data -e

다음 스크립트를 복사하여 붙여넣습니다.

*/5 * * * * php /var/www/boxbilling/bb-cron.php

cron을 저장하고 종료합니다.

이제 BoxBilling이 클라이언트와 고객을 위해 준비되었습니다.

BoxBilling 관리 페이지에 로그인

BoxBilling 관리 페이지는 URL 경로 /bb-admin에 있습니다. 웹 브라우저의 주소 표시줄에 다음 URL을 입력하십시오.

https://boxbilling.example.io/bb-admin/

BoxBilling 관리자 로그인 페이지에서 사용자와 비밀번호를 입력하고 LOG ME IN 버튼을 클릭합니다.

이제 아래와 같이 Boxbilling 관리 대시보드가 표시됩니다.

결론

축하합니다! 이제 최신 Debian 11 땡기에 PHP-FPM, Nginx 및 MariaDB와 함께 BoxBilling을 설치했습니다. 이제 클라이언트 및 고객과 함께 무료 중앙 구매 관리로 사용할 수 있습니다.