Nginx+Uwsgi+Django+Mysql部署项目

该文详细介绍了在Linux系统上如何一步步搭建Djangoweb应用,包括创建项目目录,安装Python3,设置MySQL,创建虚拟环境,安装并配置Django和pymysql,使用uWSGI作为应用服务器,通过Nginx进行反向代理和静态文件处理,以及利用Supervisor管理Django后台进程。
摘要由CSDN通过智能技术生成

第一章、准备工作

第1节、创建项目目录

准备好项目代码,将代码上传至myproject

mkdir myproject

第2节、安装python3

cd /usr/local/
mkdir Python 
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz 
tar -zxvf Python-3.8.0.tgz
mkdir /usr/local/Python/py3_project
cd Python-3.8.0
./configure --prefix=/usr/local/python3 --enable-shared 
make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/python3/bin
export PATH

第3节、安装mysql

# 在线安装方法,离线方法后续发布
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm --nogpgcheck
yum -y install mysql-community-server
# 启动
systemctl start mysqld.service
# 初始密码
grep "password" /var/log/mysqld.log
# 进入mysql:
mysql -uroot -p 
# 修改root密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY ‘pwd’;
若无法运行,则先:
set global validate_password_policy=0;
set global validate_password_length=1;

第4节、创建mysql用户和数据库

create database laws;
create user 'Laws'@'%' identified by 'pwd';
grant all privileges on laws.* to 'user'@'%' identified by 'pwd' with 
grant option;
flush privileges;

第二章、虚拟环境

第1节、安装虚拟环境

pip install virtualenv

第2节、创建新的虚拟环境

# 在myproject下创建名为myenv的虚拟环境
cd myproject
mkdir env
virtualenv myenv

第3节、进入及退出虚拟环境

source lawsenv/bin/activate
# 退出虚拟环境
deactivate

第三章、安装django和pymysql

第1节、可进入虚拟环境后进行安装

# 安装django,==后面是版本号
pip3 install django==3.2.16
# 安装pymysql,用于操作mysql
pip3 install pymysql

第2节、配置项目文件__init__.py

这里必须注意,需要改动__init__.py,以操作mysql

cd /myproject/codeproject
cd /codeproject
# 修改配置文件,用于操作mysql
vi __init__.py
import pymysql
pymysql.install_as_MySQLdb()

第3节、配置项目文件settings.py

vi settings.py
DEBUG=True # 直接启动、使用uwsgi时,若用nginx,改为False
ALLOWED_HOSTS = ['*’]
STATIC_URL = '/static/'
STATIC_ROOT = Path(BASE_DIR, 'static')
STATICFILES_DIRS = [Path(BASE_DIR, '/static/')]

第4节、配置项目文件urls.py

• 当使用域名或者ip通过监听80端口直接访问时,首页展示内容:

• 添加:

path('',views.index)

在虚拟环境启动django项目

python manage.py makemigrations app01
python manage.py migrate
python manage.py runserver 0.0.0.0:8000

第四章、虚拟环境下使用uwsgi

1、第1节、安装uwsgi

pip3 install uwsgi

第2节、用uwsgi启动django项目

uwsgi --http :8000 --module Laws.wsgi
#uwsgi加上热加载命令
uwsgi --http :8000 --module Laws.wsgi --py-autoreload=1

第3节、用uwsgi配置文件启动项目

cd Laws
vi uwsgi.ini
# 输入下一节的内容。
# 放开http=0.0.0.0:8000时,直接作为web服务器
# 放开 socket=0.0.0.0:8000
chmod-socket=664
# 与nginx通信,中转来自前端网站的请求。

第4节、uwsgi.ini的内容

[uwsgi]
#指定 django 的项目目录,第一层
chdir=/myproject/mycode#这里需要写项目的第二层目录 Laws 
module=Laws.wsgi
#填写虚拟环境的绝对路径
home=/myproject/env/myenv 
master=true
processes=5
#指定 socket 协议,运行 django,只能与 nginx 结合时使用
socket=0.0.0.0:8000
#如果你没用 nginx,只想自己启动一个 http 界面,用这个
#http = 0.0.0.0:8000 # 直接作为 web 服务器
chmod-socket=664 #用于和 nginx 通信
# clear environment on exit
vacuum=true

第5节、通过配置文件启动uwsgi

uwsgi --ini uwsgi.ini
#放开http时,可用网页端输入: 
可公开网络访问的项目所在ip:8000/index/
myweb.com:8000/index/

第五章、nginx

第1节、收集django 的静态文件

# 编辑crm的settings.py配置文件,写入如下代码
# 定义django的静态资源根目录,便于用命令收集资源,存放的地儿
STATIC_ROOT='/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [ 
os.path.join(BASE_DIR, 'static’)
]
# 用命令收集静态文件
python3 manage.py collectstatic

第2节、安装Nginx

sudo yum install -y epel-releasesudo yum -y update
sudo yum install -y nginx
# 安装成功后,
# 默认的网站目录为: /usr/share/nginx/html
# 默认的配置文件为:/etc/nginx/nginx.conf

第3节、操作nginx

# 启动 Nginx:
systemctl start nginx
# 停止Nginx:
systemctl stop nginx
# 重启Nginx:
systemctl restart nginx
# 查看Nginx状态:
systemctl status nginx
# 启用开机启动Nginx:
systemctl enablenginx
# 禁用开机启动Nginx:
systemctl disablenginx

第4节、配置nginx

cd /etc/nginx
vi nginx.conf
# 根据右侧内容配置
server {
listen 80;
listen 443 ssl;
server_name myweb.com;
#root /usr/share/nginx/html;
# Load configuration files for the default server block.
#include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
#error_page 500 502 503 504 /50x.html;
location = {
#使用 uwsgi_pass 转发基于 uwsgi 协议的一个请求
uwsgi_pass 0.0.0.0:8000; #与 uwsgi 配置一样
include /etc/nginx/uwsgi_params;
}
#配置一个 url 的入口,告诉 django 静态文件在哪里去找
#当请求 url 是 songwmeta.com/static/的时候
#就进行别名,nginx 去/static 下寻找 js 文件
location /static {
alias /static/;
}
#sslon;
ssl_certificate /myproject/ssl/myweb.com_bundle.pem;
ssl_certificate_key /myproject/ssl/myweb.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
}

第5节、上传ssl证书

cd myproject
mkdir sll

通过ftp方式上传。

# 启动运行是否正常
# 启动 Nginx:
systemctl start nginx
# 查看Nginx状态:
systemctl status nginx

第六章、配置supervisor工具,管理django后台

第1节、安装supervisor

# 这个东西只能用python2去实现. 
# 下载supervisor
easy_install supervisor 
# 配置supervisor的配置文件,编写django任务
echo_supervisord_conf > /etc/supervisor.conf

第2节、编写运行django的任务

vim /etc/supervisor.conf
# 在最底行写入如下代码
[program:Laws] 
command=/myproject/env/myenv/bin/uwsgi --ini
/myproject/Laws/uwsgi.ini
autorestart=true
stopasgroup=true
killasgroup=true

第3节、启动suopersivod这个程序

# 启动服务端
supervisord -c /etc/supervisor.conf
# 通过客户端命令查看任务
supervisorctl -c /etc/supervisor.conf

第4节、Supervisorctl管理命令

supervisorctl -c /etc/supervisor.conf
Laws RUNNING pid 5293, uptime 0:03:03
supervisor> stop all #停止所有任务
supervisor> start all #启动s所有任务
supervisor> status Laws 
# 在使用Superivosr进行进程管理时,不能够同时开启uWSGI的“daemonize ”。 
# 删除“uwsgi.ini”文件中的“daemonize ”项即可

第七章、参考文献

https://www.cnblogs.com/zhang-zi-yi/p/10792928.html

https://theaisummer.com/uwsgi-nginx/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值