基于Ubuntu16.04 + Python3 + nginx + mysql + Django
从windows传文件到服务器使用了XFTP
准备:阿里云的服务器,自己电脑上可以跑的Django项目,XFTP,Xshell
安装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;
show tables;
还原数据库(这里是我导入已经写好的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;
安装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
访问公网ip+端口
一开始无法访问,因为服务器端口没有开启
添加
访问(公网ip):8001
说明uwsgi可以使用
创建module filmticket.wsgi与django进行交互
安装Nginx(由于uwsgi无法处理动态数据,使用nginx转发到uwsgi)
apt-get install nginx
配置uginx,与uwsgi联系起来
cd /etc/nginx
nginx.conf是主要配置文件,一般不会主要修改
进入网站可用配置
cd sites-available
进入 sites-enabled,里面有默认软链接default,这个default是默认页面可以访问
cd sites-enabled
删除default
cd /sites-enabled
rm default
接着进入
cd sites-available
新建自己网站的配置
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
创建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协议
接着进入
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