はじめに
これは私がPythonを勉強するために環境構築を行なった時の記録です。
この手順通りに作業すれば土台となる環境が構築されるはずです。
(何回か検証をしたので大丈夫だとは思います。)
あくまでもlocal環境の構築手順です。
環境に関して
私が下記の手順で環境構築したときの各ソフトウェアやOSの情報
Host OS side
- OS
- windows10
- その他
- Oracle VM VirtualBox 5.2.12
Guest OS side
- OS
- CentOS7.5
- 言語
- Python3.6.5
- フレームワーク
- Django2.0.7
- web server
- Nginx1.15.1
- DB
- MySQL 8.0.11
環境構築の手順
VirtualBoxにCentOS7をinstall
- netinstallのisoをローカルにdownload
-
instration sourceで入力する
minimal installでcentosをinstallする。
自分のユーザーに対してadmin権限を付与しておく。
Oracle VM VirtualBoxのポートフォワーディング
設定 > ネットワーク > アダプター 1 > 高度 > ポートフォワーディング
SELinuxを無効にする
$ sudo vi /etc/selinux/config
$ sudo shutdown -r now
---
# SELINUXの設定を無効にする
SELINUX=disabled
---
SELinuxを無効にする理由
nginxがconfを読むときにSELinuxが有効になっているとPermission errorが起きるため。
今回はlocal環境を作ることが目的なので無効にする。
/var/log/error.log
2018/07/22 17:46:28 [emerg] 1487#1487: open() "/etc/nginx/sites-enabled/mysite_nginx.conf" failed (13: Permission denied) in /etc/nginx/nginx.conf:32
参考
SELinuxに関して
- Security-Enhanced Linux
firewallの設定
firewallの設定
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
$ sudo firewall-cmd --reload
python3のinstall
python3.6とpipをinstall
$ sudo yum update
$ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum install python36u python36u-devel python36u-pip
$ python3.6 --version
Python 3.6.5
$ pip3.6 --version
pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6)
$ sudo pip3.6 install --upgrade pip
$ pip3.6 --version
pip 18.0 from /usr/lib/python3.6/site-packages/pip (python 3.6)
参考
- CentOS環境のPython
Django (installから動作確認)
Djangoのinstall
$ sudo pip3.6 install Django
$ sudo python3.6 -m django --version
2.0.7
Djangoのプロジェクトを作成
$ cd ~
$ django-admin startproject mysite
Djangoのプロジェクトの動作確認
$ python3.6 ~/mysite/manage.py migrate
$ python3.6 ~/mysite/manage.py runserver 0:8000
HostOSのwebブラウザからhttp://localhost:8000/にアクセスする。
下のような画面が表示されればOK。
参考
nginxのinstall
nginxをinstall
$ sudo vi /etc/yum.repos.d/nginx.repo
---
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
---
$ sudo yum install nginx
$ nginx -v
nginx version: nginx/1.15.1
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ curl localhost
HostOSのwebブラウザからhttp://localhost:8080/にアクセスする。
下のような画面が表示されればOK。
Djangoをnginxで動かす
uwsgiをインストール
$ sudo yum install gcc
$ sudo pip3.6 install uwsgi
$ uwsgi --version
2.0.17.1
設定
$ cd ~/mysite/
$ python3.6 manage.py startapp myapp
$ vi ~/mysite/mysite/settings.py
---
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', <- 追加
]
---
$ vi ~/mysite/myapp/views.py
---
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello, Nginx.")
---
$ vi ~/mysite/myapp/urls.py
---
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.hello, name='hello'),
]
---
$ vi ~/mysite/mysite/urls.py
---
"""mysite URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^myapp/', include('myapp.urls')),
]
---
$ cp /etc/nginx/uwsgi_params ~/mysite/
$ ls -la ~/mysite/uwsgi_params
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ sudo vi /etc/nginx/sites-available/mysite_nginx.conf
---
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001;
}
# configuration of the server
server {
# the port your site will be served on
listen 8000;
# the domain name it will serve for
server_name 127.0.0.1;
charset utf-8;
# max upload size
client_max_body_size 75M;
# Django media
location /media {
alias /home/xxx/mysite/media; # 適切なパスに変更してください
}
location /static {
alias /home/xxx/mysite/static; # 適切なパスに変更してください
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/xxx/mysite/uwsgi_params; # 適切なパスに変更してください
}
}
---
$ cp -i /etc/nginx/sites-available/mysite_nginx.conf ~/mysite
$ sudo ln -s ~/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
$ sudo vi /etc/nginx/nginx.conf
---
include /etc/nginx/sites-enabled/*; <-この設定がなければ追加
---
$ echo 'STATIC_ROOT = os.path.join(BASE_DIR, "static/")' >> ~/mysite/mysite/settings.py
$ python3.6 ~/mysite/manage.py collectstatic
$ sudo systemctl restart nginx
$ uwsgi --socket :8001 --module mysite.wsgi
HostOSのwebブラウザからhttp://localhost:8000/myapp/にアクセスする。
下のような画面が表示されればOK。
参考
-
Setting up Django and your web server with uWSGI and nginx
-
[Django入門] Nginxを使ってWebサーバーを動かそう
MySQL
MySQLをinstall
$ sudo rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
$ sudo yum repolist all | grep mysql
$ sudo yum install mysql-community-server
$ mysql --version
mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)
$ sudo systemctl start mysqld.service
$ sudo systemctl status mysqld.service
$ sudo systemctl is-enabled mysqld.service
MySQLにloginできるか確認
$ grep 'temporary password' /var/log/mysqld.log
$ mysql -u root -p
参考
- A Quick Guide to Using the MySQL Yum Repository
おわりに
私はPythonを勉強し始めたばかりなので、知見のあるかたのフィードバックをお待ちしています。
もしこの記事が私のようにPythonを勉強したいと思われている方のお役に立てれば幸いです。