今回はVPS(仮想専用サーバー)を利用して最低限Pythonを動かせるサーバーを構築します。

サーバーと言っても一般的なWebサーバーのようにいくつものソフトウェアを連携させるシステムを組むのではなく、単純にPythonを動かせるリモートパソコンをつくるイメージです。

未経験の方には、サーバー自体がハードルが高く感じるかもしれませんが、Pythonを動かせるようにするだけなら、「最小構成のサーバーの構築」と「pipのインストール」で大丈夫です。本記事を読めば想像以上に簡単に感じるはずです。慣れれば時間もかかりません。

Pythonをサーバーで動かせれば、リモートで24時間プログラムを稼働できるので、Pythonをもっといろんな用途で活かせるようになります。以下の記事にあるように「Python用サーバー」を持つメリットは絶大です。ぜひチャレンジしてみてください!

PythonでエクセルやWebを自動化できると仕事はかなり省力化できます。 それだけでも自動化のメリットを感じることができますが、自分がいなくても勝手にまわり続けるシステムをつくるともっと実感で…
本記事は、2024年1月28日時点の情報をもとに執筆しています。

構築手順

1. サーバーを追加する

今回は以下のサーバーを追加します。

本記事で利用するサーバー
VPSサービス 「さくらのVPS」と「ConoHa VPS」のどちらか
OS Ubuntu 22.04 (x86_64)
プラン 1GB CPU 仮想 2Core
メモリ 1GB
SSD さくら: 50GB(100GBに変更可)、ConoHa: 100GB

VPSサービスはさくらのVPS」と「ConoHa VPS」のどちらかを利用するとします。OSとプラン(スペック)は同じものを使うので、どちらのサービスが自分に合っているかは以下の記事などを参考にしてください。

弊社ではPythonプログラムをリモートサーバーで実行するのに「さくらのVPS」と「ConoHa VPS」の両方を以下のように利用しています。 弊社で利用しているVPSサービス …

OSは多くの選択肢がありますが、今回ははじめてでも使いやすい「Ubuntuにします。RHEL系(Red Hat Enterprise Linuxの派生OS)に慣れている場合は、Rocky LinuxやAlmaLinuxを選択しても構いません。大枠の手順は同じです(コマンドの差異は読み替えてください)。

今回採用する「Ubuntu 22.04」は512MBのプランには対応していないので、プランは「1GBにします。また、ConoHa VPSの512MBのプランは、スケールアップ機能がありません。1GBのプランにしておけば、メモリが不足しても後からスケールアップして対応できます。

Ubuntuとは

Ubuntuは「誰にでも使いやすい最新かつ安定したOS」を提供することを目的に開発されているLinux系のOSです。英国のカノニカル社の支援を受けながら、コミュニティで開発されており、フリーソフトウェアとして提供されています。初版は2004年であり、数あるLinux系のOSの中でも歴史のあるOSです。

さくらのVPSの場合

最初に、さくらのVPS にアクセスして「お申し込み」ボタンをクリックします。

SAKURA toppage

すると以下のような画面が表示されるので、OSプランを以下のように選択します。

SAKURA VPS settings 1

次に下の方にスクロールして、リージョン(データセンターの場所)を選択して、設定するパスワードを入力します。リージョンは好きな場所を選べますが、場所により料金が異なるので気をつけてください。今回は、ちょうど中間の料金の「大阪」にしています。パスワードは自分で考えないで「自動生成したパスワードを使う」を選択することもできます。

SAKURA VPS settings 2

上の図の「スクリプトを検索して選ぶ」をクリックすると、下の図のように「スタートアップスクリプト」の欄が展開されるので「Setup and update」をクリックします。

SAKURA VPS settings 3

すると以下のように「スタートアップスクリプト設定」を入力できるようになるので、以下の図の通り設定します。ここでは、ユーザー名は例として「ichiro」にしてますが、適宜自分の名前などで置き換えてください。

SAKURA VPS settings 4

一番下までスクロールすると以下のように「お支払い方法選択へ」ボタンがあるので、クリックすると申し込みの手続きを開始できます。

SAKURA VPS settings 5

さくらインターネットの会員の場合は「ログイン」、はじめての場合は「新規会員登録」を完了し、支払いを済ませると利用できるようになります。

ただし、最初はまだサーバーは稼働していないので、以下のように「電源操作」で[起動する]を選択して稼働させる必要があります。

SAKURA server on

注意

さくらのVPSの「2週間のお試し期間」を利用するには、「支払い方法と確認」のページで「2週間お試し」を[利用する]にする必要があります。お申し込みの際には気をつけてください。

ConoHa VPSの場合

最初に、ConoHa VPSのログイン画面 にアクセスして、ログインします。はじめての場合は、「新規アカウント登録はこちら」をクリックしてアカウントを新規登録しておきます。

ConoHa VPS Login

ログインしたら左側のメニューから❶「サーバー追加」をクリックし、❷各項目を選択・入力します。ここで入力するrootパスワードは、あとでコンソールで作業する時に必要になります。最後に❸「追加」をクリックします。

ConoHa VPS Settings

少し待つと以下のようにサーバーリストが表示され、サーバーの構築が完了するとステータスが「構築中」から「稼働中」になります。これでサーバーが使えるようになりました。

ConoHa VPS server list

サーバーの構築は、数十秒から数分かかることがあります(おそらくサービスの混み具合などで変わると思われます)が、もしもいつまでも「構築中」のままの場合は、以下の「サーバー」をクリックして、サーバーリストを再表示してみてください。

ConoHa VPS Server Menu

ConoHa VPSでは「料金タイプ」に「時間課金」を選べます。ConoHa VPSの特長は以下の記事にまとめていますのでこちらも参考にしてください。

今回「5日間くらいかかるデータ処理のPythonプログラム」を実行するために、以下の条件に合うサーバーを探していました。 スポットで時間課金で使える。 費用はできるだけ抑えたい(できれ…

2. ユーザーを追加する(ConoHa VPSのみ)

ConoHa VPSの場合、「rootユーザー」と呼ばれる管理者権限のあるユーザーだけが追加されています。rootユーザーは重要な部分の書き換え権限を持つので、ちょっとしたミスが重大なダメージを招くおそれがあります。そのため、通常の作業は「一般ユーザー」で行います。

そこで、一般ユーザーを以下の手順で追加しておきます。設定は「コンソール」と呼ばれる画面で行います。rootユーザーでログインしてから、コマンドで操作します。

さくらのVPSの場合は作業不要です

さくらのVPSの場合は、最初から一般ユーザーが追加されているので作業は不要です。ユーザー名はOSの名称(今回は「Ubuntu」)がデフォルトになりますが、サーバーの追加時にスタートアップスクリプトで「ichiro」に変更しています。

コンソールを開く

先ほど追加したサーバーのネームタグのリンクをクリックします。

ConoHa Console open 1

以下の画面が表示されるので「コンソール」の部分をクリックします。

ConoHa Console open 1

そのまま待つと別ウィンドウに背景が黒いコンソールが表示されます。

ConoHa VNC Console

rootユーザーでログイン

以下のように「login:」に続けてrootと入力してEnterを押します。すると次の行に「Password:」と表示されるので、パスワードを入力してEnterを押します。

パスワードは入力しても画面に表示されません。以降も同様です。

console root login

ログインに関するメッセージが出力された後にroot@vm-*-*:~#が表示されれば、rootユーザーでログイン成功です。

一般ユーザーを追加する

今回は例としてichiroという名前のユーザーを追加します。実際に操作するときは自分のユーザー名で置き換えてください。

ここで以下の4つのコマンドを実行します。

コマンド 内容
adduser ichiro ユーザーを追加する。
usermod -aG sudo ichiro ユーザーをsudoグループに追加する。
groups ichiro ユーザーが所属するグループ一覧を確認する。
exit ログアウトする。

実際に実行したコンソール画面は以下のようになります。adduserコマンドでは「対話形式」でユーザー情報を設定するので、以下の画面を参考に入力してください。

adduser commands

ここで、usermodコマンドでは、ユーザーがsudoコマンドを使えるようにします。sudoコマンドが使えると管理者としてコマンドを実行できるようになります(後ほどパッケージの更新等で用います)。groupsコマンドでは、ユーザーが無事にsudoグループに追加されたかを確認します。

これでコンソールを用いた作業は完了です。コンソールのウィンドウは閉じてください

3. パソコンからサーバーにアクセスする

サーバーの操作は、自分のパソコンからサーバーにアクセスしてコマンドで行います。そのために、SSH(secure shell)というコンピューター間で安全に通信するための仕組みを利用します。ここでは、SSHを利用する準備を行い、SSHでサーバーにログインする方法を説明します。

サーバーをアクセスできるようにする(ConoHa VPSのみ)

SSHでアクセスできるようにサーバー側の準備をします。

サーバーでは様々なアプリケーションが稼働しているので、外部からのアクセスを「ポート番号」で識別してそれぞれのアプリケーションに割り振っています。SSHは「22」番が使われます。

そのため、サーバーが「22」番のポートを解放していないと外部からSSHでアクセスできませんさくらのVPSでははじめから「22」番だけ開放されていますが、ConoHa VPSではポートはすべて閉じられています。

そこで、ConoHa VPSの場合だけ、以下の方法でSSHのポート(22)を解放しておきます。

SSHのポート番号は、セキュリティ強化のために「22」番から変更することもありますが、今回はデフォルトの「22」番のまま使用します。
ConoHa VPS のSSHのポート(22)の解放方法

ConoHa VPSのコントロールパネルで[サーバー]から対象のサーバーを選択し、以下のように[ネットワーク情報]の欄にある[セキュリティグループ]を表示します。

[セキュリティグループ]の右側にある❶アイコンをクリックすると編集状態になるので、❷ドロップダウンメニューから[IPv4v6-SSH]を選択して、❸「保存」ボタンをクリックします。

Conoha security group

これでConoHa VPSの「22」番ポートが解放され、外部からSSHでアクセスできるようになります。

サーバーのIPアドレスの確認

SSHを利用するときに、アクセス先のサーバーはIPアドレスで指定します。

サーバーのIPアドレスは、さくらのVPSConoHa VPSでそれぞれ以下の画面で確認できます。どちらもIPアドレスの右側のアイコンをクリックするとコピーできます。のちほどsshでログインする時に、この画面からコピーして貼り付けます。

さくらのVPSの場合

ConoHa VPS IP address

ConoHa VPSの場合

ConoHa VPS IP address

SSHクライアントの準備(一部のWindowsのみ)

パソコンからサーバーにアクセスするには「OpenSSHクライアント」というソフトウェアを使用します。WindowsとmacOSのどちらにも標準で組み込まれていますが、Windowsの場合は使えるようになったのが比較的最近のため、念のため確認しておきます

Windowsで「コマンドプロンプト」または「PowerShell」を起動して、ssh -Vを実行します。以下のようにOpenSSHのバージョンが表示されれば大丈夫です。

ssh client version

一方、上記のように表示されない場合は、以下の方法でインストールします。

OpenSSHクライアントのインストール方法

Windowsで[設定]-[システム]-[オプション機能]の画面(バージョンによっては[設定]-[アプリ]-[オプション機能])を表示して、以下のように「オプション機能を追加する」の部分の[機能を表示]ボタンをクリックします。

Windows11 settings

すると以下のような画面が表示されるので「OpenSSHクライアント」にチェックし[次へ]をクリックしてインストールを行います。

Windows OpenSSH install

「コマンドプロンプト」または「PowerShell」を再度起動して、ssh -Vを実行すると今度はOpenSSHのバージョンが表示されます。

パソコンからログインする

ここからの操作は、すべてコマンドで行います。以下のどのアプリケーションでも操作は同じなので、どれかを起動します。今回はmacOSのターミナルを用いて説明します。

  • Windows:コマンドプロンプト、PowerShell、Windows Terminal
  • macOS:ターミナル(今回使用)

自分のパソコンからサーバー(VPS)にアクセスするには、以下のsshコマンドを実行します。「IPアドレス」には、先ほど確認したサーバーのIPアドレスを入力します。

ssh ユーザー名@IPアドレス

今回は以下のようにssh ichiro@IPアドレスを実行しパスワードを入力します。初回だけパスワード入力の前にメッセージが表示されますので、yesを入力します。

ssh login

ログインに成功すると以下のichiro@ホスト名:~$のようなプロンプトが表示されます。

ssh logged

さくらのVPSとConoHa VPSでは、ホスト名の付け方が異なります。それぞれ、前にさくらのVPSは「os」、ConoHa VPSは「vm」が付きます。上の図はConoHa VPSのサーバーにログインした画面です。

4. ソフトウェアを更新・追加する

今回利用しているUbuntuのような「Linux OS」では、ソフトウェアは「パッケージ」で管理されています。「パッケージ」とはソフトウェアに関連するファイルをまとめたものです。

ソフトウェアを更新や追加するには、「パッケージ」を配布元(今回はUbuntu公式リポジトリ)からダウンロードしてインストールします。今回は、まずインストール済みのソフトウェアを更新し、日本語パッケージとPythonのpipを追加でインストールします。

さくらのVPSの場合はpipのインストールのみ行います

さくらのVPSの場合は、スタートアップスクリプトでソフトウェアの更新と日本語環境のインストールは済んでいるので、pipのインストールのみ行います。

ソフトウェアの更新(ConoHa VPSのみ)

以下の2つのコマンドを実行して、サーバーにインストール済みのソフトウェアを最新の状態に更新します。管理者として実行するために、前にはsudoを付けます。

sudo apt update
sudo apt upgrade

apt updateでは、インストールの前にパッケージのリストを更新しておきます。sudoを付けてコマンドを実行すると以下のようにパスワードを要求されるので、ユーザー(ここではichiro)のパスワードを入力します。

apt update

apt upgradeで新しいパッケージがあればインストールして更新します。

apt upgrade

途中で以下のようなメッセージが表示されたらYを入力してEnterを押します。

apt upgrade

そのあと途中で数回停止するので、すべてEnterを押して、インストールを続行します。

apt upgrade

もしもこんな画面が表示されたら?

更新内容によっては以下のような画面が表示されることがあります。その場合は、Tabキーで<OK>や<了解>を選択して、Enterを押して、続行してください。

service update

日本語環境のインストール・設定変更(ConoHa VPSのみ)

初期の状態は英語環境になっているので、以下の2つのコマンドで日本語環境に変更します。

sudo apt install language-pack-ja
sudo localectl set-locale LANG=ja_JP.UTF-8

最初にapt install language-pack-jaで日本語環境のパッケージをインストールします。途中でメッセージが表示されたらYを入力して続行します。

install japanese pack

次にlocalectl set-locale LANG=ja_JP.UTF-8で日本語環境に設定します。設定した内容はlocalectlコマンドで確認できます。

set lang

最後にsudo reboot再起動して設定を反映させます。再起動には少し時間がかかるので、しばらく待ってから再度ログインします(当方では30秒ぐらいでログインできました)。

pipのインストール

今回利用するUbuntuには、「Python本体」は最初から組み込まれていますが、「pip」はインストールされていません。そこで、以下のコマンドを実行してインストールします。

sudo apt install python3-pip

apt install pip

途中で実行するかメッセージが表示されたらYを入力して、インストールを続行します。

インストール後は、以下のように「pip3コマンド」でpipが利用できるようになります。

pip list

pip3 listを実行してみると既にインストールされているモジュールを確認できます(さくらのVPSとConoHa VPSでは、インストール済みのモジュールは異なります)。

仮想環境(venvモジュール)を利用したい場合

venvモジュールを用いて仮想環境を作成できるようにしておくには、以下のコマンドでUbuntu用のvenvパッケージをインストールしておいてください。

sudo apt install python3-venv

5. Python実行テスト

今回は以下の簡単なPythonプログラムget_test_txt.pyをサーバーで実行してみます。

get_test_txt.py
import requests

url = "https://gammasoft.jp/samples/test.txt"
r = requests.get(url)

with open("test.txt", "wb") as f:
    f.write(r.content)

このプログラムは、当サイトに配置してある以下のテキストファイルtest.txtrequestsモジュールで取得して保存します。

https://gammasoft.jp/samples/test.txt
このファイルはPythonのテスト用のファイルです。
ガンマソフト

このプログラムをアップロードして実行し、取得してきたテキストファイルを自分のパソコンにダウンロードします。サーバーとのファイルのやりとりには以下の「scpコマンド」を用います。

scp コピー元 ユーザー名@IPアドレス:コピー先
オプション
-P ポート番号を指定(デフォルトは22)
-r ディレクトリごと送る

Pythonサンプルプログラムのアップロード

プログラムファイルget_test_txt.pyを以下のコマンドでサーバーにアップロードします。ここで、コピー元のファイルはカレントディレクトリにあるとし、コピー先ichiroのホームディレクトリ~/)とします。

scp get_test_txt.py ichiro@サーバーのIPアドレス:~/

コマンドを実行するとサーバーのユーザー(ichiro)のパスワードを要求されるので、入力すると以下のようにアップロードされます。

file upload

pipでモジュールをインストールする

次にSSHでサーバーにログインして、以下のコマンドでrequestsモジュールpipでインストールします。

python3 -m pip install requests

以下のように「Successfully installed ~ requests ~」と最後に表示されればインストール成功です。~/.local/binをパスに追加するように「WARNING」が表示されますが、今回のプログラムは問題なく動作するのでそのままにしておきます(モジュールによっては必要になります)。

pip install requests

もしも「Requirement already satisfied」と表示される場合は、既にインストールされているので、そのまま利用できます。本記事の執筆時点では、ConoHa VPSのUbuntu 22.04にはあらかじめインストールされていました。

Pythonサンプルプログラムの実行

requestsモジュールがインストールできたので、アップロードしたget_test_txt.pyを「python3コマンド」で以下のように実行します。

python3 get_test_txt.py

ここで、まず「lsコマンド」でホームディレクトリ内を確認すると、無事にget_test_txt.pyがアップロードされているのがわかります。プログラムを実行後に、再度「lsコマンド」を実行するとあらたにtest.txtが保存されたのが確認できます。

Python3 run

また、「catコマンド」を利用するとテキストファイルの中身を確認できます。

サーバーからファイルをダウンロードする

最後に、プログラムで作成されたtest.txtを、以下のコマンドによりサーバーから自分のパソコンにダウンロードします。

scp ichiro@サーバーのIPアドレス:~/test.txt ./

今度は、scpコマンドで、コピー元をサーバーのホームディレクトリ内のtest.txtコピー先を自分のパソコンのカレントディレクトリ./に指定します。

file download

これで、サーバーのPythonプログラムで作成したファイルを無事にダウンロードできました。ダウンロードしたファイルは、エクスプローラー(Windows)やフォルダー(macOS)でも確認してみてください。

SCPをグラフィカルに操作できるソフト「WinSCP」

今回はサーバーとやりとりするファイルは1つでしたが、複数になると毎回scpコマンドでは大変です。Windowsの場合は「WinSCP」というソフトを利用するとグラフィカルにscpを操作できるので非常に便利です。WinSCPは「窓の杜」などからダウンロードできます。また、macOSの場合はSCPではありませんが、同じくSSHを利用したSFTPで通信する「Transmit 5」(有料)というファイル転送ソフトがあります。

6.(早めに対応)SSHログインを公開鍵認証に変更する

上記のままでは「サーバーのIPアドレス」「ユーザー名」「パスワード」がわかれば、SSHでログインできてしまうので、なるべく早めに不正ログインのリスクを減らす対応が必要になります。

SSHログインの認証方式には「パスワード認証」と「公開鍵認証」があります。現在は「パスワード認証」になっているので、「公開鍵認証」に変更することでリスクの軽減が期待できます。

そこで、以下で「公開鍵認証」への変更方法を説明しますので、このままサーバーを使い続ける場合は、なるべく早めに対応することをおすすめします。

秘密鍵と公開鍵のペアを作成する

公開鍵認証方式では、秘密鍵公開鍵の「鍵のペア」が必要です。自分のパソコンで、以下のコマンドを実行して鍵のペアを作成します。

ssh-keygen

メッセージが表示されたら以下のように入力します。最初のメッセージでEnterを押すと、デフォルトのファイル名(公開鍵はid_rsa.pub、秘密鍵はid_rsa)で作成されます。

SSH keygen

ここで、「パスフレーズ(passphrase)」を入力して設定しておくと、秘密鍵を使ってログインするときにパスフレーズの入力を要求できます。今回はEnterを押して設定しませんが、よりセキュリティレベルを高めたい状況では安全なパスフレーズを入力するようにしてください。

サーバーに公開鍵をコピーする

公開鍵認証では、サーバーとクライアントで同じ「公開鍵」を持っておきます。そこで、先ほどクライアントで作成した公開鍵をサーバーにコピーします。

macOSの場合は、ssh-copy-idコマンドを使うのが便利です。以下のコマンドを実行するだけで公開鍵がサーバーにコピーされます。

ssh-copy-id ichiro@サーバーのIPアドレス

ssh-copy-id

Windowsの場合は、ssh-copy-idが利用できないので手動で設定します。まず、以下のコマンドで公開鍵(id_rsa.pub)をサーバーにアップロードしておきます。

C:\Users\hanako>scp .ssh/id_rsa.pub ichiro@サーバーのIPアドレス:~/

次にサーバーにログインして以下のコマンドを1行ずつ実行します。

mkdir ~/.ssh
cat id_rsa.pub > ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm id_rsa.pub

これで、自分のパソコンとサーバーに鍵が配置されたので、公開鍵認証でログインしてみましょう。今までと同じ以下のコマンドを実行すると、パスワードを入力しなくてもログインできます。

ssh ichiro@サーバーのIPアドレス
作成時に鍵のファイル名を変更した場合は、-iオプションでファイル名を指定します(例えば、ssh -i .ssh/my_secret ichiro@IPアドレス)。

SSHログインを公開鍵認証に限定する

このままだと「パスワード認証」と「公開鍵認証」の両方が使える状態なので、鍵を持っていないクライアントでもパスワード認証でログインできてしまいます。

そこで、「パスワード認証」を無効にして「公開鍵認証」に限定します。そのために、サーバーにあるsshの設定ファイル(/etc/ssh/sshd_config)を編集します。

サーバーにログインして、以下のコマンドを実行して「nano」というソフトで編集します。nanoははじめからUbuntuにインストールされています。

sudo nano /etc/ssh/sshd_config

nanoの画面が表示されたら以下の2行を入力します。PasswordAuthenticationnoにしてパスワード認証を無効にします。一緒にPermitRootLoginnoにしてrootでのログインを禁止します。

PermitRootLogin no
PasswordAuthentication no

ここで、以下のようにこの2行は必ずInclude ~の行の前に入力してください。前に書かれている設定が優先されるので、後ろの行に入力すると設定されない場合があります。

sshd config

入力したら、Ctrl + X を押します。すると「変更されたバッファを保存しますか?」と聞かれるので、Yを入力してEnterを押して保存します。

最後に以下のコマンドでsshを再起動して設定を有効にします。これでsshの「パスワード認証」と「rootユーザーログイン」を禁止することができました。

sudo systemctl restart ssh

ssh restart

鍵が保存されていないパソコンで、sshでログインを試してみてください。「Permission denied」と表示されログインが拒否されるのを確認できます。

最後に

今回はVPSを用いたPython用サーバーの構築方法をまとめました。なるべく丁寧に説明したので、記事は長くなりましたが、実際の手順はそれほど多くはありません。慣れればすぐにできるはずです。

なお、セキュリティ対策としては、今回はSSHの公開鍵認証だけを説明しましたが、次はファイアウォールの利用を検討してください。セキュリティは、これで万全ということはないので、随時対策を心がけてください。

VPSサービスについては、今回「さくらのVPS」と「ConoHa VPS」の両方について説明しました。どちらを利用するかは「使い方」で分けるのがよいと思います。以下の記事に弊社の使い分け方をまとめてみましたので、ぜひ参考にしてください。

弊社ではPythonプログラムをリモートサーバーで実行するのに「さくらのVPS」と「ConoHa VPS」の両方を以下のように利用しています。 弊社で利用しているVPSサービス …