CentOS7でDiasporaを使用してオープンソースの分散型ソーシャルネットワークを実行する方法

提供:Dev Guides
移動先:案内検索

序章

ディアスポラは、オープンソースの分散型ソーシャルネットワークです。

分散型であるため、他のほとんどのソーシャルネットワークとは異なります。つまり、中央基盤のない真のネットワークです。 世界中にサーバー(ポッドと呼ばれる)があり、それぞれにサーバーへの登録を選択したユーザーのデータが含まれています。 これらのポッドは相互にシームレスに通信するため、任意のポッドに登録して、ネットワーク上のどこにいても連絡先と自由に通信できます。 詳細については、ディアスポラのアバウトページをご覧ください。

このチュートリアルでは、Diasporaポッドをセットアップして構成します。 特に、次のことを学びます。

  • 実稼働用にRailsアプリケーション(Diaspora)をセットアップする方法
  • DiasporaでMariaDBを構成する方法
  • NginxをDiasporaのリバースプロキシサーバーとして設定する方法
  • NginxのSSL構成のベストプラクティス
  • Railsアプリケーションで使用するカスタムsystemdユニットファイルを作成する方法
  • セキュリティを重視する場合は、ディアスポラとうまく連携するようにSELinuxを構成する方法に関するボーナスセクションがあります。

公式のディアスポラインストールガイドからの逸脱

Diaspora wiki インストールガイドでは、Rubyバージョンマネージャーを使用することを推奨しています。 それは可能ですが、代わりにシステムパッケージのRubyを使用します。 そうすれば、ソースからRubyをインストールしたり、RVMのような別の依存関係を心配したりする必要がなくなります。

公式ガイドでは、ディアスポラに必要な2つのアプリであるunicornsidekiqを起動するスクリプトであるscript/serverの使用も提案しています。 CentOS 7はsystemdを使用するため、代わりにこれらのサービス用に独自のinitファイルを作成します。

前提条件

チュートリアルを開始する前に、これらの前提条件を完了してください。

  • 1GBのRAMを搭載したCentOS7

    小規模なコミュニティに必要な最小RAMは1GB であるため、 1 GB / 1CPUドロップレットを使用します。

  • sudoユーザー

    以下のコマンドのほとんどには、root権限が必要です。 ユーザーの追加方法ガイドを確認して、ユーザーを追加し、sudo権限を付与してください。 このユーザーアカウントは、後で作成する diaspora ユーザーアカウントに追加され、Diasporaのサービスはより制限された特権で実行されます。

  • SSL証明書

    DiasporaはSSL証明書なしで実行できますが、他のポッドに接続するためのDiasporaのメカニズムには、有効なSSL証明書が必要です。 本番環境では、有料SSL証明書が必要です。 この記事で作成した2つの証明書ファイル(パブリック、プライベート)が必要なだけなので、そのチュートリアルのWebサーバー構成の部分をスキップできます。 私たちは自分たちでそれをします。

    または、テスト目的で、自己署名証明書を生成することもできます。 詳細については、このチュートリアルを参照するか、ホームディレクトリから次のコマンドを実行してください。

    openssl req \
       -newkey rsa:2048 -nodes -keyout ssl.key \
       -x509 -days 365 -out ssl.crt
  • ドロップレットのIPを指す登録済みドメイン名

  • スワップファイル

    1 GBサーバーの場合、少なくとも1GBのスワップファイルが必要です。 CentOS 7 チュートリアルでスワップを追加して、セットアップします。

  • CentOS7を使用したサーバーの初期設定ガイドに従ってください

  • 新しいCentOS7サーバーの追加の推奨手順ガイドに従ってください

ステップ1—ユーティリティをインストールする

後で役立つユーティリティ用のパッケージをいくつかインストールしてみましょう。

sudo yum install deltarpm yum-cron vim

次に、システムを更新します。

sudo yum update

手順2—EPELリポジトリを有効にする

EPELはEnterpriseLinux用のExtraPackagesの略で、ベースのCentOSリポジトリの一部ではないいくつかのパッケージをインストールする必要があります。

epel-releaseパッケージをインストールし、パッケージの更新を確認して、有効にしましょう。

sudo yum install epel-release
sudo yum update

以下に示すようにEPEL7gpgキーをインポートするように求められた場合は、「はい」と答えてください。

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
  Userid     : "Fedora EPEL (7) <[email protected]>"
  Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
  Package    : epel-release-7-5.noarch (@extras)
  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
  Is this ok [y/N]: y

ステップ3—RubyおよびCのパッケージをインストールする

次のパッケージは、ネイティブC拡張機能を持つDiasporaとそのgemに必要です。

パッケージをインストールします。

sudo yum install git ruby ruby-devel libxslt-devel libxml2-devel gcc gcc-c++ automake net-tools libcurl-devel libffi-devel make redis nodejs ImageMagick-devel

Redis は、Diasporaがデータベースとして使用するオープンソースのKeyValueデータストアです。 Redisがインストールされたので、起動時に有効になるように構成して、サービスを開始しましょう。

sudo systemctl enable redis
sudo systemctl start redis

ステップ4—専用のディアスポラユーザーを追加する

Diasporaを実行するためのユーザーアカウントを作成します。 このアカウントには任意の名前を付けることができますが、このチュートリアルでは、このユーザーの名前がdiasporaであると想定しています。

sudo useradd diaspora

手順5—ファイアウォールを構成する

実稼働環境をセットアップするときは、ファイアウォールの構成と強化が非常に重要です。 使用するツールはfirewalldで、純粋なiptablesコマンドと比較して作業が簡素化されます。

まず、firewalldサービスを開始し、起動時に開始できるようにします。

sudo systemctl start firewalld
sudo systemctl enable firewalld

ここで、ポート22ssh、ポート80http、ポート443httpsを許可します。ポート25smtp。 sudoユーザーとして、次のサービスを追加します。

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=smtp

ファイアウォールルールをリロードします。

sudo firewall-cmd --reload

firewalldの使用の詳細については、新しいCentOS7サーバーの追加の推奨手順チュートリアルをお読みください。

ステップ6—MariaDBをインストールして保護する

次の大きなステップは、ディアスポラのデータベースを設定することです。 このチュートリアルでは、MariaDBを使用しますが、チュートリアル全体にPostgreSQLのヒントをいくつか含めます。

必要なパッケージをインストールします。

sudo yum install mariadb-server mariadb-devel

起動時にMariaDBが起動され、有効になっていることを確認します。

sudo systemctl start mariadb
sudo systemctl enable mariadb

次のコマンドを実行して、MariaDBのインストールを保護します。

sudo mysql_secure_installation

以下のredテキストに示されているように質問に答え、プロンプトが表示されたら強力なルートパスワードを追加します。

Enter current password for root (enter for none): ENTER
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

ステップ7—Diasporaユーザーとデータベースを作成する

次に、MariaDBにログインして、diasporaユーザーを作成します。 プロンプトが表示されたら、上記で作成したrootパスワードを入力します。

mysql -u root -p

Diasporaのユーザーを作成します。 以下のコマンドのpasswordを実際のパスワードに変更してください。 これは、mysql_secure_installationで指定したrootパスワードと同じであってはなりません。

CREATE USER 'diaspora'@'localhost' IDENTIFIED BY 'password';

ディアスポラ生産データベースを作成します。

CREATE DATABASE IF NOT EXISTS `diaspora_production` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_bin`;

MariaDB diasporaユーザーにデータベースに対する必要な権限を付与します。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `diaspora_production`.* TO 'diaspora'@'localhost';

データベースセッションを終了します。

\q

ユーザーdiasporaで新しいデータベースに接続してみてください(上記のIDENTIFIED BY 'password'に入力したパスワードを使用してください)。

mysql -u diaspora -p -D diaspora_production

MariaDB [diaspora_production]>というプロンプトが表示されます。 次のように入力して、データベースセッションを終了します。

\q

これで、MariaDBデータベースのインストールが完了しました。

追加のセキュリティについては、MySQLおよびMariaDBデータベースを保護する方法の詳細な記事を確認してください。

次に、Diasporaのソースコードを取得して、VPSで実行するように構成します。

ステップ8—Bundlerをインストールします

BundlerはRubygemのパッケージマネージャーです。 グローバルに利用できるようにインストールします。

sudo gem install bundler

bundle実行可能ファイルは/usr/local/bin/bundleにインストールされているため、ユーザーのPATHに含めるために、シンボリックリンクを作成します。

sudo ln -sf /usr/local/bin/bundle /usr/bin/bundle

ステップ9—ディアスポラのソースコードを取得する

ディアスポラは3つの主要な枝で開発されています。 stableには安定していると見なされてリリースされるコードが含まれ、masterには使用する安定したタグ付きバージョンがあり、developにはバグの可能性がある最新のコードがあります。

diasporaユーザーアカウントに変更します。

sudo su - diaspora

マスターブランチをチェックしてください。 この記事の執筆時点では、Diasporaバージョン0.5.1.1が含まれています。

git clone -b master https://github.com/diaspora/diaspora.git

ステップ10—ディアスポラデータベースを構成する

次に、作業ディレクトリに移動します。

cd ~/diaspora/

サンプルのデータベース構成ファイルをコピーし、お気に入りのエディターでdatabase.ymlを開きます。

cp config/database.yml.example config/database.yml
vim config/database.yml

次に、前に作成したデータベース設定と一致するように構成ファイルを編集します。

注: yaml(.yml)ファイルを編集するときは、インデントを壊さないように十分注意してください。 タブの代わりに常にスペースを使用してください。


mysql2アダプターが定義されている最初の行を編集します。 (MariaDBはMySQLのドロップイン置換です。)rootdiasporaに置き換え、passwordをデータベースユーザーdiasporaのパスワードに変更します。 ]以前に作成しました。 引用符は削除しないでください。 終了したら、ファイルを保存して閉じます。

mysql: &mysql
  adapter: mysql2
  host: "localhost"
  port: 3306
  username: "diaspora"
  password: "password"
  encoding: utf8mb4
  collation: utf8mb4_bin

注:そのデータベースを使用している場合は、代わりにPostgreSQLセクションに入力し、データベースをPostgreSQLに変更する必要があります。


ステップ11—ディアスポラの基本設定を構成する

設定ファイルの例をコピーすることから始めましょう。

cp config/diaspora.yml.example config/diaspora.yml

Diasporaが正しく機能するには、このファイルのいくつかの設定を編集する必要があります。 ファイル全体を注意深く読んで、ファイルの機能と方法について理解してください。 それはかなり自明ですが、最も重要な設定のいくつかを見てみましょう。

テキストエディタでファイルを開きます。

vim config/diaspora.yml

39行目— url行のコメントを解除して、次のようにします。

url: "https://example.org/"

https://example.org/を独自のドメイン名に置き換えます。 ここで使用するURLはデータベースにハードコードされるため、正確であることを確認してください。 詳細については、この構成行の上のコメントをお読みください

47行目— certificate_authorities行のコメントを外して、次のようにします。

certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt'

注:2つのcertificate_authorities行があります。 CentOS用のもののコメントを外してください。


166行目— rails_environment行のコメントを解除し、developmentproductionに置き換えて、次のようにします。

rails_environment: 'production'

ファイルを保存して閉じます。

これらは、ディアスポラポッドを機能させるために必要な最小限の変更です。 他のソーシャルネットワーク(Twitter、WordPress、Tumblr、Facebook)に接続するなど、好みに合わせて探索および構成するためのオプションは他にもたくさんあります。 ファイルを読み、必要な構成変更を行ってください。

ステップ12— Gemsをインストールし、データベースをセットアップする

必要なgemをインストールし、データベースをセットアップして、アセットをプリコンパイルします。

正しいディレクトリにいることを確認してください。

cd /home/diaspora/diaspora/

まず、nokogiri gemに、以前にインストールしたシステムlibxm2ライブラリを使用するように指示します。

bundle config build.nokogiri --use-system-libraries

次に、bundlerを使用して必要なgemをインストールします。

RAILS_ENV=production bin/bundle install --without test development --deployment

データベースを設定します。

RAILS_ENV=production bin/rake db:create db:schema:load

アセットをプリコンパイルします。

RAILS_ENV=production bin/rake assets:precompile

この時点で、 diaspora ユーザーアカウントを終了し、このチュートリアルの前提条件に従って作成したsudoユーザーに戻すことができます。

exit

ステップ13—Diasporasystemdサービスを構成する

ディアスポラは、実行する必要のある2つの主要なサービスで構成されています。

  • ユニコーン、アプリケーションサーバー
  • sidekiq、バックグラウンドジョブ処理用

この場合、script/serverにあるスクリプトが提供されますが、代わりにsystemdを使用します。 systemdは、CentOS7で使用されるinitシステムです。

systemdがどのように機能するかをよりよく理解するには、次の記事を読んでください。

tmpfilesディレクトリを作成します

unicornUnixソケットを保持するディレクトリを作成します。

sudo mkdir /run/diaspora

所有権をdiasporaユーザーに変更し、権限を設定します。

sudo chown diaspora:diaspora /run/diaspora
sudo chmod 750 /run/diaspora

/runおよび/var/runディレクトリは揮発性であるため、作成した/run/diasporaディレクトリはシステムの再起動後も存続しません。 systemdを使用すると、 tmpfiles を使用して、再起動間でこのディレクトリを保持できます。

/etc/tmpfiles.d/diaspora.confを開いて編集します。

sudo vim /etc/tmpfiles.d/diaspora.conf

次の行に貼り付けます。

/etc/tmpfiles.d/diaspora.conf

d /run/diaspora 0750 diaspora diaspora - -

構成形式はパスごとに1行で、タイプ、パス、モード、所有権、経過時間、および引数の各フィールドがそれぞれ含まれています。 tmpfiles.dの詳細については、公式Webページまたはそのマニュアルページを参照してください。

ユニコーン

まず、サービスがUnixソケットをリッスンするようにdiaspora.ymlを編集します。 これについては、diasporaユーザーに戻ります。

sudo su - diaspora

編集用に構成ファイルを開きます。

vim /home/diaspora/diaspora/config/diaspora.yml

行157のコメントを外して、次のようにします。

/home/diaspora/diaspora/config/diaspora.yml

listen: 'unix:/run/diaspora/diaspora.sock'

ファイルを保存して終了します。

次に、sudoユーザーに戻ります。

su - username

unicorn.serviceファイルを作成します。

sudo vim /etc/systemd/system/diaspora-unicorn.service

次のコンテンツを正確に貼り付けて、スクリプトを作成します。 このファイルの内容を理解するためのヘルプが必要な場合は、systemdに関する以前のリンクを確認することを忘れないでください。

/etc/systemd/system/diaspora-unicorn.service

[Unit]
Description=Diaspora Unicorn Server
Requires=redis.service
After=redis.service network.target

[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-unicorn
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres

PIDFile=/run/diaspora/unicorn.pid
Restart=always

CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true
NoNewPrivileges=true

ExecStart=/usr/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"

[Install]
WantedBy=multi-user.target

注: PostgreSQLを使用している場合は、Environment=DB=postgres行のコメントを解除してください。 MariaDBの場合、変更は必要ありません。


ユニコーンサービスを開始し、起動時に有効にします。

sudo systemctl start diaspora-unicorn
sudo systemctl enable diaspora-unicorn

次に、サービスステータスを確認します。

systemctl status diaspora-unicorn

すべてがうまくいけば、そのコマンドは次のような出力を返すはずです。

diaspora-unicorn.service - Diaspora Unicorn Server
Loaded: loaded (/etc/systemd/system/diaspora-unicorn.service; enabled)
Active: active (running) since Tue 2015-06-23 10:18:25 EDT; 16s ago
Main PID: 16658 (ruby)
CGroup: /system.slice/diaspora-unicorn.service
└─16658 ruby /home/diaspora/diaspora/vendor/bundle/ruby/bin/unicorn_rails -c config/unicorn.rb -E production

Sidekiq

同様に、sidekiqを使用して、sidekiq.serviceファイルを作成しましょう。

sudo vim /etc/systemd/system/diaspora-sidekiq.service

次のように貼り付けます。

/etc/systemd/system/diaspora-sidekiq.service

[Unit]
Description=Diaspora Sidekiq Worker
Requires=redis.service
After=redis.service network.target

[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-sidekiq
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres

Restart=always

CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true

ExecStart=/usr/bin/bundle exec "sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1"

[Install]
WantedBy=multi-user.target

注: PostgreSQLを使用している場合は、Environment=DB=postgres行のコメントを解除してください。 MariaDBの場合、変更は必要ありません。


sidekiqサービスを開始し、起動時に有効にします。

sudo systemctl start diaspora-sidekiq
sudo systemctl enable diaspora-sidekiq

今実行します:

systemctl status diaspora-sidekiq

出力は次のようになります。

diaspora-sidekiq.service - Diaspora Sidekiq Worker
   Loaded: loaded (/etc/systemd/system/diaspora-sidekiq.service; enabled)
   Active: active (running) since Mon 2014-12-29 08:21:45 UTC; 44s ago
 Main PID: 18123 (sh)
   CGroup: /system.slice/diaspora-sidekiq.service
           ├─18123 sh -c sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1
           └─18125 sidekiq 2.17.7 diaspora [0 of 5 busy]

ステップ14—Nginxをインストールします

Nginxはリバースプロキシとして機能するため、ほぼすべてのリクエストがUnicornに送信されます。 public/内のファイルのみがNginxによって直接提供されます。

まず、Webサーバーをインストールしましょう。

sudo yum install nginx

サービスを開始し、起動時に有効にします。

sudo systemctl start nginx
sudo systemctl enable nginx

ステップ15—Nginxにアクセス許可を与える

Nginxがdiasporaユーザーのホームフォルダーにアクセスできるようにするには、nginxユーザーをdiasporaグループに追加する必要があります。

sudo usermod -a -G diaspora nginx

最後に、 diaspora ユーザーのホームディレクトリのアクセス許可を緩和して、diasporaグループへの読み取りおよび実行アクセスを許可します。

sudo chmod 750 /home/diaspora/

ステップ16— SSL証明書をアップロードし、ForwardSecrecyを有効にする

これで、認証局からのSSL証明書ファイルが必要になります。 以下の構成例では、公開証明書に/etc/ssl/diaspora/ssl.crtを使用し、秘密鍵に/etc/ssl/diaspora/ssl.keyを使用しています。

証明書ファイルを保存するディレクトリを作成します。

sudo mkdir /etc/ssl/diaspora

証明書とキーファイルをサーバーにアップロードまたは移動し、作成したディレクトリの下に配置します。 これを行うには、SFTPまたはSCPを使用できます。 このチュートリアルを参照してください。

注:自己署名証明書を作成した場合は、そのディレクトリに移動し、sudo cp ssl.crt ssl.key /etc/ssl/diasporaコマンドを使用してファイルを/etc/ssl/diasporaにコピーします。


Forward Secrecyは、SSL/TLS暗号化通信の重要な部分になっています。 Forward Secrecyの詳細については、このMozillaサーバーセキュリティwikiエントリを参照してください。

システムのrootユーザーに再度変更します。

sudo su -

dhparam.pemファイルを作成します。

openssl dhparam 2048 > /etc/ssl/dhparam.pem

dhparamファイルが完了するまでに数分かかる場合があります。 終了したら、sudoユーザーのアカウントに再度ログインします。

su - username

ステップ17—nginx.confのデフォルトサイトを無効にします

次に、/etc/nginx/nginx.confを変更して、デフォルトの Welcome toNginxメッセージが作成するDiaspora構成ファイルに干渉しないようにします。

sudo vim /etc/nginx/nginx.conf

serverブロックの下で、default_server;を含む行を検索します。 これらのエントリからdefault_serverを削除して、サーバーブロックの領域が次のようになるようにします。

/etc/nginx/nginx.conf

server {
listen 80;
listen [::]:80;
server_name localhost;
root /usr/share/nginx/html;

注:必要に応じて、serverブロック全体をコメント化することもできます。 それもうまくいくでしょう。


ステップ18—ディアスポラ独自のNginx構成ファイルを作成する

Diasporaポッドの新しいnginx構成ファイルを作成します。

sudo vim /etc/nginx/conf.d/diaspora.conf

次のコンテンツを貼り付けます。 コードのすぐ下に説明があります。

/etc/nginx/conf.d/diaspora.conf

upstream diaspora {
  server unix:/run/diaspora/diaspora.sock fail_timeout=0;
}
server {
  listen [::]:80;
  listen 80;
  server_name _;
  return 301 https://example.com$request_uri;
}
server {
  listen [::]:443 ssl spdy;
  listen 443 ssl spdy;
  server_name example.com;
  root /home/diaspora/diaspora/public;
  server_tokens off;
  error_log /var/log/nginx/diaspora_error.log;

  # Configure maximum picture size
  # Note that Diaspora has a client side check set at 4M
  client_max_body_size 4M;

  ## SSL settings
  ssl_certificate /etc/ssl/diaspora/ssl.crt;
  ssl_certificate_key /etc/ssl/diaspora/ssl.key;

  # https://wiki.mozilla.org/Security/Server_Side_TLS
  ssl_dhparam /etc/ssl/dhparam.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
  ssl_session_timeout 5m;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:50m;
  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    # Proxy if requested file not found
    try_files $uri $uri/index.html $uri.html @diaspora;
  }

  location @diaspora {
    gzip off;
    proxy_set_header  X-Forwarded-Ssl   on;
    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  Host              $http_host;
    proxy_set_header  X-Frame-Options   SAMEORIGIN;
    proxy_redirect                      off;
    proxy_pass http://diaspora;
  }
}

次の変数を置き換えます。

  • example.com独自の登録済みドメイン名。 2つのの場所でこれを行う必要があります
  • /etc/ssl/diaspora/ssl.crt独自の公開証明書へのパス
  • /etc/ssl/diaspora/ssl.key自分の秘密鍵へのパス

説明:

  • upstreamブロックは、DiasporaがリッスンするUnixソケットを設定する場所です(これも以前にUnicornで設定しました)。 これは後でproxy_passディレクティブとして使用されます。
  • 最初のserverブロックは、標準のHTTPポート80をリッスンし、すべての要求をHTTPSにリダイレクトします。
  • 2番目のserverブロックは、ポート443(SSL)をリッスンし、Mozillawikiから取得したいくつかの強力なSSLパラメーターを設定します。

一般的な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 restart nginx

ブラウザでDiasporaポッドのドメイン名(https://example.comなど)にアクセスすると、Diasporaのウェルカムページが表示されます。 おめでとう!

注:自己署名証明書を使用する場合は、ブラウザーの警告をクリックしてください。


ステップ19—ディアスポラユーザーを作成する

最初のディアスポラユーザーを作成しましょう。 アカウントの作成から始めます。のリンクをクリックします

詳細を入力して、新しいDiasporaユーザーを作成します。 これで、ユーザーのホームページを表示して、Diasporaソーシャルネットワークの使用を開始できるようになります。

ステップ20— SELinuxを設定する(オプション)

警告: SELinuxに慣れていない場合は、これにより問題が発生する可能性があることに注意してください。 このセクションをスキップして、Diasporaの使用を開始できます。

CentOS 7ドロップレットでは、デフォルトでSELinuxが無効になっています。 最大限のセキュリティを確保するために、SELinuxを有効にして、Diasporaポッドのサービスと連携するように構成できます。 SELinuxを初めて使用する場合は、次の一連のチュートリアルを参照して詳細を確認できます。

SELinuxを有効にする

テキストエディタで/etc/selinux/configを開きます。

sudo vim /etc/selinux/config

以下に示すように、SELINUXの設定をdisabledからpermissiveに変更します。 SELinuxを適用する前に、システム内のすべてのファイルにコンテキストのラベルを付ける必要があるため、最初に許容ステータスを設定する必要があります。

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

ファイルを保存して閉じます。

この変更を行った後、設定を有効にするためにドロップレットを再起動します。 次のように入力するだけです。

sudo reboot

sudoユーザーのパスワードを入力して、システムを再起動します。 次に、SSHでDropletに戻り、次のコマンドを使用してsudoユーザーのアカウントに戻します。

su - username

ここで、/etc/selinux/configをもう一度編集し、SELINUX設定をenforcingに設定します。

sudo vim /etc/selinux/config

終了すると、行は次のようになります。

SELINUX=enforcing

ファイルを保存して閉じます。 ドロップレットをもう一度再起動します。

sudo reboot

次に、Dropletがオンラインに戻った後、SSHでDropletに戻します。

SELinuxNginxポリシー

ここからは、rootユーザーのままにしておきます。 ドメインにアクセスすると、502エラーが表示されます。 この場合、SELinuxはNginxのソケットとdiasporaユーザーのホームディレクトリへのアクセスをブロックしています。

次の方法で監査ログを確認できます。

grep denied /var/log/audit/audit.log

次のようなメッセージが表示されます。

type=AVC msg=audit(1424394514.632:385): avc:  denied  { search } for  pid=1114 comm="nginx" name="diaspora" dev="vda1" ino=783369 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_dir_t:s0 tclass=dir
type=AVC msg=audit(1424394514.632:386): avc:  denied  { write } for  pid=1114 comm="nginx" name="diaspora.sock" dev="tmpfs" ino=21382 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_run_t:s0 tclass=sock_file

以下のツールをインストールして、問題の修正を開始します。

yum install policycoreutils-{python,devel} setroubleshoot-server

audit.logファイルをgrepして、SELinxポリシーでDeniedエントリを許可します。 走る:

grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora

生成されたSELinuxポリシーは、ルートの/homeディレクトリのファイルnginx_diaspora.teに保存されます(ただし、SELinuxポリシーは任意の場所で整理できます)。 ポリシーをインポートするには、バイナリnginx_diaspora.ppsemoduleコマンドに渡す必要があります。 nginx_diaspora.teを開いて、SELinuxで現在許可されているものを確認してください。

vim nginx_diaspora.te

次のエントリが含まれている必要があります。 そうでない場合は、nginx_diaspora.teの内容を以下の内容に置き換えてください。

module nginx_diaspora 1.0;

require {
        type var_run_t;
        type httpd_t;
        type user_home_t;
        type init_t;
        class sock_file write;
        class unix_stream_socket connectto;
        class file { read open };
}


#============= httpd_t ==============
allow httpd_t init_t:unix_stream_socket connectto;

#!!!! This avc can be allowed using the boolean 'httpd_read_user_content'
allow httpd_t user_home_t:file { read open };
allow httpd_t var_run_t:sock_file write;

許可されるコンテキストの多くはおそらく絞り込むことができますが、これは適切な開始点です。 次に、ポリシーモジュールをインポートしましょう。

semodule -i nginx_diaspora.pp

ブラウザでページを更新すると、Diasporaのウェルカムページが再び表示されます。 CentOS7で実行されるSELinuxで強化されたDiasporaポッドの構成おめでとうございます!

SELinuxの簡単なトラブルシューティング

ウェルカムページが読み込まれたが、実際の画像ではなく壊れた画像プレースホルダーが表示された場合は、次の手順に従います。

  1. 以下のコマンドを実行してgrepからaudit.logまで実行し、新しいDeniedエントリをNginxポリシーに追加します。
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
  1. ポリシーモジュールをリロードします。
semodule -i nginx_diaspora.pp

これらの手順を数回繰り返すことができます。

注:以下のコマンドを使用して、/var/log/messagesからのリアルタイム出力ストリームを開くことができます。 これにより、人間が読める形式のSELinuxエラーメッセージが表示され、推奨される修正が提供されます。


tail -f /var/log/messages

読み出しの例を次に示します。

. . .

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that nginx should be allowed write access on the  sock_file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep nginx /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

. . .

結論

ディアスポラポッドを設定したので、友達や家族を招待して接続することができます。 大規模な商用のクローズドソースソーシャルネットワークに存在するいくつかの機能はありませんが、Diasporaの利点の1つは、データを所有できることです。

ここから、ポッドメンテナのDiaspora wikiを読み、ポッドをグローバルポッドリストに登録して、他の人がインストールの恩恵を受けることができるようにすることができます。