2024年2月23日金曜日

Chromebook GAE開発環境 (ver.2024)

前回とは、びみょうに変わってる感じ。

公式サイト

Python3 仮想環境

$ sudo apt update && sudo apt upgrade
$ sudo apt install python3-venv python3-pip
$ cd my-app
$ python3 -m venv env
$ source env/bin/activate
V cd my-project
V pip3 install -r requirements.txt

Google SDK

※本家の手順そのまま
https://cloud.google.com/sdk/docs/install-sdk?hl=ja#chromebook

$ sudo apt install google-cloud-cli-app-engine-python
$ sudo apt install google-cloud-cli-datastore-emulator 

2023年5月5日金曜日

ChatGPT すげぇ〜。

 早速、リファクタリング、やってみました。

とにかく、すげぇ〜。

これまで、(独学と言えば聞こえは良いが・・・要は適当に、) 見様見真似でコード書いてたのが、先人の知見をお借りして、どんどんと良いコードになっていく感じ。最高です。

リスト内包表記を(勝手に)提案してくれるし、変数名を(勝手に)変更してくれるし。

PEPなんちゃらと(言い訳しながら)、とにかく、的確なご指摘ありがとうごさいます。

とりあえず、こんな感じでプロンプトしてます。

「次のコードを視認性良く、リファクタリングして。〜自分のコード〜」

いや〜、良い時代です。



2023年5月2日火曜日

ChatGPT 始めました。

 Google アカウント + SMS で、サクッと開始。

今日は、多分、記念日になると思う。

2021年5月3日月曜日

WebARENA/VPSに、moshでリモート接続する。

mosh を使うと、リモート接続での作業が、とても快適になります。
切れないしレスポンスも良いので、もう、素のsshには戻れません。

mosh(モバイルシェル)とは

インストール
# apt install mosh

セキュリティグループ (VPSファイヤーウォール)
udp:60000,61000,ip4:0.0.0.0/0

リモート接続 (local -> VPS)
$ mosh --ssh="ssh -i .ssh/(鍵ファイル名).pem" ubuntu@(IPアドレス)

2021年5月1日土曜日

WebARENA/VPSで、Webサーバ構築

 格安VPSのWebARENAは、いつもインスタンスの在庫不足で、申込みが出来ませんでした。

https://arena.secure.customer.ne.jp/signup/vpsc/zone

たまたま、申込みが出来たので、Webサーバ構築の手順をメモしておきます。


申し込みページ

https://arena.secure.customer.ne.jp/signup/vpsc/zone


お客様番号とか、契約者IDとか、サービスIDとか、とても分かり辛いですが、適当に入力して申込み完了。手順は全然思い出せませんが..


インスタンスタイプ

・メモリ  1GB

・CPU   仮想1コア

・ディスク SSD 20GB


躓きどころ

・ログイン

 Ubuntuを選択した場合、初期ユーザ名は「ubuntu」です。

 「root」ではログインできません。

・セキュリティグループ

 要は、ファイヤーウォールです。

 デフォルトでは、全てのポートを閉じているので、設定必須です。


SSHで接続できれば、後は、いつものUbuntuです。


参考

http://yamayoshi.blogspot.com/2020/04/gcenginx-unitweb.html


$ sudo apt update

$ sudo apt upgrade

$ sudo apt install python3-venv python-pip


仮想環境 & Flaskインストール

$ cd

$ mkdir project1 && cd project1

$ python3 -m venv venv

$ source ./venv/bin/activate

V pip install Flask


アプリケーション

V nano main.py

--

from flask import Flask

application = Flask(__name__)

@application.route("/")

def index():

  return "Hello Project1!"

if __name__ == "__main__":

  application.run()

--


動作確認

V python3 main.py

 →コンソールをもう1つ開いて動作確認

  $ curl http://127.0.0.1:5000/


V deactivate


Nginx  (Webサーバ)

http://unit.nginx.org/installation/#ubuntu-1804


(インストール準備)

キー取得

$ sudo -i   *rootで作業

# curl -sL https://nginx.org/keys/nginx_signing.key | apt-key add -


リポジトリ追加 *Ubuntu18.04 = bionic

# nano /etc/apt/sources.list.d/unit.list

--

deb https://packages.nginx.org/unit/ubuntu/ bionic unit

deb-src https://packages.nginx.org/unit/ubuntu/ bionic unit

--


インストール

# apt update

# apt install unit unit-dev unit-python3.6


コンフィグ

https://unit.nginx.org/howto/flask/


ソケットの場所を調べる

# unitd --help

 --control ADDRESS

  set address of control API socket

  default: "unix:/var/run/control.unit.sock"


現在の設定をファイルに出力

# curl --unix-socket /var/run/control.unit.sock http://localhost/config/ > config.json


Flask用の設定

# nano config.json

--

{

 "listeners": {

  "*:80": {

   "pass": "applications/flask_app"

  }

 },

 "applications": {

  "flask_app": {

   "type": "python",

   "path": "/home/ubuntu/project1/",

   "home": "/home/ubuntu/project1/venv/",

   "module": "main"

  }

 }

}

--

*説明

 listeners: ポート *80(HTTP)

 type: 言語

 path: プログラムの場所

 home: 仮想環境の場所

 module: プログラム本体(ファイル拡張子を除く)


設定を上書き

# curl -X PUT --data-binary @config.json --unix-socket /var/run/control.unit.sock http://localhost/config


再起動

# service unit restart


ブラウザから動作確認。

おつかれさまでした。


2020年11月9日月曜日

Chromebook で、Linux を使う。(2020年11月)

 久々に Chromebook の Linux を入れ直してみた。


OS が Debian10(buster) になり、Python2 が外された。

いよいよ本格的に Python3 の時代です。


で、仮想環境の構築から、Cloud-SDKのインストールまでやってみました。

手順は以下の通り。


--

google-cloud-datastore のインストールで躓き。ちょっと修正。

pip と setuptools を更新(-U)して、grpcio をインストールするのがポイント。

※ pip3 install grpcio ...とても時間掛かります... のんびり待ちましょ。

[仮想環境]

$ sudo apt update && sudo apt upgrade

$ sudo apt install python3-dev python3-venv build-essential

$ mkdir test && cd test

$ python3 -m venv env

$ source env/bin/activate

V pip3 install -U pip setuptools

V pip3 install grpcio

V pip3 install google-cloud-datastore

V deactivate

$

--

[仮想環境]

$ sudo apt update && sudo apt upgrade

$ sudo apt install python3-venv

$ mkdir test

$ cd test

$ python3 -m venv env

$ source env/bin/activate

V deactivate

$


[Cloud SDK]

$ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

$ sudo apt update && sudo apt install google-cloud-sdk

$ gcloud init

$ sudo apt install google-cloud-sdk-app-engine-python

$ sudo apt install google-cloud-sdk-datastore-emulator



補足です。


・仮想環境内のPATHを確認

V which python3

-> /home/xxxxxx/test/env/bin/python3

V pip -V

-> pip 18.1 from /home/xxxxxx/test/env/lib/python3.7/site-packages/pip (python 3.7)


・Cloud SDK は、Debian/Ubuntu の手順で

 https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=ja


こんなに簡単に開発環境が手に入るなんて!! とても素敵です。


2020年5月6日水曜日

GAE/Python3/Flask で Cloud Tasks を使う

非同期処理に使いたいので、調べてみました。

こちらを参考に
https://cloud.google.com/tasks/docs/creating-appengine-tasks?hl=ja

インストール
$ pip install google-cloud-tasks

まず、タスクを作ってキューに入れます。
--
@app.route('/task_send')
def task_send():
 from google.cloud import tasks_v2

 PROJECT = <プロジェクトID>
 LOCATION = <リージョン>
 QUEUE = "default"

 client = tasks_v2.CloudTasksClient()
 parent = client.queue_path(PROJECT, LOCATION, QUEUE)

 app_route = "/task_run"

 data = {
  'a': "abc",
 }
 payload = json.dumps(data)

 task = {
  'app_engine_http_request': {
   'http_method': 'POST',
   'relative_uri': app_route,
   'headers': {
    'Content-Type': "application/json"
   },
   'body': payload.encode(),
  }
 }

 response = client.create_task(parent, task)
--

説明
・LOCATION: GAEの実行場所(リージョン)です。
 "us-central"の場合、"us-central1" とします。(1を追記)
・app_route: タスクを実行する場所(PATH)です。
・data: データをJSON形式で送りたいので、一旦dictに入れて、jsonに変換します。
・headers: Content-Typeを jsonにします。
 ※デフォルトは、"application/octet-stream"

次に、タスクを受け取ります。
--
@app.route('/task_run', methods=["POST"])
def task_run():
 data = request.json
 ....
--
説明
・data: dictデータです。

あとは、お好きに。