概要
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】参考にしたサイト
権限周りは↓が参考になりました