Python3+django+nginx+uwsgi使用場景部署
Python3+django+nginx+uwsgi使用場景部署
當我們寫完一套完整的網站功能,我們需要實時在生產環境上線,並需要容納高並發的訪問請求。所以我們需要部署以上來保證網站的服務質量。
1.1基本環境準備:
echo ‘LANG="en_GB.utf8"‘ > /etc/sysconfig/i18n
LANG="en_GB.utf8"
1.2依賴環境:
(env) [root@reboot5 nginx]# python -V
Python 3.6.2
(env) [root@reboot5 nginx]# cat /etc/redhat-release
(env) [root@reboot5 nginx]# pip list|grep Django
Django 1.11.4
(env) [root@reboot5 opsweb]# mysql -V
mysql Ver 14.14 Distrib 5.6.37
1.3修改yum源地址:
yum install wget
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
1.4 環境安裝:
yum install wget openssl-devel -y # gcc編譯要用
yum install gcc zlib-devel openssl-devel -y
2 安裝python
yum -y install openssl-devel readline-devel unzip
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
tar -xzf Python-3.6.2.tgz
cd Python-3.6.2
sudo ./configure --prefix=/usr/local/python36
sudo make
2.1配置pip源
sudo tee /etc/pip.conf <<-‘EOF‘
[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
[list]
format=columns
EOF
2.2安裝virtualenv虛擬環境
sudo /usr/local/python36/bin/pip3 install virtualenv
- 安裝django
3.1 初始化環境
mkdir ~/reboot
/usr/local/python36/bin/virtualenv ~/reboot/env
3.2 安裝django 1.11
source /root/reboot/env/bin/activate
pip install "django>=1.11"
pip install ipython
4 mysql環境準備:
搜狐鏡像:http://mirrors.sohu.com/
sudo rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum install -y mysql mysql-server mysql-devel zlib-devel
source /home/djangoenv/pythonenv/bin/activate
#python依賴:
pip install pymysql
修改配置/etc/my.cnf:
[mysqld]
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = ‘SET NAMES utf8‘
character-set-server = utf8
啟動:
sudo service mysqld start
4.1 安全設置:
mysql_upgrade -uroot # 如果是升級需要執行(卸載原有mysql低版本也需要)
mysql_secure_installation # 命令行執行設置賬號密碼、限制遠程連接等
4.2 創建基礎數據庫:
create database cmdb CHARACTER SET utf8; # 創建一個cmdb庫
CREATE USER ‘cmdb‘@‘%‘ IDENTIFIED BY ‘nice‘; # 創建一個cmdb用戶,密碼cmdb
GRANT ALL ON cmdb.* TO ‘cmdb‘@‘%‘; # 給cmdb用戶所有cmdb庫權限
4.3 mysql基本備份還原
導出:mysqldump -h127.0.0.1 -uroot -p123456 django > /backupfile.sql
還原:mysql -h127.0.0.1 -uroot -pruanchunxia2324 django < backupfile.sql
-----------------------------------uwsgi------------------------------------------------------
5 安裝:uwsgi
source /root/reboot/env/bin/activate
pip install uwsgi --no-cache-dir
5.1 uwsgi安裝完畢查詢版本
(env) [root@reboot5 /]# pip list|grep uWSGI
uWSGI 2.0.15
5.2 將配置文件寫到項目目錄下
(env) [root@reboot5 nginx]# cd /root/reboot/opsweb
(env) [root@reboot5 opsweb]# vim uwsgi.ini
設置啟動配置uwsgi.ini:
[uwsgi]
項目目錄
chdir = /root/reboot/opsweb
指定項目的application
module=opsweb.wsgi
進程個數
workers=2
pidfile=/var/log/uwsgi/uwsgi.pid
指定IP端口
http=10.10.40.112:8001
指定靜態文件
static=/root/reboot/opsweb/static
啟動uwsgi的用戶名和用戶組
uid=root
gid=root
啟用主進程
master=true
自動移除unix Socket和pid文件當服務停止的時候
vacuum=true
序列化接受的內容,如果可能的話
thunder-lock=true
啟用線程
enable-threads=true
設置自中斷時間
harakiri=30
設置緩沖
post-buffering=4096
設置日誌目錄
daemonize=/var/log/uwsgi/opsweb.log
指定sock的文件路徑
socket=/var/log/uwsgi/uwsgi.sock
5.3 uwsgi啟動命令:
sudo uwsgi --ini uwsgi.ini
uwsgi --reload /var/log/uwsgi/uwsgi.pid
uwsgi --start /var/log/uwsgi/uwsgi.pid
uwsgi --stop /var/log/uwsgi/uwsgi.pid
-----------------------------------nginx------------------------------------------------------
6 安裝nginx:
yum install nginx -y
配置文件修改:
server {
listen 80;
server_name 10.10.40.112;
location /static {
alias /root/reboot/opsweb/static;
}
location / {
include /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
uwsgi_pass 10.10.40.112:8001;
uwsgi_pass unix:/var/log/uwsgi/uwsgi.sock;
}
}
7 django配置
7.1 django配置修改:
setting.py中添加設置靜態資源路徑,給nginx調用
django可以在自己的templates下面放靜態資源 那個命令可以吧所有靜態資源收集起來
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
#然後到項目目錄下執行:
python manage.py collectstatic
修改配置文件
DEBUG = False ALLOWED_HOSTS = [‘*‘]
- 故障排錯
8.1 故障發現
發現無法找到靜態文件
8.2 通過查看nginx錯誤日誌,定位錯誤
定位問題為無法訪問/static目錄下文件
8.3嘗試將配置目錄授予權限
發現目錄權限都已生效
並且重啟nginx服務,發現問題依然存在。
通過檢查nginx服務發現,nginx線程為nginx用戶啟動
所以
此處需要對nginx配置文件重新加載
/etc/init.d/nginx reload
8.4 最終代理效果
註:沒做代理前如訪問時,IP後面需要跟端口,代理成功後只需輸入代理的ip即可訪問後端網站,從而提高安全性和並發訪問量。
Python3+django+nginx+uwsgi使用場景部署