■開発者の開発者による開発者のための記録 a diary of the engineer, by the engineer, for the engineer #1 ~開発はじめの一歩。NginxとDjango~

スポンサーリンク
tech系(python)
スポンサーリンク

はじめに

現在、自分で簡単でもサービスを開発しようと思っている。

僕の本業は一応、エンジニア。一応ね。

普段はコードを書いてたりするわけだが、今回、単独でサービスを作っていこうと思う。

これは個人でやることだから勿論本業の内容とは一切関係ない。

今回の開発に伴って、記録を残していこうと思う。

この記録を読みたいという需要がどれくらいあるかはわからない。

僕自身エンジニアのレベルとしては大したことはないと思っているし、そもそも開発は得意ではない。というかあまり好きではない。

今まで、自分が書いてきたコードは大したこともないこともあって、色々言われてきたから嫌いにはなっている。だけど僕自身、ずっとやってきたこともあってエンジニア以外でやっていく事はかなり勇気がいるのが現状。

ただ一開発者としてこれから個人で開発していく思いの丈を記録として残そうと思った次第です。

本当に心の声を書いていこうと思う。

綺麗事とか僕は嫌いなので、率直な意見を書いていく。

サービスをマネタイズすることの意義

サービスをマネタイズする仕組みは始めに考えるべきと以前読んだ本に書いてあった。(こちらの記事でまとめました。)

でも、そもそもなんでマネタイズするのかってところから考えた。

まあ、それは単純にお金が欲しいってのもあるんだろうけど、それだけだと続かないと思っている。

いや、人によっては続くのかもしれないけど、僕は続く自信が無い。

なぜなら、今の給料で不自由なく生活できているわけだし。

だからお金以上に駆り立てるものっていうのがあるからこそ今回サービスを作るチャレンジの試みをしようとした訳です。

お金以上に自分を駆り立てたものはマネタイズできるシステムを作りたいという気持ち。

そもそもマネタイズできるシステムを1から作れるのかを試してみたいという気持ちがあった。

自分の開発者としての実力をどことなく証明したい気持ちがあったのだと思う。

会社では作るサービスは決まっていて、それを作るだけ。

そのサービスが儲かっているかどうかは関係ない。

システムを作ること自体が僕の仕事だから。

でも、1人でも儲かるサービスが作れることを証明できれば、今までやってきた勉強やコーディングや仕事は意味があったのだという証明にもつながると思っている。

だから今回の挑戦を始めることにした。

マネタイズはこの挑戦があってこそのもの。

サービスを動かすのはさくらインターネットさんのVPS

🏃‍♂️

今回のサービスはどこで動かすのかを考えていた。

Herokuが有償化されるに伴ってどうしようか悩んでいたけど、結果さくらインターネットさんのVPSを使用させていただくことにした。

東京第2ゾーン、SSDは50G、仮想2Core、メモリは1Gで月990円。

ドメインもさくらインターネットさん。

5年間で12,153円。

毎月約203円。

計1,193円/月かかることになる。

今後はこの金額を上回る収益をサービスで出さないといけない。

ちなみにAWSとかも考えた。AWSは色々できるが、高い。なんならオーバースペック。

だからさくらvpsに落ち着いた。

まず検証として動かすのは食べログのデータをマッピングするシステム

まず検証をしないといけないと思う。

Webサービスを動かして収益を出す前に。

で、いままで食べログのデータをスクレイピングして、DjangoでWebサービスみたいなのを作ってみた。

だからそれを検証として動かしてみようと思う。

その過程でも色々勉強になると思う。

食べログのデータを使用するので一般には公開しないつもり。

時間も無いので、一気に作っていく。

今年中には食べログの検証サービスを払い出し、当初考えていたサービスも作り上げたいと思う。

NginxとDjangoでページを表示させるところまで

さくらvpsを登録してまずやっておくべきことはssh接続できることだと思う。

さくらvpsのページからコンソールを使うことはできるが、非常に使いづらい。

だからwslなりvisual studio codeなりでコンソール操作できるようにssh接続できることをお勧めしたい。(個人的にはvisual studio codeの方が使いやすいと感じる。viエディタ内でのコピペとかしやすいから)

ssh接続はこちらのページが読みやすかった。

次にやったことはSSL証明書を発行して、https通信をできるようにした。

SSL証明書を発行に関してはこちらのサイトが参考になる。

さて、最終的な構成としては

Nginx — Gunicorn — Django

を想定している

と言いつつも、少しずつ構築していくのが大事。

新しいものを一気に作ろうとすると時間が短くて済むことは基本無い。

だからNginxとDjangoがつながるところまでを今回は確認する。

参考にしたのはこちらのサイト(非常にわかりやすい)

まずはNginxが起動できるところを確認。

まあこれはNginxをインストールして起動すればできる。

次はNginxのstaticページの表示。ここはNginxの設定だけ。

パスがどういう風に設定されるかを知ることができるからちょっと挙動を確認しておいた方が良いと思う。

現状のnginxの設定は以下(★があるところが今回挙動を確認する対象となるところ)

server {
   root /usr/share/nginx/html;

   #index index.html index.htm index.nginx-debian.html;
   index index.html;
   server_name xxxxxxxxx; # ドメイン

    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/xxxxxxxxx/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xxxxxxxxx/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location /static { # ★
        #http://ドメイン名/static/に対応するディレクトリ
        #locationのstaticとaliasのstaticは同じ名前である必要はない
        alias /usr/share/nginx/html/static; # ★
    } # ★

    location /media {
        alias /usr/share/nginx/html/media;
    }
}

/usr/share/nginx/html/staticディレクトリ内にtest.htmlが以下の内容である。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>test</title>
  </head>
  <body>
    <h1>staticのテストページ</h1>
  </body>
</html>

ドメイン/static/test.htmlでページにアクセスできる。

次は本題のDjangoとNginx。

まずはNginxをDjangoを起動したときに繋がるように設定。

上記の設定に以下の★のところを追加する。

server {
   root /usr/share/nginx/html;

   #index index.html index.htm index.nginx-debian.html;
   index index.html;
   server_name xxxxxxxxx; # ドメイン

    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/xxxxxxxxx/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xxxxxxxxx/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location /static {
        #http://ドメイン名/static/に対応するディレクトリ
        #locationのstaticとaliasのstaticは同じ名前である必要はない
        alias /usr/share/nginx/html/static;
    }

    location /media {
        alias /usr/share/nginx/html/media;
    }

    location / { # ★
        proxy_set_header Host $http_host; # ★
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # ★
        proxy_set_header X_Forwarded-Proto $scheme; # ★

        proxy_pass http://127.0.0.1:8000; # ★
    } # ★
}

そしてDjangoの方だが、今回はテスト用のDjangoプロジェクトを作って確認した。

setting.pyの以下の部分を以下のように変更。

DEBUG = False

ALLOWED_HOSTS = ['localhost', '<ドメイン名>']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello', # ★ここを追加
]

helloアプリを作成(すいません少し飛ばします)

python3 manage.py startapp hello

urls.pyのurlpatternsにhello(★のところ)を追加

from django.contrib import admin
from django.urls import path
import hello.views as hello # ★

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello.index), #★
]

hello/views.pyを以下のように記述

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello!!! I\'m Django!!!!!')

このviews.pyの設定内容はNginxを再起動し、Djangoのプロジェクトを起動させ、ドメイン/helloでアクセスすると表示が確認できる。


タイトルとURLをコピーしました