ブログを新しいサーバーに引っ越した。
最近は3万円台のパソコンでも省エネでCore i5、メモリ8GBもあるパソコンが購入できるのでかなりいい時代になりました。 購入したのは、CHUWIのCoreBox。
ミニサイズながらも、 USB3.0 が2個もあるのでRAID 1も構築できます。
AWS Lambda で Rustを使ってみた話
この記事は、nacika.com Rust記事 アドベントカレンダー Advent Calendar 2018 – Adventar 二日目の記事です。
AWS LambdaでRustを使う方法はほぼ、<a href=”https://dev.classmethod.jp/cloud/aws/custom-runtime-rust/” title=”AWS LambdaのCustom RuntimeでRustを実行してみた #reinvent | DevelopersIO target=”_blank”>AWS LambdaのCustom RuntimeでRustを実行してみた #reinvent | DevelopersIO こちらや Rust Runtime for AWS Lambda | AWS Open Source Blog こちらの記事の通りに作ると簡単につくれます。
手順はもうあるので、作ってみた感想などを書いていこうと思います。
ランタイム is 何処
ランタイムは、AWSが用意しているというよりはcreateとして提供されているようです。
Cargo.toml にある lambda_runtime = "^0.1"
というのがそれですね。
main.rsの編集だけで終わる
びっくりしたのが、main.rsに一通りの処理を書くだけですぐに使える所。内部的にはLambda用のリクエストを受け付ける処理があるようですが全てランタイムがやってくれます。便利。
そのため、こちらでやることはハンドラを書くことくらい。
必要なイベントを型で受け取る
#[derive(Deserialize, Clone)] struct CustomEvent { #[serde(rename = "text")] text: String, #[serde(rename = "is_decode")] is_decode: bool }
serde(rename = "text")
が実際のイベント名、下にあるのが型のフィールド。
イベントがそのまま型で来るのでそこから取ってくればOK。falseやtrueがboolで処理してくれるのも地味に嬉しい。(オプション型は試せていない)
気をつける所
Cargo.tomlの
[[bin]] name = "bootstrap"
この部分、buildされたバイナリのファイル名がbootstrapじゃないとエラーになる。
実行時間
最安プランになっている様子。これ以上高速化しても安くならない・・?
この開発によって作ったもの
モコあきさんが2001年にリリースしたWindowsアプリのロリコンバータをリメイクしたものを作りました
https://nacika.com/loliconv/
actixを試す
この記事は nacika.com Rust記事 アドベントカレンダー Advent Calendar 2018 – Adventar の1日目の記事です。
日付跨いじゃってるけど・・・。
早速、actix/actix: Actor framework for Rust を試しました。
使った感じ
現状だと、特に各アクターでスレッドを作ってくれるわけではないようで、どこかのアクターでloopを書いたりしてスレッドを専有してしまうと、他のアクターの処理が止まる。
panic!を書けばプロセスは落ちるし、エラーが発生してもプロセスごと落ちる。
impl Supervised
に def restarting
というメソッドがあり、エラーがあると呼ばれてリスタートするらしいんだけど、呼ばれない。。
メリットがありそうなところ
- 耐障害性は、スレッドを作ってあげて処理すればなんとかなりそう。do_sendや、sendなどのメソッドは
#[derive(Message)]
をつけたものを送ればいいだけなので、複雑な所有権をあまり考えずに使えそうなところがよさそう。 - スレッドループからもメッセージを送ることができるのでいい感じ。
- アクターの変数も、メッセージ自体もミュータブルにすることができる。
今後使うか
正直、Rust言語の複雑な部分をActorでまとめることができてコード自体も簡潔にかける部分が良いので、今後使っていきたい。
docker-ceがUbuntu16.04.2 LTSに入らないとき
wget http://launchpadlibrarian.net/236916213/libltdl7_2.4.6-0.1_amd64.deb sudo dpkg -i libltdl7_2.4.6-0.1_amd64.deb sudo add-apt-repository ppa:ubuntu-sdk-team/ppa sudo apt-get update sudo apt-get install docker-ce
これでいいみたい。外部のdebパッケージ入れてるみたいなので取扱要注意。
参考とソース元:
ubuntu16.04 安装docker-ce,解决libltdl7版本过低的问题。 – 简书
docker-ce : Depends: libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed
起動中のDockerコンテナ内にホストのDNSサーバーを登録する
基本的に異なるDockerコンテナ内でDNSサーバを使う場合は、こちらに書かれているように –link や –dns を使うとよいでしょう。
もしも、この–linkや–dnsを設定し忘れたりした場合に簡単にDNSサーバーを登録する方法をご紹介します。
docker ps -q | xargs -I{} docker exec -i {} sh -c 'echo "nameserver (ここにDNSサーバのIP)" >> /etc/resolv.conf'
はい、お疲れ様でした。
DNSサーバに関してはこちらがおすすめです。
dnsmasqで始めるプライベートDNSサーバ – GeekFactory
なんと! Dockerホストに入れさえすれば、ホストの /etc/hostsを見てくれるようになります。
AWS Lightsail向けのマストドン構築用Ansibleレシピ作ったよ
AWS LightsailというVPS
最近コスパがすごくよくて、立ち上げも簡単なAWS LightsailというVPSがあります。
AWSアカウントがあれば、めんどうなロードバランサの設定やVPCの設定、固定IPの発行も楽に行うことが出来ます。
Ansibleスクリプト
スクリプトはこちらです。
https://github.com/nacika-ins/ansible-mastodon-amznlinux
localhost用になっているので、Lightsail内で実行してみてください。Amazon Linux 2018.03.0
に対応しています。
途中、certbotの設定などでスクリプトがとまることがあるので、そのときは手動実行をします。
[v2.5.2対応] Macでマストドンの開発環境構築
参考: Vagrant や Docker を使わずに macOS でマストドンの開発環境を構築する – Qiita
まずは開発ガイドラインを読もう
マストドン公式 開発ガイドライン
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md
.env.productionの修正
マストドンのソースが手元にある状態にしてまず最初にやるのがこのファイルの編集です。
下記の部分を変更していきます。
LOCAL_DOMAIN
localhost:3000
SECRET_KEY_BASE と OTP_SECRET
docker-compose run --rm -e RAILS_ENV=production web bundle exec rake secret
を二回叩いてちゃちゃっと設定します。
VAPID_PRIVATE_KEY と VAPID_PUBLIC_KEY
docker-compose run --rm web rake mastodon:webpush:generate_vapid_key
を一度だけ実行してコピペして貼り付けます。
SINGLE_USER_MODE
おひとりさまインスタンスにしたいときは
SINGLE_USER_MODE=true
複数アカウント作りたいときは
SINGLE_USER_MODE=false
にします。
アカウント新規作成画面やログイン画面にアクセスしようとするとID1番のユーザーのページに飛ぶ挙動になります。
DEFAULT_LOCALE
ja
日本語を使うので日本にします。
SMTP関係
SMTP_SERVER=localhost
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com
使わないのでこうします。
compileをwebpacker-dev-server経由にする
sed -i 's/compile: true/compile: false/' config/webpacker.yml
rubyのインストール
git clone https://github.com/rbenv/rbenv.git ~/.rbenv cd ~/.rbenv && src/configure && make -C src echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build # 一度ここでシェルをログインし直す cd ~/ws/mastodon RUBY_VERSION=`cat .ruby-version` echo $RUBY_VERSION rbenv install $RUBY_VERSION rbenv rehash rbenv global $RUBY_VERSION ruby -v
yarnのインストール
npm i -g n
n stable
npm -v
node -v
npm i -g yarn # brew install yarn でも良いかも
必要ライブラリのインストール
brew install autoconf ffmpeg gcc gdbm imagemagick libffi libidn libxml2 libxslt libyaml openssl pkg-config protobuf readline postgresql
ライブラリを個別インストール
CUR_RUBY_VERSION=`rbenv version | awk '{print $1}'` echo $CUR_RUBY_VERSION IDN_VERSION=`idn --version | head -n 1 | awk '{print $4}'` echo $IDN_VERSION NOKOGIRI_VERSION=`grep nokogiri Gemfile | egrep -ioh '[0-9\.]+'` echo NOKOGIRI_VERSION gem install nokogiri -v "$NOKOGIRI_VERSION" -- --use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2 gem install idn-ruby -- --with-idn-dir=/usr/local/Cellar/libidn/$IDN_VERSION ## cld3のインストールがうまくいかないときは https://github.com/akihikodaki/cld3-ruby#openbsd こちらを試す gem install cld3
postgres初期化と起動
pg_ctl -D /usr/local/var/postgres start initdb /usr/local/var/postgres -E utf8 brew services start postgresql
yarn install
yarn install
db:migrate
RAILS_ENV=development rake db:migrate
bundle install
gem install bundler rbenv rehash bundle install
高確率でcld3がエラーとなる。こちらを試そう。
install redis
brew install redis
brew services start redis
Railsサーバー起動
RAILS_ENV=development bundle exec rails server
Webpackサーバー起動
RAILS_ENV=development NODE_ENV=development ./bin/webpack-dev-server --listen-host 0.0.0.0
sidekiq 起動
env PORT=3000 RAILS_ENV=development bundle exec sidekiq
streaming 起動
env PORT=4000 NODE_ENV=development RAILS_ENV=development yarn run start
admin作成
> 管理画面からアカウントを作成する RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=admin@example.com RAILS_ENV=development rails mastodon:make_admin USERNAME=admin RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=guest@example.com RAILS_ENV=development rails mastodon:make_admin USERNAME=guest
Macの開発環境でcld3-rubyがコンパイルできない時の対処法
Mastodonでは、 cld3-rubyをがっつり使っているために、これがないとまともに動かない。
実はこの対処方法、公式に載っている。
"pkg-config --exists protobuf" | pkg-config --libs protobuf => "-L/usr/local/Cellar/protobuf/3.6.1/lib -lprotobuf -pthread\n" "clang -o conftest -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/x86_64-darwin17 -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/ruby/backward -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0 -I. -I/Users/user/.rbenv/versions/2.5.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -Wno-error=shorten-64-to-32 -pipe conftest.c -L. -L/Users/user/.rbenv/versions/2.5.1/lib -L. -L/Users/user/.rbenv/versions/2.5.1/lib -fstack-protector -L/usr/local/lib -lruby.2.5.1-static -framework Foundation -lpthread -ldl -lobjc " ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Foundation are out of sync. Falling back to library file for linking. ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking. checked program was: /* begin */ 1: #include "ruby.h" 2: 3: int main(int argc, char **argv) 4: { 5: return 0; 6: } /* end */ "clang -o conftest -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/x86_64-darwin17 -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/ruby/backward -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0 -I. -I/Users/user/.rbenv/versions/2.5.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -Wno-error=shorten-64-to-32 -pipe conftest.c -L. -L/Users/user/.rbenv/versions/2.5.1/lib -L. -L/Users/user/.rbenv/versions/2.5.1/lib -fstack-protector -L/usr/local/lib -lruby.2.5.1-static -framework Foundation -L/usr/local/Cellar/protobuf/3.6.1/lib -lprotobuf -pthread -lpthread -ldl -lobjc " ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Foundation are out of sync. Falling back to library file for linking. ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking. checked program was: /* begin */ 1: #include "ruby.h" 2: 3: int main(int argc, char **argv) 4: { 5: return 0; 6: } /* end */ | pkg-config --cflags-only-I protobuf => "-I/usr/local/Cellar/protobuf/3.6.1/include\n" | pkg-config --cflags-only-other protobuf => "-pthread\n" | pkg-config --libs-only-l protobuf => "-lprotobuf\n" package configuration for protobuf cflags: -pthread ldflags: -L/usr/local/Cellar/protobuf/3.6.1/lib -pthread libs: -lprotobuf
公式リポジトリに書いてあった
これをやるだけでした。
[v2.5.2対応] Dockerでらくらく!マストドンの開発環境構築
タイトルは釣りです。Dockerが入っている環境前提での作業環境構築の備忘録です。
参考: Vagrant や Docker を使わずに macOS でマストドンの開発環境を構築する – Qiita
Docker使わない版も用意しました!
まずは開発ガイドラインを読もう
マストドン公式 開発ガイドライン
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md
.env.productionの修正
マストドンのソースが手元にある状態にしてまず最初にやるのがこのファイルの編集です。
下記の部分を変更していきます。
LOCAL_DOMAIN
localhost:3000
SECRET_KEY_BASE と OTP_SECRET
docker-compose run --rm -e RAILS_ENV=production web bundle exec rake secret
を二回叩いてちゃちゃっと設定します。
VAPID_PRIVATE_KEY と VAPID_PUBLIC_KEY
docker-compose run --rm web rake mastodon:webpush:generate_vapid_key
を一度だけ実行してコピペして貼り付けます。
SINGLE_USER_MODE
おひとりさまインスタンスにしたいときは
SINGLE_USER_MODE=true
複数アカウント作りたいときは
SINGLE_USER_MODE=false
にします。
アカウント新規作成画面やログイン画面にアクセスしようとするとID1番のユーザーのページに飛ぶ挙動になります。
DEFAULT_LOCALE
ja
日本語を使うので日本にします。
SMTP関係
SMTP_SERVER=localhost
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com
使わないのでこうします。
docker-compose.ymlの編集
web
command: tail -f /mastodon/README.md
volumes: - ./:/mastodon
ports: - "127.0.0.1:3000:3000"
commandの行を書き換えておきます。
こうすることで、コンテナが落ちなくなります。
volumesはソースファイルをコンテナ内外から直接編集できるようにするためです。
ここまできたら
docker-compose up -d
で起動します。
コンテナに入るには、
docker-compose exec web bash
これで入ります。
rootで入りたい場合は、
docker-compose exec --user root web bash
で入ります。
migrate
dbのセットアップをします。
docker-compose run -e RAILS_ENV=development --rm web rake db:migrate
これだけでOK。
[webコンテナ内] yarn
yarn
yarn install --dependencies
yarn add webpack-dev-server --dependencies
基本的にはyarnだけでOKですが、トラブルシュート的に3行
[webコンテナ内] development許可
sed -i 's|BUNDLE_WITHOUT: "test:development"||g' /usr/local/bundle/config
[webコンテナ内] Rails側でアセットのコンパイルをしない
sed -i 's/compile: true/compile: false/' config/webpacker.yml
[webコンテナ内] bundle install
bundle install
[webコンテナ内] webpacker:install
RAILS_ENV=development rails webpacker:install
不要かもしれませんが念の為・・・。
全てnで解答します。
[webコンテナ内] 環境設定
echo 'export RAILS_ENV=development' >> ~/.bashrc echo 'export NODE_ENV=development' >> ~/.bashrc source ~/.bashrc
[webコンテナ内] rails起動
RAILS_ENV=development bundle exec rails server
[webコンテナ内] webpack –watch起動
vim config/webpack/development.js
してから、
watchOptions: { poll: 1000 }
を追加、これで1秒ごとにファイルの変更を監視します。
NODE_ENV=development RAILS_ENV=development yarn build:development --watch
こちらで監視のスタートとアセットのコンパイルをするようになります。
差分変更に対応しているのでファイル変更時はコンパイルが早いです。
localhost:3000にアクセス
http://localhost:3000 にアクセスして起動していることを確認します。
[webコンテナ内] admin作成
まずはじめに、管理画面からアカウントを作成します。
RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=admin@example.com RAILS_ENV=development rails mastodon:make_admin USERNAME=admin
[webコンテナ内] alpine linuxの環境改善
docker-compose exec --user root web bash
でrootでログイン後、
apk update
apk add --update alpine-sdk
apk add vim tmux wget curl lsof tree sudo
を実行しておくと使いやすくなると思います。
LiveReload
コンテナの外での作業です。ファイルが変更されたら、自動的にブラウザをリロードします。
LiveReload というChrome拡張をインストールします。
livereload本体は、下記URLの手順でインストールします。
Winの場合: http://livereload.com/
Macの場合: http://macappstore.org/livereload/
Mac版は App Storeでは有料ですが、それ以外のインストール手段では無料です。npm版もあります。
アセットコンパイルに時間がかかるので3秒後にブラウザをリロードするようにしてlivereloadを起動します。
livereload . --wait 3000