ConoHa VPS

ConoHa VPSでDockerを使ってFlaskアプリを公開してみる

ConoHa VPSでFlaskアプリ公開したいんだけど?

Docker使ってやってみましょうか。

この記事ではConoHa VPSでDockerを使ってFlaskアプリケーションを公開するっていうことをやっていきます。

この記事でやること

  • ConoHa VPSでサーバーを立てる
  • ローカルのFlaskアプリをアップロードする
  • アプリケーションを起動する

ConoHa VPSでDockerを使ってFlaskアプリケーションを公開したい方は参考にしてみてください。

ConoHa VPSでDockerを使ってFlaskアプリケーションを公開してみましょう。

ConoHa VPSでサーバーを立てる

まずはConoHa VPSでサーバーを立てます。自分は既存の契約しているサーバーを再構築してやりますが、新しく使う場合は新規でサーバーを構築しましょう。

どんな画面なのかを載せておきます。

  • サービス・・・VPS
  • 利用するきっぷ・・・新規購入(利用しなくてもいいが、3ヶ月以上利用するなら利用する方が安い)
  • 有効期間・・・どれぐらい利用するか
  • メモリ・・・1GB以上がおすすめ
  • イメージタイプ・・・アプリケーションからDockerを選択して今回はやります
  • rootパスワード・・・rootのパスワード
  • ネームタグ・・・管理画面に表示される立てたサーバー名

オプションはいくつかありますが、SSH Keyはここで作成しておくと後で接続する時に楽です。

ポイント

Dockerを選択するとDockerをすぐに使えるサーバーを作成してくれます。

SSH接続する

コンソールも管理画面から使うことができますが、SSH接続した方がやりやすいのでSSH接続して作業します。

$ ssh -i 秘密鍵のパス root@IPアドレス

ConoHa VPS

ConoHa VPSでSSH接続する方法とおすすめ設定を紹介します。

2022/8/2  

今回はそんなConoHa VPSでSSH接続する方法を書いていきたいと思います。 SSH接続する方法を見ていくんですが、後半ではセキュリティ面を意識してrootユーザーではSSH接続できないようにして ...

サーバー確認する

OSとDockerのバージョンを確認してみるとこんな感じです。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"

$ docker -v
Docker version 20.10.16, build aa7e414

$ docker-compose -v
Docker Compose version v2.5.0

OSはUbuntuでDockerのバージョンは上記の通りです。これらを使ってやっていきます。

公開するFlaskアプリケーション

ConoHa VPSに公開するアプリケーションは雑なTODOアプリです。

docker-compose.yml

docker-compose.ymlはこんな感じです。docker-composeやDockerfile、諸々の設定ファイルなどはとりあえず動けばいいか精神なので、もし作成するならちゃんと作ってくださいね。

version: "3"
services:
  app:
    build: ./docker/flask
    volumes:
      - .:/app
      - socket:/tmp
    command: uwsgi --ini  app.ini
    depends_on:
      - db
    tty: true
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: xxxxxxxx
      MYSQL_USER: xxxxxxx
      MYSQL_PASSWORD: xxxxxxxxx
      MYSQL_ROOT_PASSWORD: xxxxxxx
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
  web:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./web/nginx.conf:/etc/nginx/conf.d/default.conf
      - socket:/tmp
volumes:
  mysql-data:
  socket:

Nginxとuwsgiで動かしているflaskアプリケーションをつなげて動かしています。

Dockerfile

flaskアプリケーションのDockerfile。

FROM python

WORKDIR /app/flask-app/app

RUN pip install flask pymysql uwsgi

app.ini

uwsgiのiniファイル。

[uwsgi]
# アプリケーションのファイルがindex.pyなのでindexと指定
module = index
callable = app
master = true
processes = 1
socket = /tmp/uwsgi.sock
chmod-socket = 666
vacuum = true
die-on-term = true
# アプリケーションのディレクトリにload前に移動
chdir = /app/flask-app/app
logto = /app/flask-app/appuwsgi.log

Nginxの設定ファイル

Nginxの設定ファイルですが、とりあえず動かすだけのことしか書いていないです。

server {
    listen       80;
    server_name  localhost;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
    }
}

ディレクトリ構成

上記のディレクトリ構成はこんな感じです。

.
├── docker
│   └── flask
│       └── Dockerfile
├── docker-compose.yml
├── flask-app
│   └── app
│       ├── app.ini
│       ├── index.py
│       └── templates
│           └── index.html
└── web
    └── nginx.conf

公開ディレクトリの作成

どこにFlaskアプリケーションのフォルダをアップロードしようかなと思ったんですが、とりあえずユーザー作成してその配下にしておきます。

# ユーザー作成
$ adduser kobayashi

# 権限付与
$ usermod -aG sudo kobayashi

$ cd /home/kobayashi

kobayashiっていうユーザーとディレクトリを作成したので、その配下にアップロードします。

$ su kobayashi(作成するディレクトリの所有者がrootになってしまうので、作成したユーザーに変更した方がやりやすい)
$ cd /home/kobayashi
$ mkdir .ssh
$ cp /root/.ssh/authorized_keys /home/kobayashi/.ssh/.
$ chmod 700 /home/kobayashi/.ssh
$ chmod 600 /home/kobayashi/.ssh/authorized_keys

# もし所有者とグループが違ったら作成したユーザーに直す
$ chown username:group .ssh
$ chown username:group .ssh/authorized_keys

ローカルのFlaskアプリをConoHa VPSにアップロードする

ローカルでDockerを使ってアプリケーションを作成したら、それをConoHa VPSで立てたサーバーにアップロードします。

アップロードはFTPソフトを使ってやりましょう。自分はよくCyberduckを使うので、Cyberduckでやります。

アプリケーションを起動する

Nginxの設定ファイルにIPアドレスを記述する

ConoHa VPSで立てたサーバーのIPアドレスをNginxの設定ファイルに記述しておきます。

server {
    listen       80;
    server_name  IPアドレス;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
    }
}

DBテーブルがなかったら作成する

もしテーブルの作成を手動で行わなければいけない場合はmysqlコンテナの中に入って作成しておきましょう。

$ docker-compose up -d
$ docker exec -it mysqlコンテナのID bash
$ mysql -uuser -p
$ use database名
$ create table todos(id int, name varchar(255), content text);

docker-compose upする

docker-compose upでアプリケーションを起動します。

$ docker-compose up

ブラウザからIPアドレスにアクセスして確認してみましょう。

ちゃんと表示されて動いてくれました。

まとめ

ConoHa VPSでFlaskアプリケーションをDockerを使って公開するっていうことをやってみたけど、動いてくれましたね。

やったことは以下です。

ポイント

  • ConoHa VPSでサーバーを立てる(Dockerテンプレート使用)
  • ローカルのFlaskアプリケーションをアップロード
  • 起動

dockerの場合はコマンドで色々インストールすることせずファイルで管理できるから楽です。ローカルで本番環境相当のDockerfileやdocker-composeを書いてしまえば大体動くと思います。

  • この記事を書いた人

管理人

各VPSの使い方を紹介します。

-ConoHa VPS