ASP.NET Core Web & nginxをConoHa VPS & Docker composeで公開する
初稿:
- 13 min read -
記事概要
- ASP.NET Core Web APIアプリケーション(以降、Webアプリ)を、ConoHa VPS(以降、conoha)で公開する一連の作業をまとめた
- システム構成は以下のとおり
- ConoHa VPS
- Debian
- Let’s Encrypt(SSL/TLS証明書)
- UFW(Uncomplicated Firewall)
- Docker Compose
- ASP.NET Core Web API
- nginx
- Debian
- ConoHa VPS
経緯
個人で開発・公開しているスマホアプリのバックエンドにASP.NET Core Web APIを配置している。
「まくた工房」は、個人でWebやアプリ開発を行っています。(Makuta Kobo is a private web and application developer.)
- サーバ周りの作業コスト低減のため、Azure App Serviceで公開している
- ケチって無料プランのためサービスの立ち上がりが遅い
- Basicプランに格上げすると$54.75/月(1ドル150円だと8,213円)が発生する
- 弱所個人サービスには死活問題
- そこで、サーバ管理の手間と引き換えに、格安の国産VPSサービスに乗り換えることにした。
環境
本番環境
- クラウドサーバ
- ConoHa VPS
- Debian 12.05
- 512MB 1Core 30GB-SSD 12か月プラン(321円/月)
- ConoHa VPS
- SSH
- OpenSSH_9.2p1 Debian-2+deb12u3, OpenSSL 3.0.15
- Docker
- v27.3.1, build ce12230
- Docker Compose
- v2.29.7
- UFW
- v0.36.2
- .NET
- 8.0-latest
- nginx
- latest
開発環境
- メインOS
- Windows 11 Pro 23H2
- サブOS(on WSL2)
- Ubuntu 24.04.1 LTS
- IDE
- Visual Studio Community 2022(x64)v17.11.6
- SSH
- OpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13
VPSとは?
VPSは、物理的には一台のサーバーを複数の利用者で共同利用する点は変わりません。しかし、「利用者があたかも一台の専用サーバーを占有しているかのように仮想的に操作できる」点が違います。このため「バーチャルでプライベートなサーバー」=VPSと呼ばれるわけです。— 第1回:VPSってなに? おいしいの?|ConoHa VPSサポートより引用
ConoHa VPSとは?
ConoHa VPSは初期費用無料、利用料金はサーバー費用のみ。料金タイプはご利用期間に合わせて2種類ご用意しています。さらに、転送量に対する課金は一切ありません。用途に合わせて、はじめたいときに最小限のコストではじめられるVPSです。— 特長|VPSならConoHaより引用
前提
- 以下サービスのアカウントを作成済み
作業概要
- ConoHa VPSの初期設定
- VPSサーバー追加
- セキュリティグループの設定
- OS(Debian)の初期設定
- SSHサーバ設定
- ユーザ設定
- ファイアウォール設定
- SSHサーバを公開鍵認証方式へ変更
- ドメイン設定
- 独自ドメイン取得・設定
- HTTPS化(Let’s Encrypt)
- Docker Compressによるコンテナ化
- ASP.NET Core Web APIのDocker化
- ConoHa VPS側の作業
- Webアプリの実行
作業詳細
ConoHa VPSの初期設定
VPSサーバー追加
- conohaにログインし、左メニューの「+サーバ追加」より、VPSサーバを追加する
- 今回は、以下を選択
- サービス - VPS
- イメージタイプ - OS / Debian 12.05(x86_64)
- 料金タイプ - 12か月
- プラン - 512MB 1Core SSD30GB
- 任意のroot用パスワードを入力
- ネームタグは、サーバーリストで識別しやすい名前を任意で設定
セキュリティグループの設定
- 今後SSH接続で作業するため、ポートを開ける
- OS側のファイアウォールの他、conohaのコントロールパネルでも設定が必要
- conohaにはSSH用の設定が準備されているが、デフォルトの22ポートを避けるため、既存の設定をベースに任意のポートを開放する
- まずconohaの設定を行う
コントロールパネル左側のメニューより、ネットワーク情報 → セキュリティグループを開く
既存の「IPv4v6SSH」を参考に、40022ポートを許可した設定を新規追加する
通信方向 | イーサタイプ | プロトコル | ポート範囲 | IP/CIDR |
---|---|---|---|---|
Out | IPv6 | All | ||
In | IPv6 | TCP | 40022 | ::/0 |
Out | IPv4 | All | ||
In | IPv4 TCP | 40022 | 0.0.0.0/0 |
次に、作成したセキュリティグループをサーバーに設定する
サーバーのネットワーク情報のセキュリティグループに、作成した設定を追加する。
コントロールパネル左側のメニューより、サーバー → 該当サーバー(ネームタグのリンク)→ ネットワーク情報を選択
下段のセキュリティグループの鉛筆アイコンをクリック
+アイコンをクリックし、先ほど作成したSSH用のセキュリティグループを追加する
Webアプリ公開用に、IPv4v6-Web(80と442)も併せて追加しておく
OS(Debian)の初期設定
- 今後、SSH接続し作業ができるように、conohaのブラウザコンソールで設定作業を行う
- コンソールは以下から起動できる
- conohaコントロールパネルの左メニュー → サーバー → 該当サーバ → コンソール
ユーザ設定
- 作業用の一般ユーザを作成する
- 一度ログアウトし、作成したユーザでログインしなおす
デフォルトエディタの変更
- デフォルトのエディタ「nano」に不慣れのため、vimに変更する
- 作業用にnvimもインストールしておく
- nvimはsnapでインストールする
SSHサーバ設定
- 以下を目的とし設定を行う
- SSH接続用の指定Port解放
- rootユーザによるSSHログイン禁止
- 公開鍵認証の許可
- 空パスワードの禁止
- 設定が必要なファイルは以下の2つ
- /etc/ssh/sshd_config
- /etc/ssh/sshd_config.d/*.conf
ssh.socketとsshを再起動し、設定変更を反映
ファイアウォール設定(ssh用ポート許可)
- conohaのコントロールパネルでポートの使用制限を設定したが、OS側にも行っておく
- ファイアウォールはufwを使用する
- 無ければインストールする
SSH接続用ポートの通信許可を追加
設定の確認
設定の読み込み
初期設定のSSH通信許可ルールを削除
削除結果を確認
IPv6用の初期設定ルールも削除しておく
再々度確認
サーバ再起動
- 以下を確認しておく
- 一般ユーザログインできること
- 22番ポートを使用してログインできないと
- rootユーザでログインできないこと
SSHサーバを公開鍵認証方式へ変更
公開鍵をVPSに設定
- vps側のsshディレクトリ権限を修正
- ローカルで鍵を生成し、VPSに送る
- ローカルの~/.ssh/configを修正し「ssh conoha」で接続できるようにする
- 先ほどローカルから送付したvps側の鍵ファイル権限を修正
SSHサーバ設定変更
- sshd_configを以下のとおり修正
- sshd_configに、「Include /etc/ssh/sshd_config.d/*.conf」とある通り、該当ファイルの内容も修正しておく必要がある
- sshdを再起動し設定を反映
- 設定の反映状況を確認
ドメイン設定
独自ドメイン取得・設定
_ コントロールパネル→ドメインよりドメインを取得する _ コントロールパネル→DNSより、取得したドメインを追加する
- ConoHaで取得したドメインのネームサーバがver2.0のため、ver2.0に切り替えて行う(ver3.0で試したが、うまく行かなかったため)
- 終わったらver3.0に戻しておく
- 編集ボタン(鉛筆アイコン)→追加(+アイコン)より、以下を追加する
タイプ | 名称 | TTL | 値 |
---|---|---|---|
A | @ | 3600 | サーバのIPアドレス |
A | www | 3600 | サーバのIPアドレス |
HTTPS化(Let’s Encrypt)
- 設定したドメインを対象に、コマンドで証明書を取得する
- 今回設定したドメインはmakuta-kobo-app.top
- ドメイン本体と、実際に運用するサブドメインと併せて実行する
Docker Composeによるコンテナ化
ASP.NET Core Web APIのDocker化
- webアプリのDockerイメージを作成し、Docker Hubにアップロードする
- まずプロジェクト直下にDockerfileを作る
- Program.csに以下を追加
- dockerイメージをビルド
- Docker Hub にログイン
- Docker Hub にアップロード
ConoHa VPS側の作業
- conohaに作業ディレクトリ、nginxディレクトリを作成する
- 3つのファイルを格納する
- nginx.conf
- site.conf.template
- ~/work/myproject/docker-compose.yml作成
Webアプリの実行
- あとはDocker Composeでアプリを起動すれば終了
参考サイト
ConoHa VPS
Docker
- ASP.NET Core のWebアプリケーションを docker-compose で Dockerアプリケーション として構築する #C# - Qiita
- Docker Compose と HTTPS を使用してコンテナー内に ASP.NET Core イメージをホストする | Microsoft Learn
- Docker コンテナーで ASP.NET Core アプリを実行する | Microsoft Learn