Wekan(オープンソースかんばん)をUbuntu 16.04にインストールする方法

Wekanは、Meteor JavaScriptフレームワークで構築されたカンバンボードです。これはオープンソースであり、Trelloに代わる自己ホスト型の代替と見なされ、ほぼ同じ機能を提供します。カードベースの「to-do」管理リストを作成できます。Wekanは、共同作業環境での作業時に生産性を向上させるのに非常に役立ちます。Wekanは完全に応答性の高いWebインターフェースを備えており、多くの言語で積極的に翻訳されています。

前提条件

このチュートリアルではwekan.example.com、Vultrインスタンスを指すドメイン名としてを使用します。例のドメイン名をすべて実際のドメイン名に置き換えてください。

How to Update Ubuntu 16.04のガイドを使用してベースシステムを更新します。システムが更新されたら、依存関係のインストールに進みます。

Node.jsをインストールする

WekanはのみをサポートしますNode.js LTS version 4.8。Node.jsをインストールするには、ノードバージョンマネージャを使用します。インストールnvmインストーラスクリプトを実行して。

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash

をすぐに使用するにはnvm、これを実行します。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

が正常nvmにインストールされている場合は、バージョンを確認できます。

user@vultr:~$ nvm --version
0.33.4

Node.jsをインストールします。

nvm install v4.8

Node.jsのデフォルトバージョンを設定します。

nvm use node

Node.jsが正常にインストールされている場合は、そのバージョンを確認できます。

node -v

この出力が表示されます。

user@vultr:~$ node -v
v4.8.4

NVMは、現在のユーザーのみにNode.jsをインストールします。Node.jsがグローバルにアクセスできるようにするには、これを実行します。

n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr

Node.jsがとして利用可能になりました/usr/bin/node

user@vultr:~$ sudo which node
/usr/bin/node

MongoDBをインストールする

MongoDBは無料でオープンソースのNoSQLデータベースサーバーです。テーブルを使用してデータを編成する従来のデータベースとは異なり、MongoDBはドキュメント指向であり、スキーマのないJSONのようなドキュメントを使用します。WekanはMongoDBを使用してデータを格納します。

Wekanはとのみ互換性がありMongoDB version 3.2ます。新しいリポジトリファイルを作成します。

echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

MongoDB公開GPGキーをインポートし、パッケージリストを更新します。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
sudo apt update

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

sudo apt install -y mongodb-org

MongoDBを起動して、自動的に起動するようにします。

sudo systemctl start mongod
sudo systemctl enable mongod

MongoDBインスタンスの保護

デフォルトでは、MongoDBサーバーで有効になっている認証はありません。サーバーのターミナルにアクセスできるすべてのユーザーは、MongoDBのインストールに対する完全な権限を持ちます。データベースサーバーを保護し、権限のないユーザーのアクセスを制限するには、サーバーで認証を設定する必要があります。

MongoDBは、MongoDBでmongoクエリを実行するために使用されるシェルを提供します。mongoシェルに切り替えます。

mongo

root権限を持つ新しいMongoDBユーザーを作成します。任意のユーザー名を使用できます。必ずパスワードを置き換えてください

db.createUser(
  {
    user: "admin",
    pwd: "StrongAdminPassword",
    roles: [ { role: "root", db: "admin" } ]
  }
)

次の出力が表示されます。

user@vultr:~$ mongo
MongoDB shell version: 3.2.17
connecting to: test
Welcome to the MongoDB shell.

...

2017-09-30T18:11:40.274+0000 I CONTROL  [initandlisten]
> db.createUser(
...   {
...     user: "admin",
...     pwd: "StrongAdminPassword",
...     roles: [ { role: "root", db: "admin" } ]
...   }
... )
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

" Ctrl+C"を押して、LinuxターミナルへのMongoDBコマンドインターフェイスを終了します。

MongoDB構成ファイルを編集します。

sudo nano /etc/mongod.conf

ファイルの最後に次の行を追加します。

security:
 authorization: enabled

MongoDBを再起動して、構成の変更を有効にします。

sudo systemctl restart mongod

セキュリティが有効になったので、mongoコマンドを使用して再びmongoシェルに切り替えて、セキュリティが機能しているかどうかをテストできます。今回show dbsは、データベースのリストを表示するなどのクエリを実行すると、認証の失敗を報告するメッセージが表示されます。sudo作成したばかりの新しいユーザーとしてログインをテストした後、ユーザーを再び終了します。

administrator作成したユーザーとしてログインします。

mongo -u admin -p

ログインを成功させるには、ユーザーのパスワードを入力します。wekanWekanデータの保存に使用されるデータベースの新しいユーザーを作成します。

use wekan
db.createUser(
    {
      user: "wekan",
      pwd: "StrongPassword",
      roles: ["readWrite"]
    }
 ) 

StrongPassword強力なパスワードに置き換えてください。次の出力が表示されます。

user@vultr:~$ mongo -u admin -p
MongoDB shell version: 3.2.17
Enter password:
connecting to: test

...

2017-09-30T18:13:26.007+0000 I CONTROL  [initandlisten]
>
> use wekan
switched to db wekan
> db.createUser(
...     {
...       user: "wekan",
...       pwd: "StrongPassword",
...       roles: ["readWrite"]
...     }
...  )
Successfully added user: { "user" : "wekan", "roles" : [ "readWrite" ] }

Wekanをインストールする

新しいリリースが頻繁に発生するため、GithubWekanリリースへの最新のリンクを確認してください。インストーラーパッケージへのリンクを置き換えて、Githubから最新バージョンのWekanをダウンロードします。

cd ~
wget https://github.com/wekan/wekan/releases/download/v0.44/wekan-0.44.tar.gz

ダウンロードしたアーカイブをという名前の新しいディレクトリに抽出しますwekan

mkdir wekan
tar xzvf wekan-*.tar.gz -C wekan

Node.js依存関係をインストールします。

cd wekan/bundle/programs/server && npm install

Wekanサーバーは環境変数から構成を読み取ります。次のコマンドを実行して、構成を環境変数として設定します。

export MONGO_URL='mongodb://wekan:[email protected]:27017/wekan?authSource=wekan'
export ROOT_URL='http://wekan.example.com'
export MAIL_URL='smtp://user:[email protected]:25/'
export MAIL_FROM='[email protected]'
export PORT=4000

wekan作成したユーザーのMongoDBパスワードを必ず置き換えてください。また、SMTPサーバーの設定に従ってメールURLを更新します。電子メールサーバーの準備ができていない場合は、いつでもこの構成を変更できます。

アプリケーションをすぐに開始します。

cd ~/wekan/bundle
node main.js

これで、にアクセスしてアプリケーションにアクセスできますhttp://wekan.example.com:4000。Wekanかんばんボードにログインするためのインターフェースが表示されます。

本番環境で使用する場合は、標準HTTPポートでアプリケーションを提供するリバースプロキシとsystemd、アプリケーションプロセスを管理するサービスを設定することをお勧めします。このチュートリアルでは、Nginx Webサーバーをリバースプロキシとして使用し、Let's Encryptの無料SSLで保護します。

Nginxリバースプロキシの設定

Certbot PPAリポジトリをシステムに追加します。

sudo add-apt-repository ppa:certbot/certbot
sudo apt update

Let's Encrypt CAのクライアントアプリケーションであるNginxとCertbotをインストールします。

sudo apt -y install certbot nginx

注:Let's Encrypt CAから証明書を取得するために使用しているドメイン名は、サーバーに向けられている必要があります。クライアントは、証明書を発行する前にドメイン認証局を確認します

SSL証明書を生成します。

sudo certbot certonly --standalone -d wekan.example.com

生成された証明書は、/etc/letsencrypt/live/wekan.example.com/ディレクトリに格納される可能性があります。SSL証明書はとして保存されfullchain.pem、秘密鍵はとして保存されprivkey.pemます。

証明書を暗号化しましょう90日で有効期限が切れるので、Cronjobを使用して証明書の自動更新を設定することをお勧めします。Cronは、定期的なタスクを実行するために使用されるシステムサービスです。

cronジョブファイルを開きます。

sudo crontab -e

ファイルの最後に次の行を追加します。

30 5 * * * /usr/bin/certbot renew --quiet

上記のcronジョブは、毎日午前5時30分に実行されます。証明書の有効期限が切れる場合は、自動的に更新されます。

新しい仮想ホストを作成します。

sudo nano /etc/nginx/sites-available/wekan.example.com.conf

ファイルに以下を入力します。

upstream wekan {
        server 127.0.0.1:4000;
}
server {
        listen  80;
        listen [::]:80;
        server_name  wekan.example.com;

        location / {
                if ($ssl_protocol = "") {
                        rewrite     ^   https://$server_name$request_uri? permanent;
                }
        }
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name wekan.example.com;

        add_header Strict-Transport-Security "max-age=15768000";

        ssl_certificate /etc/letsencrypt/live/wekan.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/wekan.example.com/privkey.pem;

        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;

        ssl_stapling on;
        ssl_stapling_verify on;

        error_page 497  https://$host:$server_port$request_uri;
        location / {
            proxy_pass http://wekan;
            proxy_http_version 1.1;
            proxy_set_header Host $host:$server_port;
            proxy_set_header Referer $http_referer;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Ssl on;
            proxy_set_header X-Nginx-Proxy true;

            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_redirect off;

            proxy_send_timeout 86400;
            proxy_read_timeout 86400;
        }
}

wekan.example.com上記の構成で実際のドメイン名に置き換えます。

新しく追加したサイトを有効にします。

sudo ln -s /etc/nginx/sites-available/wekan.example.com.conf /etc/nginx/sites-enabled/wekan.example.com.conf

Nginxを再起動して、変更を有効にします。

sudo systemctl restart nginx

起動時にNginxが自動的に起動するようにします。

sudo systemctl enable nginx

Systemdサービスのセットアップ

プロセスを実行するための新しいユーザーを作成します。

sudo adduser wekan --shell /usr/sbin/nologin --home /opt/wekan

次に、すべてのファイルを/opt/wekanディレクトリに移動します。

sudo mv ~/wekan/* /opt/wekan/

新しく作成したユーザーにファイルの所有権を提供します。

sudo chown -R wekan:wekan /opt/wekan

Wekanは構成ファイルからデータを取得しません。代わりに、環境変数からアクセスします。環境変数を格納する新しいファイルを作成します。環境変数を含むファイルは、Systemdサービスを介して渡されます。

環境変数を格納する新しいファイルを作成します。

 sudo nano /opt/wekan/config.env

ファイルに次の内容を入力します。

MONGO_URL='mongodb://wekan:[email protected]:27017/wekan?authSource=wekan'
ROOT_URL='http://wekan.example.com'
MAIL_URL='smtp://user:[email protected]:25/'
MAIL_FROM='[email protected]'
PORT=4000
HTTP_FORWARDED_COUNT=1

usernameとを交換してくださいpassword

wekan実行して、所有権をユーザーに提供します。

sudo chown -R wekan:wekan /opt/wekan/config.env

Wekan systemdサービス用の新しいサービスファイルを作成します。

sudo nano /etc/systemd/system/wekan.service

ファイルに以下を入力します。

[Unit]
Description=Wekan Server
After=syslog.target
After=network.target

[Service]
Type=simple
Restart=on-failure
StartLimitInterval=86400
StartLimitBurst=5
RestartSec=10
ExecStart=/usr/bin/node /opt/wekan/bundle/main.js
EnvironmentFile=/opt/wekan/config.env
ExecReload=/bin/kill -USR1 $MAINPID
RestartSec=10
User=wekan
Group=wekan
WorkingDirectory=/opt/wekan
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=Wekan

[Install]
WantedBy=multi-user.target

ファイルを保存して、エディターを終了します。これで、Wekanを簡単に起動できます。

sudo systemctl start wekan

起動時にWekanが自動的に起動するようにします。

sudo systemctl enable wekan

Wekanサービスのステータスを確認します。

sudo systemctl status wekan

まとめ

これで、Wekanインスタンスにアクセスできますhttps://wekan.example.com。新しいアカウントを作成することから始めます。アカウントを作成したら、新しく作成したユーザーに管理アクセスを有効にできます。管理ユーザーとしてMongoDBシェルにログインします。

mongo -u wekan -p --authenticationDatabase "wekan"

次に、wekanデータベースを選択してオブジェクトを更新し、ユーザーを管理ユーザーに昇格させます。

use wekan
db.users.update({username:'admin_user'},{$set:{isAdmin:true}})

admin_user作成したユーザーの実際のユーザー名に置き換えてください。管理インターフェースから、自己登録を無効にし、SMTP設定を更新することができます。

おめでとうございます。VultrUbuntuインスタンスにWekan Kanbanボードが正常にインストールされました。



ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。

macOS Catalina 10.15.4サプリメントの更新により、解決するよりも多くの問題が発生しています

macOS Catalina 10.15.4サプリメントの更新により、解決するよりも多くの問題が発生しています

最近、Appleは問題を修正するための補足アップデートであるmacOS Catalina 10.15.4をリリースしましたが、このアップデートにより、Macマシンのブリックにつながる問題がさらに発生しているようです。詳細については、この記事をお読みください

原子力が必ずしも悪ではないことを証明する5つの例

原子力が必ずしも悪ではないことを証明する5つの例

原子力は、過去の出来事のために私たちが決して尊重しないことを常に軽蔑していますが、それは必ずしも悪ではありません。詳細については、投稿をお読みください。

AIはどのようにしてプロセス自動化を次のレベルに引き上げることができますか?

AIはどのようにしてプロセス自動化を次のレベルに引き上げることができますか?

これを読んで、人工知能が小規模企業の間でどのように人気を博しているか、そして人工知能がどのように成長し、競合他社に優位に立つ可能性を高めているかを理解してください。

ジャーナリングファイルシステムとは何ですか、そしてそれはどのように機能しますか?

ジャーナリングファイルシステムとは何ですか、そしてそれはどのように機能しますか?

私たちのコンピューターは、ジャーナリングファイルシステムと呼ばれる組織化された方法ですべてのデータを保存します。これは、検索を押すとすぐにコンピューターがファイルを検索して表示できるようにする効率的な方法です。https://wethegeek.com/?p = 94116&preview = true

ビッグデータは人工知能をどのように変えていますか?

ビッグデータは人工知能をどのように変えていますか?

ビッグデータと人工知能は流行語ですが、それらがどのように相互に関連しているか知っていますか?さて、この記事を最後まで読んで、同じことを知ってください。

LiteCartショッピングカートプラットフォームをUbuntu 16.04にインストールする方法

LiteCartショッピングカートプラットフォームをUbuntu 16.04にインストールする方法

LiteCartは、PHP、jQuery、およびHTML 5で記述された無料のオープンソースのショッピングカートプラットフォームです。シンプルで軽量、使いやすいeコマースソフトウォー

DebianでNFS共有をセットアップする

DebianでNFS共有をセットアップする

NFSはネットワークベースのファイルシステムであり、コンピューターはコンピューターネットワークを介してファイルにアクセスできます。このガイドでは、NFを介してフォルダーを公開する方法について説明します

Fedora 28にMatomo Analyticsをインストールする方法

Fedora 28にMatomo Analyticsをインストールする方法

別のシステムを使用していますか?Matomo(旧Piwik)は、Google Analyticsのオープンな代替手段であるオープンソースの分析プラットフォームです。Matomoのソースはoでホストされています

UbuntuでNginxをセットアップしてライブHLSビデオをストリーミングする

UbuntuでNginxをセットアップしてライブHLSビデオをストリーミングする

HTTPライブストリーミング(HLS)は、Apple Inc.によって実装された非常に堅牢なストリーミングビデオプロトコルです。HLSは、ファイアウォール、プロキシ、