LoginSignup
0
1

More than 3 years have passed since last update.

Django + Nginx + uwsgi + Mariadb環境構築

Last updated at Posted at 2021-05-04

概要

Django + NGinx + uwsgi + mariadbで開発環境を作ったときのメモ

環境

  • GCP(無料枠)
  • centos7
  • Python3.9
  • Nginx 最新
  • uwsgi 2.0.19.1
  • MariaDB 10

前提

root(su)で作業します。
※ uwsgi周りがpermission error連発して苦労したので

GCPはrootで入れなかったので、

sudo passwd root

しました。

GCP(無料枠)は↓を参考にインスタンス作りました。

SELinuxをオフ

$ vim /etc/selinux/config
SELINUX=enforcing
↓
SELINUX=disabled
$ reboot

python3.9インストール

# $ yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make
# $ wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz 
# $ tar xzf Python-3.9.2.tgz 

# $ cd Python-3.9.2
# $ ./configure --enable-optimizations
# $ make install
$ pip3 install --upgrade pip
$ pip3 install django==3.1.7
$ pip3 install uwsgi==2.0.19.1
$ pip3 install django-environ==0.4.5

【Python】参考にしたサイト

MariaDB

レポジトリの登録

$ vim /etc/yum.repo.d/MariaDB.repo
↓
# MariaDB 10.5 CentOS repository list - created 2020-07-18 18:32 UTC
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

CentOS7にデフォルトでインストールされているMariaDB 5を削除

$ rpm -qa | grep -i "mariadb"
mariadb-libs-5.5.44-1.el7_1.x86_64 // インストールされているかどうかの確認

$ yum remove mariadb-libs

MariaDB 10をインストール

$ yum install MariaDB-server MariaDB-client

// バージョンを確認
$ mysql --version
mysql  Ver 15.1 Distrib 10.5.4-MariaDB, for Linux (x86_64) using readline 5.1

mysqlclientのインストール

$ yum install MariaDB-shared python3-devel mysql-devel libmysqlclient-dev
$ pip3 install mysqlclient==2.0.3

MariaDB初期設定

$ systemctl start mariadb
$ systemctl enable mariadb

$ mysql -u root -p

// データベース新規作成
$ CREATE DATABASE データベース名;
$ SHOW CREATE DATABASE データベース名;

// データベースユーザ新規作成
$ CREATE USER test2@localhost IDENTIFIED BY 'test2';

// 権限付与
$ GRANT ALL PRIVILEGES ON データベース名.* to 'test2'@'localhost';
$ GRANT FILE ON *.* TO 'test2'@'localhost';
$ FLUSH PRIVILEGES;

settings.pyに↑で作成したmariadbの設定をする。
任意で、一緒にpython manage.py collectstaticも。

【MariaDB】参考にしたサイト

Nginx

Nginxのインストール

$ vim /etc/yum.repos.d/nginx.repo
↓
// 最新versionをインストールするように記載
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

$ yum install -y nginx
$ systemctl start nginx.service
$ systemctl enable nginx.service

// httpを追加(80)
$ firewall-cmd --add-service=http --permanent
// httpsを追加
$ firewall-cmd --add-port=443/tcp --permanent

// 任意↓ 8000番を追加
$ firewall-cmd --add-port=8000/tcp --zone=public --permanent

$ firewall-cmd --reload
$ firewall-cmd --list-all

Nginxの設定

$ vim /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 {
    upstream config {
        server unix:///var/run/uwsgi/master.sock;
    }
    server {
        listen       80;
        server_name  ◯.◯.◯.◯;
        root         /usr/share/nginx/html/config;
        charset      utf-8;

        include /etc/nginx/default.d/*.conf;
        client_max_body_size 100M;

        include /etc/nginx/mime.types;

        location /static {
            alias /static;
        }
        location / {
            uwsgi_pass config;
            include /etc/nginx/uwsgi_params;
        }
    }
}
include /etc/nginx/mime.types;

↑を忘れていて痛い目見ました。

uwsgi

uwsg.iniの設定

$ vim uwsig.ini
↓
[uwsgi]
uid = nginx
gid = nginx
chdir = /usr/share/nginx/html/
module = config.wsgi
master = true
processes = 2
threads = 1
socket = /var/run/uwsgi/master.sock
pidfile = /var/run/uwsgi/master.pid
chmod-socket = 666
vacuum = true
thunder-lock = true
max-requests = 6000
max-requests-delta = 300
# log
logto = /var/log/uwsgi/uwsgi.log
deamonize = /var/log/uwsgi/uwsgi-@(exec://date +%Y-%m-%d).log
log-reopen = true

uwsgi.serviceの設定

$ vim /etc/systemd/system/uwsgi.service
↓
[Unit]
Description=uWSGI
After=syslog.target
[Service]
// chown 任意のユーザー:nginx
ExecStartPre=/bin/bash -c 'mkdir -p /var/run/uwsgi; chown root:nginx /var/run/uwsgi; chmod g+w /var/run/uwsgi;'
ExecStart=/bin/bash -c 'uwsgi --ini /usr/share/nginx/html/uwsgi.ini;'
#Restart=always
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target

必要フォルダの作成(uwsgiのpermission error多い)

$ mkdir /var/log/nginx

$ mkdir /var/log/uwsgi
$ chown nginx:nginx uwsgi
$ chmod 662

$ mkdir /var/run/uwsgi
$ chown root:nginx uwsgi

$ systemctl daemon-reload
$ systemctl start uwsgi

【Nginx + uwsgi】参考にしたサイト

権限周りは↓が参考になりました

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1