Visual Studio Code で Python の unittest が動かなくなった件について
VSCodeのバージョンを上げたら、unittestが動かなくなって焦った件です。
原因
Python extension のバージョンに問題があるっぽい
解決策
Python extension のバージョンを変更する(上げる/下げる)
NG -> v2020.12.424452561 OK -> v2020.8.109390 ※2021年1月5日時点
事象
コマンド 'Python: すべての単体テストを実行' でエラー (command 'python.runtests' not found) が発生しました
終わりに
そのうち修正版がリリースされると思うが、早めに直してほしいものです。
参考サイト
https://www.blog.umentu.work/vs-codeのpythonプラグインの最新版でcomannd-not-foundが発生する模様/
Docker : Redmineを構築する
Docker で Redmine を構築したいと思う。
環境
- CentOS 7.7
- Docker 19.03.6
- Docker Compose 1.18.0
事前準備
# mkdir docker-redmine
Redmine の設定ファイルを格納するディレクトリを作成する。
# cd docker-redmine # mkdir redmine # mkdir mysql
Redmine のデータが保存されるディレクトリを作成する。
# mkdir redmine_data # mkdir mysql_data
Redmine
このステップは、E-mail の送信をしないならばスキップして良い。
Dockerfile に記載されているredmine:4.1.0-alpine
を後述するdocker-compose.yml
に記載してください。
Dockerfile
Dockerfile を作成する。
# touch redmine/Dockerfile
Dockerfile に下記を追加する。
FROM redmine:4.1.0-alpine COPY ./configuration.yml /usr/src/redmine/config
configuration.yml
configuration.yml を作成する。
# touch redmine/configuration.yml
configuration.yml に下記を追加する(内容は各環境に合わせてください)。
default: email_delivery: delivery_method: :smtp smtp_settings: address: localhost port: 25 domain: redmine.example.com
MySQL
Dockerfile
Dockerfile を作成する。
# touch mysql/Dockerfile
Dockerfile に下記を追加する。
FROM mysql:5.7 COPY ./my.cnf /etc/mysql
my.cnf
my.cnf を作成する。
# touch mysql/my.cnf
my.cnf に下記を追加する。
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8 [mysqld] character-set-server=utf8
Docker Compose
docker-compose.yml を作成する。
# touch docker-compose.yml
docker-compose.yml に下記を追記する。
version: '3' services: redmine: build: ./redmine container_name: redmine restart: always environment: REDMINE_DB_MYSQL: mysql REDMINE_DB_DATABASE: redmine REDMINE_DB_USERNAME: redmine REDMINE_DB_PASSWORD: redmine REDMINE_DB_ENCODING: utf8 REDMINE_SECRET_KEY_BASE: supersecretkey volumes: - ./redmine_data/files:/usr/src/redmine/files - ./redmine_data/log:/usr/src/redmine/log links: - "mysql" ports: - "8160:3000" mysql: build: ./mysql container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: P@ssw0rd MYSQL_DATABASE: redmine MYSQL_USER: redmine MYSQL_PASSWORD: redmine volumes: - ./mysql_data:/var/lib/mysql expose: - 3306
コンテナ起動
コンテナを起動する。
# docker-compose up -d
動作確認
ブラウザでhttp://localhost:8160/
へアクセスし、アプリケーションが稼働しているかを確認する。
終わりに
Redmine を Docker で動かすことができた。メールの設定やMySQLの文字コードの問題で、公式イメージをそのまま使えなかったのは残念である。何かもっと良い方法があるのかな?
参考サイト
https://hub.docker.com/_/redmine?tab=description
Docker : GitLab の構築
Docker を使って、GitLab を立ち上げたいと思う。
環境
- CentOS 7.7
- Docker 19.03.6
- Docker Compose 1.18.0
Docker Compose
# mkdir docker-gitlab
GitLab のデータが保存されるディレクトリを作成する。
# cd docker-gitlab # mkdir gitlab_home
docker-compose.yml を作成する。
# touch docker-compose.yml
docker-compose.yml に下記を追記する。
version: '3' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab hostname: localhost restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://my.domain.com:8929/' volumes: - ./gitlab_home/gitlab/config:/etc/gitlab - ./gitlab_home/gitlab/logs:/var/log/gitlab - ./gitlab_home/gitlab/data:/var/opt/gitlab ports: - "8929:8929"
動作確認
コンテナを起動する。
# docker-compose up -d
http://[your host]:8929
へWebブラウザでアクセスし、root ユーザのパスワードを設定する。
Username にroot
、Password に設定したパスワードを入力し、ログインする。
ログインすると、トップページヘアクセスできる。
終わりに
GitLab を動かすポートを8080
にして起動しようとしたら全然動かなくて困った、内部で利用しているぽい。
とりあえず、立ち上げることはできたので、Git でソースの管理とかをしたいと思う。
参考サイト
https://docs.gitlab.com/omnibus/docker/README.html#after-starting-a-container
https://qiita.com/ryuichi1208/items/1c08523b0ef34d05026f
https://mikoto2000.blogspot.com/2018/06/gitlab-docker-image-https.html
Python Flask ちょっとしたWebアプリケーション
Python と Flask を使って簡易なWebアプリケーションを作成してみた。
環境
手順
Flask と jinja2 をインストールしておく。
> pip install flask jinja2
フォルダ構成は下記の通り。
src ├ static │ └ css │ └ bootstrap.min.css ├ templates │ ├ base.html │ ├ home.html │ └ jump.html └ app.py
bootstrap.min.css
をダウンロードする。
https://getbootstrap.com/docs/4.0/getting-started/download/
app.py
を作成し、下記のコードをコピーアンドペーストする。
from flask import Flask from flask import request from flask import render_template app = Flask(__name__) @app.route('/', methods=["GET"]) def home(): return render_template('home.html') @app.route('/jump', methods=["POST"]) def test(): res: str = '' if request.method == 'POST': res = request.form['post_value'] return render_template('jump.html', res=res) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
base.html
を作成し、下記のコードをコピーアンドペーストする。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Jinja2 Tutorial</title> <link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet"> </head> <body> <div class="navbar navbar-dark bg-dark box-shadow"> <div class="container d-flex justify-content-between"> <a class="navbar-brand" href="{{ url_for('home')}}">Jinja2 Tutorial</a> </div> </div> <div class="container"> {% block container %} {% endblock %} </div> </body> </html>
home.html
を作成し、下記のコードをコピーアンドペーストする。
{% extends "base.html" %} {% block container %} <h2>hello world !!</h2> <br> <form action="/jump" method="post"> <input name="post_value" type=text/> <button name="post_button">post submit</button> </form> {% endblock %}
jump.html
を作成し、下記のコードをコピーアンドペーストする。
{% extends "base.html" %} {% block container %} {{res}} {% endblock %}
動作確認
Flask を起動する。
> flask run
localhost:5000
へWebブラウザでアクセスする。
テキストボックスに適当な値を入力し、ボタンを押下する。
入力した値が画面に表示されることを確認する。
終わりに
簡単なWebアプリケーションを作成することができた。
画面項目を増やしたりして、もう少しできることを増やしていこうと思う。
参考サイト
Python VSCode 環境構築
環境
手順
Python 3.7.7 をインストール
Virtualenv をインストール
> python -m pip install virtualenv
> mkdir C:\vsc-workspace\hello_world
プロジェクトフォルダを VS Code で開く
Ctrl+@ でターミナルを開く
新しい仮想環境の作成
venv を使うと pip によるパッケージの導入状態をプロジェクトごとに独立させることができる。
> python -m venv venv
- PowerShell スクリプトを実行できるように
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
- 作成した仮想環境でアクティベート
> .\venv\Scripts\activate
- Flask をインストール
> pip install flask
app.py
を作成し、下記をコピーアンドペースト
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return "Hello World!" if __name__ == '__main__': app.run()
- アプリケーションを実行
> python .\app.py
Web ブラウザから、
localhost:5000
へアクセス仮想環境の使用を終了
> deactivate
PowerShell でのプロキシ設定
PowerShell で下記を実行する。
$env:http_proxy="http://[username]:[password]@proxy.example.com:8080" $env:https_proxy="https://[username]:[password]@proxy.example.com:8080"
参考サイト
GCPを始める ~Deployment Manager~
GCP の Deployment Manager を触ってみる。
自動で環境を構築することができるみたいである。 今までやってきたことを GCP Console ではなく、Deployment Manager でやったらどうなるか、ということを試して行きたいと思う。
前提条件
ゴール
下記と同等の状態を構築することをゴールとする。
作成手順
Google Cloud Shell へ接続します。 YAML ファイルを作成します。
$ touch deploy.yml
下記をdeploy.pyにコピーアンドペーストする。
※[Your Project Id] は、GCP のプロジェクト ID を指定してください。
※[Your Service Account] は、Compute Engine のサービスアカウントを指定してください。
resources: - type: compute.v1.network name: app2-network properties: autoCreateSubnetworks: false routingConfig: routingMode: REGIONAL - type: compute.v1.subnetwork name: app2-sub properties: network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network ipCidrRange: 10.0.3.0/24 region: us-west1 metadata: dependsOn: - app2-network - type: compute.v1.firewall name: ce-allow-ssh properties: network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network priority: 1000 sourceRanges: - 0.0.0.0/0 allowed: - IPProtocol: tcp ports: - 22 direction: INGRESS logConfig: enable: false disabled: false metadata: dependsOn: - app2-network - type: compute.v1.firewall name: ce-allow-icmp properties: network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network priority: 1000 sourceRanges: - 0.0.0.0/0 allowed: - IPProtocol: icmp direction: INGRESS logConfig: enable: false disabled: false metadata: dependsOn: - app2-network - type: compute.v1.firewall name: ce-allow-flask properties: network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network priority: 1000 sourceRanges: - 0.0.0.0/0 allowed: - IPProtocol: tcp ports: - 5000 direction: INGRESS logConfig: enable: false disabled: false metadata: dependsOn: - app2-network - type: compute.v1.instance name: instance-2 properties: status: RUNNING zone: us-west1-b machineType: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/zones/us-west1-b/machineTypes/f1-micro disks: - deviceName: instance-2 type: PERSISTENT mode: READ_WRITE boot: true autoDelete: true initializeParams: sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/family/centos-7 diskSizeGb: 10 diskType: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/zones/us-west1-b/diskTypes/pd-standard networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network subnetwork: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/regions/us-west1/subnetworks/app2-sub accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT serviceAccounts: - email: [Your Service Account] scopes: https://www.googleapis.com/auth/cloud-platform metadata: dependsOn: - app2-network - app2-sub
下記のコマンドを実行します。
$ gcloud deployment-manager deployments create quickstart --config deploy.yml
削除手順
Google Cloud Shell へ接続し、下記のコマンドを実行します。
$ gcloud deployment-manager deployments delete quickstart
困ったときは
公式ドキュメントには詳細な書き方とか、どうしたらいいか、ということはあまり書いていない。
困ったときは、下記を探してリンクを開くと良い。JSONベースで記述を参照でき、これを YAML ファイルにコピペすることができる。
終わりに
Redis と Bigtable は自動化できないようである、ショック。
まぁ、最低限のことは自動化できるようなので、利用する価値はある。GCP が今後拡張してくれることを祈るばかりである。
参考サイト
https://cloud.google.com/deployment-manager/docs/configuration/supported-resource-types