서버 설치 · 9 min read · Oct 21, 2025
Ubuntu 20.04에서 Nginx로 BookStack 설치하는 방법

BookStack은 정보를 조직하고 저장하기 위한 자가 호스팅, 오픈 소스, 사용하기 쉬운 플랫폼입니다. 위키, 문서 웹사이트 및 노트 작성 애플리케이션과 같은 여러 용도로 사용할 수 있습니다. Laravel PHP 프레임워크를 사용하여 구축되었으며 MySQL을 사용하여 데이터를 저장합니다. 편집 목적으로 WYSIWYG 또는 Markdown 편집기 중에서 선택할 수 있습니다. 다중 인증 및 다크 모드를 지원하며 다국어 기능을 제공합니다.
이 튜토리얼에서는 Ubuntu 20.04 기반 서버에 BookStack을 설치하는 방법을 배웁니다.
필수 조건
- Ubuntu 20.04를 실행하는 서버
- 서버를 가리키는 완전한 도메인 이름(FQDN)
- sudo 권한이 있는 비루트 사용자
- PHP 버전 7.3 이상
- MySQL>=5.6 및 MariaDB>=10.0
- Git 및 Composer.
1단계 - 방화벽 구성
첫 번째 단계는 방화벽을 구성하는 것입니다. Ubuntu는 기본적으로 ufw(간단한 방화벽)를 제공합니다.
방화벽이 실행 중인지 확인합니다.
$ sudo ufw status다음과 같은 출력이 표시되어야 합니다.
Status: inactiveSSH 포트를 허용하여 방화벽을 활성화할 때 현재 연결이 끊어지지 않도록 합니다.
$ sudo ufw allow OpenSSHHTTP 및 HTTPS 포트도 허용합니다.
$ sudo ufw allow 80
$ sudo ufw allow 443방화벽을 활성화합니다.
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup방화벽 상태를 다시 확인합니다.
$ sudo ufw status유사한 출력이 표시되어야 합니다.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)2단계 - Git 설치
첫 번째 단계는 Git을 설치하는 것입니다. BookStack을 다운로드하고 업데이트하는 데 필요합니다. 다음 명령을 실행하여 Git을 설치합니다.
$ sudo apt install git설치를 확인합니다.
$ git --version3단계 - PHP 및 확장 프로그램 설치
BookStack은 PHP에 의존하므로 PHP 및 그 확장 프로그램을 설치해야 합니다.
Ubuntu는 구식 PHP 버전을 제공합니다. 먼저 Ondrej의 PHP 저장소를 추가해야 합니다.
$ sudo add-apt-repository ppa:ondrej/php다음으로 BookStack에 필요한 PHP 및 확장 프로그램을 설치합니다.
$ sudo apt install php7.4-fpm php7.4-mbstring php7.4-gd php7.4-xml unzip php7.4-bcmath php7.4-curl php7.4-mysql설치를 확인합니다.
$ php --version
PHP 7.4.25 (cli) (built: Oct 22 2021 12:34:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies4단계 - MariaDB 설치 및 구성
Ubuntu는 구버전의 MariaDB를 제공합니다. 최신 버전을 설치하려면 공식 MariaDB 저장소를 추가합니다. 다음 명령을 실행하여 저장소를 추가합니다.
$ curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ sudo bash mariadb_repo_setup --mariadb-server-version=10.6다음 명령을 실행하여 MariaDB 서버를 설치합니다.
$ sudo apt install mariadb-serverMariaDB 설치를 안전하게 합니다.
$ sudo mysql_secure_installation여러 가지 프롬프트가 표시됩니다. 다음과 같이 답변합니다.
Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y다음 명령을 사용하여 MariaDB 셸에 연결합니다.
$ sudo mysqlBookstack을 위한 새 데이터베이스를 생성합니다.
$ create database bookstack;새 데이터베이스 사용자를 생성합니다.
$ CREATE USER 'bookstackuser'@'localhost' identified by 'bookstackpassword';강력한 비밀번호를 선택합니다.
사용자에게 데이터베이스에 대한 권한을 부여합니다.
$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `bookstack`.* to 'bookstackuser'@'localhost';MySQL 셸을 종료합니다.
$ exit5단계 - Composer 설치
Composer는 PHP의 종속성 관리 도구이며 BookStack이 기반으로 하는 Laravel에서 필요합니다.
Composer 설치 스크립트를 다운로드합니다.
$ curl -sS https://getcomposer.org/installer -o composer-setup.php다음 명령을 실행하여 설치 프로그램을 확인합니다.
$ HASH=`curl -sS https://composer.github.io/installer.sig`
$ echo $HASH
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"위 명령은 설치 프로그램의 해시 값을 가져와 다운로드한 스크립트와 일치시킵니다. 설치 프로그램을 실행할 수 있는 경우 다음과 같은 출력이 표시됩니다.
Installer verifiedComposer를 설치합니다.
$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer버전을 확인하여 설치를 확인합니다.
$ composer --version
Composer version 2.1.9 2021-10-05 09:47:386단계 - BookStack 다운로드 및 설치
BookStack 앱의 루트 폴더를 생성합니다.
$ sudo mkdir -p /var/www/bookstack현재 로그인한 사용자에게 /var/www/bookstack 디렉토리의 소유권을 변경합니다.
$ sudo chown -R $USER:$USER /var/www/bookstackBookStack Github 저장소의 릴리스 브랜치를 새로 생성된 폴더로 클론합니다.
$ cd /var/www/bookstack
$ git clone https://github.com/BookStackApp/BookStack.git --branch=release --single-branch .clone 명령 끝에 있는 dot를 놓치지 마세요. 이는 모든 파일이 새 디렉토리를 생성하는 대신 현재 디렉토리에 다운로드되도록 보장합니다.
/var/www/bookstack 디렉토리에서 Composer 설치 프로그램을 실행합니다.
$ composer install --no-dev.env.example 파일을 .env로 복사하여 설치를 위한 환경 변수를 저장합니다.
$ cp .env.example .env편집을 위해 파일을 엽니다.
$ sudo nano .env애플리케이션 URL 및 데이터베이스 세부정보를 입력합니다. 이메일 기능을 사용할 경우 SMTP 세부정보를 입력하거나 그렇지 않으면 파일에서 삭제합니다.
APP_URL=https://example.com
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=bookstackpassword작업이 완료되면 Ctrl + X를 눌러 파일을 저장하고 완료되면 Y를 입력합니다. 구성할 수 있는 설정이 더 많이 있습니다. 더 많은 정보를 원하시면 .env.example.complete 파일을 열고 필요한 설정을 .env 파일로 복사하세요.
고유한 애플리케이션 키를 생성합니다. 이 값은 .env 파일에 자동으로 입력됩니다. 명령을 진행하려면 yes를 입력합니다.
$ php artisan key:generate
**************************************
* Application In Production! *
************************************
Do you really wish to run this command? (yes/no) [no]:
> yes
Application key set successfully.데이터베이스를 업데이트합니다.
$ php artisan migrate************************************ * Application In Production! * ************************************** Do you really wish to run this command? (yes/no) [no]: > yes Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.12 seconds) .......
7단계 - Let’s Encrypt SSL 설치
Let’s Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 설치해야 합니다.
이를 위해 Snapd 패키지 설치 프로그램을 사용할 것입니다. 대부분의 Ubuntu 서버는 Snap 도구를 제공하지 않습니다. 이를 해결하려면 Snap을 설치합니다.
$ sudo apt install snapdSnapd 버전이 최신인지 확인합니다.
$ sudo snap install core
$ sudo snap refresh coreCertbot을 설치합니다.
$ sudo snap install --classic certbot다음 명령을 사용하여 Certbot 명령이 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 실행될 수 있도록 합니다.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot설치를 확인합니다.
$ certbot --version
certbot 1.20.0SSL 인증서를 생성합니다.
$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email protected] -d example.com위 명령은 서버의 /etc/letsencrypt/live/etherpad.example.com 디렉토리에 인증서를 다운로드합니다.
Diffie-Hellman 그룹 인증서를 생성합니다.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Let’s Encrypt 자동 갱신을 위한 챌린지 웹 루트 디렉토리를 생성합니다.
$ sudo mkdir -p /var/lib/letsencryptSSL을 갱신하기 위한 Cron 작업을 생성합니다. 매일 실행되어 인증서를 확인하고 필요 시 갱신합니다. 먼저 /etc/cron.daily/certbot-renew 파일을 생성하고 편집합니다.
$ sudo nano /etc/cron.daily/certbot-renew다음 코드를 붙여넣습니다.
#!/bin/sh
certbot renew --cert-name bookstack.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"작업이 완료되면 Ctrl + X를 눌러 파일을 저장하고 완료되면 Y를 입력합니다.
작업 파일의 권한을 변경하여 실행 가능하게 만듭니다.
$ sudo chmod +x /etc/cron.daily/certbot-renew8단계 - Nginx 설치 및 구성
Ubuntu는 구버전의 Nginx를 제공합니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.
Nginx의 안정적인 버전용 저장소를 추가합니다.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.listNginx를 설치합니다.
$ sudo apt install nginx설치를 확인합니다.
$ nginx -v
nginx version: nginx/1.20.1Nginx 서비스를 활성화합니다.
$ sudo systemctl enable nginxPHP-FPM 구성
/etc/php/7.4/fpm/pool.d/www.conf 파일을 엽니다.
$ sudo nano /etc/php/7.4/fpm/pool.d/www.confPHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서 user=www-data 및 group=www-data 줄을 찾아 nginx로 변경합니다.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = nginx
group = nginx
...또한 파일에서 listen.owner=www-data 및 listen.group=www-data 줄을 찾아 nginx로 변경합니다.
listen.owner = nginx
listen.group = nginx작업이 완료되면 Ctrl + X를 눌러 파일을 저장하고 완료되면 Y를 입력합니다.
PHP-fpm 프로세스를 재시작합니다.
$ sudo systemctl restart php7.4-fpmNginx 구성
/etc/nginx/conf.d/bookstack.conf 파일을 생성하고 열어 편집합니다.
$ sudo nano /etc/nginx/conf.d/bookstack.conf다음 코드를 붙여넣습니다.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name bookstack.example.com;
access_log /var/log/nginx/bookstack.access.log;
error_log /var/log/nginx/bookstack.error.log;
ssl_certificate /etc/letsencrypt/live/bookstack.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bookstack.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/bookstack.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
root /var/www/bookstack/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name bookstack.example.com;
return 301 https://$host$request_uri;
}작업이 완료되면 Ctrl + X를 눌러 파일을 저장하고 완료되면 Y를 입력합니다.
/etc/nginx/nginx.conf 파일을 열어 편집합니다.
$ sudo nano /etc/nginx/nginx.confinclude /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.
server_names_hash_bucket_size 64;작업이 완료되면 Ctrl + X를 눌러 파일을 저장하고 완료되면 Y를 입력합니다. Nginx 구성을 다시 확인합니다.
Nginx 구성 파일 구문을 확인합니다.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful마지막으로 Nginx 서비스를 시작하여 새 구성을 활성화합니다.
$ sudo systemctl start nginx디렉토리의 소유권을 nginx 사용자로 변경하여 웹 서버가 폴더에 접근하고 쓸 수 있도록 합니다.
$ sudo chown -R nginx:nginx /var/www/bookstack9단계 - BookStack 실행
이제 Bookstack을 사용할 준비가 되었습니다. 브라우저에서 URL https://bookstack.example.com을 열면 로그인 페이지가 표시됩니다.

기본 관리자 계정 [email protected]와 비밀번호 password로 로그인합니다. Settings >> Users 페이지를 열고 ADD NEW USER 버튼을 클릭합니다.

사용자 세부정보를 입력하고 User Roles 아래의 Admin 상자를 체크하고 SMTP 세부정보를 설정하지 않았으므로 Send user invite email의 체크를 해제합니다. 강력한 비밀번호를 선택합니다. 완료되면 Save를 클릭합니다.

다음으로 기본 Admin 사용자를 클릭하고 Delete User 버튼을 클릭하여 사용자를 삭제합니다.

삭제하기 전에 드롭다운 메뉴에서 새로 생성한 사용자로 Admin 사용자의 소유권을 이전합니다. 완료하려면 Confirm을 클릭합니다. 해당 사용자로 로그인한 경우 자동으로 로그아웃됩니다. 새로 생성한 사용자로 다시 로그인해야 합니다.

BookStack 백업 및 복원
BookStack 백업
데이터베이스와 파일을 별도로 백업해야 합니다. 데이터베이스를 백업하려면 mysqldump 도구를 사용합니다.
$ sudo mysqldump -u bookstackuser bookstack > bookstack.backup.sql다음 파일 및 폴더도 백업해야 합니다.
.env- 중요한 구성이 포함된 파일.public/uploads- 업로드된 이미지가 포함된 폴더.storage/uploads- 업로드된 페이지 첨부 파일이 포함된 폴더.
위의 파일 및 폴더의 압축 아카이브를 생성하려면 다음 명령을 실행합니다.
$ sudo tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploadsBookStack 복원
데이터베이스를 복원하려면 다음 명령을 실행합니다.
$ sudo mysql -u bookstack < bookstack.backup.sql새로운 버전의 BookStack으로 복원하는 경우 sudo php artisan migrate 명령을 실행해야 합니다.
위에서 생성한 압축 파일을 복원하려면 다음 명령을 사용합니다.
$ sudo tar -xvzf bookstack-files-backup.tar.gz권한을 변경해야 할 수도 있습니다.
BookStack 업데이트
BookStack을 업데이트하기 전에 앞서 언급한 프로세스를 사용하여 적절한 백업을 수행했는지 확인하십시오.
BookStack을 업데이트하려면 Git 저장소에서 원본 파일을 가져옵니다.
$ cd /var/www/bookstack
$ sudo git pull origin release설치를 계속하려면 다음 명령을 실행합니다.
$ sudo composer install --no-dev
$ sudo php artisan migrate캐시를 지우기 위해 다음 명령도 실행해야 합니다.
$ sudo php artisan cache:clear
$ sudo php artisan config:clear
$ sudo php artisan view:clear결론
이로써 Ubuntu 20.04 서버에 BookStack을 설치하는 튜토리얼이 끝났습니다. 질문이 있으시면 아래 댓글에 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.