[PYTHON] Déployer Django + React à partir de zéro vers GKE (3) Créer un projet GCP

Déployer Django + React à partir de zéro vers GKE (3) Créer un projet GCP

Ceci est une continuation du (2) développement du frontend --Nginx + React.

Chose que tu veux faire

Je souhaite développer une application avec la configuration Djagno + React et la déployer sur Google Kubernetes Engine Je l'ai écrit parce qu'il était peu probable qu'il y ait un tutoriel cohérent.

Cependant, ** je pense qu'il y a des points qui ne sont pas encore parfaits **, mais je pense que si vous avez un peu d'expérience, vous pouvez l'utiliser immédiatement.

Mise en garde

Il s'agit d'un enregistrement d'un ingénieur amateur inexpérimenté qui lutte avec le déploiement pour créer un portefeuille. S'il y a des lacunes, veuillez les signaler. ..

Viser la figure

environnement

$ node --version
v12.14.1

$ npm --version
6.13.7

$ python --version
Python 3.7.4

$ docker --version
Docker version 19.03.8

OS windows10 pro

Déployer

Nous allons le déployer sur Google Kubernetes Engine (GKE). Je me réfère beaucoup au Tutoriel officiel.

Créer un projet GCP

Connectez-vous à votre compte Google et démarrez un nouveau projet depuis la console Cloud.

Nom du projet: gke-django-tutorial
endroit:Aucune organisation

Vérifier si la facturation est valide

Référence: https://cloud.google.com/billing/docs/how-to/modify-project?authuser=2

Initialiser le SDK Cloud

Les ressources GCP peuvent être manipulées depuis votre PC local à l'aide du SDK Cloud. On suppose que gcloud est déjà installé.

#initialisation gcloud
$\gke-django-tutorial\gcloud init

Welcome! This command will take you through the configuration of gcloud.

Pick configuration to use:
 [1] Re-initialize this configuration [xxxxxx] with new settings
 [2] Create a new configuration

Please enter your numeric choice:  2

Enter configuration name. Names start with a lower case letter and
contain only lower case letters a-z, digits 0-9, and hyphens '-':  gke-django-tutorial
Your current configuration has been set to: [gke-django-tutorial]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).

Choose the account you would like to use to perform operations for
this configuration:
 [1] [email protected]
 [2] [email protected]
 [3] Log in with a new account
Please enter your numeric choice:  1

You are logged in as: [[email protected]].

Pick cloud project to use:
 [1] XXXXXXX
 [2] [YOUR_PROJECT]
 [3] Create a new project
Please enter numeric choice or text value (must exactly match list
item):  2

Your current project has been set to: [YOUR_PROJECT].

Not setting default zone/region (this feature makes it easier to use
[gcloud compute] by setting an appropriate default value for the
--zone and --region flag).
See https://cloud.google.com/compute/docs/gcloud-compute section on how to set
default compute region and zone manually. If you would like [gcloud init] to be
able to do this for you the next time you run it, make sure the
Compute Engine API is enabled for your project on the
https://console.developers.google.com/apis page.

Your Google Cloud SDK is configured and ready to use!

* Commands that require authentication will use [email protected] by default
* Commands will reference project `[YOUR_PROJECT]` by default
Run `gcloud help config` to learn how to change individual settings

This gcloud configuration is called [YOUR_PROJECT]. You can create additional configurations if you work with multiple accounts and/or projects.
Run `gcloud topic configurations` to learn more.

[Omis ci-dessous]

Activez l'API requise

Activez les API Datastore, Pub / Sub, Cloud Storage JSON, Cloud Logging et Google+.

Préparation Cloud SQL

Activer l'administrateur Cloud SQL

$\gke-django-tutorial\gcloud services enable sqladmin
Operation "operations/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" finished successfully.

Télécharger le proxy CloudSQL

Téléchargez Cloud SQL Proxy et renommez-le en cloud_sql_proxy.exe. Ceci est installé sous $ \ gke-django-tutorial \.

--Référence: Installation du proxy Cloud SQL

Créer une instance CloudSQL

Créez une instance de CloudSQL à partir de la console Cloud.

Sélection du moteur de base de données: PostgreSQL
ID d'instance: [SQL_INSTANCE_NAME]
mot de passe: [YOUR_PASSWORD]
Emplacement:
Région: [SQL_REGION_NAME]
zone: [DATABASE_ZONE]
Version de la base de données: PostgreSQL 11

Initialisation de l'instance

Vérifiez le connectionName pour vous connecter à CloudSQL en utilisant le cloud_sql_proxy.exe que vous avez téléchargé précédemment.

#Confirmation de connecsionName
$\gke-django-tutorial\gcloud sql instances describe [SQL_INSTANCE_NAME]
connectionName: [YOUR_PROJECT]:[SQL_REGION_NAME]:[SQL_INSTANCE_NAME]

#Connexion d'instance
$\gke-django-tutorial\gcoud_sql_proxy.exe -instances="[YOUR_PROJECT]:[SQL_REGION_NAME]:[SQL_INSTANCE_NAME]"=tcp:5432
2020/04/28 17:49:51 Listening on 127.0.0.1:5432 for gke-django-tutorial:asia-northeast1:websql
2020/04/28 17:49:51 Ready for new connections

Cette commande m'a permis de me connecter à mon instance CloudSQL depuis mon PC. Laissez l'invite de commande connectée à l'instance et travaillez avec une autre invite de commande.

Créer une base de données

Créons une base de données depuis la console. Vous pouvez créer une «base de données» à partir d'une «base de données» en sélectionnant «[SQL_INSTANCE_NAME]» sur la console.

Nom de la base de données: [DATABASE_NAME]

Créer un utilisateur de base de données

Créez un compte d'utilisateur de base de données à partir de la console.

Nom d'utilisateur: [DATABASE_USER]
mot de passe: [DATABASE_PASSWORD]

Créer un compte de service CloudSQL

Créez un compte de service CloudSQl depuis la console et téléchargez votre clé privée au format json.

Nom du compte de service: [SERVICE_ACCOUNT_NAME]
ID du compte de service: [SERVICE_ACCOUNT_NAME]@BBBBBBBBB.iam.gservice
Autorité:Administrateur Cloud SQL
⇒ Sélectionnez le format json lors de la création d'une clé privée
⇒ clé privée au format json: ZZZZZZZZZZZZZZZ.json est téléchargé

Créez un répertoire appelé secrets \ cloudsql \ directement sous le projet et placez la clé privée créée.

$\gke-django-tutorial\mkdir secrets
$\gke-django-tutorial\cd secrets
$\gke-django-tutorial\secrets\mkdir cloudsql
$\gke-django-tutorial\secrets\cd cloudsql

#Gardez votre clé privée
$\gke-django-tutorial\secrets\cloudsql\dir
ZZZZZZZZZZZZZZZ.json

Définition des variables d'environnement

Définissez la base de données Django sur CloudSQL, démarrez-la et préparez-vous à utiliser CloudSQL. Comme nous l'avons fait dans le sqlite3 local, nous allons migrer la table de l'environnement local via cloud_sql_proxy.

Ajoutez DATABASE_USER et DATABASE_PASSWORD au fichier .env pour les utiliser comme variables d'environnement. Ne mettez pas d'espace entre la clé et la valeur.

SECRET_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
DEBUG=False
DATABASE_USER=[DATABASE_USER]
DATABASE_PASSWORD=[DATABASE_PASSWORD]

backend/config/settings.py

Modifiez le paramètre DATABASE de Django de db.sqlite3 à CloudSQL. Vous devez référencer directement le fichier .env, donc chargez-le en utilisant python-dotenv.

# backend/config/setting.sy

import os
from dotenv import load_dotenv  #ajouter à

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.basename(BASE_DIR)

load_dotenv(os.path.join(BASE_DIR, '.env'))  #ajouter à

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('SECRET_KEY')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.environ.get('DEBUG')

DATABASES = {
    'default': {
        # If you are using Cloud SQL for MySQL rather than PostgreSQL, set
        # 'ENGINE': 'django.db.backends.mysql' instead of the following.
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'web-db',
        'USER': os.getenv('DATABASE_USER'),
        'PASSWORD': os.getenv('DATABASE_PASSWORD'),
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

migration

J'ai changé les paramètres de la base de données sur CloudSQL et je dois à nouveau migrer.

(venv)$\gke-django-tutorial\backend\python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, todo
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
  Applying todo.0001_initial... OK

J'ai pu migrer vers CloudSQL sans aucun problème.

Ajouter un utilisateur administrateur

Créez un utilisateur administrateur ainsi que sqlite.

(venv)$\gke-django-tutorial\backend\python manage.py createsuperuser
Nom d'utilisateur(leave blank to use '[YOUR_NAME]'): [SUPERUSER_NAME]
adresse mail: [YOUR_EMAIL]@gmail.com
Password:
Password (again):
Superuser created successfully.

Lançons le serveur de développement et ajoutons environ 3 données à partir de la page administrateur.

(venv)$\gke-django-tutorial\backend\python manage.py runserver

Vous pouvez stocker des données sur la base de données créée dans votre instance CloudSQL en vous connectant à la page d'administration à l'adresse http: // localhost: 8000 / admin /. Ajoutons quelques éléments.

Préparation au stockage dans le cloud

Stockez les fichiers statiques dans Google Cloud Storage (GCS) et configurez les paramètres pour les fichiers statiques à livrer à partir de GCS.

Créez du stockage et téléchargez des fichiers statiques. Si vous ne le faites pas, les css tels que l'écran d'administration ne seront pas reflétés.

#Créer du stockage
(venv)$\gke-django-tutorial\backend\gsutil mb gs://[STORAGE_NAME]
Creating gs://gke-django-storage/...

#Paramètres de publication
(venv)$\gke-django-tutorial\backend\gsutil defacl set public-read gs://[STORAGE_NAME]
Setting default object ACL on gs://[STORAGE_NAME]/...
/ [1 objects]

#Collecter des fichiers statiques
(venv)$\gke-django-tutorial\backend\python manage.py collectstatic

#Importer des fichiers statiques sur Cloud Storage
(venv)$\gke-django-tutorial\backend\gsutil rsync -R staticfiles/ gs://[STORAGE_NAME]/static

Modifiez STATIC_URL dans backend / config / settings.py pour faire référence à GCS.

# backend/config/settings.py
STATIC_URL = 'https://storage.googleapis.com/[STORAGE_NAME]/static/'

Nous avons créé un projet GCP et nous nous sommes préparés pour Cloud SQL et Cloud Storage.

(4) Création de cluster et conteneur PUSH

Recommended Posts

Déployer Django + React à partir de zéro vers GKE (3) Créer un projet GCP
Déployez Django + React à partir de zéro vers GKE (4) Créez un cluster et un conteneur PUSH
Déployez Django + React à partir de zéro vers GKE (1) Développement backend - Nginx + Django
Déployer Django + React de zéro sur GKE: Table des matières
Étapes pour créer un projet Django
Shell pour créer un projet django
À moi-même en tant que débutant Django (1) -Création d'un projet / application-
Déployer le projet django sur heroku
Comment créer un clone depuis Github
Comment créer un référentiel à partir d'un média
Comment créer un objet fonction à partir d'une chaîne
Créez une interface utilisateur de jeu à partir de zéro avec pygame2!
Comment déployer une application Streamlit sur GCP (GAE)
Comment créer une API Rest dans Django
Créer un planning Django
Comment déployer une application Django dans le cloud Alibaba
Django memo n ° 1 à partir de zéro
Étapes de l'installation de Python 3 à la création d'une application Django
Script Python qui crée un fichier JSON à partir d'un fichier CSV
Démarrer un projet Django
Comment référencer des fichiers statiques dans un projet Django
À moi-même en tant que débutant Django (4) --Créer une application mémo-
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Comment effectuer les réglages initiaux à partir de la création de projet Django
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 2)
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 3)
Django à partir de zéro (partie: 2)
Django à partir de zéro (partie: 1)
Créer une page d'accueil avec django
Convertir le projet Scratch en Python
Créer un écran de connexion Django
React and Flask to GCP
Les utilisateurs de Rails essaient de créer un moteur de blog simple avec Django
Création et déploiement d'applications Django (PTVS) à l'aide du stockage Azure Table
Comment déployer une application Django sur heroku en seulement 5 minutes
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Django: Importer une classe depuis une chaîne
Déployer l'application Django avec Docker
Comment créer un package Conda
Comment créer un pont virtuel
Comment créer un Dockerfile (basique)
Déployer le didacticiel Django sur IIS ①
Connexion SSH de Windows à GCP
5 façons de créer un chatbot Python
Comment créer un fichier de configuration
Créer un téléchargeur de fichiers avec Django
Créer un bot LINE avec Django
Créez un outil qui secoue automatiquement furigana avec html en utilisant Mecab de Python3
Pour trouver le nom de la vue avec l'espace de noms à partir de l'URL (path_info) dans Django
J'ai essayé d'envoyer un e-mail de fin d'inscription depuis Gmail avec django.
[Migration mac version 2020] migration vers macos 10.15 Catarina Créer un environnement de travail à partir de zéro sans utiliser d'assistant (édition CUI)