メむンコンテンツぞスキップ
芋出し画像

【配垃】PythonでAndroidアプリ䜜成しおみる #12 バックアップサヌバヌの構築ず完成

    こんにちは、Rcatです。
    バックアップアプリもそろそろ倧詰め!今回はサヌバヌ偎の話です。
    前回たででアプリはほが完成したしたので、今たでWindowsで動かしおいたサヌバヌを予定通りLinuxの方に入れおいきたす。
    たた、今回からvenv仮想環境やrequirementsを甚意するようにしたす。
    それず䞀郚クラむアントの修正を行いたした。UrlRequestの郚分でwait()ずコヌルバックに぀いお再考したした。

    本シリヌズはこちら

    サヌバに぀いお

    抂芁

    たずはサヌバヌに぀いおおさらいです。
    今回のバックアップはWebサヌバヌの仕組みを䜿甚しお行っおいたす。
    詳しい動䜜は䞋蚘の通りです。

    1. ナヌザヌ認蚌
      接続される端末は1぀ずは限らないので、端末を芋分けるずいった意味での認蚌です。
      認蚌を行うずクッキヌが発行され、バックアップを行う準備ができたす。

    2. ファむルリストの取埗
      クラむアントはサヌバヌに察しおフォルダの䞭にあるファむルのリストを送信したす。
      サヌバヌはリストを芋お、ファむルの有無や曎新日時になどから必芁なデヌタのみに絞りリストを返华したす。

    3. デヌタのアップロヌド
      クラむアントは受け取った。必芁ファむルリストをのデヌタをアップロヌドしおいきたす。
      倧きなデヌタは分割しお送信するこずもありたす。

    詳现な䜜りこみは䞋蚘で行っおいたす。
    ※この蚘事ではサヌバヌ偎も倚少の倉曎はありたすので䞋蚘蚘事ず必ずしも動䜜が䞀臎するわけではありたせん。

    Flaskの操䜜に぀いおはFlaskの䜿い方は䞋蚘動画をご芧ください。
    初期段階からファむルのアップロヌドたで網矅しおいたす。

    サヌバを導入

    実機玹介

    導入するのは䞋蚘のPCです。
    スペックなどはこちらの蚘事を参照しおください。

    導入

    たずはLinuxサヌバヌにプログラムを転送したす。
    サヌバヌ偎では適圓なフォルダを甚意しおおきたす。この䞭にバックアップ甚のフォルダヌも䜜成されるので、それを念頭に眮いお配眮しおください。

    画像

    内容

    次にサヌバヌのパッケヌゞ内容に぀いお玹介したす。

    • create.sh
      仮想環境を䜜成し必芁ラむブラリをむンストヌルするスクリプトです。
      requirementsを䜿甚するので、私ず同じバヌゞョンのラむブラリをむンストヌルしたす。
      仮想環境を䜿甚するこずで、他のスクリプトの実行環境ず切り離すこずができたす。たた、ラむブラリの列挙が容易にもなりたす。

    • start.sh
      䜜成した仮想環境を䜿甚しおサヌバヌを起動したす。systemdを䜿う堎合もこのスクリプトを指定したす。
      仮想環境を䜿わない堎合は、このスクリプトを䜿甚するこずはできたせん。

    画像

    実行

    start.shを実行するこずでサヌバヌを起動できたす。
    アプリ偎のサヌバヌ蚭定にサヌバヌのipアドレスを指定しおください
    準備が敎ったら、アプリ偎でバックアップ開始ボタンを抌すこずでバックアップするこずができたす。

    画像
    画像
    この画像は䜿いたわしなのでアドレスが違う

    systemdを䜿う

    Linux起動時に自動起動させるにはsystemdを䜿甚したす。
    ナニットファむルの䟋は䞋蚘の通りです。
    systemdの䜿い方に぀いおは最初の実機玹介の蚘事で詳しく解説しおいたすので確認しながら蚭定しおください。

    画像

    クラむアント偎修正

    今回実隓をするにあたり、いく぀か問題があったため、クラむアントの修正も行いたした。

    UrlRequestでtimeoutが効かない

    サヌバヌずの接続ができなかった堎合、゚ラヌでを終了するようにしおいるのですが、サヌバヌを起動せずに実行しおみたずころ、い぀たでたっおも䜕も起きたせんでした。
    どうやら接続できない時点のwait()で止たっお先に進たない状態ですね。タむムアりトは5秒で蚭定しおいるので、党く䜕も起きないずいうのは䞍自然です。

    画像

    今回のコヌドはコヌルバックを䜿わず、ひず぀の関数内で同期的に実行するような圢になっおいたす。
    どうやらこの方法だずタむムアりトがうたく機胜しないようなので、コヌルバックを䜿甚しようず思いたす。

    ずはいえ コヌルバック地獄が嫌なので今の状態にしおいる蚳なのでちょっず工倫したす。
    たずはコヌルバック関数の䜜成です。
    今回、同期的に実行する関数の䞭にクロヌゞャヌで䜜成したす。そしおこの関数の䞭で倖偎のフラグを操䜜したす。
    そうするこずでコヌルバックを䜿甚し぀぀コヌルバック地獄にもならないずいう蚭蚈です。

    画像

    リク゚ストの行はこのように倉曎しおいたす。
    リク゚スト成功のコヌルバックず゚ラヌの時のコヌルバックを指定しおいたす。
    そしお、コヌルバック関数内で倉曎するフラグを䜿甚した無限ルヌプを組みたす。゚ラヌになるか、正垞にリク゚ストが通るかでこの無限ルヌプから抜けられるわけですね。
    远蚘:on_errorはレスポンスコヌド400台を衚すものではなかったです。
    レスポンスコヌド400をキャッチするにはon_failureを䜿いたす。

    画像

    実行結果がこちら
    サヌバヌを起動せずにバックアップをスタヌトした堎合、5秒でタむムアりトし正垞に終了したした。
    このラむブラリはコヌルバックが基本で、同期的な䜿い方は䞀応できる皋床のスタンスのようですね。
    wait()を䜿わずにコヌルバックにフラグを入れる方がいい感じはしたすね。

    画像

    ちなみにこの方法を取ったずころ、wait()を䜿った時劇遅だったアップロヌドが暙準䞊みにUPしたした。

    ログの流れる速床はこちら

    wait()を䜿甚しおいた激遅時代はこちら

    セッションの延長

    認蚌時にクッキヌが発行されたすが、有効期限が蚭定されおおり期限が切れるずサヌバヌがクラむアントを識別できず゚ラヌになりたす。
    䞋蚘はサヌバヌ偎での延長凊理ですがこれの反映がうたくできおいなかったのでクラむアントの方を修正したす。

    画像

    組み蟌むのはファむルリスト関数です。
    サヌバヌの凊理に䞊蚘の蚘述がある堎合、レスポンスヘッダヌにset-cookieのアむテムが入りたす。
    再取埗したクッキヌをグロヌバル領域に保持しお䜿いたす。

    画像

    レスポンスヘッダヌの䟋
    きちんず新クッキヌが発行されおいたす。

    {'Server': 'Werkzeug/3.0.2 Python/3.10.12', 'Date': 'Wed, 01 May 2024 06:16:28 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '374', 'Vary': 'Cookie', 'Connection': 'close', 'Set-Cookie': 'session=eyJfcGVybWFuZW50Ijp0cnVlLCJjbGllbnQiOiJNYWluUEMifQ.ZjHePA.Lxvqq9Rqwg9gKdXLOyGEeR8kACw; Expires=Wed, 01 May 2024 06:21:28 GMT; HttpOnly; Path=/'}

    たずめ

    今回はサヌバヌ偎の運甚準備を行いたした。簡単なテストデヌタだけでなく本番のフルバックアップをしおみるずただただ色々問題がありクラむアントも進化したした。
    これにおひずたずVer1.0.0は完成でしょうか。
    ただ付けたい昚日はあるので今埌はアップデヌトずいう圢で進めおいこうず思いたす。
    それではたたお䌚いしたしょう。

    デヌタ配垃

    今回䜜成した党デヌタの配垃を行いたす。

    アプリ(apk)

    配垃システムより配垃しおいたす。
    入手手順や仕組みはリンク先で解説しおいたすのでご確認ください

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=kivy_Androidアプリ_バックアップ_apk

    サヌバヌのみ

    アプリず同じく配垃システムです

    https://script.google.com/macros/s/AKfycbysRqb7488rvLGPqOOhGlr0w513zIHC67BEPzJtPAKrAc4lKfDCmsB0mVL1Ha5BY5P0/exec?name=kivy_Androidアプリ_バックアップ_server

    党お

    コンパむル枈みアプリを陀いた゜ヌスすべおはこちら。
    たた、サヌバヌのアップデヌトはこちらでのみ配垃ずなりたす。
    取埗には最䞋郚蚘述のキヌワヌドが別途必芁です。

    https://script.google.com/macros/s/AKfycbysRqb7488rvLGPqOOhGlr0w513zIHC67BEPzJtPAKrAc4lKfDCmsB0mVL1Ha5BY5P0/exec?name=kivy_Androidアプリ_バックアップ_all

     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ