Ubuntu环境下配置django+nginx+uwsgi

1. 环境介绍

我使用的Ubuntu20.06版本 服务器使用的是阿里云服务器

2. 下载安装python

先将代码文件复制到服务器

sudo apt-get install python3
sudo apt-get install python3-pip
sudo pip3 install -r requirements.txt

3. 安装MySQL

1.安装mysql服务
sudo apt-get install mysql-server
2.进入mysql
sudo mysql
3.在sql命令行输入以下命令回车,你就可以把密码改成mynewpassword
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';
4.初始化配置
sudo mysql_secure_installation

初始化配置详情

#1
VALIDATE PASSWORD PLUGIN can be used to test passwords...
Press y|Y for Yes, any other key for No: N (选择N ,不会进行密码的强校验)

#2
Please set the password for root here...
New password: (输入密码)
Re-enter new password: (重复输入)

#3
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : N (选择N,不删除匿名用户)

#4
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N (选择N,允许root远程连接)

#5
By default, MySQL comes with a database named 'test' that
anyone can access...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N (选择N,不删除test数据库)

#6
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y (选择Y,修改权限立即生效)

配置远程访问

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf #找到 bind-address 修改值为 0.0.0.0(如果需要远程访问)
sudo /etc/init.d/mysql restart #重启mysql
sudo mysql -uroot -p #登录mysql
use mysql; #切换数据库
select User,authentication_string,Host from user; #查询用户表命令
select host,user,plugin from user; #查看状态

#设置权限与密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; #使用mysql_native_password修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER; #更新一下用户的密码
UPDATE user SET host = '%' WHERE user = 'root'; #允许远程访问

#刷新cache中配置 刷新权限
flush privileges; 
quit;

# 阿里云服务器需要去云服务器安全组中开启3306端口

4. 配置uwsgi

sudo pip3 install uwsgi

在代码根目录下创建uwsgi.ini

[uwsgi]
socket = :8888
chdir = /home/coupon
module = coupon.wsgi
master = true
processes = 16
threads = 800
max-requests = 10000
vacuum = true
listen = 3000
buffer-size = 65535
pidfile = /home/coupon/uwsgi.pid
daemonize = /home/coupon/uwsgi.log
enable-threads = true

介绍
[uwsgi]#这个必写
uid = nginx #使用nginx用户和组
gid = nginx
chdir = /webser/www/demosite #指定项目目录,在配置多站点时,不要启用
module = demosite.wsgi #加载demosite/wsgi.py这个模块,在配置多站点时,不要启用
master = true #启动主进程。
processes = 2 #启动2个工作进程
listen = 120 #设置socket的监听队列大小(默认:100)
socket = /test/myapp.sock #指定socket文件,也可以指定为127.0.0.1:9000,这样就会监听到网络套接字
pidfile = /var/run/uwsgi.pid #指定pid文件
vacuum = true #当服务器退出的时候自动删除unix socket文件和pid文件。
enable-threads = true #允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程
buffer-size = 32768 #设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。
reload-mercy = 8 #设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
max-requests = 5000 #为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏
limit-as = 256 #通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
harakiri = 60 #一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)
stats=%(chdir)/uwsgi/uwsgi.status # status文件,可以查看uwsgi的运行状态
pidfile=%(chdir)/uwsgi/uwsgi.pid # pid文件,通过该文件可以控制uwsgi的重启和停止
daemonize=%(chdir)/uwsgi/uwsgi.log # 日志文件,通过该文件查看uwsgi的日志

或者创建uwsgi.xml(二选一)

<uwsgi>
    <socket>:8080</socket><!-- 与nginx通讯的端口-->
    <!--<http>:8000</http>-->
    <chdir>/(xxx项目的上级路径)/XXX</chdir>
    <module>YYY.wsgi</module><!--wsgi.py文件所在的位置-->
    <processes>4</processes> <!-- 进程数 -->
    <threads>2</threads> <!-- 线程数 -->
    <disable-logging>false</disable-logging>   <!--  true只记录uwsgi错误和内部消息,不记录常规请求信息,false反之-->
    <daemonize>/(uwsgi文件夹的上级路径)/uwsgi/uwsgi.log</daemonize><!--记录请求日志的文件所在的位置-->
    <!--<socket>/(uwsgi文件夹的上级路径)/uwsgi/uwsgi.sock</socket>--><!--与nginx工具通讯的所在位置-->
    <pidfile>/(uwsgi文件夹的上级路径)/uwsgi/uwsgi.pid</pidfile><!--对uwsgi进程管理的文件所在的位置-->
    <stats>/(uwsgi文件夹的上级路径)/uwsgi/uwsgi.status</stats><!--对uwsgi负载情况记录的文件所在的位置-->
    <master>true</master><!--开启主线程-->
    <vacuum>true</vacuum><!--true当服务器退出的时候自动清理环境,删除unix socket文件和pid文件,false反之-->
    <buffer-size>65535</buffer-size><!--uwsgi的最大缓存-->
</uwsgi>

5. 部署nginx

5.1 下载安装nginx

sudo apt-get install nginx

5.2 在/etc/nginx/目录下,找到nginx.conf文件,在http{}内部加入下面内容

server {
	    listen          80; 
	    server_name     192.168.188.129; # 你的服务器公用ip地址
	    charset         UTF-8;
	    access_log      off;
		
	    location / { 
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8888;
	    }   

	    location /static {
            alias /code/test/static/;
	    }   
	}

5.3 nginx.conf文件中注释两行代码

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

5.4 开启gzip(nginx.conf中http{}找到gzip)

# gizp压缩配置
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain qpplication/x-javascript text/css application/xml text/javascript application/javascript application/json;
    gzip_disable "MSIE [1-6]";
    gzip_vary on;

6. 启动服务器

uwsgi --ini uwsgi.ini  # 代码文件根目录下
service nginx start 或 service nginx reload

1. /etc/init.d/nginx start  启动nginx服务
2. /etc/init.d/nginx restart  重启nginx 服务
3. /etc/init.d/nginx stop  停止nginx 服务

针对uwsgi.pid文件
4. uwsgi -x uwsgi/uwsgi.xml             # uwsgi.xml方式启动
5. uwsgi --ini uwsgi/uwsgi.ini			 # uwsgi.ini方式启动
6. uwsgi --reload uwsgi/uwsgi.pid          # 重启
7. uwsgi --stop uwsgi/uwsgi.pid            # 关闭
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值