使用nginx和uwsgi部署django项目
如果是在linux服务器上,首先需要在安全组规则中添加以下端口对外开放,在虚拟机上不需要添加:
8000/8000
9000/9000
80/80
3306/3306
1、安装数据库,数据库可以使用mysql或者mariadb。
(1)mysql数据库
yum install -y mysql-server mysql
yum install -y mysql-devel
service mysqld start #启动mysql服务
(2)mariadb数据库
yum install -y mariadb-server
systemctl start mariadb.service
systemctl enable mariadb.service
修改MySQL密码
/usr/bin/mysqladmin -u root password 'root'
链接MySQL并创建数据库
mysql -uroot -p
CREATE DATABASE mall;
配置数据库(创建不限主机的root账户)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
修改密码
update user set password=password('123456') where user='root';
刷新权限
flush privileges;
刷新权限之后如果无法远程连接数据库,则需要关闭linux的防火墙,
查看防火墙状态:systemctl status firewalld.service
关闭防火墙:systemctl stop firewalld.service
2、源码安装Python3.5
yum install openssl-devel -y
下载Python源码包
wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz
解压
tar zxvf Python-3.5.6.tgz
cd Python-3.5.6
配置并编译安装
./configure --prefix=/usr/local/python3
make && make install
创建链接到bin目录
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
安装上传下载工具
yum install -y lrzsz
安装解压工具
yum install -y unzip
创建虚拟环境
安装虚拟环境
yum install -y python-virtualenv
cd ~
mkdir .virtualenv
cd .virtualenv
virtualenv django -p /usr/bin/python3
启动虚拟环境
cd django/
source bin/activate # 启动虚拟环境
导出项目依赖包
在本地项目执行 pip freeze > requirements.txt
更新pip
pip install --upgrade pip
将本地requirements.txt上传至服务器,并执行
pip install -r requirements.txt
创建项目目录
mkdir workspace
1、复制本地项目文件,
2、删除迁移文件
3、修改settions.py 关闭调试模式,
将项目上传到服务器的workspace中。
迁移结构到数据库
python manage.py makemigrations
python manage.py migrate
启动开发服务器,测试是否成功
python manage.py runserver 0.0.0.0:8000
此时使用浏览器访问服务器8000端口,即可成功访问网站。
本地连接mysql
导入数据
安装uWSGI
进入虚拟环境
pip install uwsgi
cd /opt
mkdir script
cd script
vi uwsgi.ini
加入以下内容
[uwsgi]
chdir=/root/workspace/django_project/My_Project#项目根目录
module=My_Project.wsgi:application #指定uwsgi.py文件所在位置
socket=/opt/script/uwsgi.sock 指定sock文件路径
workers=5 #进程个数
pidfile=/opt/script/uwsgi.pid
http=127.0.0.1:8000 #指定的ip端口
static-map=/static=/root/workspace/django_project/My_Project/static #指定静态文件
uid=root #用户
gid=root #组
master=true #启用主进程
vacuum=true #启动一出unix socket和pid文件当服务停止的时候
enable-threads=true #启用线程
thunder-lock=true #序列化接受的内容
harakiri=30 #设置中断时间
post-buffering=4096 #设置缓冲
daemonize=/opt/script/uwsgi.log #设置日志目录
启动
uwsgi --ini uwsgi.ini
使用浏览器访问
安装 nginx
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure \
make && make install
cd /usr/local/nginx/sbin
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
启动nginx:
nginx
配置nginx:
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vi nginx.conf
输入以下内容:
listen 80; #监听端口
server_name My_Project; #服务名字
charset utf-8; #服务器编码
access_log logs/host.access.log main; #访问日志路径,注意:可能没有,没有时候需要先创建。
gzip_types #压缩格式
error_log /var/log/nginx/error.log error; #错误日志,可能没有,需要先创建
location / {
include uwsgi_params; #nginx加载uwsgi模块
uwsgi_connect_timeout 30; #链接超时时间
uwsgi_pass unix:/opt/script/uwsgi.sock; #nginx对应的uwsgi socket文件
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html;
location = /static/ {
alias /root/workspace/django_project/My_Project/static; #静态文件路径
index index.html index.html; #首页
}
静态文件配置:
创建error.log日志文件
停止nginx和uwsgi。然后重新启动。
pkill -9 uwsgi
pkill -9 nginx
启动uwsgi和nginx
uwsgi --ini uwsgi.ini
nginx
另一种启动方式,后台启动,不需要部署:
nohup python3 manage.py runserver 0.0.0.0:80> ./log/log.txt 2>&1 &