基本同配置flask相同
一.安装虚拟环境
为什么要创建虚拟环境:为了避免包冲突,等学会安装,使用操作了,需要自行下载你项目需要的python包
1.安装
sudo pip install virtualenv
sudo pip install virtualenvwrapper
失败尝试下面:
sudo pip install pbr -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip install --no-deps stevedore -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple
2.配置
进入:
cd ~
ls -al (查看一个隐藏文件名字)
vim .bashrc
添加:
# 在末尾添加该代码,不会使用vim自己查一下使用方法
export WORKON_HOME=$HOME/.virtualenvs
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
初始化:
source ~/.bashrc
虚拟环境基础操作:
创建虚拟环境:
mkvirtualenv --python=/usr/bin/python3 flask_env
# 上面创建的文件夹在cd ~/.virtualenvs
进入虚拟环境:
workon 虚拟环境名字
退出虚拟环境:
deactivate
查看当前目录的python包:
pip list
二.安装uwsgi
为什么安装它:nginx是对外服务器,uwsgi是对内服务器;nginx负责筛选文件,向用户返回静态文件,然后把动态路由加粗样式提交给内服务器uwsgi来与flask交互处理。
1. 安装
pip install uwsgi
2.配置
创建:
# 在项目文件下创建文件 uwsgi.ini
touch uwsgi.ini
vim uwsgi.ini
写入:
参数
- processes:进程里面包含着线程,进程通常设置数同CPU核数一样,通常通过
cat /proc/cpuinfo | grep '^processor' | wc -l
查看 - threads:通常和内存数量有关,先用总内存(8G)/总CPU核数(2核),如何将获得的值(4G)/2,比如最终结果为2G,一个线程占1M,但是实际中肯定比1M要大,所以threads的范围为1-2048,基本不可能取到2048,可以将其值/4(512),从此开始,进行压力测试,来调整threads的大小(特别注意是如果服务器是经常进行CPU操作的,线程要适当减少,以避免过渡争抢CPU)
- py-autoreload:只能在开发模式下使用,生产环境会严重影响性能
[uwsgi]
master = true
socket=:8003# 该位置与nginx通讯该地址与下面说的nginx地址需要一致
chdir = /srv/项目文件
# wsgi-file=/srv/dingtalkDjango/dingtalkDjango/wsgi.py 避坑,网上说的写这个,但是根本运行不了
module = 项目文件.wsgi:application # 关键点之一
callable=dingtalkll # 自定义
processes=1 #进程
threads=10 # 线程
buffer-size = 65536
vacuum=true
pidfile =/srv/Django/uwsgi.pid #开启的进程号放置位置(自定义)
stats=/srv/Django/uwsgi.status# 开启与否状态存放位置(自定义)
daemonize =/srv/Django/uwsgi.log# 日志存放位置(自定义)
virtualenv=/root/.virtualenvs/dingtalkDjango_env #虚拟环境地址
py-autoreload=1#python内容更新,自动生效,开发环境中使用,实际环境中会加大消耗
3.使用
注意:使用前自行先进入虚拟环境
查看进程:ps -aux
启动:uwsgi --ini uwsgi.ini
关闭:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
注意:当你发现无法关闭时,多半是进程开启混乱和uwsgi.pid号错乱,此时可以通过重启服务器(强制结束进程,手动很难关闭),之后再重新开启恢复正常
4.uwsgi开机自启
适用于:debian(ubuntu也可试试)
测试:systemctl status rc-local.service
结果:
root@npi:/lib/systemd/system# systemctl status rc-local.service
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset:
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
Active: inactive (dead)
Docs: man:systemd-rc-local-generator(8)
# 结果如此的话只需要配置/etc/rc.local文件即可
配置/etc/rc.local并在里面写入开机要执行的命令:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#要执行的命令
# /usr/local/bin/uwsgi需要用which uwsgi查看
/usr/local/bin/uwsgi --ini /srv/uwsgi.ini
exit 0
赋予权限:chmod 755 /etc/rc.local
最后:systemctl start rc-local.service
测试生效与否:reboot
5.uwsgi定期删除分割日志
#!/bin/bash
# 先将日志复制备份
cp /srv/uwsgi.log /srv/uwsgi_$(date +\%Y\%m\%d).log
# 清空uwsgi配置文件里面要写入的日志文件
cat /dev/null > /srv/uwsgi.log
# 删除7天前调整过的uwsgi_*.log这种格式的文件
find /srv/ -name "uwsgi_*.log" -mtime +7 -exec rm {} \;
定时执行:
crontab -e
# 每日0点10分执行
10 0 * * * /bin/bash /home/root/uwsgi_log_cut.sh
三.nginx
1.安装
内容:apt install nginx
测试:访问自己服务器的ip地址,看看是否成功
2.基础配置
打开:
vim /etc/nginx/sites-enabled/default
删除原文件写入:
server {
listen 80;
server_name wwww.jk.cn;
#动态请求
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
}
#静态请求
location /static {
alias /srv/flask/static;
}
}
3.https配置
注意:3和4可以最后再配置
server {
listen 443;
server_name wwww.jk.cn;
# ssl配置
ssl on;
ssl_certificate /srv/fla/wwww.jk.cn_public.crt;
ssl_certificate_key /srv/faaalask/ssl/6.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
}
4.强制跳转
解释:这里跳转是http://www.jk.cn
和http://jk.cn
和https://jk.cn
这几种情况跳转到https://www.jk.cn
server {
# 80跳转
listen 80;
server_name jk.cn,www.jk.com;
return 301 https://www.jk.cn$request_uri;
}
server {
listen 443 ssl;
server_name wwww.jk.cn;
# ssl配置
ssl on;
ssl_certificate /srv/fla/wwww.jk.cn_public.crt;
ssl_certificate_key /srv/faaalask/ssl/6.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
}
server {
# 443 域名格式跳转
listen 443 ssl;
server_name jk.cn;
return 301 https://www.jk.cn$request_uri;
}