2021年5月3日月曜日
WebARENA/VPSに、moshでリモート接続する。
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データです。
あとは、お好きに。
2020年4月17日金曜日
GCEに「NGINX Unit」入れて、WEB(アプリケーション)サーバとして使う
[GCEの無料枠]
これは健在でした。
と言うか、「無料枠で試しに使って貰い、他社との優位性を知らしめる」戦略なのでしょう。
技術力に自信があるからこその戦略だと思います。
個人で趣味的に使うには、この無料枠で充分。
無料枠の条件
・リージョン(地域): us-central(米中央), us-west(西海岸), us-east(東海岸)
・マシンタイプ: f1-micro
要は、「アメリカのデータセンターで、一番スペックの低いCPU」と言うことですが、サーバ用途であれば十分です。
[OS]
Ubuntuしか使わないので、その他のことは分かりません...
とりあえず、それなりに新しいものを使います。
OS: Ubuntu18.04 LTS
OSの選択で、「Minimal Ubuntu」と言う見慣れないものがあったので、ちょっと調べてみました。
これ、クラウド用のOSなんですね。
とりあえず、HDDは十分(20GB)あるので、通常バージョンで良いかと。
[Nginx]
Web(アプリケーション)サーバとして、単にFlaskを動かしたいだけなのに、これまでだと、uWSGI入れて、設定をあれやって、これやって... と、非常に煩雑で、はっきり言って面倒くさい!!!!
で、調べてみると「NGINX Unit」なるものが有りました。
これ、凄いかも。
本家はこちら。
http://unit.nginx.org/
aptでインストールして、jsonで設定するだけ。ほんと簡単です。ビックリ!!!!!
もう、Apacheは、過去の遺物ですね。(言い過ぎ!!!)
-- 以下は、自分用のメモです。--
[GCE/VM]
コンソール
https://console.cloud.google.com/home/dashboard
新規プロジェクトの作成
※省略
課金の上限設定
お支払 → 予算とアラート
予算額: 100円
Budget type: 指定額
Target amount: ¥100
Compute Engine
VMインスタンス
インスタンスの作成
ゾーン us-west1-b
シリーズ N1
マシンタイプ f1-micro
ブートディスク Ubuntu18.04 LTS 20GB ※残り10GBは将来用
ファイアウォール HTTP
接続 SSH → ブラウザウィンドゥで開く
※初回のみ標準ポート(22)で接続
SSHのポートを変更 (OS側) ※セキュリティリスク対策
$ sudo sed -i".bak" -e 's/#Port 22/Port 3843/g' /etc/ssh/sshd_config
$ sudo reboot
VPCネットワーク
外部IPアドレス
種類: エフェメラル → 静的
新しい静的IPアドレスの予約: static-ip
ファイヤーウォール
*SSHのポートを変更 (FW側)
default-allow-ssh
SSH port: 22 -> xxxx *任意のポート
接続 SSH → ブラウザウィンドゥでカスタムポートを開く
※SSHdの Port変更後は、カスタムポート(xxxx)で接続
スワップの作成
How to Create a Swap File on Google Compute Engine Virtual Machines
$ sudo -i *rootで作業
-- shell command
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon -s
echo "/swapfile none swap sw 0 0" >> /etc/fstab
--
# reboot
接続 SSH → ブラウザウィンドゥでカスタムポートを開く
[apt]
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install python3-venv python-pip
[Flask]
https://flask.palletsprojects.com/en/1.0.x/installation/#installation
構成
~/
└ project1/
├ venv/
│ └ Flask
└ main.py
仮想環境 & 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]
http://unit.nginx.org/installation/#ubuntu
(インストール準備)
キー取得
$ 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/yamayoshiakira/project1/",
"home": "/home/yamayoshiakira/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
ブラウザから動作確認。
おつかれさまでした。
参考サイト
http://yamayoshi.blogspot.com/2017/06/gce.html
http://unit.nginx.org/configuration/
https://thr3a.hatenablog.com/entry/20170909/1504925172
https://qiita.com/happou/items/23be1615927be6376dec
----
UNIT のサンプルアプリを調べてみる
# apt install unit unit-dev unit-python3.6
こんなメッセージが出たの、調べてみます。
The Python 3.6 module for NGINX Unit has been installed.
To check out the sample app, run these commands:
sudo service unit restart
cd /usr/share/doc/unit-python3.6/examples
sudo curl -X PUT --data-binary @unit.config --unix-socket /var/run/control.unit.sock http://localhost/config
curl http://localhost:8400/
Online documentation is available at https://unit.nginx.org
デフォルトの設定値
# curl --unix-socket /var/run/control.unit.sock http://localhost/config/ > config.json
--
{
"listeners": {},
"applications": {}
}
--
サンプルを見てみる
/usr/share/doc/unit-python3.6/examples
├ unit.config
└ python-app/
└ wsgi.py
File: unit.config
--
{
"applications": {
"example_python": {
"type": "python 3.6",
"user": "nobody",
"processes": 2,
"path": "/usr/share/doc/unit-python3.6/examples/python-app",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"pass": "applications/example_python"
}
}
}
--
File: wsgi.py
--
import os
import datetime
import sys
def application(environ, start_response):
output = datetime.datetime.now().strftime("%Y-%m-%d %I:%M:%S %p")
output += "\n\nPython: "
output += sys.version
output += "\n\nENV Variables:\n\n"
for param in os.environ.keys():
output += param
output += "\t"
output += os.environ[param]
output += "\n"
start_response('200 OK', [('Content-type', 'text/plain')])
return [s.encode('utf8') for s in output]
--
2018年9月22日土曜日
Chromebook C101PA に Ubuntu をインストール
2017年11月24日金曜日
USBメモリにGalliumOSをインストールしたけど
多分、OSの問題では無く、Chromebook自体が不安定なんですよね。
症状
・Bluetooth テザリングが出来なくなりました。
・時々、動作が引っ掛かります。(10秒反応無しとか..)
当然、元々の症状のWiFiは使えないし、こまったものです。
騙しダマシ使うにしても、どうしたものか...。
かと言って、R11以外のChromebookって、どれもイマイチなんですよね。
Amazon.com で、HPのを見つけたけど、日本には直接送れないみたい。
やっば暫くは、USBテザリングとCrouton(Xubuntu)で凌ぐしかないようです。