<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mastodon &#8211; My Favorites</title>
	<atom:link href="https://blog.iwh12.jp/category/mastodon/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.iwh12.jp</link>
	<description>writing when I feel like it. since 2017</description>
	<lastBuildDate>Mon, 22 May 2017 22:00:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.9.1</generator>
	<item>
		<title>Mastodon 1.4.0.2 Release</title>
		<link>https://blog.iwh12.jp/2017/05/21/mastodon-1-4-0-2-release/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 21 May 2017 01:30:18 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1967</guid>

					<description><![CDATA[5月21日（日本時間）、Mastodon 1.4.0.2（v1.4rc2）がリリースされた。release candidateなので1.3.3のインスタンスをアップデートするか悩んだものの、そこはほぼお一人様インスタンス]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_1.jpg" alt="Mastodon 1.4.0.2 Release" width="100%" class="alignnone size-full wp-image-1968" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_1.jpg 836w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_1-300x185.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_1-768x473.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_1-30x18.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_1-812x500.jpg 812w" sizes="(max-width: 836px) 100vw, 836px" /><br />
5月21日（日本時間）、<a href="https://github.com/tootsuite/mastodon/releases/tag/v1.4rc2" target="_blank" class="external ext_icon">Mastodon 1.4.0.2（v1.4rc2）がリリース</a>された。release candidateなので1.3.3のインスタンスをアップデートするか悩んだものの、そこはほぼお一人様インスタンス、システムダウンしても誰にも迷惑かからない（笑）。サックっとアップデートを実行した。<span id="more-1967"></span></p>
<p>念のため必要なファイルをバックアップ。</p>
<ul style="padding-left: 1em; margin-top: -10px;">
<li>mastodon/.env.production</li>
<li>mastodon/postgres</li>
<li>mastodon/redis</li>
<li>mastodon/public/system</li>
</ul>
<p>また、1.3.3から変わった部分として、</p>
<p>/etc/nginx/conf.d/mastodon.conf<br />
　root /home/mastodon/live/public;<br />
　↓<br />
　root /home/xxxx/mastodon/public;<br />
※サーバーの物理パスへ変更</p>
<p>$ sudo chown -R 991:991 public/system<br />
※publicのバックアップを使う場合</p>
<p>この2点の変更を先に行っておく。あとは単にbuild。下記を実行してひたすら待つだけとなる。</p>
<p>$ docker-compose stop<br />
$ docker-compose build &#038;&#038; docker-compose run &#8211;rm web rails db:migrate &#038;&#038; docker-compose run &#8211;rm web rails assets:precompile</p>
<p>サーバーがCeleronと非力なこともあり、コーヒーを作って飲む程度の時間はかかったが（笑）あっさり起動。</p>
<p>画面上、まず一番目につくのが設定/ユーザー設定で、”除外する言語”が追加されたこと。これは日本のインスタンスが急激に増え、海外インスタンスの連合タイムラインに日本語が押し寄せたための処置らしい（笑）</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_2a.jpg" alt="Mastodon 1.4.0.2 Release" width="100%" class="alignnone size-full wp-image-1971" /></p>
<p>次は<a href="https://blog.iwh12.jp/2017/05/20/add-account-media-gallery-view-to-web-ui/">昨日も投稿</a>した、プロフィールのメニューにメディアを追加。ただ個人的にはPawooのように3択（投稿/フォロー/フォロワー）の部分を4択にして欲しかったところ。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_3a.jpg" alt="Mastodon 1.4.0.2 Release" width="100%" class="alignnone size-full wp-image-1972" /></p>
<p>Sidekiqにはrecurring_jobsが加わった。サブスクリプション、メディア、Feed関連のスケジューラーのようだ。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/v1.4rc2_4a.jpg" alt="Mastodon 1.4.0.2 Release" width="100%" class="alignnone size-full wp-image-1973" /></p>
<p>画面キャプチャは無いが、タイムラインでブーストしたアカウントのアバターが被って表示されるようになった。</p>
<p>その他、追加機能は以下の通り。修正に関しては山のようにあるので<a href="https://github.com/tootsuite/mastodon/releases/tag/v1.4rc1" target="_blank" class="external ext_icon">ここ</a>を参考にして欲しい。</p>
<p>Features:</p>
<ul style="padding-left: 1em; margin-top: -20px;">
<li>Filter out languages from public timelines based on preferences</li>
<li>Admins can disable 2FA for users</li>
<li>Webpack</li>
<li>Show boosted user&#8217;s avatar</li>
<li>Show emoji shortname in a tooltip</li>
<li>Decode IDN URLs in PreviewCard</li>
<li>When streaming API is disconnected, poll home/notifications</li>
<li>Replace ws with uws</li>
<li>Sidekiq dashboard displays scheduled tasks</li>
<li>Add <ostatus:conversation /> to Atom feeds</li>
<li>Make direct statuses stand out more</li>
<li>Ability to mute notifications for an entire conversation</li>
<li>Admins can filter accounts based on username/display name/e-mail/IP</li>
<li>Ability to hide all content from a domain</li>
<li>Media gallery view on profiles</li>
</ul>
<p>ところで前から指摘している外インスタンスのCardを表示しない件、「<a href="https://github.com/tootsuite/mastodon/issues/2572" target="_blank" class="external ext_icon">cards only get created for local posts #2572</a>」で修正済になっている<strike>ものの相変わらず見えない。何か手順が必要なのだろうか！？</strike> Update以降に関しては見え、以前については出ない模様。</p>
<p>追記：5月23日（日本時間）に<a href="https://github.com/tootsuite/mastodon/releases/tag/v1.4rc3" target="_blank" class="external ext_icon">1.4.0.3（v1.4rc3）</a>リリース！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Add account media gallery view to web UI</title>
		<link>https://blog.iwh12.jp/2017/05/20/add-account-media-gallery-view-to-web-ui/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sat, 20 May 2017 01:55:19 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1946</guid>

					<description><![CDATA[5月20日（日本時間）、Mastodonのbranch:masterにアカウントのメディアギャラリーを表示する機能がcommitされた。早速テスト用のVMでbuildしたところ…。 このアカウントのメディアギャラリーを表]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI.jpg" alt="Add account media gallery view to web UI" width="100%" class="alignnone size-full wp-image-1947" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI-300x200.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI-768x514.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI-30x20.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI-600x400.jpg 600w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI-747x500.jpg 747w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/media_gallery_view_to_web_UI-272x182.jpg 272w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
5月20日（日本時間）、Mastodonのbranch:masterに<a href="https://github.com/tootsuite/mastodon/commit/de475cf8d32744330f8029f13c539237a6567029" target="_blank" class="external ext_icon">アカウントのメディアギャラリーを表示する機能がcommitされた</a>。早速テスト用のVMでbuildしたところ…。<span id="more-1946"></span></p>
<p>このアカウントのメディアギャラリーを表示する機能、<a href="https://pawoo.net/about" target="_blank" class="external ext_icon">Pawoo</a>など一部のインスタンスでは独自に拡張している部分だ（Pawooではメディアタイムラインもある）。</p>
<p>その実装を期待してbuild、起動するとご覧のようにメニューに項目が追加されていた。そこはPawoo同様、投稿 | フォロー | フォロワーの部分へメディアを追加して欲しかった…。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/pawoo.jpg" alt="pawoo.net" width="100%" class="alignnone size-full wp-image-1958" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/pawoo.jpg 835w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/pawoo-300x189.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/pawoo-768x483.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/pawoo-30x19.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/pawoo-795x500.jpg 795w" sizes="(max-width: 835px) 100vw, 835px" /><br />
pawoo.netだと外から見た＠アカウントの表示にもメディアがある</p>
<p>当然この実装だと、外から見た＠アカウント名でもメディアの項目は無い。個人的にはちょっと残念。</p>
<p>この他、前から気になっているのは、安定版v1.3.3から現在のmasterまでずっと修正されない不都合が二つ。一つ目は外インスタンスのCard（TwitterやOGP、YouTubeなどのサムネイル）が表示されない。二つ目は日本語を含むURLのオートリンクが中途半端。</p>
<p>特にこのBLOGは日本語URLになる関係上、後者は切実な問題だったりする。何時直るのだろうか…！？ < 書くだけ書いてpullリクせず申し訳ない




</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Naumanniをインストール！</title>
		<link>https://blog.iwh12.jp/2017/05/18/naumanni%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%ef%bc%81/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Wed, 17 May 2017 18:54:49 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1903</guid>

					<description><![CDATA[Mastodon専用ウェブクライアント「Naumanni」が公開されたので早速インストール。Dockerで作動する関係上、setup.exe的にサクッと試せるクライアントでは無いものの、Mastodonをインストールした]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-1.jpg" alt="naumanni" width="100%" class="alignnone size-full wp-image-1904" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-1.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-1-300x197.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-1-768x503.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-1-30x20.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-1-763x500.jpg 763w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
Mastodon専用ウェブクライアント「<a href="https://github.com/naumanni/naumanni" target="_blank" class="external ext_icon">Naumanni</a>」が公開されたので早速インストール。Dockerで作動する関係上、setup.exe的にサクッと試せるクライアントでは無いものの、Mastodonをインストールしたことがあれば楽勝だろう。<span id="more-1903"></span></p>
<p>既に（お一人様）インスタンスがあがっていれば、Dockerなど基本的なものは入っているので、ソースコードも含め不足部分だけ入れれば即起動する。手順は以下の通り。</p><pre class="crayon-plain-tag">$ git clone https://github.com/naumanni/naumanni.git
$ cd naumanni

# curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
# yum -y install nodejs
※yumでnodejsが入っていない場合

$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
$ sudo yum install yarn
※yumでyarnが入っていない場合

$ ./build_docker.sh
$ docker run -it -p 8080:80 naumanni.com/naumanni-standalone</pre><p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-3.jpg" alt="naumanni console" width="100%" class="aligncenter size-full wp-image-1905" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-3.jpg 766w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-3-300x228.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-3-30x23.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-3-658x500.jpg 658w" sizes="(max-width: 766px) 100vw, 766px" /></p>
<p>あとはWebブラウザからlocalhost:8080（もしくはローカルIPアドレス:8080）で画面が表示される。今回は、Mastodonのmaster追っかけ用（笑）のVM環境から起動した。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-c1.jpg" alt="naumanni-1" width="100%" class="alignnone size-full wp-image-1915"><br />
インスタンス未登録の状態</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-c2.jpg" alt="naumanni-2" width="100%" class="alignnone size-full wp-image-1914"><br />
＠アカウント＠インスタンスを入力</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/naumanni-c3.jpg" alt="naumanni-3" width="100%" class="alignnone size-full wp-image-1913"><br />
ログイン後、タイムラインを追加していくと扉の画面キャプチャのようになる。もちろんマルチアカウント対応</p>
<p>少し触った感じでは、設定項目なども未実装、DMがBUGってたりと、まだバージョンが0.1.1と言うこともあり、”取りあえず動いた…”的な雰囲気だ。</p>
<p>またレスポンシブ未対応なので、タイムラインが2つ以上あると幅が広がり、スマホやタブレットからは非常に見辛くなる。が、（多分）もともとデスクトップ専用でタイムラインを数多く並べるのを主目的としている関係上、この指摘は筋違いだろう。</p>
<p>いずれにしても、スマホ用などのアプリではない、Mastodon専用ウェブクライアントの登場は、この先どうなるのか非常に楽しみだ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mastodon v1.3.3リリース！＋α</title>
		<link>https://blog.iwh12.jp/2017/05/07/mastodon-v1-3-3%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9%ef%bc%81%ef%bc%8b%ce%b1/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 07 May 2017 10:02:21 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1537</guid>

					<description><![CDATA[日本時間の5月7日、GWの最終日にMastodon v1.3.3がリリースされた。早速Myインスタンスをアップデートしつつ、少し環境を整えたのでメモ書き。 ディスク容量不足！？ 何時ものようにgitでコードを更新した後、]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/http2.jpg" alt="HTTP/2対応" width="100%" class="alignnone size-full wp-image-1538" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/http2.jpg 901w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/http2-300x168.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/http2-768x431.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/http2-30x17.jpg 30w" sizes="(max-width: 901px) 100vw, 901px" /><br />
日本時間の5月7日、GWの最終日にMastodon v1.3.3がリリースされた。早速Myインスタンスをアップデートしつつ、少し環境を整えたのでメモ書き。<span id="more-1537"></span></p>
<h3>ディスク容量不足！？</h3>
<p>何時ものようにgitでコードを更新した後、docker-compose buildを実行すると途中でerror。原因は容量不足で書き込めない。dfで調べると確かにもう99%使っている。</p>
<p>考えてみればテストも兼ね何度もDockerをup/downしているので、不要なコンテナとイメージが蓄積され、ほぼ容量を使い切っている状態だった。</p>
<p>とりあえず綺麗さっぱり忘れるために以下のコマンドを実行。大幅に容量が増えたのを確認。</p><pre class="crayon-plain-tag"># コンテナの削除
$ docker ps -aq | xargs docker rm
# イメージの削除
$ docker images -aq | xargs docker rmi</pre><p></p>
<h3>HTTP/2対応へ</h3>
<p>アップデートが終わり、v1.3.3を起動しTootを眺めていると、HTTP/2の文字が。「そう言えばまだやっていなかったな…。」と対応することに。</p>
<p>ただCentOS 7で普通にyumすると、OpenSSLはv1.0.1系が入るものの、HTTP/2にするにはv1.0.2系が必要。更にnginxがそれを参照しなければならない。と言うことで面倒だがmake決定。</p>
<p>CentOS 7はminimalを使った関係上、開発環境が入っていない。以下必要なコマンドなどをインストール。</p><pre class="crayon-plain-tag">yum -y groupinstall 'Development Tools'
yum -y install wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel rpmdevtools</pre><p>次に/usr/local/srcでOpenSSLコードを展開。makeして、バイナリを入れ替える。</p><pre class="crayon-plain-tag"># cd /usr/local/src
# wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
# tar zxvf openssl-1.0.2k.tar.gz
# cd openssl-1.0.2k
# ./config shared -fPIC
# make
# make test
# make install

# cd /usr/bin/
# cp /usr/bin/openssl /usr/bin/openssl~
# rm -f /usr/bin/openssl
# ln -s /usr/local/ssl/bin/openssl

# openssl version
OpenSSL 1.0.2k  26 Jan 2017</pre><p>今度はnginx。事前に./configureに指定するパラメータを現バージョンでメモしておく（configure arguments:）。</p><pre class="crayon-plain-tag"># nginx -V
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
.
.
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'</pre><p>以降は普通のmake。先にメモした./configureのオプション最後に、</p><pre class="crayon-plain-tag">--with-openssl=/usr/local/src/openssl-1.0.2k \
--with-openssl-opt='-fPIC'</pre><p>この2つを加えて./configureする。</p><pre class="crayon-plain-tag"># cd /usr/local/src
# wget https://nginx.org/download/nginx-1.13.0.tar.gz
# tar zxvf nginx-1.13.0.tar.gz
# cd nginx-1.13.0

# ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
.
.
--with-openssl=/usr/local/src/openssl-1.0.2k \
--with-openssl-opt='-fPIC'

# make
# make install

# nginx -V
nginx version: nginx/1.13.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
built with OpenSSL 1.0.2k  26 Jan 2017
TLS SNI support enabled</pre><p>既に.confには</p>
<p>server {<br />
listen 443 ssl http2;<br />
listen [::]:443 ssl http2;</p>
<p>http2の記述があるのでnginxをリスタートするだけでいい。</p>
<p>確認はChromeの検証でNetwork / Protocolがh2になっているか（冒頭の画面キャプチャ）、nginxのaccess.logでHTTP/2.0の文字が見えればOKだ。</p>
<p>追記：.confのサンプルではHSTSの設定がこうなっているが、</p>
<p>add_header Strict-Transport-Security &#8220;max-age=31536000&#8221;;</p>
<p>サブドメインでインスタンスを運用する時には、includeSubdomainsを追加しないと効いてない感じだ。</p>
<p>add_header Strict-Transport-Security &#8220;max-age=31536000; includeSubdomains&#8221;;</p>
<h3>Qualys SSL LABSのスコアがA-！？</h3>
<p>いろいろ変わったので<a href="https://www.ssllabs.com/ssltest/analyze.html" target="_blank" class="external ext_icon">再度チェック</a>したところ、v1.2系でインスタンスを上げた時はA+だったのに何故かA-に落ちてしまった。違いは…と考えてみるとnginxの.confが一部異なっている。</p><pre class="crayon-plain-tag"># これだとA-になる
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA!RC4;

# これでA+
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve prime256v1;</pre><p><a href="https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md" target="_blank" class="external ext_icon">ここのサンプル</a>をそのまま使うとA-になるので、当初の内容へ戻すとA+に。これで一件落着！</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/40222c2d17a3d8aa6318509c8a2b76b9.jpg" alt="Qualys SSL LABS" width="100%" class="alignnone size-full wp-image-1541" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/40222c2d17a3d8aa6318509c8a2b76b9.jpg 1000w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/40222c2d17a3d8aa6318509c8a2b76b9-300x128.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/40222c2d17a3d8aa6318509c8a2b76b9-768x328.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/40222c2d17a3d8aa6318509c8a2b76b9-30x13.jpg 30w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>余談になるが今回、安定版の1.3-stableと先行版にBranchした。<a href="http://www.itmedia.co.jp/news/articles/1705/03/news024.html" target="_blank" class="external ext_icon">新機能の購読言語指定</a>などはこの1.3-stableには入っていない。</p>
<p>しかし比較的天候に恵まれたGWに何をやってるのか（笑）</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Myインスタンス引越し！</title>
		<link>https://blog.iwh12.jp/2017/05/05/my%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e5%bc%95%e8%b6%8a%e3%81%97%ef%bc%81/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Fri, 05 May 2017 08:15:19 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Desktop]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1524</guid>

					<description><![CDATA[Mastodonのサーバーは即日＆テスト運用という意味もあって、macOSのVMに2コア/1GBで動かしていたが、しばらく使いそうなので「そろそろ普通のサーバーへ移すか…。」と、数日前に引っ越した。 このBLOGが入って]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362.jpg" alt="ASRock N3150B-ITX" width="100%" class="alignnone size-full wp-image-1525" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362-150x150.jpg 150w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362-300x300.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362-768x768.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362-30x30.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362-100x100.jpg 100w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2362-45x45.jpg 45w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
Mastodonのサーバーは即日＆テスト運用という意味もあって、macOSのVMに2コア/1GBで動かしていたが、しばらく使いそうなので「そろそろ普通のサーバーへ移すか…。」と、数日前に引っ越した。<span id="more-1524"></span></p>
<p>このBLOGが入っているサーバーは、<a href="https://www.blueonyx.it/index.php?page=downloads" target="_blank" class="external ext_icon">BlueOnyxと呼ばれるサーバー管理ソフト</a>のvhostsの一つで作動しており、他にもいくつかドメイン名の異なるサイトが入っている。</p>
<p>ただVPS自体が32bitだったり、BlueOnyxがApacheべったりだったり、CentOSが6ベースだったり…と、Mastodonを動かすのは少し面倒だったので、とりあえずVMで運用していた次第。</p>
<p>このため外部のサーバーへ入れるには別途VPSを借りる必要があり、最近安くなったとは言え敷居が高い。</p>
<p>そこで手元に余っているパーツを眺めると、BraswellなCeleronを搭載したMini-ITXのマザーボード、メモリ2GBx2、初期のIntel製SSDなど、ほぼ揃っているのでこれを流用することにした。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364.jpg" alt="ASRock N3150B-ITX" width="100%" class="alignnone size-full wp-image-1526" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364-150x150.jpg 150w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364-300x300.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364-768x768.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364-30x30.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364-100x100.jpg 100w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/IMG_2364-45x45.jpg 45w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>余談になるが、このマザーボードは<a href="http://pc.watch.impress.co.jp/docs/column/nishikawa/705886.html" target="_blank" class="external ext_icon">以前PC Watchで記事を書き</a>、その後、同じシリーズのPentium版を購入したので、ずっと押入れに眠っていたものだったりする（笑）</p>
<p>CentOS 7を使ったセットアップ自体はVMも物理PCもほぼ同じ。一連のネットワーク系設定後、mastodonフォルダの./postgres、./redis、./public/system、.env.productionだけバックアップを取り、システム自体はgit cloneで再インスートルしてあっさり完了（docker-compose.ymlはコメントを外すだけなのでバックアップは不要だろう）。無事起動した。</p>
<p>Core i5のVMと比較して流石にdocker-compose buildやdocker-compose run &#8211;rm web rails assets:precompileは時間がかかるものの、一旦動き出せばメモリ4GBも含めこちらの方が余裕がある。</p>
<p>加えてせっかくnginxなサーバーが上がったので、以前port3001で公開していた<a href="http://collabo.iwh12.jp" target="_blank" class="external ext_icon">複数のWordPressサイトを1本化するサイト</a>もサブドメインを割り振り、proxyを使いこちらで公開し直した。しかし手元にサーバーを置くなど何年振りだろうか！？（笑）</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mastodon、タイムラインに記事やTwitter、YouTubeなどのサムネイルを表示する方法（勝手改造要注意）</title>
		<link>https://blog.iwh12.jp/2017/04/30/mastodon%e3%80%81%e3%82%bf%e3%82%a4%e3%83%a0%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%ab%e8%a8%98%e4%ba%8b%e3%82%84twitter%e3%80%81youtube%e3%81%aa%e3%81%a9%e3%81%ae%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 30 Apr 2017 03:24:56 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1442</guid>

					<description><![CDATA[Mastodonのタイムラインを眺めていると、インスタンスにもよるだろうが、文字ばかりで少し寂しい。Tootの詳細表示では、記事やTwitter、Instagram、YouTubeなど、リンクへのサムネイル＝Cardが表]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_timeline.jpg" alt="Mastodon、タイムラインに記事やTwitter、YouTubeなどのサムネイルを表示する方法（勝手改造要注意）" width="100%" class="alignnone size-full wp-image-1443" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_timeline.jpg 985w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_timeline-300x182.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_timeline-768x467.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_timeline-30x18.jpg 30w" sizes="(max-width: 985px) 100vw, 985px" />Mastodonのタイムラインを眺めていると、インスタンスにもよるだろうが、文字ばかりで少し寂しい。Tootの詳細表示では、記事やTwitter、Instagram、YouTubeなど、リンクへのサムネイル＝Cardが表示できるので、これをタイムラインにも欲しいところ。そこでコードを追ってみた。<span id="more-1442"></span></p>
<h3>タイムラインに手を加えるには</h3>
<p>ログイン後の3カラムの画面、あれは全て自らのAPIで値を取得し、JavaScriptで書いている。例えば、</p>
<p><strong>連合タイムライン</strong><br />
インスタンスURL/api/v1/timelines/public<br />
<strong>ローカルタイムライン</strong><br />
インスタンスURL/api/v1/timelines/public?local=true</p>
<p>をブラウザへ入力すると、文字の羅列が表示されると思う。JSONと呼ばれるフォーマットだ。画面描画はこれを元にしている（iOSやAndroidのアプリも同様）。ホームはTokenが必要なので少し細工が必要になるものの、出てくるフォーマット自体は同じだ。</p>
<p>となると、このJSONの中にCardの情報が入っていない場合、タイムラインには表示できない。が、残念ながら添付画像情報のmedia_attachmentsはあるものの、必要とするpreview_cardは無い(どちらもDBのTable名)。</p>
<p>従って改造その1はJSONにpreview_cardを加える作業となる。当然JSONの中身が変わるので、アプリなどの互換性が気になると思うが、（例外もあるかも知れないが）一般的に知らない項目が増えても無視するだけで作動には問題無い。</p>
<p>ただデータ転送量が若干増えるので、微妙に反応が鈍くなる可能性はある。</p>
<h3>JSONへpreview_cardを追加する</h3>
<p>タイムラインAPIのcontrollerは、</p>
<p>app/controllers/api/v1/timelines_controller.rb</p>
<p>これだ。Status.as_public_timeline()など、modelsのstatus.rbにあるclassを呼んでいる。しかしAPIに関しては、status.rbの中を見てもDBのstatuses Table（Tootの中身）しか実質扱っていない。</p>
<p>別Tableになっているmedia_attachmentsをどこで引っ張ているのか…と、しばし悩んだところ該当箇所を発見。</p>
<p>app/views/api/v1/statuses/_show.rabl</p>
<p>ここで出す直前にmedia_attachmentsをJSONへマージしている。つまりここへpreview_cardを追加すればいい。</p><pre class="crayon-plain-tag"># app/views/api/v1/statuses/_show.rablへ追加
child :preview_card, object_root: false do
  extends 'api/v1/statuses/_card'
end</pre><p>実体は新規で_card.rablを作り中は以下のようになる。</p><pre class="crayon-plain-tag"># app/views/api/v1/statuses/_card.rablを新規作成
attributes :url, :title, :description, :type,
           :author_name, :author_url, :provider_name,
           :provider_url, :html, :width, :height

node(:image) { |card| card.image? ? full_asset_url(card.image.url(:original)) : nil }</pre><p>これで一旦build/assets:precompileをし直し、先のAPIをブラウザで入力すると、</p><pre class="crayon-plain-tag">"preview_card":{"url":"https://www.youtube.com/watch?v=2tvooAF67z0","title":"BABYMETAL Kami Band Intro Awadama Fever Columbia SC 2017","description":"BABYMETAL Kami Band Intro Awadama Fever Opening for RHCP Columbia SC 2017","type":"link","author_name":"","author_url":"","provider_name":"","provider_url":"","html":"","width":0,"height":0,"image":"http://192.168.11.205:3000/system/preview_cards/images/000/000/016/original/maxresdefault.jpg?1492667166"},</pre><p>preview_cardが追加されているはずだ(Cardが無い時は&#8221;preview_card:null&#8221;のみ)。これで準備は完了。改造その2は、画面側の追加プログラムとなる。</p>
<h3>タイムラインへCardを表示する</h3>
<p>詳しい話を書くと長くなるので単刀直入に（笑）。詳細表示のCardはここで書いている。</p>
<p>app/assets/javascripts/components/features/status/containers/card_container.jsx<br />
app/assets/javascripts/components/features/status/components/card.jsx</p>
<p>二番目が実際に表示している部分。調べたところタイムラインにも共通で使えそうだ。従ってタイムラインからcard.jsxを呼ぶcard_container_tl.jsxを新規で作成する。</p><pre class="crayon-plain-tag"># app/assets/javascripts/components/features/status/containers/card_container_tl.jsxを新規作成
import { connect } from 'react-redux';
import Card from '../components/card';

const mapStateToProps = (state,{status}) =&gt; ({
  card: status.getIn(['preview_card'], null)
});

export default connect(mapStateToProps)(Card);</pre><p>次に実際タイムラインを描画している部分</p>
<p>app/assets/javascripts/components/components/status.jsx</p>
<p>へ、以下を追加する。一番目はコードの初めにimportの山があるので、そこへ挿入。二番目は、コードの最後の方に{media}だけ書かれた行があるので、その横に追記する。</p><pre class="crayon-plain-tag">import CardContainer from '../features/status/containers/card_container_tl';

&lt;CardContainer status={status} /&gt;</pre><p>これで準備が出来たので、再度build/assets:precompileすればOK。タイムラインにCardが表示されたら正解だ。</p>
<p>現状の問題点は2つ。</p>
<ol style="padding-left: 1em;">
<li>ローカルインスタンス内でしかCardが表示されない（但し、これは非改造のv1.3.2でも外部インスタンスは詳細に出ないので同じ症状）</li>
<li>リンク先の情報を取得するタイミングが詳細を表示した時なので、誰かが詳細を見ない限り、タイムラインにCardが表示されない</li>
</ol>
<p>1)はもともと外インスタンスのCardは詳細でも出ないので、システム側の問題だと思われる。2)は投稿した時に自分で確認しつつ詳細を見るのが一番手っ取り早い（笑）。一度詳細を表示すれば情報がDBへ入る。</p>
<p>Card用のデータをFetchするコードは</p>
<p>app/services/fetch_link_card_service.rb</p>
<p>ここにある。以降はまだコードを追ってないので不明。sidekiqのWorkerにもlink_crawl_worker.rbが入っている。</p>
<p>いずれにしてもこれで少しはタイムラインが賑やかになる。ただこれらの改造はブラウザからのアクセスのみ有効で、残念ながら勝手改造を関知しないアプリは無関係だ。</p>
<p><strong>またこの改造によって何か不都合が発生しても責任は持てないので自己責任</strong>でお願いしたい。本家に同等の機能が付けば嬉しいのだが…。</p>
<p>追記1：1)の件はBUGのようだ。”<a href="https://github.com/tootsuite/mastodon/issues/2572" target="_blank" class="external ext_icon">cards only get created for local posts</a>”<br />
追記2：v1.4系では後半の表示系PATHが変わった（内容は同じ）。<br />
app/javascript/mastodon/features/status/containers/card_container_tl.js<br />
app/javascript/mastodon/components/status.js</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mastodon、タグ付きでDMするとネットからのタグ一覧表示で見えてしまう問題の修正方法</title>
		<link>https://blog.iwh12.jp/2017/04/23/mastodon%e3%80%81%e3%82%bf%e3%82%b0%e4%bb%98%e3%81%8d%e3%81%a7dm%e3%81%99%e3%82%8b%e3%81%a8%e3%83%8d%e3%83%83%e3%83%88%e3%81%8b%e3%82%89%e3%81%ae%e3%82%bf%e3%82%b0%e4%b8%80%e8%a6%a7%e8%a1%a8%e7%a4%ba/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 23 Apr 2017 09:31:19 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1415</guid>

					<description><![CDATA[Mastodonで、公開範囲をUnlisted、Private、Directにして、タグ付きでTootすると、ネットからのタグ一覧（インスタンスURL/tags/タグ名）で見えてしまうBUG（これは明らかにBUGだと思う]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_tag_bug.jpg" alt="MastodonのTag BUG" width="100%" class="alignnone size-full wp-image-1416" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_tag_bug.jpg 937w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_tag_bug-300x133.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_tag_bug-768x340.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_tag_bug-30x13.jpg 30w" sizes="(max-width: 937px) 100vw, 937px" /><br />
Mastodonで、公開範囲をUnlisted、Private、Directにして、タグ付きでTootすると、ネットからのタグ一覧（インスタンスURL/tags/タグ名）で見えてしまうBUG（これは明らかにBUGだと思う）の修正方法。<span id="more-1415"></span></p>
<p>controllers/tags_controller.rbの</p>
<p></p><pre class="crayon-plain-tag"># frozen_string_literal: true

class TagsController &lt; ApplicationController
  layout 'public'

  def show
    @tag      = Tag.find_by!(name: params[:id].downcase)
    @statuses = @tag.statuses.order('id desc').paginate_by_max_id(20, params[:max_id]) #####
    @statuses = cache_collection(@statuses, Status)
  end
end</pre><p>この#####の行を</p><pre class="crayon-plain-tag">@statuses = @tag.statuses.order('id desc').where(visibility: [:public]).paginate_by_max_id(20, params[:max_id])</pre><p>これに変更する。つまり対象をvisibility: [:public]として、一覧に表示するTootを絞っている。</p>
<p>コード修正後のインスタンスの起動は先に書いた<a href="https://blog.iwh12.jp/2017/04/23/mastodon、ネットからprofileを見た時にunlistedが一覧に/">ここ</a>の後半を参考にして欲しい。既にMyインスタンスは修正済みで作動している。</p>
<p>Unlistedとタグ付きDMのネットからの一覧表示問題も片付いたので、これで少しは安心できるかな！？</p>
<p>追記1：参考までにログイン後のHome画面（3つTLが並ぶ画面）では、先のUnlistedも含め問題は発生しない。理由は使っているロジックが違うから。自らAPIを呼んで描画している。</p>
<p>インスタンスURL/api/v1/timelines/public/<br />
インスタンスURL/api/v1/timelines/tag/mastodon</p>
<p>この様に呼ぶとJSONが得られる。同じ方法でネット側（非ログイン系）の画面も作れると思うのだが、何故この様な仕様になっているかは不明だ。</p>
<p>追記2：このBUGはcommit済みとのこと。次のリリースまで待てない時に参考にして欲しい。</p>
<blockquote class="twitter-tweet" data-conversation="none" data-cards="hidden" data-partner="tweetdeck">
<p lang="ja" dir="ltr"><a href="https://twitter.com/rokuzouhonda" target="_blank" class="external ext_icon">@rokuzouhonda</a> これは <a href="https://t.co/F6uZPConTA" target="_blank" class="external ext_icon">https://t.co/F6uZPConTA</a> で報告されて、2日前のコミットで修正されたようなので、次のリリースでは直っているかと思います</p>
<p>&mdash; masayoshi takahashi (@takahashim) <a href="https://twitter.com/takahashim/status/856103271261282304" target="_blank" class="external ext_icon">April 23, 2017</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>追記3：v1.3系で修正済み</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mastodon、ネットからProfileを見た時にUnlistedが一覧に出てしまう問題の修正方法</title>
		<link>https://blog.iwh12.jp/2017/04/23/mastodon%e3%80%81%e3%83%8d%e3%83%83%e3%83%88%e3%81%8b%e3%82%89profile%e3%82%92%e8%a6%8b%e3%81%9f%e6%99%82%e3%81%abunlisted%e3%81%8c%e4%b8%80%e8%a6%a7%e3%81%ab/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 23 Apr 2017 01:12:18 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1389</guid>

					<description><![CDATA[MastodonにはPublic、Unlisted、Private、Direct…と、4つの公開オプションがあるのだが、何故かUnlistedにしても、ネットからProfileをアクセス（インスタンスURL/@ユーザーI]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_unlisted.jpg" alt="mastodon unlisted bug" width="100%" class="alignnone size-full wp-image-1391" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_unlisted.jpg 801w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_unlisted-300x131.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_unlisted-768x335.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon_unlisted-30x13.jpg 30w" sizes="(max-width: 801px) 100vw, 801px" />MastodonにはPublic、Unlisted、Private、Direct…と、4つの公開オプションがあるのだが、何故かUnlistedにしても、ネットからProfileをアクセス（インスタンスURL/@ユーザーID）すると、Toot一覧に出てしまう問題がある。仕様かBUGかは不明だが気持ち悪いので修正したい。方法は…。<span id="more-1389"></span></p>
<p>Mastodon本体はRuby on Railsで書かれており、昔やったな…と思いながらコードを探すと、controllersのaccounts_controller.rbに</p><pre class="crayon-plain-tag">def show
    respond_to do |format|
      format.html do
        @statuses = @account.statuses.permitted_for(@account, current_account).order('id desc').paginate_by_max_id(20, params[:max_id], params[:since_id])
        @statuses = cache_collection(@statuses, Status)
      end
.
.
.</pre><p>を発見。どうやらmodelsのpermitted_for()でデータを取得しているようだ。該当箇所は、status.rbのここ。</p><pre class="crayon-plain-tag">def permitted_for(target_account, account)
    return where.not(visibility: [:private, :direct]) if account.nil?</pre><p>account.nil?つまり非ログイン時、privateとdirectだけ除外している。ここへunlistedを加え、</p>
<p></p><pre class="crayon-plain-tag">def permitted_for(target_account, account)
    return where.not(visibility: [:unlisted, :private, :direct]) if account.nil?</pre><p>こうすればいい（外に何も出したくない時は:publicも加えればいい）。</p>
<p>ただDockerからシステムを剥がして運用している場合は修正するだけでいいのだが、docker-compose up -dで起動している場合は、一旦downして再度buildしないとこの修正が反映されない。</p>
<p>docker-compose downするのはちょっと嫌なので（笑）、直接コンテナの中を触ることにする。</p><pre class="crayon-plain-tag">$ docker-compose ps
        Name                      Command               State 
--------------------------------------------------------------
mastodon_db_1          docker-entrypoint.sh postgres    Up    
mastodon_redis_1       docker-entrypoint.sh redis ...   Up    
mastodon_sidekiq_1     bundle exec sidekiq -q def ...   Up    
mastodon_streaming_1   npm run start                    Up    
mastodon_web_1         bundle exec rails s -p 300 ...   Up</pre><p>ログインする名前を探す（ここではmastodon_web_1）。</p>
<p>$ docker exec -it mastodon_web_1 ash</p>
<p>でログインできるので、該当コードを修正（viが使える）。</p>
<p>$ docker-compose stop<br />
$ docker-compose start</p>
<p>これでコードが反映される。既にMyインスタンスは修正済だ。</p>
<p>余談になるが、Privateで写真を添付した場合でも、写真のURLが分かればネットから抜けてしまう（大昔のmixiもそうだった）。</p>
<p>真面目に対応するのは結構面倒で且つDBに負荷がかかるので（画像を表示する度に相手との関係を調べる必要があるのと、URLではアクセスできないPATHへ画像を置き、表示する時はリダイレクトしなければならない）、Mastodonが対応するのは望み薄だろう。</p>
<p>追記：この件、どうやら<a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/User-guide.md#toot-privacy" target="_blank" class="external ext_icon">意図的</a>らしいので、pullリクしても駄目な雰囲気。各インスタンスで個別対応だろうか！？</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mastodonのインスタンスを上げてみた</title>
		<link>https://blog.iwh12.jp/2017/04/19/mastodon%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e3%82%92%e4%b8%8a%e3%81%92%e3%81%a6%e3%81%bf%e3%81%9f/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Wed, 19 Apr 2017 05:18:37 +0000</pubDate>
				<category><![CDATA[Mastodon]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1373</guid>

					<description><![CDATA[あっと言う間に爆発しているMastodon。面白そうなので、早速インストールしてインスタンスを公開した。その手順全てを紹介。 使用OS CentOS 7(Minimal ISO)、メモリ1GB、2 Core ※実際運用し]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon.jpg" alt="Mastodon" width="100%" class="alignnone size-full wp-image-1374" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon-300x187.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon-768x478.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/04/mastodon-30x19.jpg 30w" sizes="(max-width: 1024px) 100vw, 1024px" />あっと言う間に爆発しているMastodon。面白そうなので、早速インストールしてインスタンスを公開した。その手順全てを紹介。<span id="more-1373"></span></p>
<h4>使用OS</h4>
<p>CentOS 7(Minimal ISO)、メモリ1GB、2 Core<br />
※実際運用してみると、メモリは2GBあった方が良さそう</p>
<h4>インストール手順</h4>
<p>1)/etc/sysconfig/network-scripts/ifcfg-eth0<br />
※ネットワーク周りに合わせて設定</p>
<p>2)DNSへインスタンスのIN Aなどを記述</p>
<p>3)yum update、gitなど必要なコマンドをインストール</p><pre class="crayon-plain-tag"># yum update
# yum -y install git
# yum install bind-utils
# yum install net-tools</pre><p></p>
<p>4)firewallの設定</p><pre class="crayon-plain-tag"># firewall-cmd --add-port=80/tcp --zone=public --permanent
# firewall-cmd --add-port=443/tcp --zone=public --permanent
# firewall-cmd --reload</pre><p></p>
<p>5)SELinuxをdisabled</p><pre class="crayon-plain-tag"># vi /etc/sysconfig/selinux
SELINUX=disabled
# reboot</pre><p></p>
<p>6)SSL証明書の取得</p><pre class="crayon-plain-tag">$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto certonly --standalone -d xxxx.xxxx.jp
※xxxx.xxxx.jpは使用するドメイン名（事前に有効なのを確認）
※nginx側は特に設定する必要無し</pre><p></p>
<p>と、先にオーソドックスなネットワーク関連の設定を済ます。この辺りは他のサーバーでも同じ。</p>
<p>7)Mastodonをclone</p><pre class="crayon-plain-tag">$ git clone --depth=1 -b v1.3.2 https://github.com/tootsuite/mastodon.git</pre><p></p>
<p>8)nginxをインストール</p><pre class="crayon-plain-tag">$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

$ sudo yum -y --enablerepo=nginx install nginx</pre><p></p>
<p>9)docker-ceをインストール</p><pre class="crayon-plain-tag">$ sudo yum -y install yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ sudo service docker start
$ sudo chkconfig docker on
$ sudo reboot
※この一連を行わないとdocker-composeが作動せず</pre><p></p>
<p>10)docker-composeをインストール</p><pre class="crayon-plain-tag"># curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` &gt; /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose</pre><p></p>
<p>11)Mastodonの設定</p><pre class="crayon-plain-tag">$ cp .env.production.sample .env.production
$ vi .env.production
LOCAL_DOMAIN=xxxx.xxxx.jp
LOCAL_HTTPS=true

SMTP_SERVER=smtp.sparkpostmail.com
SMTP_PORT=587
SMTP_LOGIN=SMTP_Injection
SMTP_PASSWORD=xxxxxxxxxxxxxxxxxxxxx
SMTP_FROM_ADDRESS=xxxx@xxxx.xxxx.jp
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_ENABLE_STARTTLS_AUTO=true
※SMTP_PASSWORDはhttps://app.sparkpost.com/dashboardで得たキー
※サイト認証用にDNSへscphxxxx._domainkey.xxxx.xxxx.jp. IN TXT &quot;v=DKIM1;...&quot;を追加

$ docker-compose run --rm web rake secret
※三回実行し得たキーを下記へコピペ。一回目は時間がかかる
$ vi .env.production
PAPERCLIP_SECRET=
SECRET_KEY_BASE=
OTP_SECRET=

$ vi docker-compose.yml
 db:
    restart: always
    image: postgres:alpine
### Uncomment to enable DB persistance
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:alpine
### Uncomment to enable REDIS persistance
    volumes:
      - ./redis:/data
※インスタンスをdownした後でもTootやアカウントを残すため、DB関連のコメントアウトを外す</pre><p></p>
<p>smtpは、<a href="https://www.sparkpost.com/" target="_blank" class="external ext_icon">SparkPost</a>というサービスを利用。無料の範囲では送信可能な件数が限られるものの、今回の用途程度なら問題無さそう。サイト確認用のDNSによる認証があるので要注意（これに気付かずハマった）。</p>
<p>12)nginxの設定</p><pre class="crayon-plain-tag">$ sudo vi /etc/nginx/conf.d/mastodon.conf
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name xxxx.xxxx.jp;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name xxxx.xxxx.jp;

  ssl_protocols TLSv1.2;
  ssl_ciphers EECDH+AESGCM:EECDH+AES;
  ssl_ecdh_curve prime256v1;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/xxxx.xxxx.jp/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/xxxx.xxxx.jp/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 0;

  root /home/mastodon/live/public;

  gzip on;
  gzip_disable &quot;msie6&quot;;
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security &quot;max-age=31536000&quot;;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    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 Proxy &quot;&quot;;
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    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 Proxy &quot;&quot;;

    proxy_pass http://localhost:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}
※xxxx.xxxx.jpを使用するドメイン名に書き換える</pre><p>mastodon.confは公式の<a href="https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md" target="_blank" class="external ext_icon">ここ</a>にあるので、example.comの部分のみ書き換えればOKだ。</p>
<p>最近、少し内容が変わり、 ssl_dhparamが追加された。事前に</p><pre class="crayon-plain-tag">sudo openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem</pre><p>を実行すること。</p>
<p>13)起動</p><pre class="crayon-plain-tag">$ sudo systemctl start nginx
$ sudo systemctl enable nginx

$ docker-compose build
$ docker-compose run --rm web rails db:migrate
$ docker-compose run --rm web rails assets:precompile
$ docker-compose up -d

$ docker-compose run --rm web rails mastodon:make_admin USERNAME=xxxxx
※USERNAME=は管理アカウントのusername</pre><p>仕上げは、dailyメンテナンス用のコマンドを1日1回（以上）叩くよう、以下をcrontabに仕込む。</p><pre class="crayon-plain-tag">docker-compose run --rm web rake mastodon:daily</pre><p></p>
<p>ググりながら、インストールしながらメモしたのをそのままコピペしているので大丈夫と思うが、間違っていたら申し訳ない。</p>
<p>身内との遊び用なのでここではURLを掲載しないものの、連合タイムラインに載るのでばれるな（笑）</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
