google日本語入力のアニメ辞書をDocker無しで動かしてみる(Pythonの知識ほぼゼロ)

honeshabri.hatenablog.com
元ネタはここです。すごいですね。スターつけちゃう仕事ですね。
ただ、cronで定期的に回したかったですね。
流行りのDockerでやる方法が紹介されています。
Dockerだと自動で動かす方法がわからなかったのでDocker無しでやる方法を模索しました。

git clone

git clone https://github.com/anilogia/animedb.git

python

2.7系なんですねー。pyenvを導入
qiita.com

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

~/.bashrcやら~/.zshrcやらに書き込んで(そのままですけど)

export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

docker-compose.ymlを読むと2.7.12なので

pyenv install 2.7.12

じっと待つ。
git cloneしたanimedbにcdして

pyenv local 2.7.12

すると.python-versionというファイルが出来がるので

source ~/.zshrc
python --version # 2.7.12

でうまく2.7.12になりました。

cronで回したいスクリプトを用意

あとはスクリプトを用意すれば良いですねー

#! /bin/bash
export PYTHONIOENCODING=UTF-8
# change
cd /path/to/animedb
git pull
pip install -r requirements.txt --user --upgrade
./animedb list --format google_ime > output.txt

以上です。
Docker使ってアイソレイトとかしたいけどコレぐらい汚れても良いよね。

How to serve Mastodon via h2o web server(Mastodonをh2oで配信する方法)

h2o is great http/2 web server(MIT license).
http/2 protocol leads very good performance with page with many files.
I love h2o server!
I will write about how to serve Mastodon via h2o.

h2oは素晴らしいhttp/2対応のwebサーバーです(MIT ライセンス)。
http/2はたくさんのファイル読み込みがあるページなどで良いパフォーマンスを発揮します。
h2oが好きだー!
h2oでMastodonを配信する方法を記述します。

environment(環境)

server: ubuntu16.04
Front web server is h2o,backend server are apache2.4 and masdon server(docker).
フロントはh2o。バックエンドはapache2.4とdockerのmastodonです

h2o ----   apache2 (domain1) port:81
    |
    ----   docker server(domain2 - mastodon) port:3000,4000

h2o config

very simple,but "//api/v1/streaming/" is little complex.why "/api/v1/streaming/" ? I think this is mastodon's problem but I solved.
とてもかんたんですね。"//api/v1/streaming/"のところがちょっときもいですけど、まぁ、なんとか。

user: www-data
hosts:
  "lovesaemi.daemon.asia":
    listen:
      port: 80
    paths:
      "/":
        redirect: "https://lovesaemi.daemon.asia"
  "lovesaemi.daemon.asia:443":
     listen:
       port: 443
       ssl:
          certificate-file: /etc/letsencrypt/live/lovesaemi.daemon.asia/fullchain.pem
          key-file: /etc/letsencrypt/live/lovesaemi.daemon.asia/privkey.pem
          cipher-suite: "EECDH+AESGCM:AES256+EECDH:AES128+EECDH"
          cipher-preference: server
          minimum-version: TLSv1.2
     paths:
       "/":
         proxy.reverse.url: http://127.0.0.1:81/
  "mastdn.lovesaemi.daemon.asia":
    listen:
      port: 80
    paths:
      "/":
        redirect: "https://mastdn.lovesaemi.daemon.asia"
  "mastdn.lovesaemi.daemon.asia:443":
     listen:
       port: 443
       ssl:
          certificate-file: /etc/letsencrypt/live/mastdn.lovesaemi.daemon.asia/fullchain.pem
          key-file: /etc/letsencrypt/live/mastdn.lovesaemi.daemon.asia/privkey.pem
          cipher-suite: "EECDH+AESGCM:AES256+EECDH:AES128+EECDH"
          cipher-preference: server
          minimum-version: TLSv1.2
     paths:
       "//api/v1/streaming/":
         proxy.websocket: ON
         proxy.preserve-host: ON
         proxy.reverse.url: http://127.0.0.1:4000/
       "/":
         proxy.preserve-host: ON
         proxy.reverse.url: http://127.0.0.1:3000/
access-log: /var/log/h2o/access-log
error-log: /var/log/h2o/error-log
pid-file: /tmp/h2o.pid

check http/2 ? http/2で動いてる?

f:id:new_pill:20170430003959p:plain
f:id:new_pill:20170430003857p:plain
OK,http/2
http/2ですね。良い感じ。

enjoy!
是非h2oを使ってみてください。

Mastodonでrake task avatarとheader再取得

DRYにしろといわれたのでやってみました。
send祭り。ちょっと動的すぎるかね。
rubocopとcodeclimateの解析がちがうのでウガーってなったし。
CIでyarnが503だして失敗してウガーってなった。
本当に取り込まれたい。

gistb415ac44f80294bdf199008b2f2b974f

Mastodonにプルリクしてみました。

辛い。
でもやる価値があるとおもうんだよ。
コミッターに載れたらめっちゃ嬉しいやん!

機能は簡単なもので、間違えてavatar消してしまったときにavatarを再取得するって言うrake task。

  • 手元の環境のrubocopが上手く動いていなくてそこで怒られる。
  • ループをnextで飛ばせと怒られる。

→辛い。
でも、たしかに言われたことやるとループの深さも浅くなって見通し良くなった。
これは力がつくね。rubocopは手元の環境をもうちょっときちんとしてそこでつまづきたくないね。
ともかくMastadonから目が離せない今日このごろ。

ていうかブランチ切らないでmasterで作業していたことにプルリクしてから気づく有様。
ちょっと無様だねー

どうか本家に取り込まれますように。お願い!

github.com

Mastodonのアップデートv1.2へ(追記あり ほぼ無停止更新)(docker system prune -a追記)

dockerのデプロイ、アップデートの方法がごっそり消えとる(キレ気味)
サンクス@nukosu@pao.moeさん
Main README developer documentation · Issue #1830 · tootsuite/mastodon · GitHub
短絡的。documentの方を整備してから変更してよ。あんまり英語読みきれてないけどお前のshouldとか知らん。
仕方がないので
README.mdを掘る
github.com
docker-compose.ymlとか編集しているので退避しないとだめね~
以下、流したコマンド

git stash save
git pull
git describe --tags `git rev-list --tags --max-count=1`
# versionを確認
git checkout -b v1.2 $(git describe --tags `git rev-list --tags --max-count=1`)
git checkout -b v1.3.1 refs/tags/v1.3.1 #こっちが良いかも #追記 2017/04/28
git stash list
git stash list -p
git stash show stash@{0}
git stash apply stash@{0}
docker-compose stop
docker-compose build
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails assets:precompile
docker-compose up -d
#追記
git stash drop stash@{0}

以上です。
次はdb/redisもバックアップすべきですねー。

2017/4/29 追記 1.3.1

2017/6/24 追記 1.4.6

1.3.1への更新がありました。
あれから考えたのですが、Linuxはプロセスを立ち上げる際に必要なファイルを別領域にコピーして使うので、起動しながらapacheをビルド、とかできるわけです。で、ビルド後restartして最新へ、とかできる。dockerも同じなはずで、今回は、バックアップ取ってから起動しながらdocker-composeのbuildをためしてみました。行けました。
以下、流したコマンド。スクリプトにして一気に行ける感じがでてきました。

2017/6/24 追記 1.4.6

docker system prune -aを追記します。いらないイメージ消しておきましょ。

git stash save
git pull
git checkout -b local$(git describe --tags `git rev-list --tags --max-count=1`) $(git describe --tags `git rev-list --tags --max-count=1`)
git stash apply stash@{0}
docker-compose build
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails assets:precompile
docker-compose stop && docker-compose up -d
git stash drop stash@{0}
docker system prune -a

基本ほぼ無停止で行けました。