VPS에 Flarum 설치하기: PHP 및 MariaDB 환경 설정
VPS 환경에서 Flarum 1.8을 설치하고 설정하는 방법을 안내합니다. /public 디렉터리만 노출하는 보안 설정과 함께 메일 발송 오류 및 확장 기능 업데이트 시 발생하는 흔한 문제들을 해결하는 실무 가이드를 제공합니다.
VPS에 PHP와 MariaDB를 사용하여 Flarum 설치하기
VPS에 Flarum을 설치하면 Docker, Ruby, 별도의 작업 실행기(job runner) 없이 PHP와 MariaDB 위에서 동작하는 포럼을 얻을 수 있습니다. 이것이 Flarum을 선택하는 이유입니다. VPS에 Discourse 설치하기는 Ruby, PostgreSQL, Redis, 백그라운드 워커를 포함한 Docker 스택을 의미하며, 백업이나 메일 서비스를 추가하기 전 실질적인 최소 사양은 2 GB RAM입니다. Discourse는 하루에 수천 개의 게시물이 올라오는 활발한 커뮤니티에서 그만한 자원 점유의 가치를 증명합니다. 수백 명 규모의 포럼에서는 매달 비용을 지불하면서도 사용하지 않는 과도한 장비일 뿐입니다. Flarum은 이미 운영 중일 수 있는 PHP 스택 내에서 구동되므로, nginx와 MariaDB가 설치된 1 GB VPS라면 다른 서비스와 함께 호스팅할 수 있습니다. 아직 선택의 여지가 있다면 자체 호스팅 포럼 소프트웨어 비교에서 나머지 선택지를 확인할 수 있습니다.
이 가이드는 Flarum 1.x 버전, 현재는 1.8 시리즈를 기준으로 설치를 진행합니다. 2026년 8월 기준으로 Flarum 2.0은 여전히 릴리스 후보(release candidate) 단계이므로, 다른 사용자들이 의존하는 포럼을 운영하려면 1.8 버전을 사용하는 것이 좋습니다. 여기서는 코어 버전보다 확장 기능(extension)이 더 중요하며, 대부분의 확장 기능 개발자는 아직 2.0으로 이전하지 않았습니다.
Flarum 1.8 서버 요구 사항
Flarum의 공식 요구 사항은 PHP 7.3 이상, MySQL 5.6+ 또는 MariaDB 10.0.5+ 버전이며, 웹 서버는 mod_rewrite을 사용하는 nginx 또는 Apache가 필요합니다. Ubuntu 24.04는 PHP 8.3과 MariaDB 10.11을 기본 제공하므로, 별도의 서드 파티 저장소 없이도 배포판 패키지만으로 요구 사항을 충족합니다. Flarum이 요구하는 PHP 확장 모듈은 curl, dom, fileinfo, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip입니다. 또한 셸 접근 권한이 반드시 필요합니다. Flarum의 모든 확장 기능은 Composer 패키지 형태로 제공되며, Composer를 실행하지 않고는 기능을 추가할 방법이 없기 때문입니다.
Flarum은 일반적인 PHP 애플리케이션입니다. 만약 이미 Ubuntu 24.04에서 LAMP 스택을 운영 중이라면, 다음 두 섹션의 대부분은 이미 설치되어 있을 것이므로 데이터베이스 설정 단계로 바로 넘어가도 됩니다.
Flarum이 요구하는 PHP 및 확장 모듈 설치
sudo apt update
sudo apt install -y nginx mariadb-server composer
sudo apt install -y php8.3-fpm php8.3-cli php8.3-curl php8.3-gd php8.3-mbstring php8.3-mysql php8.3-xml php8.3-zip
php -m | grep -E 'curl|dom|gd|mbstring|pdo_mysql|zip'
composer --version패키지 이름이 Flarum의 목록과 일대일로 대응하지 않습니다. dom 확장 모듈은 php8.3-xml 내부에 포함되어 있으며, fileinfo, json, openssl 및 tokenizer은 Ubuntu의 PHP 8.3에 내장되어 있으므로 별도로 설치할 패키지가 없습니다. grep 명령을 실행하면 6개의 줄이 출력되어야 하며, composer --version은 2.x 릴리스를 보고해야 합니다. 누락된 확장 모듈은 지금 해결해야 합니다. Composer는 해당 모듈이 없으면 Flarum 설치를 거부하며, 오류 메시지에 필요한 확장 모듈 이름이 표시됩니다.
Problem 1
- flarum/core[v1.8.0, ..., v1.8.17] require ext-gd * -> it is missing from your system.
Install or enable PHP's gd extension.명령줄 PHP와 FastCGI 프로세스 관리자(PHP-FPM)의 버전이 동일한지 확인하십시오. Composer는 명령줄 바이너리에서 실행되고 포럼은 FPM에서 실행되므로, php -v와 sudo php-fpm8.3 -v의 버전이 일치해야 합니다. 서드 파티 저장소에서 여러 PHP 버전을 설치한 환경에서는 버전이 서로 달라질 수 있으며, 이 경우 한 버전에 설치한 확장 모듈이 다른 버전에서는 보이지 않게 됩니다.
데이터베이스와 전용 데이터베이스 사용자 생성
sudo mariadb-secure-installation
sudo mariadbCREATE DATABASE flarum CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flarum'@'localhost' IDENTIFIED BY 'use-a-long-random-password';
GRANT ALL PRIVILEGES ON flarum.* TO 'flarum'@'localhost';
FLUSH PRIVILEGES;
EXIT;root 대신 Flarum 전용 데이터베이스 사용자를 생성하십시오. 권한은 flarum.*에만 부여해야 합니다. 이렇게 하면 직접 작성하지 않은 확장 기능에서 SQL 인젝션 취약점이 발생하더라도 다른 데이터베이스를 읽을 수 없습니다. 문자 집합 설정도 중요합니다. utf8mb4은 이모지와 비라틴 문자를 올바르게 저장하지만, MySQL의 구형 utf8는 3바이트 인코딩이므로 4바이트 문자가 나타나면 게시글이 잘릴 수 있습니다. 다음 단계로 넘어가기 전에 사용자가 정상적으로 작동하는지 확인하십시오.
mariadb -u flarum -p flarum -e 'SELECT DATABASE();'명령을 실행하면 flarum가 출력되어야 합니다. ERROR 1045 (28000): Access denied for user 'flarum'@'localhost'이 출력된다면 비밀번호가 일치하지 않거나, localhost이 아닌 다른 호스트용으로 사용자가 생성되었음을 의미합니다.
Composer를 사용하여 VPS에 Flarum 1.8 버전 설치하기
먼저 소스 코드를 소유할 시스템 사용자를 생성합니다. root 권한으로 Composer를 실행하면 vendor/ 및 storage/ 내의 파일 소유권이 root로 설정됩니다. 이 경우 나중에 PHP가 자체 캐시를 기록할 수 없게 되어 포럼이 모든 요청에 대해 500 오류를 반환하게 됩니다.
sudo useradd --system --home-dir /srv/flarum --shell /bin/bash flarum
sudo install -d -o flarum -g flarum -m 755 /srv/flarum
sudo -iu flarum마지막 명령어를 실행하면 /srv/flarum 경로에서 flarum 사용자의 셸로 전환됩니다. 이 가이드의 끝까지 모든 명령어는 sudo으로 시작하는 경우를 제외하고 해당 사용자 권한으로 실행합니다.
composer create-project flarum/flarum:^1.8.0 .^1.8.0 제약 조건은 버전을 고정하는 역할을 합니다. 이 설정은 1.8.x 패치 릴리스는 허용하되 2.0 버전은 거부하는데, 이는 2.0이 릴리스 후보(release candidate) 단계일 때 권장되는 방식입니다. Composer는 스켈레톤을 다운로드하고 flarum/core 및 그 의존성을 해결한 뒤, public/, storage/, vendor/, composer.json 및 flarum 명령줄 스크립트를 생성합니다.
소규모 VPS에서는 이 단계에서 문제가 자주 발생하며, 두 가지 다른 오류가 동일한 증상으로 나타날 수 있습니다. PHP Fatal error: Allowed memory size of 134217728 bytes exhausted은 PHP 자체의 memory_limit이며, 명령어 앞에 COMPOSER_MEMORY_LIMIT=-1을 추가하면 해당 실행에 한해 메모리 제한이 해제됩니다. PHP 오류 메시지 없이 Killed가 단독으로 출력된다면 이는 커널의 OOM(out-of-memory) 킬러가 작동한 것이며, dmesg | tail 명령어로 이를 확인할 수 있습니다. 이 경우 시스템의 RAM이 실제로 부족한 상태이므로 스왑(swap)을 추가해야 합니다. PHP 메모리 제한을 높이는 것은 커널이 개입하기 전에 PHP가 더 많은 메모리를 요청하게 만들어 상황을 악화시킬 뿐입니다.
왜 /public 디렉터리만 웹에 노출해야 하는가
프로젝트 루트에는 데이터베이스 비밀번호가 평문으로 포함된 config.php, 모든 의존성 정보가 담긴 vendor/, 로그와 캐시된 세션이 저장되는 storage/이 있습니다. 이 파일들은 공용 인터넷에 노출되어서는 안 됩니다. Flarum은 웹에서 접근 가능한 모든 파일을 public/라는 하나의 하위 디렉터리에 보관하며, 이 안에는 index.php, assets/ 폴더 및 기타 필수 파일만 포함됩니다. 웹 서버의 루트를 /srv/flarum/public로 지정하면, 별도의 규칙을 기억할 필요 없이 구조적으로 나머지 디렉터리에 대한 HTTP 접근이 차단됩니다.
반면 루트를 /srv/flarum으로 지정하면 실제적인 피해가 발생합니다. /config.php를 요청하면 PHP가 파일을 실행하여 배열만 반환하므로 유용한 정보를 얻을 수 없습니다. 하지만 /storage/logs/flarum.log는 외부인에게 스택 트레이스와 데이터베이스 오류를 그대로 노출하며, /composer.lock은 사용 중인 모든 패키지의 정확한 버전을 알려줍니다. 이는 공격자가 시도해 볼 수 있는 알려진 취약점 목록을 제공하는 것과 같습니다.
PHP-FPM에 전용 풀 할당하기
Flarum은 프로젝트 루트(설치 프로그램이 config.php을 생성할 수 있도록), storage/(로그 및 캐시용), assets/(업로드된 아바타 및 로고용) 등 세 가지 경로에 대한 쓰기 권한이 필요합니다. 파일 소유자는 flarum 사용자여야 하므로, 가장 깔끔한 해결책은 flarum 권한으로 실행되는 PHP-FPM 풀을 구성하는 것입니다. nginx는 계속 www-data 권한으로 실행되며 읽기 작업만 수행합니다.
/etc/php/8.3/fpm/pool.d/flarum.conf 파일을 작성합니다:
[flarum]
user = flarum
group = flarum
listen = /run/php/php8.3-fpm-flarum.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 30s
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 16M
php_admin_value[post_max_size] = 17Msudo systemctl restart php8.3-fpm
ls -l /run/php/php8.3-fpm-flarum.sock소켓은 srw-rw---- 1 www-data www-data로 지정해야 합니다. 마스터 프로세스는 root 권한으로 실행되어 소켓을 생성하며, 이 때문에 워커가 flarum 권한으로 실행되는 동안 소켓의 소유권을 www-data에게 넘겨줄 수 있습니다. 소켓이 존재하지 않으면 sudo journalctl -u php8.3-fpm -n 30은 FPM이 연결을 거부했다는 메시지를 출력합니다. pm = ondemand은 요청이 들어올 때만 워커 프로세스를 시작하므로, 방문자가 없는 동안에는 포럼 운영에 거의 메모리가 소모되지 않습니다.
nginx 서버 블록
Flarum은 프로젝트 루트에 .nginx.conf라는 이름의 nginx 스니펫을 포함하여 배포합니다. 이 파일에는 rewrite 규칙, 캐시 헤더, 압축 설정이 포함되어 있습니다. 내용을 복사하지 말고 include 지시어를 사용하십시오. 그래야 Flarum 업데이트로 스니펫이 변경되어도 별도의 수정 없이 서버에 즉시 반영됩니다.
server {
listen 80;
listen [::]:80;
server_name forum.example.com;
root /srv/flarum/public;
index index.php;
client_max_body_size 16M;
include /srv/flarum/.nginx.conf;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm-flarum.sock;
}
}위 내용을 /etc/nginx/sites-available/flarum으로 저장한 뒤 활성화하십시오.
sudo ln -s /etc/nginx/sites-available/flarum /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxnginx -t은 syntax is ok 및 test is successful에 응답해야 합니다. 많은 사용자가 include 줄을 누락하곤 합니다. 이 줄을 빠뜨리면 매우 구체적인 증상이 나타납니다. 첫 페이지는 정상적으로 로드되지만, 모든 토론 링크를 클릭하면 nginx가 404 오류를 반환합니다. Flarum은 /d/1-hello-world와 같은 URL을 PHP 내부에서 라우팅합니다. 해당 경로는 디스크상의 실제 파일이 아닙니다. 따라서 스니펫의 try_files $uri $uri/ /index.php?$query_string 규칙이 없으면 nginx는 d이라는 이름의 디렉터리를 찾으려 시도합니다. 디렉터리를 찾지 못하면 PHP에 요청을 전달하기도 전에 404 오류를 응답합니다. Apache의 경우 public/에 이미 존재하는 .htaccess 파일을 통해 동일한 라우팅을 처리합니다. 이 설정은 일치하는 <Directory> 블록에서 AllowOverride All을 설정해야만 정상적으로 작동합니다.
설치 프로그램을 실행하기 전에 TLS를 추가하십시오
인증서 작업은 나중에 하지 말고 지금 수행하십시오. Flarum은 설치 과정에서 자체 기본 URL을 config.php에 기록하며, 이때 브라우저 주소창의 URL을 가져옵니다. http://을 통해 설치하면 이후 Flarum이 생성하는 모든 에셋 URL이 http://로 시작하게 됩니다. 따라서 나중에 TLS(전송 계층 보안)를 추가하면 브라우저가 해당 요청을 혼합 콘텐츠(mixed content)로 간주하여 차단하게 되며, 포럼은 스타일이 적용되지 않은 텍스트와 JavaScript가 없는 상태로 로드됩니다. 먼저 nginx에서 Let's Encrypt를 위한 certbot 설정을 완료하고 https://forum.example.com에서 페이지가 정상적으로 제공되는지 확인한 뒤 돌아오십시오.
이미 일반 HTTP로 설치를 완료했다면 한 줄의 명령어로 복구할 수 있습니다. /srv/flarum/config.php을 편집하여 url 키의 값을 'url' => 'https://forum.example.com',로 변경한 다음, flarum 사용자로 php flarum cache:clear를 실행하십시오.
설치 프로그램을 실행하고 config.php 권한 제한하기
브라우저에서 https://forum.example.com을 엽니다. Flarum 웹 설치 프로그램은 생성한 데이터베이스 이름, 사용자 이름, 비밀번호, 포럼 제목 및 관리자 계정 정보를 요구합니다. 설치 프로그램은 config.php 파일을 작성하고 데이터베이스 테이블을 생성합니다. 설치가 완료되면 데이터베이스 비밀번호가 포함된 해당 파일의 권한을 강화해야 합니다.
sudo chmod 640 /srv/flarum/config.php이 파일은 FPM이 실행되는 사용자인 flarum만 읽고 쓸 수 있으며, 서버의 다른 모든 계정은 읽을 수 없게 설정됩니다. 그 후 셸에서 설치 상태를 확인합니다.
php flarum info이 명령은 코어 버전, PHP 버전, 활성화된 확장 모듈, 메일 드라이버 및 사용 중인 경로를 출력합니다. 무언가 제대로 작동하지 않을 때 가장 먼저 실행해야 하는 명령이며, 도움을 요청할 때 상대방이 가장 먼저 확인할 정보입니다.
가입 및 비밀번호 재설정 이메일이 조용히 실패하는 이유
이 섹션은 포럼의 초기 생존 여부를 결정합니다. 새로운 포럼이 처음으로 발송하는 두 가지 이메일은 가입 확인 메일과 비밀번호 재설정 메일이며, 이 두 메일은 낯선 사용자가 커뮤니티의 신뢰성을 판단하는 바로 그 순간에 발송됩니다. 두 경우 모두 조용히 실패합니다. 메일을 받지 못한 사용자는 이를 알릴 방법이 없으며, 관리자 대시보드에도 경고가 표시되지 않습니다.
Flarum은 Administration의 Email 설정에서 smtp, mail, mailgun, log 등 네 가지 메일 드라이버를 제공합니다. smtp을 선택하고 실제로 메일을 발송할 수 있는 메일 서비스와 연결하십시오. mail 드라이버는 메시지를 로컬 sendmail 바이너리로 전달하는데, 초기 상태의 Ubuntu VPS에는 이 바이너리가 존재하지 않으므로 메시지는 어디로도 전달되지 않으며 오류도 발생하지 않습니다. log 드라이버는 메시지 본문을 storage/logs/에 기록할 뿐 아무것도 발송하지 않는데, 이는 개발 환경을 위한 용도이기 때문입니다.
설정을 저장한 뒤 같은 페이지에 있는 Send Test Mail 버튼을 누르십시오. 이 버튼은 유일한 피드백 수단이므로, 사용자를 초대하기 전에 반드시 사용해 보아야 합니다. 메시지가 도착하지 않는다면 로그를 확인하십시오.
tail -n 50 /srv/flarum/storage/logs/flarum.log연결 거부, 로그인 거부, TLS 협상 실패 등은 모두 시도된 호스트 및 포트 정보와 함께 로그에 기록됩니다. Connection could not be established with host smtp.example.com라는 문구가 포함된 줄은 포트가 차단되었거나 잘못되었음을 의미하며, 일반적으로는 제공업체가 기본적으로 25번 포트의 아웃바운드 트래픽을 차단하기 때문에 발생합니다. 암호화 필드를 tls으로 설정한 587번 포트 조합은 거의 모든 메일 서비스에서 정상적으로 작동합니다.
메일 기능이 작동하지 않으면 가입을 시도하는 방문자는 확인 메일 발송 과정에서 예외가 발생하여 Flarum의 일반적인 실패 배너인 Oops! Something went wrong. Please reload the page and try again.를 보게 됩니다. 어느 경우든 사용자는 서비스에 접속할 수 없으며, 이에 대해 관리자에게 문의하지도 않을 것입니다.
메일이 정상적으로 발송되는 것과 수신 측에서 메일을 받아들이는 것은 별개의 문제입니다. SPF나 DKIM 레코드가 게시되지 않은 VPS 주소에서 발송된 메일은 스팸 메일함으로 분류되거나 반송 메시지 없이 삭제됩니다. 이 경우 로그에는 성공으로 기록되지만 수신자는 메일을 전혀 확인할 수 없습니다. 자체 호스팅 앱에서 안정적으로 메일 발송하기 문서에서 게시해야 할 DNS 레코드와 사용할 가치가 있는 릴레이 서비스를 확인하십시오.
확장 기능은 Composer 패키지이므로 업그레이드는 명령어로 수행합니다
Flarum에서 확장 기능은 Composer 패키지입니다. 업로드 버튼이나 폴더에 넣을 zip 파일은 존재하지 않습니다. 이는 의도적인 설계 결정입니다. 버전 간의 의존성을 해결하고, 정확한 구성 세트를 composer.lock에 기록하며, PHP 라이브러리에 의존하는 확장 기능이 해당 라이브러리를 올바르게 설치하도록 보장하기 위함입니다. 그 대가로 확장 기능을 추가하려면 flarum 사용자로 세 가지 명령어를 실행해야 합니다.
composer require 'fof/upload:*'
php flarum migrate
php flarum cache:clear그 후 관리자 페이지의 확장 기능(Extensions) 메뉴에서 해당 기능을 활성화합니다. 각 명령어는 고유한 역할을 수행합니다. composer require은 코드를 디스크에 내려받습니다. php flarum migrate은 확장 기능에 포함된 데이터베이스 마이그레이션을 실행하며, 이를 통해 자체 테이블을 생성합니다. php flarum cache:clear는 브라우저가 불러올 컴파일된 JavaScript 및 CSS 번들을 다시 빌드합니다. 마지막 단계를 건너뛰면 흔히 발생하는 혼란이 생깁니다. 확장 기능 목록에 표시되고 토글이 켜져 있음에도 불구하고, 브라우저를 아무리 새로고침해도 아무런 변화가 나타나지 않게 됩니다.
확장 기능을 제거할 때는 반대 순서로 진행합니다. 먼저 관리자 패널에서 비활성화한 다음 패키지를 제거하십시오. Flarum은 확장 기능의 테이블을 의도적으로 남겨두므로, 나중에 다시 활성화해도 데이터가 손실되지 않습니다. 테이블까지 삭제하려면 코드를 제거하기 전에 마이그레이션을 롤백하십시오.
php flarum migrate:reset --extension fof-upload
composer remove fof/upload
php flarum cache:clear해당 명령어에 사용되는 확장 기능 ID는 패키지 이름에서 슬래시를 하이픈으로 바꾼 것입니다. 타이핑보다 클릭을 선호한다면, composer require 'flarum/extension-manager:*'을 통해 Composer를 감싸는 공식 관리자 페이지를 추가할 수 있습니다. 이 페이지는 웹 사용자와 동일한 권한으로 작업을 수행하며, 동일한 메모리와 쓰기 권한이 필요하고, 동일한 이유로 실패할 수 있습니다. 따라서 문제가 발생했을 때는 명령줄을 사용하는 것이 가장 확실한 해결 방법입니다.
Composer update가 Flarum 업그레이드를 거부하는 이유
Flarum과 모든 확장 기능을 업그레이드하려면 하나의 Composer 명령어를 실행한 뒤 두 개의 Flarum 명령어를 실행해야 합니다. 먼저 데이터베이스를 백업하십시오.
composer update --prefer-dist --no-plugins --no-dev -a --with-all-dependencies
php flarum migrate
php flarum cache:clear작업이 성공했다고 가정하지 말고 출력 내용을 읽어야 합니다. Composer가 아무 작업도 수행하지 않는 경우가 중요한 사례이기 때문입니다.
Your requirements could not be resolved to an installable set of packages.이 메시지는 설치된 확장 기능 중 하나가 이동하려는 릴리스를 제외하는 flarum/core 제약 조건을 선언했음을 의미합니다. Composer는 제약 조건을 위반하지 않으므로, 확장 기능 작성자가 작동하지 않는다고 명시한 조합을 구성하는 대신 전체 설치 상태를 이전 버전으로 유지합니다. 원인이 되는 패키지를 찾으십시오.
composer why-not flarum/core 1.8.17출력 내용에는 해당 버전을 차단하는 모든 패키지와 각 패키지가 선언한 제약 조건이 나열됩니다. 여기서 선택할 수 있는 방법은 작성자가 호환되는 릴리스를 게시할 때까지 기다리거나, 해당 확장 기능을 제거하고 없이 사용하는 것입니다. 이것이 Composer 모델의 대가이며, 다른 사람들이 의존하는 포럼에 15개의 확장 기능을 설치하기 전에 이해해 두어야 할 부분입니다. 최근에 릴리스를 배포한 확장 기능을 우선적으로 선택하고, 직접 읽을 수 있을 정도로 목록을 짧게 유지하십시오.
백업 대상
데이터베이스와 프로젝트 디렉터리를 백업하십시오. 그 외의 모든 항목은 다시 생성할 수 있습니다.
mariadb-dump -u flarum -p --single-transaction flarum > flarum-$(date +%F).sql
sudo tar czf flarum-files.tgz -C /srv flarum구형 시스템에서 mariadb-dump는 mysqldump으로 불리며, Ubuntu 24.04에서는 두 이름 모두 사용 가능합니다. 데이터베이스에는 모든 게시물, 사용자, 설정이 저장됩니다. 프로젝트 디렉터리에는 config.php, composer.json(실제로 실행 중인 확장 기능을 기록하는 파일), 그리고 업로드된 아바타와 로고가 포함된 assets/이 있습니다. vendor/은 건너뛰어도 됩니다. composer install이 composer.lock를 기반으로 이를 다시 생성하며, storage/ 또한 스스로 재생성되기 때문입니다. 백업 파일은 서버 외부로 복사하십시오. 보호 대상인 서버 내부에만 존재하는 백업은 진정한 백업이 아닙니다. 복구 과정은 동일한 버전의 Flarum을 새로 설치하고, composer install을 수행한 뒤, 저장해 둔 파일을 제자리에 배치하고 SQL 파일을 로드하는 순서로 진행됩니다.
FAQ
Can Flarum run on a 1 GB VPS?
Yes, for a small community. Flarum in normal operation is PHP-FPM answering requests plus MariaDB, and with pm = ondemand the PHP workers only exist while someone is reading. The peak is the install itself: composer create-project resolves the whole dependency graph in memory and is the step most likely to be stopped by the out-of-memory killer. Add a swap file before you install, or run Composer once on a larger machine and copy the tree across.
Why do discussion links return 404 when the front page works?
Your nginx server block is missing include /srv/flarum/.nginx.conf;. Flarum handles URLs such as /d/1-hello-world inside PHP, and that path is not a file on disk. Without the snippet's try_files $uri $uri/ /index.php?$query_string rule, nginx searches for a directory called d, fails, and returns 404 itself without ever calling PHP. On Apache the same routing comes from public/.htaccess, which is ignored unless the <Directory> block sets AllowOverride All.
Why did my forum lose all its styling after I enabled HTTPS?
Flarum stores its base URL in config.php, captured from whatever address you used when running the installer. If you installed over plain HTTP, Flarum keeps generating http:// asset URLs, and the browser blocks them as mixed content on an HTTPS page, which leaves unstyled text. Edit the url key in /srv/flarum/config.php to the https:// address and run php flarum cache:clear as the user that owns the files.
Why does nobody receive the signup confirmation email?
Check the mail driver first. The mail driver needs a local sendmail binary that a fresh Ubuntu VPS does not have, and the log driver writes to storage/logs/ and sends nothing. Switch to smtp, use port 587 with encryption set to tls because most providers block outbound port 25, and press Send Test Mail. If the log shows a successful send and the mail still never arrives, the problem is deliverability rather than configuration, so publish SPF and DKIM records for your sending domain.
Should I install Flarum 1.8 or 2.0?
Install 1.8. As of August 2026 Flarum 2.0 is a release candidate, and more importantly many extensions still declare a flarum/core constraint that stops at 1.x. Installing 2.0 today means running a forum whose extensions cannot be updated together, which is the exact failure composer why-not exists to diagnose. Pin with flarum/flarum:^1.8.0 and revisit once the extensions you depend on have published 2.0 releases.