部署Django+Nginx+Mysql到阿里云服务器

基于Ubuntu16.04 + Python3 + nginx + mysql + Django

从windows传文件到服务器使用了XFTP

准备:阿里云的服务器,自己电脑上可以跑的Django项目,XFTP,Xshell


部署Django+Nginx+Mysql到阿里云服务器_第1张图片
XFTP

安装python3.6

apt-get update

apt-get install software-properties-common

add-apt-repository ppa:jonathonf/python-3.6

apt-get update

apt-install python3.6

创建软链接

cd /usr/bin

rm python

ln -s python3.6 python

rm python3

ln -s python3.6 python3

Ubuntu默认Python为2.7,所以安装Python包时安装的为py2的包。

利用alternatives机制更改py3为默认。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

安装pip3.6

apt-get install python3-pip

升级pip

pip3 install --upgrade pip

删除mysql:

sudo apt-get remove mysql-*

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

安装Mysql

cd /home

wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb

ls

dpkg - i 上面列出的安装包

apt-get install mysql-server

mysql -u root -p

show databases;

创建用户专属数据库

创建数据库

CREATE DATABASE 你的数据库名称 DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

脚本已经写好,使用XFTP上传到home目录下

cd /home

sudo mysql -u root -p databasename

创建用户:

CREATE USER '你的用户名'@'localhost' IDENTIFIED BY '你的密码';

mysql> CREATE USER 'user1'@'localhost' IDENTIFIED BY 'qweasdzxc';

再把刚刚创建的数据库的管理权限给予刚刚创建的MySQL用户:

GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'localhost';

mysql> GRANT ALL PRIVILEGES ON movie.* TO 'user1'@'localhost';

最后,刷新权限:

FLUSH PRIVILEGES;

验证:

mysql -u user1 -p movie

show tables;

部署Django+Nginx+Mysql到阿里云服务器_第2张图片


show tables;

部署Django+Nginx+Mysql到阿里云服务器_第3张图片


还原数据库(这里是我导入已经写好的movie.sql脚本,使用XFTP上传到服务器);进入家目录(home),输入下面命令:

cd /home

sudo mysql -u user1(创建的用户名) -p movie(数据库名)

sudo mysql -u user1 -p movie

mysql -u user1 -p movie

show tables;

部署Django+Nginx+Mysql到阿里云服务器_第4张图片


安装Mysqlclient

cd /home

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_8.0.13-1ubuntu16.04_amd64.deb

dpkg -i libmysqlclient-dev_8.0.13-1ubuntu16.04_amd64.deb

apt-get update

apt-get install libmysqlclient-dev

apt-get install python3.6-dev

安装uwsgi

pip3(pip) install uwsgi

测试uwsgi

进入官网

https://www.djangoproject.com/

https://uwsgi.readthedocs.io/en/latest/WSGIquickstart.html

创建test.py

cd /home

vim test.py


test.py

start_response('200 OK',[('Content-Type','text/html')])

return[b"Hello World"]

用http开了端口8001,端口可以随便写

uwsgi --http :8001 --wsgi-file test.py


部署Django+Nginx+Mysql到阿里云服务器_第5张图片


访问公网ip+端口

一开始无法访问,因为服务器端口没有开启

部署Django+Nginx+Mysql到阿里云服务器_第6张图片

添加


访问(公网ip):8001


部署Django+Nginx+Mysql到阿里云服务器_第7张图片

说明uwsgi可以使用


部署Django+Nginx+Mysql到阿里云服务器_第8张图片

创建module filmticket.wsgi与django进行交互

安装Nginx(由于uwsgi无法处理动态数据,使用nginx转发到uwsgi)

apt-get install nginx

配置uginx,与uwsgi联系起来

cd /etc/nginx


部署Django+Nginx+Mysql到阿里云服务器_第9张图片


nginx.conf是主要配置文件,一般不会主要修改

进入网站可用配置

cd sites-available

进入 sites-enabled,里面有默认软链接default,这个default是默认页面可以访问

cd sites-enabled

部署Django+Nginx+Mysql到阿里云服务器_第10张图片

删除default

cd /sites-enabled

rm default

接着进入

cd sites-available


部署Django+Nginx+Mysql到阿里云服务器_第11张图片

新建自己网站的配置

vim filmticket.conf

server{

    listen 80;一般网站直接输入ip是使用80端口

    server_name filmticket;自己的项目名字

    charset utf-8;

    client_max_body_size 75M;

    指定静态文件

    location /static {

        alias /home/filmticket/static;这里填写自己的路径

    }

    location /media {

        alias /home/filmticket/media;

    }

    处理动态文件,转发给uwsgi

    location / {

        uwsgi_pass 127.0.0.1:8001;这个转发不是通过HTTP协议,而是通过socket协议进行处理的

        include /etc/nginx/uwsgi_params;

    }

}

基本配置好,但是uwsgi还没有准备好接收

接着配置uwsgi,用ni文件进行配置而不是通过命令行进行启动

cd /home

创建一个文件夹进行管理

mkdir filmticket_uwsgi

ls

cd filmticket_uwsgi


部署Django+Nginx+Mysql到阿里云服务器_第12张图片

创建ini文件

https://uwsgi.readthedocs.io/en/latest/WSGIquickstart.html

官方文档

vim filmticket.ini

[uwsgi]

chdir = /home/foobar/myproject/python (django程序所在目录)

home = /home/mysite_env(虚拟环境目录,没有就不用写)

module = mysite.wsgi:application

master = True 启动主程序

processes = 4 使用的进程数,用四个进程处理请求

max-requests = 5000 最大请求数,请求过5000进程就会进行重启,以防止内存泄漏

harakiri = 60 请求超时时间,请求超过一定时间就把请求关闭,这里设置60s

socket = 127.0.0.1:8001 用8001端口监听,使用socket协议

uid = 1000

gid = 2000

pidfile = /home/filmticket_uwsgi/master.pid 对主进程进行关闭重启操作

daemonize = /home/filmticket_uwsgi/filmticket.log 后台运行

vacuum  = True  服务器关闭或服务器退出会自动把pidfile回收

[uwsgi]

chdir = /home/filmticket

module = filmticket.wsgi:application

master = True

processes = 4

max-requests = 5000

harakiri = 60

socket = 127.0.0.1:8001

uid = 1000

gid = 2000

pidfile = /home/filmticket_uwsgi/master.pid

daemonize = /home/filmticket_uwsgi/filmticket.log

vacuum  = True  

接着启动uwsgi,通过ini文件启动(指向刚刚设置的ini文件)

uwsgi --ini /home/filmticket_uwsgi/filmticket.ini

查看进程 

ps -aux | grep uwsgi

显示只有一个,说明没有启动,因为刚刚设置了一个主进程和四个子进程进行使用

进入filmticket.ini查看错误,修改后

显示多个,表示ini启动成功,使用socket协议

部署Django+Nginx+Mysql到阿里云服务器_第13张图片

接着进入 

cd /etc/nginx/

ls


将刚刚在sites-available创建的弄一个软连接放到sites-enabled

ln -s /etc/nginx/sites-available/filmticket.conf /etc/nginx/sites-enabled/filmticket.conf

进入sites-enabled查看是否成功

使用nginx -t 查看是否有问题

ok.success没有问题

没有问题就进行重启

service nginx restart

到这里就配置完成,访问自己的公网ip,如果一开始找不到就加个/index后缀试试

重启命令

service nginx restart

uwsgi --reload /home/filmticket_uwsgi/master.pid

你可能感兴趣的:(部署Django+Nginx+Mysql到阿里云服务器)