設置: 共用サーバーでのGNU socialの導入

GNUsocial/install
概 要

2008-05-05に最初のコミットがなされ、分散SNSの中では最古参となるGNU socialのv2のインストール方法を記します。

GNU socialは昔ながらのWebアプリケーションのアーキテクチャーであるLAMP環境を採用しており、VPSの他に、レンタルサーバーでも動作します。

レンタルサーバーへのインストールを想定して、コマンドを実行しなくてもインストールできるように手順を併記します。

GNU socialの最新ソースコードは以下の2種類のリポジトリ―で管理されています。

NotAbug.orgがメインで、Undefined Hackersはv3の開発用です。v3は開発中でうまく動作しないのでv2をインストールします。

ブランチはmasterが最新安定板です。手順内では [32aeec858e1ebf712494a5f578931d9f2c809a5c] のコミットで確認しました。

v2.0.0beta0の タグがありますが、Misskeyと通信できない問題があるので、masterブランチを推奨します。v2.0.0beta0の次以降のバー ジョンがリリースされたら、バージョンがわかりやすくなるので、そちらのタグを使うのがよいと思います。

2023-02-18 Sat追記。その後、開発がやはり滞っており、私がPull Request送っても無視されたり、Qvitterプラグインのバグへの対応などで、上記の公式リポジトリ―だと都合が悪く感じました。そのため、私が 保守する [gnusocialjp/gnusocial] のmainブランチを使います。公式のコミットのmasterブランチから派生させています。

2023-02-27 Mon追記。ディレクトリー構成や、コマンドと手動部分の判別がわかりにくいとのコ メントがあったので改善しました。

依 存

INSTALL.md」 がインストール手順になります。これをベースにインストールしていきます。インストールに必要な環境は以下となります。

  • 言語: PHP v.7.4+
  • DB: MariaDB v10.3+/PostgreSQL v11+
  • Webサーバー: Apache/lighttpd/nginx

PHPは以下のモジュールが必要です。

  • openssl
  • php-curl
  • php-exif
  • pgp-gd
  • php-intl
  • php-json
  • php-mbstring
  • php-mysql
  • php-gmp
  • php-bcmath
  • php-opcache
  • php-readline
  • php-xml

ただし、php-opcacheなどはなくても動作します。インストールしたところ、以下は必要でした。

  • php-bcmath
  • php-exif: JPEGアップロード時。
  • php-gettext
  • php-gd: PNG=zlib/libpng (インストール時)、WebP=libwebp (画像アップロード時)、JPEG=libjpeg (JPEGアップロード時)。
  • php-intl: libicu。
  • php-mysqli/php-pgsql

PHP v7.4以上ということで、PHP v8でも動作しそうですが、管理人が試したところうまく機能しませんでし た。そのため、PHP v7.4を推奨します。

ここでは以下の環境で動作を確認しました。

  • PHP v7.4
  • DB: MariaDB v10.6
  • Webサーバー: Apache HTTP Server v2.4

Webサーバーの公開ディレクトリーにgs.example.comというドメインで公開することを想定した手 順となります。ディレクトリー構成は以下となります。

/home/user/public_html: Webサーバーの公開ディレクトリールート。
- gnusocial: GNU socialのソースコード。
- gs.example.com: GNU socialの公開サイト。手順内で$DOMAINとも表記。中身はgnusocial/public (シンボリックリンクかディレクトリーのコピー)。

以降では、現在ディレクトリーがWebサーバーの公開ディレクトリールート (/home/user/public_html) であることを前提に記載します。

取 得

まずソースコード一式を取得します。

コ マンド

gitコマンドを使う場合以下となります。

git clone --depth 1 https://notabug.org/gnusocialjp/gnusocial
cd gnusocial
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

ブランチ・コミット・タグを指定したい場合は以下のコマンドを続けます。

# COMMIT変数にブランチ名、タグ名、コミットSHA1
COMMIT=32aeec858e1ebf712494a5f578931d9f2c809a5c
git fetch --depth 1 origin $COMMIT # ブランチ・タグの場合
git fetch --depth 1 origin tag $COMMIT # タグ指定の場合
git checkout $COMMIT

以上でコマンドでのソースコードの取得が完了です。

手 動

gitコマンドを使わない場合、リ ポジトリ―にアクセスして右上のダウンロードボタンの [ZIP]/[TAR.GZ] のどちらかを選んで、ダウンロードします。コミット、ブランチ、タグを指定する場合、上部の [Commits]/[Branches]/[Releases] から指定できます。ファイルサイズは 現時点のmasterブランチ (32aeec858e1ebf712494a5f578931d9f2c809a5c) だと、35.5 MBです。

コマンドだと以下相当になります。

curl -JO https://notabug.org/gnusocialjp/gnusocial/archive/main.zip

[gnu-social-main.zip]/[gnu-social-main.tar.gz] のようなファイル名でダウンロードできるので、これをWebサーバー上の公開ディレクトリールート直下に配置して、解凍します。コマンドだと以下になりま す。

unzip gnusocial-main.zip

解凍して [gnu-social] ディレクトリーが残ります。ローカル環境で解凍して、展開されたgnu-socialディレクトリーをアップロードしてもいいです。

配 置

GNU social v2.0からディレクトリー構成が変更になり、Webサーバー上のDocumentRootに配置して公開するファイルは、publicディ レクトリー以下となりました。そのため、公開用にディレクトリー配置を調整します。

コマンドが使える場合、シンボリックリンクを作成し、それ以外の場合、手動でpublic/index.phpの 参照先を変更して対応します。

コ マンド

シンボリックリンクを作成するコマンドは以下となります。

DOMAIN=gs.example.com
ln -fns gnusocial/public $DOMAIN

コマンドが使えてシンボリックリンクを作成できる場合はこれでおしまいです。

手 動

コマンドが使えない場合、gnu-social/publicディレクトリーを$DOMAIN名 (gs.example.com) に変更するかコピーして、同じ階層に配置します。コマンドだと以下相当となります。

mv gnusocial/public $DOMAIN

移動させた後、以下のように$DOMAIN/以下に存在するindex.phpinstall.phpの 冒頭の参照先パスを以下のように手動で変更します。

// define('INSTALLDIR', dirname(__DIR__));
define('INSTALLDIR', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'gnu-social');

コマンドで修正する場合、上記は以下相当となります。git applypatchコ マンドに置き換えても問題ありません。

cd $DOMAIN
git apply -p 2 <<-'EOT'
diff --git a/public/index.php b/public/index.php index 8613cd83..82823a97 100644 --- a/public/index.php +++ b/public/index.php @@ -57,7 +57,7 @@ $_perfCounters = []; // libraries are maintained through repositories) set_include_path('.'); // mainly fixes an issue where /usr/share/{pear,php*}/DB/DataObject.php is _old_ on various systems... -define('INSTALLDIR', dirname(__DIR__)); +define('INSTALLDIR', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'gnu-social'); define('PUBLICDIR', INSTALLDIR . DIRECTORY_SEPARATOR . 'public'); define('GNUSOCIAL', true); define('STATUSNET', true); // compatibility

diff --git a/public/install.php b/public/install.php index e9cff8ff..9cc0e5eb 100644 --- a/public/install.php +++ b/public/install.php @@ -36,7 +36,7 @@ * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ -define('INSTALLDIR', dirname(__DIR__)); +define('INSTALLDIR', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'gnu-social'); define('PUBLICDIR', INSTALLDIR . DIRECTORY_SEPARATOR . 'public'); require INSTALLDIR . '/lib/util/installer.php';
EOT

手動だと参照先パスの修正が必要になり、若干手間なので、コマンドが使えるならばシンボリックリンクを推奨します。

ファ イルディレクトリー作成

この状態でインストールを試みると、ファイルとアバター画像の保存ディレクトリーがないというエラーが出ます。

Install GNU social
GNU social was unable to create a directory on this path: /virtual/senooken/public_html/gnu-social@private.gnusocial.jp/file/avatar/

Either create that directory with the right permissions so that GNU social can use it or set the necessary permissions and it will be created.

GNU social was unable to create a directory on this path: /virtual/senooken/public_html/gnu-social@private.gnusocial.jp/file/

Either create that directory with the right permissions so that GNU social can use it or set the necessary permissions and it will be created.

Please fix the above stated problems and refresh this page to continue installing.

これを回避するために、事前にディレクトリーを作成します。コマンドだと以下となります。

mkdir -p gnusocial/file/avatar
Fancy URL対応

GNU socialはデフォルトではhttps://gs.example.com/index.php/adminのように間にindex.phpというパス が挟まります。

URLは短くてわかりやすいほうがよいため、GNU socialではこのURLをhttps://gs.example.com/adminのようにindex.phpのないURL (Fancy URL) にリダイレクトで変更することを推奨しています。

このFancy URLはインストール後に設定することもできます。しかし、途中で変更せずにできるだけ最初と同じものを継続したほうが、リンク切れなどの余計な問題を回 避できるため、インストール時に設定します。

サンプルのサーバー設定ファイルがgnusocial/DOCUMENTATION/SYSTEM_ADMINISTRATORS/webserver_conf/htaccess.sampleに あるので、これをコピーしてgs.example.com/.htaccessにリネームして配置します。

コマンドだと以下相当です。

cp gnusocial/DOCUMENTATION/SYSTEM_ADMINISTRATORS/webserver_conf/htaccess.sample $DOMAIN/.htaccess

これでインストール画面で [Fancy URLs]-[◎ enable] が有効になります。

HTTPS 設定

パスワードを使ったWebサービスであるため、セキュリティー対策としてHTTPSの設定を行います。

Apache HTTP Serverであれば、mod_sslが有効で、証明書の設定などが適切になされていれば、インストール画面で [Server SSL]-[◎ enable] が有効になります。

[enable] を選ぶとGNU socialのサーバー設定で307リダイレクトで常時HTTPSを実現します。

Apache HTTP Serverでの常時HTTPS化の設定 | GNU social JP」にHTTPSの設定を記しました。 gs.example.com/.htaccessに以下の内容を追記すれば、これでも常時HTTPSになります。

## Always HTTPS
<If "%{HTTPS} == 'on'">
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</If>
<ElseIf "%{REQUEST_URI} !~ m#^/\.well-known#">
    RewriteEngine On
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}?%{QUERY_STRING} [L,R=301]
</ElseIf>

こちらの設定のほうが、HSTSでHTTPアクセスを事前に予防できるので、こちらも設定したほうが好ましいでしょう。た だ、.htaccessの設定は別にしなくても問題ありません

API 認証設定

クライアントアプリなどAPIにアクセスする場合、PHPがCGIモードで動作していると認証に失敗するため、 gs.example.com/.htaccessの以下のコメント文を解除します。

@@ -33,8 +33,8 @@
   ## Uncomment these if having trouble with API authentication
   ## when PHP is running in CGI or FastCGI mode.
   #
-  #RewriteCond %{HTTP:Authorization} ^(.*)
-  #RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
+  RewriteCond %{HTTP:Authorization} ^(.*)
+  RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d

インストール時に必須ではないので、インストール後のアプリ認証の失敗時に行っても問題ありません。

DB 作成

GNU socialで使用するデータベースを用意します。DB名は何でも問題ありません。

コマンドでは以下となります。

mysqladmin -u root -p create gnusocial

レンタルサーバーの場合、コントロールパネルから作成します。

DB作成時にはDBの文字エンコーディングがutf8mb4でなければなり ません。

そうでなければ、インストーラーでのインストール時に以下のエラーが表示されます。

Page notice
Initializing...
Starting installation...
Checking database...
GNU social requires the "utf8mb4" character set. Yours is utf8mb3

以下のコマンド・SQLで現在の文字エンコーディングを確認できます。

DB_USER=root
DB_NAME=gnusocial
mysql -u $DB_USER -p -e \
'SELECT SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME
    FROM INFORMATION_SCHEMA.SCHEMATA;'
+--------------------+----------------------------+------------------------+
| SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+--------------------+----------------------------+------------------------+
| information_schema | utf8mb3                    | utf8mb3_general_ci     |
| senooken_privategs | utf8mb3                    | utf8mb3_general_ci     |
| test               | latin1                     | latin1_swedish_ci      |
+--------------------+----------------------------+------------------------+  

以下のコマンド・SQLでutf8mb4に変更できます。

DB_USER=root
DB_NAME=gnusocial
mysql -u $DB_USER -p -e \
  "ALTER DATABASE \`$DB_NAME\` DEFAULT CHARACTER SET 'utf8mb4' DEFAULT COLLATE 'utf8mb4_bin';"

コマンドが使えない場合、レンタルサーバーのコントロールパネルから、phpmyadminにログインするなどして、上記SQLを実行しま す。

なお、DBにPostgreSQLを使用する場合はこの文字エンコーディングの問題は起きないようです。 PostgreSQLが使えるならば、そちらのほうがいいかもしれません。

バ グ修正

インストーラーでのインストール時に以下のようなエラーが表示される場合があります。

Install GNU social
Page notice
        Initializing...
        Fatal error: Cannot redeclare _PEAR_call_destructors() (previously declared in /virtual/senooken/public_html/gnu-social@gnusocial.jp/extlib/PEAR.php:774) in /opt/remi/php74/root/usr/share/pear/PEAR.php on line 793

Cannot redeclare _PEAR_call_destructors() (previously declared in /home/fuccom/public_html/social/extlib/PEAR.php:774) in /opt/cpanel/ea-php73/root/usr/share/pear/PEAR.php on line 834 – NotABug.org: Free code hosting」で同じ問題が報告されています。

PHP標準のPEAR拡張機能とGNU socialが内部で使用しているPEARの名前が競合しているのが原因のようです。

以下のように、GNU socialのPEAR側でインクルードパスをGNU social側に固定することで一時的に回避します。

cd gnu-social
git apply <<-'EOT'
diff --git a/lib/util/framework.php b/lib/util/framework.php index 237533a517..9c99d02472 100644 --- a/lib/util/framework.php +++ b/lib/util/framework.php @@ -85,7 +85,7 @@ define('URL_REGEX_DOMAIN_NAME', '(?:(?!-)[A-Za-z0-9\-]{1,63}(? <!-)\.)+[A-Za-z]{2 require_once INSTALLDIR . '/vendor/autoload.php'; // append our extlib dir as the last-resort place to find libs -set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/extlib/'); +set_include_path(INSTALLDIR . '/extlib/' . PATH_SEPARATOR . get_include_path()); // global configuration object
EOT

上記の課題が解決したら、情報を追記します。

2023-02-18 Sat追記。gnusocialjp/gnu-socialのリポジトリ―では上記の修正を取り込んでいるため対応不要です。

イ ンストーラー

設定が完了したら、https://$DOMAINにアクセスします。

No configuration file found.

I looked for configuration files in the following places:
/etc/gnusocial/config.php
/etc/gnusocial/config.d/private.gnusocial.jp.php
/virtual/senooken/public_html/gnu-social@private.gnusocial.jp/config.php

You may wish to run the installer to fix this.

Go to the installer.

GNU socialの設定ファイルconfig.phpを検索して、見つからないため一番下の [Go to the installer] のリンクからインストール画面 (/install.php) を開きます。

[Install GNU social] のインストーラー画面が表示されるので、以下の項目を入力していきます。

設定例
項目
Site settings Site name サイト名 (例: gs.example.com)

Fancy URLs enable

Server SSL enable
Database settings Hostname 127.0.0.1

Type MariaDB

Name データベース名 (例: gnusocial)

DB username DBユーザー名 (例: root)

DB password DBパスワード (任意)
Administrator settings Administrator nickname 管理者ニックネーム (ユーザー名相当)

Administrator password 管理者パスワード

Confirm password 管理者パスワード

Administrator e-mail 管理者メールアドレス (任意)
Site profile Site profile Community

[Database settings]-[Hostname] にDBのIPアドレスとポート番号を指定します。localhostだと接続に失敗するので注意します。ポート番号はホスト名の後ろに:3306のように 指定します。DBのデフォルトポートの場合省略しても問題ありません。

テスト用途などで、DBにパスワードがない場合は、[DB password] は空欄でも問題ありません。

メールアドレスは必須ではありませんが、通知の受け取りに必要になるので、テストでなければ設定したほうがよいです。

[Site profile] はユーザー登録可否に応じて以下を選べます。インストール後にも変更できます。連合 (他のサーバーと) 接続予定で、迷ったら [Community] を選んでおけばひとまず大丈夫です。

  • Community: メール招待者のみ登録可能。
  • Public: 一般登録可能。
  • Single User: 自分専用 (ユーザー=管理者のみ)。
  • Private: 連合接続しないクローズドサーバー。

なお、ここでの設定内容は後から全て変更できますので、安心してください。

入力が完了したら、[Submit] を選びます。

以下のメッセージが表示されインストールが完了します。

Page notice
Initializing...
Starting installation...
Checking database...
Creating database tables...
Adding SMS carrier data to database...
Adding notice source data to database...
Adding foreign service data to database...
Writing config file...
An initial user with the administrator role has been created.
Setting site profile...
GNU social has been installed at https://private.gnusocial.jp/
DONE! You can visit your new GNU social site (log in as "admin"). If this is your first GNU social install, make your experience the best possible by visiting our resource site to join the mailing list or IRC. FAQ is found here.

[new GNU social site] のリンクを選ぶと、サイトに移動できます。

ロ グイン

ログイン画面が表示されますのでインストール時に登録したnicknameかメールアドレスとパスワードを入力して [Login] を選びます。

ログインできれば、インストール完了です。

結 論

GNU social v2のインストール方法を説明しました。

一部、コード修正がありますが、それ以外は基本的な設定を行うだけで、インストール可能です。サーバーの設定もそんなになく、分散SNSの インストール方法としては、比較的簡単な方だと思います。

コマンドが使えなくてもインストールできるように説明したつもりです。万が一わからないところ、わかりにくいところがあ ればコメントいただけますと、説明を追加します。

デフォルトでは無効になっているものの、有効にしたほうがいいオススメ設定などがありますので、時間のある時に記事に整理してリンクを追加 します。

Comments

  1. […] A guy in Japan really loves it and he’s made a guide to get it working, along with a repository for a port of qvitter to newer versions. This isn’t too much of a surprise as Japan is notorious for being a place where old tech seems to fin […]

  2. This Article was mentioned on web.gnusocial.jp

  3. This Article was mentioned on web.gnusocial.jp

Ads Blocker Image Powered by Code Help Pro

広告ブロッカー検知/Ads Blocker Detected

このサイトは会費と広告で運営されています。[Bronze=月220円以上に登録] するか、広告ブロッカーを無効にしてください。

This site is operated by membership and advertise. Please [register at least Bronze=220 JPY/month], or disable ads blocker.

Copied title and URL