📔

Outline Wiki をホスティングする

7 min read

Outline is 何?

Outline というのはオープンソースで開発されているナレッジベースです。
Slack や Google Workspace などを用いてチームメンバー内での共有はもちろん、一部の記事だけを一般公開することもできる優れたツールです。
私は個人用のメモとして活用しています。
Markdownも使用でき、編集画面がそのままプレビューになっているのでとても使いやすいです。

概要

今回は以下の環境で Outline をホスティングする方法をまとめます。

  • Ubuntu 20.04 (さくら VPS)
    • CPU: 仮想2Core
    • メモリ: 1GB

また、今回のやり方では Docker は使用しませんが、Dockerを使用する場合は適宜読み替えて設定すればできるとおもいます。

インストール

Outline #Installation
Outline をホスティングするには以下のアプリケーションが必要です。

  • Yarn
  • Node.js
  • Postgresql
  • Redis
  • AWS S3 または minio (この記事ではminioを使用します)
  • Slack や Google Workspace など

ここからは VPS に SSH 接続をしてから構築していきます。
作業ユーザーがわかるようユーザー名やパスも記入してあります。
コピペする場合は面倒ですが頑張って下さい

Node.js & Yarn

# nodejs npm をインストール
ubuntu@ ~ $ sudo apt install -y nodejs npm
# n をインストール
ubuntu@ ~ $ sudo npm install -g n
# 安定版の nodejs npm をインストール
ubuntu@ ~ $ sudo n stable
# 最初に入れたものが競合しないよう削除
ubuntu@ ~ $ sudo apt purge -y nodejs npm

ubuntu@ ~ $ node -v # or $ npm -v でバージョンを確認する
# Yarn をインストール
ubuntu@ ~ $ sudo npm install -g yarn

Postgresql

ubuntu@ ~ $ sudo apt install -y postgresql

インストールすると postgres というユーザーが作成されます

# ユーザー postgres にログイン
ubuntu@ ~   $ sudo su - postgres

# postgresql へ接続
postgres@ ~ $ psql

# postgresql用新規ユーザーの作成 パスワード(hogehoge)は各自で設定して下さい
postgres=# CREATE USER outline WITH PASSWORD 'hogehoge';
postgres=# exit;

postgres@ ~ $ exit

Trust認証に変更する

ubuntu@ ~ $ sudo nano /etc/postgresql/13/main/pg_hab.conf

local の peertrust に変更

...
# "local" is for Unix domain socket connections only
local   all             all                                     trust
...

Postgresql の再起動

ubuntu@ ~ $ sudo systemctl restart postgresql

Redis

ubuntu@ ~ $ sudo apt install -y redis-server

minio

ubuntu@ ~ $ sudo useradd -m minio
ubuntu@ ~ $ sudo su - minio

minio@ ~  $ wget https://dl.min.io/server/minio/release/darwin-amd64/minio
minio@ ~  $ chmod +x minio

minio@ ~  $ mkdir data
# minio を起動
minio@ ~ $ ./minio server ./data

# Ctrl + C で停止

ユーザーを作成

  1. http://{VPS_IP_ADDR}:{MINIO_CONSOLE_PORT} にアクセスすると管理パネルが表示されます
    • デフォルトならID/PWは minioadmin
  2. ログインできたら Admin > User から readwrite を許可したユーザーを作成

Bucket の作成

  1. 作成したユーザーで管理パネルにログインし直す
  2. 管理パネルのAdmin > Bucket から新規作成
  3. 作成したものを Public に変更

Service Account の作成

  1. Bucket が作成できたらその上の User > Service Account というところに移動
  2. Service Account を新規作成
  3. 表示された内容は後で使用するのでメモしておく

設定が終わったら minio は一度終了させておきましょう


ここまでで一段落終了です。

Outlineのセットアップ

ubuntu@ ~  $ sudo useradd -m outline
ubuntu@ ~  $ sudo su - outline

outline@ ~ $ git cline https://github.com/outline/outline.git app
outline@ ~ $ cd app
outline@ ~ $ cp .env.example .env
outline@ ~ $ nano .env

.env の設定

環境変数名 説明
SECRET_KEY openssl rand -hex 32 で生成された値を設定
UTILS_SECRET openssl rand -hex 32 で生成された値を設定
DATABASE_URL user pass の部分を Postgresql で作成したものに変更
PGSSLMODE コメントに合致する場合は # を外す
REDIS_URL ポートを変更した場合は該当する値に、変更してない場合は:6379
URL 外部からアクセスする際に使用するものを入力
PORT そのままでもいいが他のアプリと競合する場合は変更
AWS_ACCESS_KEY_ID minio で生成された Service Account の Key を設定
AWS_SECRET_ACCESS_KEY minio で生成された Service Account の Secret を設定
AWS_REGION minio で設定していない場合は空欄
AWS_S3_UPLOAD_BUCKET_URL 使用するURLを指定 外部からでもアクセス可能なもの
AWS_S3_UPLOAD_BUCKET_NAME minio で作成した Bucket 名を設定
SLACK_KEY https://api.slack.com/apps で作成したものを設定
SLACK_SECRET https://api.slack.com/apps で作成したものを設定

必要であれば .env 内部に NODE_ENV=production-ssl-disabled を記入する

NODE_ENV=production を指定するとリダイレクトが繰り返し行われる可能性があります。
NODE_ENV=production にする場合は .env 内の FORCE_HTTPSfalse に変更してください。

パッケージのインストール & ビルド & マイグレーション

outline@ ~/app $ yarn install
outline@ ~/app $ yarn build
outline@ ~/app $ yarn db:migrate

Nginx の設定とCertbot

ubuntu@ ~ $ sudo apt install -y certbot python3-certbot-nginx
ubuntu@ ~ $ sudo certbot certonly --standalone -d <your app domain>
ubuntu@ ~ $ sudo certbot certonly --standalone -d <your minio domain>

Virtual Host の設定

ubuntu@ ~ $ sudo nano /etc/nginx/sites-available/your.app.domain
server {
  listen 80;
  server_name your.app.domain; # !!要修正!!
  return 301 https://$host$request_uri;
}
server {
  listem 443 ssl http2;
  server_name your.app.domain; # !!要修正!!
  
  ssl_certificate /etc/letsencrypt/live/your.app.domain/fullchain.pem; # !!要修正!!
  ssl_certificate_key /etc/letsencrypt/live/your.app.domain/privkey.pem; # !!要修正!!
  ssl_protocols TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
  ssl_prefer_server_ciphers on;        
  proxy_set_header Host $host;
  proxy_set_header Upgrade $host_upgrade;
  proxy_set_header Connection "upgerade";
  
  location / {
    proxy_pass http://localhost:3000; # 設定したポートを指定
  }
}
ubuntu@~ $ sudo ln -s /etc/nginx/sites-available/your.app.domain /etc/nginx/sites-enable/your.app.domain

同様のものを minio 用のドメインにも作成。(ポート番号など違うところもあり)

nginxの再起動

ubuntu@ ~ $ sudo systemctl restart nginx

自動実行

このままでも、minio と outline を手動で実行すれば使用することが可能ですが、いちいち起動するのは面倒なので systemd で自動実行可能にします。

minio

ubuntu@ ~ $ sudo nano /etc/systemd/system/minio.service

↓Environment の内容は適宜修正してください

minio.service
[Unit]
Description=Minio File Storage
After=network.target

[Service]
Type=simple
User=minio
ExecStart=/home/minio/minio server ./data/
Restart=on-abort
WorkingDirectory=/home/minio
Environment=MINIO_SERVER_URL="your minio domain" MINIO_ROOT_USER=hogehoge MINIO_ROOT_PASSWORD=fugafuga MINIO_BROWSER_REDIRECT_URL="http://localhost"

[Install]
WantedBy=multi-user.target
ubuntu@ ~ $ sudo systemctl enable minio.service

Outline

ubuntu@ ~ $ sudo nano /etc/systemd/system/outline.service
outline.service
[Unit]
Description=Outline App
After=redis-server.service postgresql.service minio.service

[Service]
WorkingDirectory=/home/outline/app
Type=simple
ExecStart=/usr/bin/yarn start
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=outline-app

[Install]
WantedBy=multi-user.target
ubuntu@ ~ $ sudo systemctl enable outline.service

あとは再起動、もしくは以下のコマンド実行で起動できるはずです

ubuntu@ ~ $ sudo systemctl start minio.service
ubuntu@ ~ $ sudo systemctl start outline.service

実行状況の確認方法

ここまでですべてのサービスが systemd で実行されるようになりました。
それぞれのサービスがちゃんと起動できているかの確認をする方法を書いておきます。

ubuntu@ ~ $ sudo systemctl status minio.service

下の画像のように Active: active(running) と書かれていれば起動ができている状態です。

上のコマンドを実行した様子

おわりに

これで自由にメモを作成できますね。実はいろいろなオープンソースのナレッジベースアプリを見てきましたが、これが一番見た目も使い方もしっくりきました。
みなさんもたくさん使用してメモオタクになりましょう!


VPS初心者のため、修正するべきところや不要なものがあればコメントなどで指摘お願いします。

Discussion

ログインするとコメントできます