PythonでWebアプリを作る その1

目的

  • httpsに対応したWebサービスをつくりたい(ログイン機能とかも付けたい)
  • 開発言語はPythonを使いたい
  • ApacheとかNginxとか良く分からんのでuWSGI(本来はWSGIサーバーだが、単体でWSGI対応http/httpsサーバーとしも使用可能)だけでサーバーを構築したい
  • サーバー証明書は無料のLet's Encryptで取得

下準備

環境構築

Python3のビルド&インストール

CeontOS7の公式リポジトリにはPython3が無いので、ソースからビルド&インストール

開発ツールのインストール

$ yum groupinstall "Development tools"

opensslのインストール(pipのインストールに必要)

$ yum install openssl-devel

ソースをダウンロードし展開

$ wget https://www.python.org/ftp/python/3.x.x/Python-3.x.x.tgz
$ tar xf Python-3.x.x.tgz

ビルドしてインストール(pipも同時にインストールされる)

$ cd Python-3.x.x
$ ./configure
$ make
$ make install

uWSGIのインストール

pipからインストールする場合

pipからインストールする場合、systemdのunitファイルがインストールされない?

$ pip3 install uwsgi

yumからインストールする場合

yum (若しくは apt, pacman 等) からインストールする場合、uwsgi-plugin-pythonパッケージも必要。

$ yum install uwsgi uwsgi-plugin-python

ポートの開放

http(80番)およびhttps(443番)を開放する(Webサービスの公開、Let's Encryptでの証明書取得に必要)。

$ firewall-cmd --add-service=http --zone=public

$ firewall-cmd --add-service=http --zone=public

(永続的にポートを解放する場合は--permanentオプションを追加)

サーバー証明書の取得

Let's Encryptでhttps用のサーバー証明書を取得する。ポート80(http)と443(https)が開放されており、ホスト名(hogehoge.com, www.hogehoge.com)がDNSに登録されている必要がある。また、DNSのAレコードに記載されたIPアドレスのマシンで下記コマンドを実 行する必要がる(詳細はLet's Encrypt の使い方 - Let's Encrypt 総合ポータルを参照)。

リポジトリを取得

$ git clone https://github.com/letsencrypt/letsencrypt

環境が整っているかテスト

$ cd letsencrypt

$./letsencrypt--auto --help

証明書の取得

$ ./letsencrypt-auto certonly -a standalone -d hogehoge.com -d www.hogehoge.com

取得した証明書は/etc/letsencrypt/live/hogehoge.com/下に保存されている。

Webサーバーを起動

uWSGIをWebサーバーとして起動し、簡単なWebアプリを実行する。

Webアプリのコード

下記のコードをtest.pyとして保存

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

uWSGIを起動

$ uwsgi --https :443,/etc/letsencrypt/live/hogehoge.com/cert.pem,/etc/letsencrypt/live/hogehoge.com/privkey.pem --wsgi-file test.py

ブラウザでhttps://www.hogehoge.com/にアクセスし、「Hello World」と表示されれば成功!

今後の予定

  • uWSGIをサービスとして起動したい
  • 下準備は出来たので、今後はWebアプリの開発に注力したい(セッション管理やログイン・ログアウト機能などの実装)

 

Arch Linux のインストール (Skylake)

ハードウェア構成

  • CPU: Intel Core i3 6300 (3.8GHz, 2C4T, 4MB)
  • MEM: ARCHISS DDR4 4GB x 2
  • M/B: ASUS H170-PRO
  • SSD: CRUCIAL MX200 (250GB)

概要

USBインストールメディアの作成

USBメモリのデバイスパスを確認

$ lsblk

コピー

$ dd bs=4M if=archlinux-x.x.x-dual.iso of=/dev/sdX

マザーボードの設定

セキュアブートを無効にする

ASUS製マザーボードでセキュアブートを無効にする方法

キーボードレイアウト

$ loadkeys jp106

パーティショニング

デバイスパスを確認

$ lsblk

gdiskを起動

$ gdisk /dev/sdX

GPT新規作成

"g"キーを押す

EFI System Partition (ESP)

  1. "n" (新規作成)
  2. Partition number: (default)
  3. First sector: (default)
  4. Laset sector: +1G
  5. Hex code or GUID: ef00

/ パーティション

  1. "n" (新規作成)
  2. Partition number: (default)
  3. First sector: (default)
  4. Last sector: (default)
  5. Hexcode or GUID: 8300

確認と書き込み

  1. "p"で確認
  2. "v"でチェック
  3. "w"で書き込み

一応再起動

$ reboot

フォーマット

$ mkfs.vfat -F 32 /dev/sda1
$ mkfs.ext4 /dev/sda2

マウント

$ mount /dev/sda2 /mnt
$ mkdir /mnt/boot
$ mount /dev/sda1 /mnt/boot

ミラーサーバーの選択

$ nano /etc/pacman.d/mirrorlist

日本のサーバーを一番上に

nano ショートカット

  • Ctrl+W: 検索
  • Ctrl+^: 範囲選択開始
  • Ctrl+K: 切り取り
  • Ctrl+U: 貼り付け
  • Ctrl+O: 上書き保存
  • Ctrl+X: 終了

ベースシステムのインストールと基本設定

$ pacstrap /mnt base base-devel
$ genfstab -p /mnt >> /mnt/etc/fstab
$ arch-chroot /mnt
$ echo [ホスト名] > /etc/hostname
$ ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ nano /etc/locale.gen
    en_US.UTF-8 UTF-8
    ja_JP.UTF-8 UTF-8
    をアンコメント
$ locale-gen
$ echo LANG=en_US.UTF-8 > /etc/locale.conf
$ echo KEYMAP=jp106 > /etc/vconsole.conf

rootパスワードの設定

$ passwd

Initial ramdiskの作成

$ mkinitcpio -p linux

ブートローダ

systemd-boot (旧 Gummiboot) を使用

Skylakeの場合、起動オプションに "i915.preliminary_hw_support=1" が必要(←Linux kernel 4.3以降は不要)

$ bootctl --path=/boot install

$ nano /boot/loader/loader.conf
	default arch

$ nano /boot/loader/entries/arch.conf
	title Arch Linux
	linux /vmlinuz-linux
	initrd /initramfs-linux.img
	options root=/dev/sda2 rw i915.preliminary_hw_support=1

NICデバイス名の固定

$ nano /etc/udev/rules.d/10-network.rules
	SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net0"

DHCP

netctlを使用

$ cp /etc/netctl/examples/ethernet-dhcp /etc/netctl/net0

$ nano /etc/netctl/net0
	Interface=net0
	Connection=ethernet
	IP=dhcp

$ netctl start net0
$ netctl enable net0

一旦電源OFF

$ exit
$ umount -R /mnt
$ poweroff

USBメモリを取り外し、電源ON

Xサーバー

$ pacman -S xf86-video-intel (default)
$ pacman -S xorg-server (default)
$ pacman -S xorg-server-utils

Xfce4

$ pacman -S xfce4 (default)
$ pacman -S xfce4-goodies (default)
$ pacman -S gvfs gamin

LXDM

$ pacman -S lxdm
$ systemctl enable lxdm.service

Fcitx-mozc

$ pacman -S fcitx-mozc
$ pacman -S fcitx-im (default)
$ pacman -S fcitx-configtool
$ nano ~/.xprofile
	export GTK_IM_MODULE=fcitx
	export QT_IM_MODULE=fcitx
	export XMODIFIERS="@im=fcitx"
$ fcitx-configtool
	Keyborad - Japanese
	Mozc

日本語フォント

  • ttf-migu (AUR)
  • ttf-mplus (AUR)
  • ttf-ricty (AUR)
  • ttf-vlgothic
  • otf-ipafont

Linux用Waltopペンタブドライバ Ver.0.0.7 を公開しました

主な変更点は以下の通りです。

Waltop Mars BR Tablet (プリンストン PTB-STRP1)

gengenさんのご協力により、PTB-STRP1に対応することができました。また、協力時の状況などをまとめた記事をgengenさんのブログに掲載して頂きました。

対応機能は以下のようになっています。

  • 読取分解能4000LPI (Linux標準ドライバは2000LPI)
  • 筆圧2048レベル

マクロキーについては今後対応する予定です。

Waltop Venus S Tablet (プリンストン PTB-S2S)

DIGImendで公開されているWaltop Venus S Tabletの情報を利用させてもらうことで対応することができました。

対応機能は以下の通りです。

  • 読取分解能4000LPI (Linux標準ドライバは2000LPI)
  • 筆圧2048レベル
  • 傾き検知

実機での動作確認は行っていないので不具合等があるかもしれません。

Ubuntuインストーラー/アンインストーラ

Fabio Dell'AriaさんにUbuntu用のインストーラー/アンインストーラー(ubuntu-install.sh/ubuntu-uninstall.sh)を作成して頂きました。依存パッケージのインストール、ドライバのビルドの他、起動時に毎回必要だった標準ドライバの切り離し&ロードを自動で行うように設定してくれるので非常に便利です。

注意事項

Linuxカーネルをアップデートした時は、一旦アンインストール(ubuntu-uninstall.sh)して再インストール(ubuntu-install.sh)する必要があります。

ダウンロード&使用方法

こちらからお願いします。

Linux用Waltopペンタブドライバ Ver.0.0.6 を公開しました

主な変更点は以下の通りです。

PTB-S3BKの情報はイナムラ試作D型さんから提供して頂きました。またドライバの具体的な使用方法や設定例を記した「Princeton PTB-S3BKをLinuxで快適に使おう」という記事を執筆していただきました。

対応機能

Waltop Vega Tablet (プリンストン PTB-S3BK)

  • 読取分解能5080LPI (Linux標準ドライバは4000LPI)
  • 筆圧2048レベル
  • 傾き検知
  • ペンのサイドボタン上/下に任意のキーを割当可能
  • 4つのエクスプレスキーに任意のキーを割当可能
  • ナビゲーションホイールは、上/下 × ホワイト/グリーン/オレンジ × 時計回/反時計回の全てに任意のキーを割当可能

Waltop Sirius Tablet (プリンストン PTB-S1BK)

  • 読取分解能4000LPI (Linux標準ドライバは2000LPI)
  • 筆圧1024レベル
  • 傾き検知
  • ペンのサイドボタン上/下に任意のキーを割当可能
  • 8つのエクスプレスキーに任意のキーを割当可能
  • タッチパッドは、左/右 × スクロール/ズーム・ボリューム/ページ移動 × 時計回/反時計回の全てに任意のキーを割当可能
  • 機能切り替えボタンでタッチパッドの機能を左右入れ替えることが可能
  • マクロキーは未対応

※キーの割当にはxsetwacomコマンドを使用します

ダウンロード&使用方法

こちらからお願いします。

NTFSパーティションを読み書きする (Arch Linux)

Arch LinuxカーネルはNTFSサポートが有効になっている*1ので

$ mount /dev/sdx /mnt/hoge

でNTFSパーティションをマウント出来る(ただし読取り専用*2)。

NTFSパーティションにデータを書き込みたい場合は、公式リポジトリからntfs-3gパッケージをインストールする。

$ pacman -S ntfs-3g

後はいつも通りマウントすれば書き込み可能な状態でマウントされる。

$ mount /dev/sdx /mnt/hoge

自動マウント (gvfs + gamin) と Xfceの場所プラグイン (xfce4-places-plugin (AUR)) をインストールしておくと、場所パネルからパーティションを選択するだけでマウントされた。

参考URL

*1:zcat /proc/config.gz | grep CONFIG_NTFSで認出来る

*2:私の環境では CONFIG_NTFS_RW=y だったが、書き込みは出来なかった