インフラLinuxPythonインフラこんにちは、内藤です!7/1(金)に18回目のトーチの会を実施しました。5月に実施したサーバセットアップの後編として、いよいよdjangoのアプリケーションをデプロイしていきます。なんと今回は、弊社のホームページ改修を手伝ってくれている、Erinaさんも参加してくれました!社外の人が参加してくださるのは、初めてとなります。スライドをベースに解説し、適宜質問を受け付けます。EncryptによるSSL証明書の取得Certbotの仕組みCertbotで証明書取得するためには内容がなかなか盛りだくさんで、かなり駆け足な説明になってしまいました。ワーク:サーバを設定してみよう前回セットアップしたサーバに、社内管理のDNSでドメイン名を付与しておきました。今回は、そのサーバ上にdjagoアプリをデプロイし、HTTPS通信でアクセスするのが目標です。MariaDBのインストールと設定aptを使用してインストールします。quit;Bye続いて、デフォルトの設定をするためにmysql_secure_installationコマンドを実行します。mysql_secure_installation最後に、今回デプロイするアプリ用にスキーマとユーザを作成します。quit;ついでに、pipでmysqlclientを入れるのに必要なパッケージもインストールしておきます。libmysqlclient-devnginxのインストールngnxをインストールします。本番サーバだと色々と初期設定しますが、今回はデフォルトのまま動かします。nginxファイアウォールで、事務所からのhttpアクセスを許可します。アクセスし、nginxのデフォルトページが表示されればOK!pythonの仮想環境の準備まずは複数のpythonバージョンを共存させるために、pyenvをインストールします。pyenv続いて、必要なpythonをインストールします。versionsパッケージ管理には、poetryを使用します。poetryサンプルアプリのインストール弊社のリポジトリから、サンプルアプリをデプロイします。cloneして、設定ファイルにDB接続情報等の、コミットできない情報を記載していきます。installを実行してパッケージを復元します。djangoのアプリケーションなので、忘れずにmigrate`と`collectstaticします。uWSGIのサービス化と起動ngnxからは、Unixソケット経由でuWSGIにバケツリレーをします。コミット済みのuWSGIの設定ファイルを編集し、systemdのサービス登録して起動します。nameをIPアドレスに変更して、/etc/nginx/conf.d/配下にコピーします。アクセスして、自分のサーバのドメイン名からIPアドレスが引けることを確認します。nginxの設定ファイルで、先ほどIPアドレスを記載していた部分をドメイン名に変更し、nginxを再起動します。アクセスしてdjangoの画面出ればOKです!https対応Certbotと、nginx用のプラグインをインストールします。<サーバのFQDN名>プラグインがnginxの設定を書き換えてくれます。認証が終わったので、HTTPアクセスを再度遮断します。<HTTP許可している番号>今度は、事務所からのHTTPSアクセスを許可します。実際にサーバをセットアップした際には非常に大変で一日かかったが、環境や手順が整備されていると午前中で終わるんだなと思った。DNSまわりがもやっとしていたので、理解できてよかった。意外と証明書の取得が簡単でびっくりした。これまで何度かセットアップの経験はあるが、一部を分担してやっていたので、全部通して経験できたのはよかった。ある程度決まった手順の作業なら、毎回全部やるのは無駄だと思うので、自動化すべき。SSL証明書について、過去にGUIでやっていた作業と実際に裏で動いていた内容が紐づいたので、よかった。分量がかなり多かったのですが、皆さん最後まで完走してくれました!クラウドサービスを使うと気軽に人数分のサーバを立てることができて、便利ですね。メンバの感想にもありましたが、かなりな部分定型作業なので、実際には自動化を計るべきかと思います。牛助さんのお弁当です。【終わりに】アプリケーション開発の立場では、普段はあまり意識しない部分ですが、裏側でどういう経路でデータのバケツリレーが行われているか知っておくことは、無駄ではないと思います。設定系はほとんど定型の作業なのに、慣れていないとどこがおかしいのか追いかけるのも難しかったりします。その意味で、メンバから「自動化すべき」という感想が出たのは素晴らしいなぁ、と思います。分野は雑多ですが、技術的なブログを公開しています。