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

前書き

Diasporaは、オープンソースの分散型ソーシャルネットワークです。

分散型であるため、他のほとんどのソーシャルネットワークとは異なります。これは、中央ベースのない真のネットワークです。 世界中に(_pods_と呼ばれる)サーバーがあり、それぞれに登録することを選択したユーザーのデータが含まれています。 これらのポッドは相互にシームレスに通信するため、どのポッドに登録しても、ネットワーク上のどこにいても連絡先と自由に通信できます。 詳細については、Diasporaのhttps://diasporafoundation.org/about[about page]をご覧ください。

このチュートリアルでは、Diasporaポッドをセットアップおよび構成します。 とりわけ、次のことを学習します。

  • 実動用にRailsアプリケーション(Diaspora)をセットアップする方法

  • DiasporaでMariaDBを構成する方法

  • NginxをDiasporaのリバースプロキシサーバーとして設定する方法

  • NginxのSSL構成のベストプラクティス

  • Railsアプリケーションで使用するカスタムsystemdユニットファイルを作成する方法

  • セキュリティを重視する方のために、SELinuxをDiasporaとうまく連携するように設定する方法に関するボーナスセクションがあります。

公式のDiasporaインストールガイドからの逸脱

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

公式ガイドでは、Diasporaに必要な2つのアプリ「+ unicorn 」と「 sidekiq 」を起動するスクリプトである「 script / server +」の使用も推奨しています。 CentOS 7はsystemdを使用するため、代わりにこれらのサービス用に独自の初期化ファイルを作成します。

前提条件

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

  • 1 GB RAMを搭載したCentOS 7 +小さなコミュニティに必要な最小RAMは* 1 GB なので、 1 GB / 1 CPU *ドロップレットを使用します。

  • sudoユーザー +以下のほとんどのコマンドにはルート権限が必要です。 https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-a-centos-7-server [ユーザーを追加する方法]ガイドをチェックして、ユーザーを追加し、 sudo特権。 このユーザーアカウントは、後で作成する* diaspora *ユーザーアカウントに追加され、Diasporaのサービスはより制限された権限で実行されます。

  • SSL証明書 + DiasporaはSSL証明書なしで実行できますが、他のポッドに接続するためのDiasporaのメカニズムには有効なSSL証明書が必要です。 本番環境では、https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority [有料SSL証明書]が必要です。 このチュートリアルで作成した2つの証明書ファイル(パブリック、プライベート)が必要なだけなので、このチュートリアルのWebサーバー設定の部分はスキップできます。 私たちはそれを自分で行います。 あるいは、テスト目的で、自己署名証明書を生成できます。 詳細については、https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs#generated-ssl-certificates [このチュートリアル]を参照するか、単に実行してくださいホームディレクトリから次のコマンド:

openssl req \
  -newkey rsa:2048 -nodes -keyout ssl.key \
  -x509 -days 365 -out ssl.crt

手順1-ユーティリティのインストール

後で便利になるユーティリティ用のパッケージをいくつかインストールしましょう。

sudo yum install deltarpm yum-cron vim

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

sudo yum update

ステップ2-EPELリポジトリを有効にする

EPELはEnterprise Linuxの追加パッケージを表し、基本CentOSリポジトリの一部ではない、インストールが必要なパッケージがいくつかあります。

`+ epel-release +`パッケージをインストールし、+パッケージの更新を確認して有効にします:

sudo yum install epel-release
sudo yum update

以下に示すようにEPEL 7 gpgキーをインポートするように求められたら、yesと答えます。

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]:

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

次のパッケージは、Diasporaと、ネイティブC拡張を持つその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がデータベースとして使用するオープンソースのキー値データストアです。 Redisがインストールされたので、起動時に有効になるように設定し、サービスを開始します。

sudo systemctl enable redis
sudo systemctl start redis

ステップ4-専用Diasporaユーザーを追加する

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

sudo useradd diaspora

ステップ5-ファイアウォールを構成する

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

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

sudo systemctl start firewalld
sudo systemctl enable firewalld

次に、ポート「22」で「+ ssh 」、ポート「+80」で「+ http」、ポート「443」で「+ https」、ポート「25」で「 smtp」を許可します+ `。 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 +」の使用の詳細については、https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers [新しいCentOS 7サーバーの追加の推奨手順]チュートリアル。

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

次の大きなステップは、Diasporaのデータベースをセットアップすることです。 このチュートリアルでは、MariaDBを使用しますが、チュートリアル全体を通してPostgreSQLのいくつかのヒントを紹介します。

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

sudo yum install mariadb-server mariadb-devel

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

sudo systemctl start mariadb
sudo systemctl enable mariadb

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

sudo mysql_secure_installation

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

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

ステップ7-Diasporaユーザーとデータベースの作成

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

mysql -u root -p

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

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

Diaspora実稼働データベースを作成します。

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 '' +`に入力したパスワードを使用してください)。

mysql -u diaspora -p -D diaspora_production

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

\q

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

追加のセキュリティについては、https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps [How to Secure MySQL and MariaDBデータベース]。

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

ステップ8-Bundlerのインストール

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

sudo gem install bundler

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

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

ステップ9-Diasporaのソースコードを取得する

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

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

sudo su - diaspora

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

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

ステップ10-Diasporaデータベースの構成

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

cd ~/diaspora/

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

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

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

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

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

ステップ11-Diasporaの基本設定を構成する

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

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

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

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

vim config/diaspora.yml

行39-次のように `+ url +`行のコメントを外します:

url: ""

「++」を独自のドメイン名に置き換えます。 ここで使用するURLはデータベースにハードコードされるため、正確であることを確認してください。 詳細については、この設定行の上のコメントを参照してください

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

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

166行目-`+ rails_environment `行のコメントを外し、 ` development `を ` production`に置き換えて、次のようにします。

rails_environment: ''

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

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

ステップ12-Gemsのインストールとデータベースのセットアップ

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

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

cd /home/diaspora/diaspora/

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

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-Diaspora systemdサービスの構成

Diasporaは、実行する必要がある2つの主要なサービスで構成されています。

  • ユニコーン、アプリケーションサーバー

  • sidekiq、バックグラウンドジョブ処理用

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

systemdの仕組みをよりよく理解するには、次の記事を読んでください。

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

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

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 +`の詳細については、http://www.freedesktop.org/software/systemd/man/tmpfiles.d.html [公式Webページ]またはそのmanページをご覧ください。

ユニコーン

まず、サービスが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 -

`+ 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

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

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

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証明書をアップロードし、転送秘密を有効にする

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

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

sudo mkdir /etc/ssl/diaspora

証明書とキーファイルをサーバーにアップロードまたは移動し、作成した+ディレクトリの下に配置します。 これを行うには、SFTPまたはSCPを使用できます。 https://www.digitalocean.com/community/tutorials/how-to-use-filezilla-to-transfer-and-manage-files-securely-on-your-vps [このチュートリアル]を参照してください。

転送秘密は、SSL / TLS暗号化通信の不可欠な部分になりました。 Forward Secrecyの詳細については、https://wiki.mozilla.org/Security/Server_Side_TLS#Forward_Secrecy [Mozillaサーバーセキュリティwikiエントリ]をご覧ください。

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

sudo su -

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

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

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

su -

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

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

sudo vim /etc/nginx/nginx.conf

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

/etc/nginx/nginx.conf

server {


server_name localhost;
root /usr/share/nginx/html;

ステップ18-Diaspora独自の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://$request_uri;
}
server {
 listen [::]:443 ssl spdy;
 listen 443 ssl spdy;
 server_name ;
 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 ;
 ssl_certificate_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;
 }
}

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

  • 独自の登録ドメイン名を持つ「++」。これを* 2 *箇所で行う必要があります

  • 独自のパブリック証明書へのパスを持つ「++」

  • 独自の秘密鍵へのパスを持つ「++」

説明:

  • `+ upstream `ブロックは、DiasporaがリッスンするUnixソケットをセットアップする場所です(以前にUnicornでも設定しました)。 これは、後で ` proxy_pass +`ディレクティブとして使用されます。

  • 最初の「+ server 」ブロックは標準のHTTPポート「+80」をリッスンし、リクエストをHTTPSにリダイレクトします。

  • 2番目の「+ server +」ブロックはポート「+443 +」(SSL)をリッスンし、Mozilla wikiから取得した強力なSSLパラメーターを設定します。

一般的なNginxサーバーブロックの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-on-centos-7 [このチュートリアル]をお読みください。

すべての変更が完了したら、構成ファイルでエラーを確認します。

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ウェルカムページが表示されます。 おめでとうございます。

image:https://assets.digitalocean.com/articles/socialnetwork_diaspora/diaspora.png [Diasporaウェルカムページ]

ステップ19-Diasporaユーザーの作成

最初のDiasporaユーザーを作成しましょう。 *アカウントの作成から開始*のリンクをクリックします。

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

ステップ20-SELinuxの構成(オプション)

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

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

SELinuxを有効にする

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

sudo vim /etc/selinux/config

以下に示すように、「+ SELINUX 」設定を「 disabled 」から「+」に変更します。 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=
# 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ユーザーのパスワードを入力して、システムを再起動します。 次に、DropletにSSHで接続し直して、sudoユーザーのアカウントに変更します。

su -

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

sudo vim /etc/selinux/config

終了すると、行に次のように表示されます。

SELINUX=

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

sudo reboot

次に、オンラインに戻ってからドロップレットにSSHで戻ります。

SELinux Nginxポリシー

ここからは、 `+ 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_エントリを許可します。 Run:

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

生成されたSELinuxポリシーは、ルートの「+ / home 」ディレクトリ内のファイル「 nginx_diaspora.te 」に保存されます(ただし、SELinuxポリシーは任意の場所に整理できます)。 バイナリの ` nginx_diaspora.pp `を ` semodule `コマンドに渡して、ポリシーをインポートする必要があります。 ` 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

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

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

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

  1. 以下のコマンドを実行して、 `+ audit.log `から ` grep +`を実行し、新しい_Denied_エントリをNginxポリシーに追加します。

grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
  1. ポリシーモジュールをリロードします。

semodule -i nginx_diaspora.pp

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

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ポッドのセットアップが完了したので、友人や家族を招待して接続することができます。 大規模な商用のクローズドソースソーシャルネットワークに存在するいくつかの機能はありませんが、Diasporaの利点の1つは、データを所有できることです。

ここから、https://wiki.diasporafoundation.org/FAQ_for_pod_maintainers [ポッドメンテナー]のDiaspora wikiを読んで、他のユーザーがインストールから利益を得ることができるように、ポッドをグローバルポッドリストに登録できます。