ubuntu18+uwsgi+nginx部署django项目

更新系统软件源

  sudo apt-get update

pip3安装

  sudo apt install python3-pip

安装virtualenvwrapper

  pip3 install virtualenvwrapper

修改.bashrc,最后面添加以下代码:

  sudo vim ~/.bashrc

  export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

  source /usr/local/bin/virtualenvwrapper.sh

 

如果报错如下提示:

 

  /usr/local/bin/virtualenvwrapper.sh: No such file or directory

 

则说明这个文件不存在,可以使用find命令来查找正确的位置:

 

 find / -name "virtualenvwrapper.sh"

 

重新加载配置

  source ~/.bashrc

 

创建虚拟环境

  mkvirtualenv 虚拟环境名

进入虚拟环境

  workon 虚拟环境名

退出虚拟环境

  deactivate

 

安装mysql

  sudo apt-get install mysql-server

 

安装mysql驱动
  sudo apt-get install libmysqlclient-dev

 

设置mysql允许远程访问,方便使用navicat导入数据.首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf

  sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  注释掉bind-address = 127.0.0.1: #允许远程连接

 

进入mysql,修改root密码

  mysql>alter user 'root'@'localhost' identified with mysql_native_password by '123456';

 

 

 

创建普通用户

  mysql>create user 'username'@'%' IDENTIFIED BY 'password';

 

给普通用户赋权

  mysql>grant all on *.* to username@'%';

 

刷新

  mysql>flush privileges;

 

退出

  mysql>exit

 

重启mysql,如果远程连接失败报2003可能是服务器没添加安全组

  service mysql restart

 

安装redis

  sudo apt-get install redis-server

 

如果安装不了报这个错的:

 

Job for redis-server.service failed because a timeout was exceeded.
See "systemctl status redis-server.service" and "journalctl -xe" for details.
invoke-rc.d: initscript redis-server, action "start" failed.
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; disabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: timeout) since Fri 2019-11-22 15:07:07 CST; 10ms ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)

Nov 22 15:07:07 haha systemd[1]: redis-server.service: Start operation timed out. Terminating.
Nov 22 15:07:07 haha systemd[1]: redis-server.service: Failed with result 'timeout'.
Nov 22 15:07:07 haha systemd[1]: Failed to start Advanced key-value store.
dpkg: error processing package redis-server (--configure):
 installed redis-server package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 redis-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

 

1.编辑/etc/redis/redis.conf,将bind 127.0.0.1后面的::1去掉

2.执行命令:

    cd /var/lib/dpkg

    sudo mv info info.bak

    sudo mkdir info

3.重新安装redis-server

 

 ---------------------redis配置根据自己需求考虑是否配置-----------------------

修改redis配置

  使用redis的访问账号

  sudo vi /etc/redis/redis.conf

  #取消注释requirepass

  requirepass 密码

 

允许远程访问

  #注释bind

  # bind 127.0.0.1

重启redis

  sudo /etc/init.d/redis-server restart

 

桌面创建新目录Project

  mkdir Project

 

在项目中创建项目依赖包文件

  pip freeze > package.txt

 

在本地上传项目到服务器Project,或者进入Project使用git克隆

  scp -r 本地项目目录  root@服务器IP:/root/Project

  git clone 项目地址

 

安装依赖包

  pip install -r package.txt

 

进入项目修改settings文件

  将mysql账号密码修改成服务器的

  修改ALLOWED_HOSTS = ['*']

 

# 测试之前先将项目用到数据导入数据库,不然肯定报错

测试能否正常运行,然后浏览器访问服务器地址

  python3 manage.py runserver 0.0.0.0:80

 

安装uwsgi

  sudo pip3 install uwsgi

 

在manage.py同级目录下创建uwsgi.ini文件

  vim uwsgi.ini

 

编辑内容如下

[uwsgi]
#如果单独使用uwsgi来部署Django项目时,就用这一行。
http=0.0.0.0:80
#如果使用nginx+uwsgi来部署Django项目时,就用这行。
# socket=127.0.0.1:8080 # 和nginx连接的端口
#你项目的完整路径。
chdir=/root/Project/MyProject              -----------修改
#给socket文件赋权限,这里不用管。
# chmod-socket=664 
#启用主线程。
master=true
processes=4
threads=2
#加载静态资源
static-map=/static=/home/Project/static ----------------修改
# 日志文件
logto=uwsgi.log
# 进程id
pidfile=uwsgi.pid
# 修改project为你的项目名
module=project.wsgi:application ------------修改
HOME=/root/.virtualenvs/django_env/bin/      ----------------修改
PYTHON=
/root/.virtualenvs/django_env/bin/python ---------------修改成自己Python的路径

 

保存退出后启动uwsgi,如果报错请查看日志文件

  uwsgi --ini uwsgi.ini 

如果启动uwsgi访问没有问题再继续配置nginx,不然出错不好找。

 

安装nginx

  sudo apt-get install nginx

 

进入/etc/nginx/备份nginx.conf

  sudo cp nginx.conf nginx.conf.bak

删除nginx.conf,重新创建nginx.conf,内容如下:

  

events {
    worker_connections  1024;   # 不用管
}

http{
include /etc/nginx/mime.types; server { listen
80; #这个端口用来监听浏览器的请求。 server_name 0.0.0.0; # 不用管,如果有域名可以填上域名。 charset UTF-8; #日志文件。如果nginx出现问题,都可以通过日志文件来查错。 access_log /var/log/nginx/MyProject_access.log; error_log /var/log/nginx/MyProject_error.log; client_max_body_size 75M; location / { include uwsgi_params; # 使用uwsgi服务器。 uwsgi_pass 127.0.0.1:8080; ---------修改成和uwsgi的socket一样 # 把浏览器发来的请求转发到8080端口,而uwsgi也正在监听8080端口,所以就实现了nginx与uwsgi的通信。 uwsgi_read_timeout 30; #链接超时时间 } location /static/{ # 处理静态文件,处理链接是以/static/开头的请求。 alias /root/DjangoProject/static/; # 项目静态文件的绝对路径。 ---------------修改项目静态文件路径 } } }

 


最后

修改uwsgi.ini文件,把http=0.0.0.0:80注释掉,使用socket=127.0.0.1:8080

输入:uwsgi -d --ini uwsgi.ini    # 启动uwsgi服务器。-d表示在后台运行。这样就不会占用当前窗口了。

输入:/etc/init.d/nginx start     # 启动nginx

浏览器访问

重启命令:

  uwsgi --reload uwsgi.ini

  nginx -s reload

 

查看端口:netstat -ntulp |grep 80

查看进程:ps -aux|grep uwsgi

杀死进程:kill -9 80

 

 

 

 
 
 
posted @ 2019-11-21 19:31  Jay's  阅读(916)  评论(0编辑  收藏  举报