Nous allons créer une application Web en utilisant Django, qui est un framework Web Python. Je suis ingénieur réseau et débutant en développement d'applications Web J'écris à partir du point de construire un environnement d'infrastructure sur une base zéro avec l'intention de résumer les mémorandums et les procédures.
Quand j'ai commencé à écrire, c'est devenu un énorme mémo, alors je l'ai divisé en trois fois environ. Pour la première fois, nous présenterons principalement la construction de l'environnement.
Si vous souhaitez créer une application Django soudainement, veuillez commencer ici. [Application Web réalisée avec Python3.4 + Django (développement d'application Part.2)] (http://qiita.com/taijijiji/items/343fb56ab94eee28c401)
En matière de développement d'applications Web au Japon, Ruby et son framework Web, Ruby on Rails, sont extrêmement célèbres. Python dispose également de plusieurs frameworks Web, dont deux sont célèbres et largement utilisés.
Django C'est le framework Web Python le plus utilisé. Il s'agit d'un framework Web tout-en-un qui comprend un moteur de modèle, ORM (une fonction qui mappe des objets sur une base de données et un programme), une fonction de test et une fonction de localisation japonaise. Il existe également une fonction pratique qui génère automatiquement une interface graphique pour l'administrateur de l'application Web. Comme il existe de nombreux fichiers cibles à exploiter, il y a un coût d'apprentissage, mais comme il peut être suffisamment exploité même avec des services réels, il peut être utilisé pendant une longue période.
Flask Flask est un framework Web léger qui semble être le deuxième plus populaire après Django. Comparé au type tout-en-un Django, il a une structure de fichiers plus petite et des coûts d'apprentissage inférieurs. Il convient au développement d'applications Web à petite échelle qui n'utilisent pas de base de données. Si vous souhaitez créer une application Web à grande échelle, vous la développerez en combinant d'autres packages Python.
En plus de ceux-ci, Python dispose de frameworks Web tels que Bottle, Pyramid, Tornade et Plone. Pour le moment, les deux ci-dessus semblent être utilisés très souvent.
Cette fois, nous développerons une application web utilisant Django. Si vous développez une application Web à usage professionnel, vous pouvez utiliser Django pour couvrir un large éventail de fonctions. Vous pouvez avoir du mal au début, mais c'est une bonne idée de s'habituer à Django dès le début. Vous pouvez également apprendre le processus de développement Web moderne avec Django.
Tout d'abord, nous allons procéder à la construction de l'environnement. Nous procéderons au développement dans l'environnement suivant.
--Machine hôte - MacBookAir OSX Yosemite 10.10.5
Vagrant est utile si vous créez ou détruisez souvent des machines virtuelles à des fins de développement. En outre, en utilisant la fonction de partage de dossiers de Vagrant, vous pouvez modifier les fichiers sur la machine virtuelle avec l'éditeur de texte familier de la machine hôte. Vous pouvez facilement développer votre application.
Commencez par créer un répertoire approprié.
% mkdir django_apps
% cd django_apps
Ensuite, créez un fichier de configuration vagrant avec la commande suivante.
% vagrant init
Ensuite, le fichier suivant sera créé.
% ls -al
total 8
drwxr-xr-x 3 taiji staff 102 9 18 01:04 ./
drwxr-xr-x 18 taiji staff 612 9 18 01:03 ../
-rw-r--r-- 1 taiji staff 3016 9 18 01:04 Vagrantfile
Ensuite, téléchargez et installez l'image CentOS 7 publiée dans la boîte Vagrant. Tout d'abord, téléchargez le fichier de la boîte CentOS 7 publié sur http://www.vagrantbox.es/. (Cela prendra quelques minutes.)
% vagrant box add centos70 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos70' (v0) for provider:
box: Downloading: https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
==> box: Successfully added box 'centos70' (v0) for 'virtualbox'!
Modifiez le fichier vagrant et changez-le en quelque chose comme ce qui suit. J'ai également ajouté des paramètres réseau pour l'accès http aux applications Web créées avec Django.
Vagrant.configure(2) do |config|
config.vm.box = "centos70"
config.vm.network "private_network", ip: "192.168.33.15"
end
Démarrez la machine virtuelle avec les paramètres décrits dans Vagrantfile. (Cela prend quelques minutes pour démarrer)
% vagrant up
Si la machine virtuelle démarre normalement, vous pouvez la vérifier avec la commande suivante.
% vagrant status
Current machine states:
default running (virtualbox)
The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
Connectez-vous pour voir s'il a été créé correctement
% vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$
Vérifiez si le partage de dossiers sur la machine virtuelle et la machine hôte est activé. Par défaut, le répertoire / vagrant de la machine virtuelle et le Vagrantfile de la machine hôte sont partagés. Ici, nous allons mettre en place un fichier simple pour tester la fonction de partage.
Machine virtuelle
[vagrant@localhost ~]$ cd /vagrant/
[vagrant@localhost vagrant]$ date >date.txt
[vagrant@localhost vagrant]$ cat date.txt
Fri Sep 18 04:57:51 UTC 2015
[vagrant@localhost vagrant]$ ls -la
total 12
drwxr-xr-x 1 vagrant vagrant 170 Sep 18 04:57 .
dr-xr-xr-x. 18 root root 4096 Sep 18 04:48 ..
drwxr-xr-x 1 vagrant vagrant 102 Sep 17 16:11 .vagrant
-rw-r--r-- 1 vagrant vagrant 3226 Sep 18 04:44 Vagrantfile
-rw-r--r-- 1 vagrant vagrant 29 Sep 18 04:57 date.txt
Machine hôte
% ls -la
total 16
drwxr-xr-x 5 taiji staff 170 9 18 13:57 ./
drwxr-xr-x 18 taiji staff 612 9 18 01:03 ../
drwxr-xr-x 3 taiji staff 102 9 18 01:11 .vagrant/
-rw-r--r-- 1 taiji staff 3226 9 18 13:44 Vagrantfile
-rw-r--r-- 1 taiji staff 29 9 18 13:57 date.txt
% cat date.txt
Fri Sep 18 04:57:51 UTC 2015
J'ai pu confirmer que la machine virtuelle a été créée avec succès.
Gardez tous les paquets installés sur CentOS à jour.
[vagrant@localhost vagrant]$ sudo yum update -y
La machine virtuelle est maintenant prête.
Dans le chapitre suivant, Python et Django pour les machines virtuelles Sera installé.
Sur CentOS7, Python 2.7.5 est installé par défaut.
[vagrant@localhost vagrant]$ python --version
Python 2.7.5
Ici, nous allons installer la dernière version de Python3, Python3.4.3.
[vagrant@localhost ~]$ cd /usr/local/src
[vagrant@localhost src]$ sudo wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz
[vagrant@localhost src]$ sudo tar xzvf Python-3.4.3.tgz
[vagrant@localhost src]$ ls -al
total 19108
drwxr-xr-x. 3 root root 48 Sep 18 05:05 .
drwxr-xr-x. 12 root root 4096 Jul 14 05:11 ..
drwxrwxr-x 15 veewee veewee 4096 Feb 25 2015 Python-3.4.3
-rw-r--r-- 1 root root 19554643 Feb 25 2015 Python-3.4.3.tgz
[vagrant@localhost src]$ cd Python-3.4.3
[vagrant@localhost Python-3.4.3]$ sudo ./configure
[vagrant@localhost Python-3.4.3]$ sudo make
[vagrant@localhost Python-3.4.3]$ sudo make altinstall
Vous pouvez voir que python3.4 est installé sous / usr / local / bin /.
[vagrant@localhost Python-3.4.3]$ ls -al /usr/local/bin
total 22356
drwxr-xr-x. 2 root root 4096 Sep 18 05:09 .
drwxr-xr-x. 12 root root 4096 Jul 14 05:11 ..
-rwxr-xr-x 1 root root 101 Sep 18 05:09 2to3-3.4
-rwxr-xr-x 1 root root 241 Sep 18 05:09 easy_install-3.4
-rwxr-xr-x 1 root root 99 Sep 18 05:09 idle3.4
-rwxr-xr-x 1 root root 213 Sep 18 05:09 pip3.4
-rwxr-xr-x 1 root root 84 Sep 18 05:09 pydoc3.4
-rwxr-xr-x 2 root root 11423753 Sep 18 05:09 python3.4
-rwxr-xr-x 2 root root 11423753 Sep 18 05:09 python3.4m
-rwxr-xr-x 1 root root 3032 Sep 18 05:09 python3.4m-config
-rwxr-xr-x 1 root root 236 Sep 18 05:09 pyvenv-3.4
Vérifiez la version de Python installée.
[vagrant@localhost ~]$ /usr/local/bin/python3.4 --version
Python 3.4.3
Mettez le PATH de la commande Python 3.4.3.
[vagrant@localhost Python-3.4.3]$ sudo ln -s /usr/local/bin/python3.4 /usr/bin/python3
En faisant cela, vous pouvez appeler Python3.4.3 avec la commande "python3", de sorte que vous pouvez utiliser la série Python2 ou la série Python3 correctement selon le but.
[vagrant@localhost Python-3.4.3]$ python3 --version
Python 3.4.3
[vagrant@localhost Python-3.4.3]$ python --version
Python 2.7.5
Créez un environnement qui utilise pip, le gestionnaire de packages pour Python. Pip est installé en tant que fonction par défaut à partir de 2.7.9 ou version ultérieure sur la série Python 2 et à partir de 3.4 ou version ultérieure sur la série Python 3.
[vagrant@localhost ~]$ python3 -m pip list
You are using pip version 6.0.8, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pip (6.0.8)
setuptools (12.0.5)
Puisque la version de pip semble être ancienne, mettez à niveau pip avec la commande suivante.
[vagrant@localhost ~]$ sudo python3 -m pip install --upgrade pip
[vagrawnt@localhost ~]$ sudo python3 -m pip --version
pip 7.1.2 from /usr/local/lib/python3.4/site-packages (python 3.4)
Il est difficile de taper la commande "python3 -m pip" chaque fois que vous utilisez pip, donc Ici, le lien symbolique appelle le pip Python3 avec la commande "pip3".
[vagrant@localhost Python-3.4.3]$ sudo ln -s /usr/local/bin/pip3.4 /usr/bin/pip3
[vagrant@localhost Python-3.4.3]$ pip3 --version
pip 7.1.2 from /usr/local/lib/python3.4/site-packages (python 3.4)
Pour Python 2.7.8 ou version antérieure et Python 3.3 ou version antérieure, pip doit être installé séparément. Dans ce cas, veuillez essayer la procédure suivante. Cette fois, nous utiliserons la série Python 3.4, vous n'avez donc pas à l'exécuter.
$ sudo wget https://bootstrap.pypa.io/get-pip.py
#Installer en tant qu'utilisateur root
$ sudo python get-pip.py
#Installé en tant qu'utilisateur non root
$ python get-pip.py –user
Ensuite, créez l'environnement pyvenv. pyenv est un environnement d'exécution virtuelle qui vous permet de changer le package à utiliser et la version de python projet par projet. Au stade du développement, des implémentations de fonctions multiples sont souvent développées en parallèle, En utilisant l'environnement d'exécution virtuelle, vous pouvez changer d'environnement de développement pour chaque application et la tester. Vous pouvez articuler le package pour que l'application fonctionne. Dans la série Python2, il était nécessaire d'installer virtualenv etc. Dans la série Python3, il est fourni en tant que fonction par défaut appelée pyvenv.
Tout d'abord, créez un répertoire pour l'allocation dans le répertoire / vagrant.
[vagrant@localhost ~]$ cd /vagrant/
[vagrant@localhost vagrant]$ mkdir django_apps
[vagrant@localhost vagrant]$ cd django_apps/
Ensuite, créez un environnement virtuel avec pyvenv dans le répertoire créé. À ce stade, Python 3.4.3 doit être défini par défaut.
[vagrant@localhost app1]$ pyvenv-3.4 venv_app1
[vagrant@localhost django_apps]$ ls -la
total 0
drwxr-xr-x 1 vagrant vagrant 102 Sep 18 06:05 .
drwxr-xr-x 1 vagrant vagrant 204 Sep 18 06:02 ..
drwxr-xr-x 1 vagrant vagrant 238 Sep 18 06:04 venv_app1
Chargez-le dans l'environnement d'exécution virtuelle créé.
[vagrant@localhost django_apps]$ source venv_app1/bin/activate
(venv_app1) [vagrant@localhost django_apps]$
Nous avons pu créer un environnement d'exécution virtuelle dédié. Vérifions l'état de l'environnement virtuel.
(venv_app1) [vagrant@localhost django_apps]$ python --version
Python 3.4.3
(venv_app1) [vagrant@localhost django_apps]$ which python
/vagrant/django_apps/venv_app1/bin/python
De cette façon, vous pouvez voir qu'un nouvel environnement d'exécution Python a été créé sous le répertoire venv_app1 créé. De même, vous pouvez confirmer que pip est créé dans le répertoire venv_app1.
(venv_app1) [vagrant@localhost django_apps]$ pip --version
pip 6.0.8 from /vagrant/django_apps/venv_app1/lib/python3.4/site-packages (python 3.4)
La version de pip dans l'environnement pyvenv est également ancienne, alors mettez-la à niveau.
(venv_app1) [vagrant@localhost django_apps]$ pip install --upgrade pip
Pour quitter l'environnement d'exécution virtuelle, procédez comme suit.
(env_app1)[vagrant@localhost app1]$ deactivate
[vagrant@localhost app1]$
Pour vous reconnecter à l'environnement d'exécution virtuelle, entrez la même commande que lors de sa création.
[vagrant@localhost django_apps]$ source venv_app1/bin/activate
(venv_app1) [vagrant@localhost django_apps]$
Dans les chapitres suivants, nous continuerons en utilisant l'environnement d'exécution virtuelle créé "venv_app1".
MariaDB est un projet lancé en forçant MySQL et est fonctionnellement compatible avec MySQL. Vous pouvez utiliser des commandes d'opération de base de données et des packages Python similaires à MySQL.
Je vais installer MariaDB.
(venv_app1) [vagrant@localhost django_apps]$ sudo yum install -y mariadb-server mariadb-devel
Installez le package mysqlclient pour travailler avec MariaDB à partir de programmes Python.
(venv_app1) [vagrant@localhost django_apps]$ pip install mysqlclient
Démarrez MariaDB
(venv_app1) [vagrant@localhost django_apps]$ sudo systemctl start mariadb
(venv_app1) [vagrant@localhost django_apps]$ sudo systemctl enable mariadb
Connectez-vous à MariaDB en tant qu'utilisateur root.
(venv_app1) [vagrant@localhost django_apps]$ mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.44-MariaDB MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Créez une nouvelle base de données pour l'application Web que vous créez cette fois. Ici, nous allons créer une base de données nommée "app1_db".
MariaDB [(none)]> CREATE DATABASE app1_db CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
Créez un utilisateur qui peut accéder à la base de données créée. Ici, nous allons créer un utilisateur nommé "app1_user". Le mot de passe est défini sur "app1_passwd".
MariaDB [(none)]> GRANT ALL PRIVILEGES ON app1_db.* TO app1_user@localhost IDENTIFIED BY 'app1_passwd';
Query OK, 0 rows affected (0.00 sec)
Quittez l'invite MySQL une fois.
MariaDB [(none)]> exit
Bye
Connectez-vous en tant que nouvel utilisateur pour vérifier que la base de données et l'utilisateur ont été créés avec succès.
# -Veillez à ne pas mettre d'espace après p
(venv_app1) [vagrant@localhost django_apps]$ mysql -u app1_user -papp1_passwd
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| app1_db |
| test |
+--------------------+
3 rows in set (0.00 sec)
J'ai pu confirmer que app1_db a été créé avec succès.
Ceci termine la configuration initiale de MariaDB. Lors de l'utilisation de Django, il n'y a pas beaucoup d'occasions d'appuyer directement sur les commandes MariaDB. Lors du développement d'une application Web, utilisez la fonction ORM (Object-Relational Mapping) de Django. La base de données sera reflétée dynamiquement en fonction du contenu écrit dans le fichier de paramètres appelé Models.py.
Nous installerons nginx en tant que serveur Web.
Ajoutez le référentiel nginx yum à la machine virtuelle.
(venv_app1) [vagrant@localhost django_apps]$ cd /etc/yum.repos.d/
(venv_app1) [vagrant@localhost django_apps]$ sudo vi nginx.repo
#Décrit ci-dessous
##Ici, il est décrit d'installer la dernière version.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Confirmez que nginx.repo a été créé.
(venv_app1) [vagrant@localhost yum.repos.d]$ ls -al
total 44
drwxr-xr-x. 2 root root 4096 Sep 18 09:58 .
drwxr-xr-x. 79 root root 8192 Sep 18 06:33 ..
-rw-r--r--. 1 root root 1664 Mar 31 22:27 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Mar 31 22:27 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Mar 31 22:27 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1331 Mar 31 22:27 CentOS-Sources.repo
-rw-r--r--. 1 root root 1002 Mar 31 22:27 CentOS-Vault.repo
-rw-r--r--. 1 root root 290 Mar 31 22:27 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 109 Sep 18 09:58 nginx.repo
Ensuite, installez nginx avec la commande yum.
(venv_app1) [vagrant@localhost yum.repos.d]$ sudo yum install -y nginx
Utilisez la commande nginx pour vérifier que l'installation a réussi.
(venv_app1) [vagrant@localhost yum.repos.d]$ nginx -v
nginx version: nginx/1.9.4
Démarrez nginx.
(venv_app1) [vagrant@localhost yum.repos.d]$ sudo systemctl start nginx.service
(venv_app1) [vagrant@localhost yum.repos.d]$ sudo systemctl enable nginx.service
nginx est défini dans les 2 fichiers suivants. Par défaut, "index.html" sous le répertoire "/ usr / share / nginx / html" est défini pour être accessible au Web.
(venv_app1) [vagrant@localhost yum.repos.d]$ less /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
(venv_app1) [vagrant@localhost yum.repos.d]$ less /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
Vérifions si vous pouvez accéder à index.html fourni par défaut via HTTP.
Avant de commencer la vérification, mettez firewalld à l'état arrêté. (Étant donné que la fonction de filtre s'arrêtera complètement, soyez prudent lorsque vous l'implémentez dans un environnement de production.)
(venv_app1) [vagrant@localhost yum.repos.d]$ sudo systemctl stop firewalld
(venv_app1) [vagrant@localhost yum.repos.d]$ sudo systemctl disable firawalld
Ici, vous pouvez y accéder à partir du navigateur Web de la machine hôte en utilisant l'adresse IP spécifiée dans l'entreprise private_network de Vagrantfile.
http://192.168.33.15/
En cas de succès, l'écran suivant s'affiche sur le navigateur Web.
Ceci termine la construction de nginx.
Installez le package Django à l'aide de pip. En utilisant pip, vous pouvez facilement installer comme suit.
(venv_app1) [vagrant@localhost django_apps]$ pip install django
(venv_app1) [vagrant@localhost django_apps]$ pip list
Django (1.8.4)
pip (7.1.2)
setuptools (12.0.5)
En tant qu'interface (WSGI: appelée Web Server Gateway Interface) qui relie une application Web et un serveur Web développé avec Django Utilisez uWSGI.
Installez le package uWSGI à l'aide de pip.
(venv_app1) [vagrant@localhost django_apps]$ pip install uwsgi
(venv_app1) [vagrant@localhost django_apps]$ pip list
Django (1.8.4)
mysqlclient (1.3.6)![nginx_snapshot.png](https://qiita-image-store.s3.amazonaws.com/0/45596/7335cc85-e6a9-860f-8bf5-847b4585dc47.png)
pip (7.1.2)
setuptools (12.0.5)
uWSGI (2.0.11.1)
Un peu plus de paramétrage est nécessaire pour réellement lier l'application Django et le serveur web, J'expliquerai la procédure lors de la création d'une application web avec Django.
La construction de l'environnement est maintenant terminée. Dès la prochaine fois, nous développerons enfin des applications utilisant Django.
[Application Web réalisée avec Python3.4 + Django (développement d'applications)] (http://qiita.com/taijijiji/items/343fb56ab94eee28c401)
Recommended Posts