For the sake of my memory.
mov to mp4
1 |
$ ffmpeg -i medium.MOV -vcodec h264 -acodec mp2 medium.mp4 |
mov to animation gif
1 |
$ ffmpeg -i medium.mov -r 24 medium.gif |
LXDのversionは3.03
作成してあるコンテナのイメージではなくて初期起動時にダウンロードしてくるOSイメージをexportするにはlxc launch
で指定するイメージ名を引数にいれてexportする。
1 |
$ lxc image export ubuntu:18.04 . |
version3.03ではtar.xzとsquashfsが作成されるのでこれを2つとも指定し、importする。aliasで名前をイメージ名を指定できる。:
(コロン)は使えないので注意。
1 |
lxc image import ubuntu-18.04-server-cloudimg-amd64-lxd.tar.xz ubuntu-18.04-server-cloudimg-amd64.squashfs --alias ubuntu18.local |
同じfingerprintのイメージをimageリストに持てないので、ubuntu16と18で比較してますが、、だいたい同じになると思います。
1 2 3 4 5 6 7 |
$ time lxc launch ubuntu:16.04 default2 Creating default2 Starting default2 real 3m32.754s user 0m0.059s sys 0m0.027s |
約3分半。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ time lxc image import ubuntu-18.04-server-cloudimg-amd64-lxd.tar.xz ubuntu-18.04-server-cloudimg-amd64.squashfs --alias ubuntu18.local Image imported with fingerprint: c234ecee3baaee25db84af8e3565347e948bfceb3bf7c820bb1ce95adcffeaa8 real 0m5.358s user 0m0.171s sys 0m0.551s root@ip-172-31-36-58:~# time lxc launch ubuntu18.local test Creating test Starting test real 0m46.986s user 0m0.026s sys 0m0.005s |
52秒ぐらいで2分半は早く起動できることを確認!
Business IntelligenceのRedashはデータから経営判断するとても良いツールです。
SQLさえ書ければ、難しいプログラミング知識も必要のないのでテックに強いスタッフにSQLを勉強してもらえれば使ってもらえます。
AWSのAMIイメージも用意されてるのですぐに導入できます。しかし、TLS/SSL化されてないので大事なデータを傍受されてしまう危険性があります。
そこで、https化ですが、少し手間取ったので記録しておきます。
AMIを中身を見るとわかるのですが、DockerでRedash周りのプロセスが動いています。なので、方針として、ホスト側にlet’s encryptを入れる。Let’s encryptのキーがあるディレクトリをdockerからマウント。ホストでcertbotのリフレッシュで期限切れになるのを防ぐという感じです。
方法はいろいろあると思いますが、AWSのRoute53を利用して作成しました。
参考:https://qiita.com/komazarari/items/88c1ed18765fb7cab6c1
https://certbot.eff.org/lets-encrypt/ubuntubionic-other通りにcertbotをインストールして、
1 2 3 4 5 6 |
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository universe $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install certbot |
pipでcertbot-dns-route53アドオンをインストール
1 2 |
$ sudo apt install python3-pip libssl-dev libffi6 $ sudo pip3 install certbot-dns-route53 |
AWSのsecretkey/apikeyをセットして、下記で/etc/letsencrypt以下にファイルを作成。systemd経由で期限切れの確認が走っているみたい。
1 2 3 4 5 |
sudo certbot certonly --dns-route53 \ -d 'redash.exmpale.com' \ --email redashadmin@example.com \ -n \ --agree-tos \ |
参考:https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e
redashのインストール場所に行って、ディレクトリとファイルを作成。
1 2 3 |
$ sudo su $ mkdir /opt/redash/nginx $ vi /opt/redash/nginx/nginx.conf |
nginx.confは下記のようにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
upstream redash { server redash:5000; } server { listen 80; listen [::]:80; server_name redash.example.com; location ^~ /ping { proxy_set_header Host $http_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 $http_x_forwarded_proto; proxy_pass http://redash; } location / { rewrite ^ https://$host$request_uri? permanent; } location ^~ /.well-known { allow all; root /data/letsencrypt/; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name redash.example.com; add_header Strict-Transport-Security "max-age=31536000" always; ssl_session_cache shared:SSL:20m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDH+AESGCM:ECDH+AES256:ECDH+AES128:!ADH:!AECDH:!MD5;"; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4; ssl_certificate /etc/letsencrypt/live/redash.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/redash.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/redash.example.com/chain.pem; access_log /dev/stdout; error_log /dev/stderr info; # other configs location / { proxy_set_header Host $http_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 $http_x_forwarded_proto; proxy_pass http://redash; } } |
/opt/redash/docker-compose.ymlを開いて、
1 2 3 4 5 6 7 8 9 10 11 12 13 |
nginx: image: nginx:latest ports: - "80:80" - "443:443" depends_on: - server links: - server:redash volumes: - /opt/redash/nginx/nginx.conf:/etc/nginx/conf.d/default.conf - /etc/letsencrypt:/etc/letsencrypt restart: always |
その後、リスタート。
1 |
docker-compose up -d |
直接certbot.serviceファイルを触るのはあまり良いプラクティスでなさそうだが、、
1 |
$ sudo vi /lib/systemd/system/certbot.service |
で開いて下記を追加(/usr/local/bin/certbotに変更。でないとバージョンのエラーで失敗していた)
1 |
ExecStart=/usr/local/bin/certbot -q renew --post-hook "docker-compuse up -d" |
sysytemdのコンフィグをリロードすればOK.
1 |
systemctl daemon-reload |
タイトルが渋滞していますが、、やったことは下記のこと。
AWS Lambdaを触ったのは初めてです。nodeではなくrubyで動かします。まずは、AWS上にLambda関数を作ります。今回は、コードは短いだろうと予想し、ローカルにインストールせずにAWSのWEB UIのエディタを使いました。
登場ロールは2つ、Rails側でlambdaをinvokeするロールとlambda関数を走らせるロール
*全部必要ではないかもしれませんが、面倒なので全て権限をあげました。
AWS Ruby SDK version2 です。RequestResponseだと同期で処理します。返り値を拾うためにもここは同期で処理。invoke_copy自体を非同期で走らせるイメージです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
def invoke_copy(recording_id, download_url, object_path) req_payload = { download_url: download_url, object_path: object_path, } payload = JSON.generate(req_payload) resp = lambda.invoke({ function_name: "copyToS3", # required invocation_type: "RequestResponse", # accepts Event, RequestResponse, DryRun log_type: "Tail", # accepts None, Tail payload: payload, }) logger.debug Base64.decode64(resp.log_result) res = JSON.parse(resp["payload"].read()); logger.debug res self.update(url: res["body"]) end def lambda @lambda ||= Aws::Lambda::Client.new( region: "ap-northeast-1", access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_KEY'] ) end |
AWS Ruby SDK version3です。Lambdaの/tmpのみがwritableな場所で、maxで512MBです。
したがって、これ以上コピーできません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
require 'json' require 'aws-sdk-s3' def lambda_handler(event:, context:) puts event pp ENV puts `curl -L #{event["download_url"]} -o /tmp/a` puts `ls -al /tmp/a` puts `file /tmp/a` s3 = Aws::S3::Resource.new obj = s3.bucket('my-backet').object(event["object_path"]) obj.upload_file('/tmp/a') { statusCode: 200, body: obj.public_url } end |
プロセスがなにかの理由で死んだら、単純にリスタートさせたい。けど、systemdとかmonitとかの設定ファイルを書くのが面倒だなって思っていて調べていた。シェル(Bash)でLoopでかけそうだけど、
1 2 3 4 |
until myserver; do echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2 sleep 1 done |
Ref: Stackoverflow
これも面倒だと思ってしまいました。スクリプトの前にone command置く感じでやりたいなって調べてみると、immortalというツールを発見!早速インストール。
1 2 |
$ curl -s https://packagecloud.io/install/repositories/immortal/immortal/script.deb.sh | sudo bash $ sudo apt-get install immortal |
使い方もシンプルで
1 |
$ immortal /bin/sh -c "sleep 5 && date > /tmp/sleep.log" |
付属のimmortalctlで、管理できる。
1 2 3 4 |
$ immortalctl PID Up Down Name CMD 22400 4.6s 22364 /bin/sh -c sleep 5 && date > /tmp/sleep.log $ immortalctl halt 22364 |
ある機能が現バージョンは動かなかったりで、昔のdockerをインストールすることがあった。
パッケージレポを設定して、apt-cache policy
でイントールできるバージョンを確認して、現行のをアンインストールして、該当パッケージを入れるだけ。
1 2 3 4 5 6 7 |
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" sudo apt-get update # to show package list that can be installed sudo apt-cache policy docker-ce # delete current one sudo apt-get purge docker-ce -y sudo apt-get install -y docker-ce=17.06.2~ce-0~ubuntu |
Crostiniがstableにきた!と思ってbetaからstableに変更したらLinuxVMが無くなりました。気をつけてください。。
stableに変更したのが理由なのかわかりませんが、socatでcrostiniのlocalhostのポートへのマッピングがうまくいかなくなりました。
例えば、開発時にlocalhost:3000をcrostini vm上で立ててもホストのchromeosのchromeからアクセスできなくなりました。
下記のようなエラーでうまくいきません。
1 2 3 4 5 |
This site can’t be reached localhost refused to connect. ERR_CONNECTION_REFUSED |
解決方法をさがしているとRedditで同じようなことを聞いている人がいました。
Connection Fowarderdというextensionを入れ、forwardingを設定します。
ifconfigでVMのIPを調べてDestinationを適宜変更してください。