インストールガイド · 5 min read · Oct 21, 2025

Ubuntu 20.04にNginxを使ってBookStackをインストールする方法

BookStackは、情報を整理し保存するための自己ホスト型のオープンソースで使いやすいプラットフォームです。Wiki、ドキュメンテーションウェブサイト、ノートテイキングアプリケーションなど、さまざまな目的に使用できます。Laravel PHPフレームワークを使用して構築されており、データを保存するためにMySQLを使用します。編集目的のために、WYSIWYGまたはMarkdownエディタのいずれかを選択できます。多要素認証とダークモードをサポートし、多言語対応です。

このチュートリアルでは、Ubuntu 20.04ベースのサーバーにBookStackをインストールする方法を学びます。

前提条件

  1. Ubuntu 20.04を実行しているサーバー
  2. サーバーを指す完全修飾ドメイン名(FQDN)
  3. sudo権限を持つ非rootユーザー
  4. PHPバージョン7.3以上
  5. MySQL>=5.6およびMariaDB>=10.0
  6. GitおよびComposer。

ステップ1 - ファイアウォールの設定

最初のステップはファイアウォールを設定することです。Ubuntuにはデフォルトでufw(Uncomplicated Firewall)が付属しています。

ファイアウォールが実行中かどうかを確認します。

$ sudo ufw status

次の出力が得られるはずです。

Status: inactive

SSHポートを許可して、ファイアウォールを有効にしたときに現在の接続が切断されないようにします。

$ sudo ufw allow OpenSSH

HTTPおよびHTTPSポートも許可します。

$ sudo ufw allow 80
$ sudo ufw allow 443

ファイアウォールを有効にします。

$ sudo ufw enable
コマンドは既存のssh接続を中断する可能性があります。操作を続行しますか (y|n)? y
ファイアウォールはアクティブで、システム起動時に有効になっています

再度ファイアウォールの状態を確認します。

$ 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 --version

ステップ3 - 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 Technologies

ステップ4 - 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-server

MariaDBのインストールを保護します。

$ 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 mysql

Bookstack用の新しいデータベースを作成します。

$ create database bookstack;

新しいデータベースユーザーを作成します。

$ CREATE USER 'bookstackuser'@'localhost' identified by 'bookstackpassword';

強力なパスワードを選択します。

ユーザーにデータベースへの権限を付与します。

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `bookstack`.* to 'bookstackuser'@'localhost';

MySQLシェルを終了します。

$ exit

ステップ5 - 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 verified

Composerをインストールします。

$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

そのバージョンを確認してインストールを確認します。

$ composer --version
Composer version 2.1.9 2021-10-05 09:47:38

ステップ6 - BookStackのダウンロードとインストール

BookStackアプリのルートフォルダーを作成します。

$ sudo mkdir -p /var/www/bookstack

/var/www/bookstackディレクトリの所有権を現在ログインしているユーザーに変更します。

$ sudo chown -R $USER:$USER /var/www/bookstack

BookStack 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!     *
************************************

 本当にこのコマンドを実行しますか? (yes/no) [no]:
 > yes

アプリケーションキーが正常に設定されました。

データベースを更新します。

$ php artisan migrate
************************************
*     Application In Production!     *
**************************************

 本当にこのコマンドを実行しますか? (yes/no) [no]:
 > yes
マイグレーションテーブルが正常に作成されました。
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 snapd

Snapdのバージョンが最新であることを確認します。

$ sudo snap install core 
$ sudo snap refresh core

Certbotをインストールします。

$ sudo snap install --classic certbot

次のコマンドを使用して、Certbotコマンドが/usr/binディレクトリにシンボリックリンクを作成して実行できることを確認します。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

インストールを確認します。

$ certbot --version
certbot 1.20.0

SSL証明書を生成します。

$ 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 2048

Let’s Encryptの自動更新のためのチャレンジウェブルートディレクトリを作成します。

$ sudo mkdir -p /var/lib/letsencrypt

SSLを更新するための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-renew

ステップ8 - 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.list

Nginxをインストールします。

$ sudo apt install nginx

インストールを確認します。

$ nginx -v
nginx version: nginx/1.20.1

Nginxサービスを有効にします。

$ sudo systemctl enable nginx

PHP-FPMの設定

/etc/php/7.4/fpm/pool.d/www.confファイルを開きます。

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

PHPプロセスの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-fpm

Nginxの設定

/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.conf

include /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/bookstack

ステップ9 - BookStackを実行する

あなたのBookstackは使用する準備が整いました。ブラウザでhttps://bookstack.example.comのURLを開くと、ログインページが表示されます。

BookStackログインページ

デフォルトの管理者アカウント[email protected]とパスワードpasswordを使用してログインします。設定 >> ユーザーページを開き、新しいユーザーを追加ボタンをクリックします。

BookStack新しいユーザーを追加

ユーザーの詳細を入力し、ユーザー役割の下の管理者ボックスにチェックを入れ、SMTPの詳細を設定していないため、ユーザー招待メールを送信のチェックを外します。強力なパスワードを選択します。完了したら保存をクリックします。

BookStack新しいユーザーページ

次に、デフォルトの管理者ユーザーをクリックし、ユーザーを削除ボタンをクリックしてユーザーを削除します。

管理者ユーザーを削除

削除する前にドロップダウンメニューから新しく作成したユーザーを選択して、管理者ユーザーの所有権を移転します。完了するには確認をクリックします。そのユーザーでログインしている場合は、自動的にログアウトされます。新しく作成したユーザーで再度ログインする必要があります。

ユーザー削除確認

BookStackのバックアップと復元

BookStackのバックアップ

データベースとファイルを別々にバックアップする必要があります。データベースをバックアップするには、mysqldumpツールを使用します。

$ sudo mysqldump -u bookstackuser bookstack > bookstack.backup.sql

次のファイルとフォルダーもバックアップする必要があります。

  1. .env - 重要な設定を含むファイル。
  2. public/uploads - アップロードされた画像を含むフォルダー。
  3. storage/uploads - アップロードされたページ添付ファイルを含むフォルダー。

次のコマンドを実行して、上記のファイルとフォルダーの圧縮アーカイブを作成します。

$ sudo tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads

BookStackの復元

次のコマンドを実行してデータベースを復元します。

$ 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をインストールするためのチュートリアルが終了します。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。