LifeWrite

気が向いたら書きます

cronでdocker-composeが動かなかった件

問題

/var/www/dockerにdocker-compose.ymlが存在していてコンソール上でそのままのdocker-compose startは動くがcrontabでは動かない

例えば

cd /var/www/docker && docker-compose start

とか

cd /var/www/docker; docker-compose stop

cd /var/www/docker; docker-compose start

で試してもcronのlogには出てくるのだが走ってる様子がない

解決策

直接にdocker-composeの/usr/local/bin/docker-composeスクリプトを指定する

cd /var/www/docker; /usr/local/bin/docker-compose start

参照:

Crontab can’t execute docker-compose commands · Issue #2293 · docker/compose · GitHub

外部から社内のパソコンへWake on lanを実装したときのまとめ(サーバー側)

外部からリモートデスクトップするためのwake on lanを実装したときのサーバー側のまとめ

前提資料

http://www.atmarkit.co.jp/ait/articles/0602/25/news014_2.html

必要事項

・外部から見れるサイトを社内にサーバーを立てれること
※Web UIとかログイン認証、sslは別途でやってね

概要

前提として下記の設定が必要になります。(マシンによって異なる)

8e70e928d849800df74cd206b0d90d74.png

今回はphpWake on lanを実施する部分のみ

wakeonlanにはMAC Addressが必要だが、Ip Addressしかわからない人がいるのでコマンドを使って探す処理を実装

//ip address → mac address
if(isset($ip_address && $ip_address != ""){
    $mac = "";
    $pcs = shell_exec("nmap -sP {$ip_address} ");
    $pcs = shell_exec("arp -a");
    $pcss = explode("\n",$pcs);

    foreach($pcss as $value){
        if(strripos($value,$ip_address !== false){
            if(preg_match("/([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}/",$value,$match) === 1){
                $mac = $match[0];
                break;
            }
        }
    }
    if($mac != ""){
        $ping = " {$ip_address} → MAC address {$mac}";
    }else{
        $ping = "get faild";
    }
}

その逆

//mac address → ip address 
if(isset($mac_address) && $mac_address != ""){
    $ip = "";
    #Need to change *.*.*. (192.168 or 172.16 or ....)
    $pcs = shell_exec("nmap -sP 192.168.6.* ");
    $pcs = shell_exec("arp -a");
    $pcss = explode("\n",$pcs);

    foreach($pcss as $value){
        if(strripos($value,$mac_address) !== false){
            if(preg_match("/\(([a-zA-Z0-9.]+)\)/",$value,$match) === 1){
                $ip = substr(substr($match[0],1),0,-1);
                break;
            }
        }
    }
    if($ip != ""){
        $ping = "MAC address {$mac_address} → IP address {$ip}";
    }else{
        $ping = "get failed";
    }
}

また上記で参照できないことがあるので下記をcronで走らせる *.*.*.は192.168.1や192.168.2、172.16.3等に環境に応じて変える

for a in `seq 1 254`; do ping -c 1 -w 0.5 *.*.*.$a > /dev/null && arp -a *.*.*.$a | grep ether; done

MAC Addressがわかったら下記でバッチに引き数を渡す

※batchの実行ユーザーに気を付ける事、この場合はapacheのユーザーを使用して実行

#run user apache
shell_exec("wakeonlan.sh ".$mac_address);
#!/bin/sh
echo 'apache' | sudo -S ether-wake $1
echo "$1 start"

その後の起動確認は下記で実装

$res = shell_exec("ping -c 4 -W 5 ".$ip_address);
$array = explode("\n",$res);
if(strripos($res,'0 received') === false){
    $ping = "boot success";
}else{
    $ping = "boot failed";
}

github:https://github.com/abotkugyu/wakeonlan

グラブルのリアルタイムtwitter救援取得アプリを作ってみた3

下の続き

abot-s.hatenablog.com

 

アプリ

gbf-relief

 

dialogPolyfillがfirefoxで動かないのでdialog廃止

 

改修内容

・石マルチ、マグナHL追加

・謎のチャット機能追加(メンテナンス告知用)

・UIちょっと変更

 

今後の改修

・音声通知

グラブルっぽさを出す

スマホでも使えるように

グラブルのリアルタイムtwitter救援取得アプリを作ってみた2

前回から機能を改修しました。

abot-s.hatenablog.com

 

アプリ

gbf-relief

 

改修

・デスクトップ通知が出来るように

下記の通知をONにすると

下記の感じでデスクトップ通知がきます。

※この通知をコピーしてもクリップボードにIDがコピーされます。(結構重要)

・黒麒麟、黄龍、オーディンアポロン追加

(古戦場が光なので・・・)

 

今後の改修

・音声通知

グラブルっぽさを出す

・救援の種類の追加

スマホでも使えるように

グラブルのリアルタイムtwitter救援取得アプリを作ってみた1

 

gbf-raiderが閉鎖したので作ってみました。

 

※面倒なので携帯で見るの考慮してません。

dockerとかreactの練習と、nodejsのsocket使ってます。

 

下記URL

gbf-relief

 

テストなので四大天司のみです。

過去の物は出てきません、あくまでリアルタイムで取得します。

最初は何もないですが、とりあえず待ってればいつか救援出てきます。

 

gyazo.com

 

 

今後の予定(gbf-raiderにあった機能)

・デスクトップ通知したい

・音声で伝えたい

・見たい救援IDの選択

・もうちょっとグラブル感出したい

 

※サーバーのスペックがごみなので、負荷かけると多分すぐ落ちます。落ちたら増強考えます。(むしろ面白そうなので常識的な範囲で負荷かけて下さい)

 

 

 

docker(docker-compose)で10分でnginx+mysql+php-fpmの環境を作る

docker-composeを使ったら非常に簡単にWEBの環境が作れました

ホスト環境

centos7

docker-compose、dcokerインストール

yum update
#dockerインストール
curl -sSL https://get.docker.com/ | sh

#docker-composeインストール
curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

ファイル構造(最終的にdata/php/publicをweb上に公開します)

# tree
.
├── containers
│   ├── mysql
│   │   └── Dockerfile
│   ├── nginx
│   │   ├── conf
│   │   │   └── default.conf
│   │   └── Dockerfile
│   └── php-fpm
│       ├── conf
│       │   └── php.ini
│       └── Dockerfile
│   
├── data
│   ├── mariadb
│   └── php
│        └── public
└── docker-compose.yml

各ファイル

docker-compose.yml

#docker-compose.yml
version: "2"

services:
  php:
    build: ./containers/php-fpm
    volumes:
      - "./data/php:/var/www/html"
    environment:
      DB_HOST: db
      DB_PORT: 5432
  nginx:
    build: ./containers/nginx
    ports:
      - 80:80
      - 443:443
    links:
      - php
  mysql:
    build: ./containers/mysql
    volumes:
      - "./data/mariadb:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_PASSWORD: ryouzi01
      MYSQL_USER: abot
      MYSQL_DB: abot
    expose:
     - "3306"

php Dockerfile

FROM php:fpm
WORKDIR /var/www/html
RUN apt-get update && docker-php-ext-install mbstring mysqli pdo_mysql
ADD conf/php.ini /usr/local/etc/php/conf.d

nginx Dockerfile

FROM nginx:1.9.12
ADD conf/default.conf /etc/nginx/conf.d

mysql Dockerfile

FROM mariadb:10.1.18

VOLUME /etc/localtime:/etc/localtime:ro

RUN sed -i -e "s/^#bind-addresss*=s*0.0.0.0/bind-address=0.0.0.0/" /etc/mysql/my.cnf

nginx.conf

server {
    listen       80 default;
    server_name  localhost;
    charset utf-8;
    root /var/www/html;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    #rewrite ^(.+)/$ $1;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        root /var/www/html/public;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        #fastcgi_split_path_info ^(.+\.php)(.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

php.conf

#以下php.iniで使うものを設定
date.timezone = Asia/Tokyo

上記のファイルが全部そろったらdockerコンテナ起動

#docker-compose.ymlがある階層で
docker-compose build
docker-compose up -d

docker-compose stop

以上、非常に簡単に環境が作れて、かつ再構築も簡単

グラブルのwiki救援を自動取得するアプリを作った(四大天司対応)

ーーーーーーーーーーーーーーーーーーーーーーーーーー

2017/06/05

機能はこっちに引き継ぎました。

abot-s.hatenablog.com

ーーーーーーーーーーーーーーーーーーーーーーーーーー

 

以下概要

 

f:id:abot_s:20160901100400p:plain

 

上記の様な簡単アプリで自動で裏でwikiの内容を取得してるだけ。

様はヤフーのtwitterリアルタイム検索のwiki版で、自動的にクリップボードに救援IDを設定する。

リアルタイム検索はtwitterAPI使ってると思うけどこっちは力技です。

WebBrowserコントロールを使っています。

 

仕組みは以下の通り

グラブルのマルチ(グランデ、よわバハ)の救援ページ

通常マルチバトル救援募集板 - グランブルーファンタジー(グラブル)攻略wiki

 

・ページの仕様

1.上記の内容は全部inputタグで囲まれている

2.救援のINPUTタグにはclass="pcmt"が設定されている(救援以外もあるが)

3.各救援は昇順

 

・アプリ仕様

1.HtmlElementCollectionにINPUTタグを検索して格納、

そのINPUTのclassタグにpcmtが設定されていればそれを救援と認識

それを行ごとに画面出力

2.最新の行から\s[0-9a-z]{8}で救援IDを取得してクリップボードに張り付ける。(簡単に貼り付けで救援に入れるように)

3.取得間隔は10秒

4.新しい救援取得時にWindowsのNotifyIconを使いタスクトレイに通知

 

・問題

1.サイトのURLが変更されたらいちいち更新が面倒

2.サイトの表示が変わったらおしまい

3.使う人の書き方が変わったらおしまい

 

・利点

これを使ってからグランデに入れなかったことありません(キリッ

 

・・・としょうもないものを作ってしまった。

iphoneでの自動取得のほうが結構需要ありそうだけど、都度のクロールのせいで通信食いそう。

直接アプリに救援ID張り付けようと思ったけど、さすがにアプリに介入するといろいろまずそうなのでここまで。ほしい人いるだろうか・・・。

 

・追記

dropboxに上げてみました。
取得間隔は10秒固定です。(wikiに負荷をかけてほしくないため)

グランデ、よわバハのページだけです。要望があれば作るかもしれませんが・・・

使用は自己責任でお願いします。いかなる不利益を被っても責任は負いかねます。

サイトの構造が変わったりしてidが取得できなくなった場合、連絡いただければ調べる

(かも)しれませんが期待しないでください。

Dropbox - グラブルwiki救援自動クリップボード貼り付けアプリ.zip

 

・追記2 09/14 12:02

1.正規表現でのID抽出部分を変更(全角でID書く人とか居たのと、先頭にID書いた場合に抽出できなかったので)

2.初回起動時、IDが見つからない場合は通知しないように修正

 

・追記3 09/21 18:57

特定環境において起動時にエラーが出ていたので、dllも付属するように変更。

どのようなDLLかは↓の方の記事を参照

mshtml.dllの配布に関するメモ - wave1008の日記

 

追記4 2017/03/18

なんかアクセスめっちゃ増えていて、また開発環境も手元に戻ってきたので改良してます。(自分も使いたいので)

多分四大天司の影響だと思いますが・・・。

ちなみに引退してましたがバハ引いたので復帰しました。( ・´ー・`)

こんな感じになると思います。

f:id:abot_s:20170318195841p:plain

 

・抽出ワードは「ウリエル」と入れた場合にサイトに下記の行があったとき「ウリエル」の行だけ認識するものです。(表示自体は全行出します)

ウリエル 416500C6

ラファエル e6c1c3d0

・保存は次回起動時に覚えておくため用です。radioボタンを変えてもすぐに反映されます。 

 

※通常マルチも要望がありましたがあまり更新されないので、twitterで検索したほうがいいと思います。

また、コメントにスマホのアプリとありましたがそれ用に作っていないので多分無理だと思います。最近twitterでどなたかが作っているアプリ見かけた気がするけど・・・。

 

追記5 2017/03/19 四大天司対応させました。

https://www.axfc.net/u/3788133

パスワードは wiki です。

ソース残ってなかったから新規に作り直したので、不具合出たらご連絡ください。

意見もお待ちしております。

グラブルのフレンドも募集中です ID:6372142 

 

..etc 

いまの10秒更新だとほぼ無理ですね・・・。

3秒更新だとID入力した後の表示人数1/30人で入ることが3連続で出来たので、落ち着いたら配布します。

6人HELLは上手くいってないです。