CentOS7でDiasporaを使用してオープンソースの分散型ソーシャルネットワークを実行する方法
序章
ディアスポラは、オープンソースの分散型ソーシャルネットワークです。
分散型であるため、他のほとんどのソーシャルネットワークとは異なります。つまり、中央基盤のない真のネットワークです。 世界中にサーバー(ポッドと呼ばれる)があり、それぞれにサーバーへの登録を選択したユーザーのデータが含まれています。 これらのポッドは相互にシームレスに通信するため、任意のポッドに登録して、ネットワーク上のどこにいても連絡先と自由に通信できます。 詳細については、ディアスポラのアバウトページをご覧ください。
このチュートリアルでは、Diasporaポッドをセットアップして構成します。 特に、次のことを学びます。
- 実稼働用にRailsアプリケーション(Diaspora)をセットアップする方法
- DiasporaでMariaDBを構成する方法
- NginxをDiasporaのリバースプロキシサーバーとして設定する方法
- NginxのSSL構成のベストプラクティス
- Railsアプリケーションで使用するカスタムsystemdユニットファイルを作成する方法
- セキュリティを重視する場合は、ディアスポラとうまく連携するようにSELinuxを構成する方法に関するボーナスセクションがあります。
公式のディアスポラインストールガイドからの逸脱
Diaspora wiki インストールガイドでは、Rubyバージョンマネージャーを使用することを推奨しています。 それは可能ですが、代わりにシステムパッケージのRubyを使用します。 そうすれば、ソースからRubyをインストールしたり、RVMのような別の依存関係を心配したりする必要がなくなります。
公式ガイドでは、ディアスポラに必要な2つのアプリであるunicorn
とsidekiq
を起動するスクリプトである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
ここで、ポート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
の使用の詳細については、新しい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のドロップイン置換です。)rootをdiasporaに置き換え、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
行のコメントを解除し、development
をproduction
に置き換えて、次のようにします。
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がどのように機能するかをよりよく理解するには、次の記事を読んでください。
- Systemctlを使用してSystemdサービスとユニットを管理する方法
- SystemdUnitsとUnitFilesを理解する
- Journalctlを使用して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
の詳細については、公式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.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
ブラウザでページを更新すると、Diasporaのウェルカムページが再び表示されます。 CentOS7で実行されるSELinuxで強化されたDiasporaポッドの構成おめでとうございます!
SELinuxの簡単なトラブルシューティング
ウェルカムページが読み込まれたが、実際の画像ではなく壊れた画像プレースホルダーが表示された場合は、次の手順に従います。
- 以下のコマンドを実行して
grep
からaudit.log
まで実行し、新しいDeniedエントリをNginxポリシーに追加します。
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
- ポリシーモジュールをリロードします。
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を読み、ポッドをグローバルポッドリストに登録して、他の人がインストールの恩恵を受けることができるようにすることができます。