Redis Unixソケット、Ubuntuインストール

Discourse のインストールを試みていますが、データベース、Redis、SMTP を設定しました。PostgreSQL データベースでは Unix ソケットに問題はありませんでしたが、Redis ではエラーが発生しているようです。

Redis 設定:

sudo sed -i 's/^# unixsocket /unixsocket /' /etc/redis/redis.conf
sudo sed -i 's/^# unixsocketp.*/unixsocketperm 770/' /etc/redis/redis.conf
sudo sed -i 's/^# maxmemory <bytes>/maxmemory 1024mb/' /etc/redis/redis.conf
sudo sed -i 's/^# maxmemory-policy noeviction/maxmemory-policy allkeys-lru/' /etc/redis/redis.conf
sudo cat /etc/redis/redis.conf | grep "^maxmemory\|^unixsocket"

Redis ソケットの設定:
nano /var/www/discourse/config/discourse.conf
redis_host = "/var/run/redis/redis-server.sock"

Discourse インストール中:

RAILS_ENV=production /root/.rbenv/versions/2.7.2/bin/bundle exec rake db:migrate

エラーの報告に失敗しました:localhost:///var/run/redis/redis-server.sock:6379 への Redis 接続エラー (SocketError) 2 localhost:///var/run/redis/redis-server.sock:6379 への Redis 接続エラー (SocketError)
) サブスクライブに失敗しました。1 秒後に再接続します。コールスタック ["/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:362:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:343:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:107:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:308:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:106:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:289:in `with_socket_timeout'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:139:in `call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/subscribe.rb:44:in `subscription'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/subscribe.rb:14:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:3506:in `_subscription'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:2326:in `block in subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `block in synchronize'", "/root/.rbenv/versions/2.7.2/lib/ruby/2.7.0/monitor.rb:202:in `synchronize'", "/root/.rbenv/versions/2.7.2/lib/ruby/2.7.0/monitor.rb:202:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:2325:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.1/lib/message_bus/backends/redis.rb:287:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.1/lib/message_bus.rb:754:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.1/lib/message_bus.rb:702:in `block in new_subscriber_thread'"]
rake aborted!
Redis::CannotConnectError: localhost:///var/run/redis/redis-server.sock:6379 への Redis 接続エラー (SocketError)
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:362:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:343:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:107:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:308:in `with_reconnect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:106:in `connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:381:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:233:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:320:in `logging'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:232:in `process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis/client.rb:126:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:557:in `block in del'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:69:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.2.1/lib/redis.rb:556:in `del'
/var/www/discourse/lib/discourse_redis.rb:81:in `block in del'
/var/www/discourse/lib/discourse_redis.rb:29:in `ignore_readonly'
/var/www/discourse/lib/discourse_redis.rb:79:in `del'
/var/www/discourse/lib/cache.rb:73:in `delete'

本番環境に Discourse をインストールしたい場合は、Discourse 公式の標準インストールを使用してください。開発環境をインストールしたい場合は、各 OS 向けのトピックがあります。

「いいね!」 1

返信ありがとうございます。

念のため補足しますが、システムは完全に起動し、すべて正常に動作しています。ただし、Redis への Unix ソケット経由での接続が機能しなかったため、Redis ホストを「localhost」に設定する必要がありました。

このガイドに従いました:Install Discourse Forum on Ubuntu 18.04 Without Docker
ガイドがやや古いものだったため、いくつかの調整を必要としましたが、Linux に精通していたため、問題なく対応できました。

私のインストール環境は、Ubuntu 20.04 を実行している Proxmox LXC コンテナです。

オンライン上で UnixSocket を介した Redis の使用に関する情報はほとんど見つかりませんでした。Redis にとってそれが比較的新しい機能なのかもしれません。関連するリンクは見つかりましたが、そこでは Docker が使用されており、私は Docker を使用していないため、直接的な適用はできませんでした:Discourse PR for redis.socketed.template.yml - Discourse System Administration - Unix Linux Community

「いいね!」 1

となると、ほぼ自力で対応することになるでしょう。ここでは Discourse 公式の標準インストールのみがサポートされています。

Docker を使用しない本番環境のインスタンスをインストールまたは維持するのは、かなり難しいと思います。nginx と Discourse の間にはいくつかの厄介な相互作用があり、彼らが提供する Docker コンテナがないと維持が複雑になります。しかし、何でも可能かもしれませんね。

はい、幸いにもサンプルの nginx 設定が提供されています。

/var/www/discourse/config/nginx.sample.conf

私が読んだ限りでは、Docker イメージさえもまだ Unix ソケット経由での Redis サポートを提供していないようです。

それはそう簡単には変わらないでしょう。現在のテンプレートがソケットの使用に対応していないなら、CDCK はホスティングまたはサポートされている Docker インストールで Redis ソケットを使用していないことを意味します。

サポートされている ./launcherdocker 設定を使用しないことで、どのような問題を解決しようとしているのかはわかりませんが、他にも多くの問題に直面する可能性が高いです。

Proxmox を使ったことはあるか分かりませんが、私にとっては素晴らしいです!Web インターフェースにログインして、ワンクリックでバックアップを作成できます。その後、変更を加えて何か問題が発生したら、バックアップを選択して「復元」をクリックするだけです。

さらに、LXC コンテナは Docker イメージよりもはるかに高いパフォーマンスを発揮し、比較になりません。

Docker が悪いと言っているわけではありません。ご指摘の通り、セットアップが非常に簡単だからです。

あなたがそれを使ってきた用途なら、きっと大成功だったでしょうね!

実際にはその比較は行われており、LXC(かつて使ったことがありますが)よりも 100〜1000 倍も多くのイメージが Docker で動作していることは確かです。

Proxmox が悪いと言っているのではありませんが、Discourse を簡単にセットアップして維持管理したいなら Docker を使うべきです。参考までに、Marketplace で 1,000 ドル未満の予算で助けを求められた場合、私は返信しないでしょう。

このスレッドの主旨は、Redis の Unix ソケットの現在の状況について尋ねることでした。LXC と Docker のどちらが Discourse に適しているかを議論することではありません。私が Docker を使っていない理由を述べたのは、あなたがそれに関心があるかもしれないと思ったからです。平均的な利用者にとって、Docker はそのシンプルさから常に勝利します。それは、長らく多くのアプリケーションが PostgreSQL ではなく MySQL を採用してきた理由でもあります。しかし、私は PostgreSQL を大いに愛しています。

壊滅的な問題に直面するまで、私は間違いなく LXC を使い続けるでしょう。それは単に非常にパフォーマンスが優れているからです。また、外部サポートが必要になるかもしれないと思うなら、推奨されるデフォルト設定に忠実に従うべきだという点に、私も完全に同意します。私自身、20 の異なるサービスをそれぞれ独自の LXC コンテナに配置し、単一の Proxmox ノードで稼働させていますが、すべてが問題なく動作しています。しかも、これは Proxmox クラスター内の単一のノードに過ぎません。自動バックアップ、監視、クラスター内のノード間での移行など、これらはすべて素晴らしい機能です :slight_smile:

インストールがスムーズに進んだことをお伝えしましたか?これまで、Redis に Unix ソケットではなく localhost を使用しなければならなかったことを除けば、Discourse には全く問題がありませんでした。数ヶ月後に、その状況が変わっていないか報告することを忘れないようにしたいと思います :wink:

「いいね!」 2

はは!いや、全然!素晴らしいね!うまくいったようで嬉しい!Redis を localhost で運用することにさえ納得できれば、今後トラブルはなさそうだね。

usermod -aG redis discourse か、あるいは unixsocketperm 777 でユニコーンがソケットにアクセスできるようにするかのどちらかでしょう。また、ソケットを作成するディレクトリが存在し、redis ユーザーが所有していることを確認してください。ただし、Ubuntu の一般的な systemd-service ベースの redis-server パッケージはそれを保証しています。