# 拷贝sources.list:
sudo cp /etc/apt/sources.list /etc/apt/sources1.list
# 删除配置文件:
sudo rm /etc/apt/sources.list
# 打开配置文件:
sudo vi /etc/apt/sources.list
# 按i进入插入模式
# 然后粘贴aliyun的源
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
# 然后按esc退出插入模式
# 按住shift+zz退出+保存
# 更新源:
sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install -y python3.6
# 这个时候使用pip -V查询,会发现pip还是python3.5的pip,如何指向python3.6呢,首先是删除pip
apt-get remove python3-pip
apt-get -y autoremove 自动删除多余文件
# 删除原始pip,重装pip
# 然后再安装pip
apt-get install -y python3-pip
# 发现pip还是指向 python3.5的,这个时候再用python3.6指定升级一下pip:
python3.6 -m pip install --upgrade pip
# 就指向python3.6了。
#设置Python3.6的优先级:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 200
通过filezilla软件直接拖拽,在根目录下创建新目录www
本地项目是建在python虚拟环境下的,所以在阿里云上也要先建下虚拟环境。安装如下步骤如下:
sudo pip install virtualenv
sudo pip install virtualenvwrapper #安装虚拟环境管理工具
mkdir .virtualenvs
# 用vi打开.bashrc ,一般就在www文件夹下
sudo vi /.bashrc
# 在末尾添加两行代码
export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh
# 使配置文件生效
source /www/.bashrc
# 注意:开启虚拟环境时,一定要使配置文件生效
mkvirtualenv -p /usr/bin/python3.6 XX #XX是虚拟环境的名字,创建python3.6的虚拟环境
# 其他命令:
workon xx #进入虚拟环境XX
deactivate #退出虚拟环境
pip freeze > plist.txt
workon test #进入虚拟环境test
# cd到plist.txt所在目录
pip install -r plist.txt #安装txt文件上的包
# 安装Mysql:输入以下命令,安装过程会设置密码,设置成和原来本地一样的,就不用在setting中修改了。
sudo apt-get update
sudo apt-get install mysql-server
sudo apt-get install mysql-client
# 创建数据库:先登录数据库, 然后创建数据库v1,数据库名字也创建成和原来本地一样的,我的叫v1。
create database v1;
# 数据的迁移:把本地数据库中的数据复制到阿里云上的数据库中。先在本地生成备份文件,v1是要备份的数据库,v1.sql是生成的备份文件。然后用filezilla把v1.sql文件上传到阿里云。
mysqldump -u root -p v1 >v1.sql
# 数据还原:阿里云终端 cd到v1.sql所在目录,输入以下命令
mysql -u root -p v1.sql
mysql配置:找到mysqld.cnf文件注释掉bind-address这一行
/etc/mysql/mysql.conf.d/mysqld.cnf #配置文件路径
#bind-address = 127.0.0.1 #注释掉这一行
DEBUG = False
ALLOW_HOSTS=["115.29.150.206", "0.0.0.0:8001", "127.0.0.1"] #115.29.150.206为阿里云的公网IP
# 0.0.0.0:8001 表示运行django程序的IP、端口,端口可以使任意,只要端口没有被占用
# DEBUG 为False 静态文件不加载,应该为True
在安装前先了解下这几个是什么东西:WSGI、uWSGI、nginx。
WSGI:PythonWeb服务器网关接口(Python Web Server Gateway Interface),这是一种协议规范,用于规范web server(比如uWSGI)和web application(Flask、Django等)之间的通信方式。这种协议其实是将我们和更加底层的HTTP、TCP等协议分隔开来,使我们在开发的时候可以不用自己去实现这些协议的处理,只关注于更高层次的逻辑处理,实现面向对象的编程。
uWSGI:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。它本身可以作为一个服务器单独使用,但是也可以和nginx组合使用。一般Django部署都是用的nginx+uWSGI,可以理解为这种组合性能更优。
nginx:这是一个高性能的web服务器/反向代理,类似Apache。什么叫反向代理,客户端通过一个代理去访问服务器,这样的代理叫正向代理;同样的服务器前加一个代理和客户端通信,这样的代理叫反向代理。nginx就是用来放在uWSGI前做反向代理。
注意:我们在本地开发的时候没有安装过以上服务器,但是也可以python manage.py runserver运行项目,那是因为Django等框架自带了WSGI服务器,性能不强,可以用于调试。
sudo apt-get update
sudo apt-get install nginx
安装成功后,用浏览器访问你的阿里云IP地址,可以看到以下提示 :
service nginx start #启动
service nginx stop #停止
service nginx reload #重启
打开配置文件default,路径/etc/nginx/sites-available/default,设置以下内容。一个是server_name后面换成你的阿里云公网IP,有的文章说不换也行。关键是下面2个location,第一个location是设置的和uWSGI的关联。第二个location /static是设置的静态文件的路径。如果你的项目还有media文件夹,那还要加一个location /media,把路径设置上。注意:location 和alias后面有空格。
server_name 115.29.150.206;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /www/myweb/static;
}
上面nginx配置静态文件有一个问题,就是上面的目录/www/myweb/static只是我们自己的静态文件的目录,你登录admin后发现admin页面的样式都丢失了。因为django自带的admin的静态文件路径没有导入。所以就需要新建一个文件夹,我的是/www/myweb/static,然后执行命令把整个项目的所有静态文件都收集到这个目录下,再修改下上面的配置。
第一步:新建文件夹 /www/myweb/static(可以省略不写)
第二步:修改setting.py文件,增加STATIC_ROOT
STATIC_ROOT='os.path.join(BASE_DIR,'static')' #添加收集静态文件的目录
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
python manage.py collectstatic
location /static {
alias /www/myweb/static;
}
apt-get install build-essential python
apt-get install python3.6-dev
pip install uwsgi
[uwsgi]
chdir = /www/myweb
module = myweb.wsgi:application
socket = 127.0.0.1:8000
master = true
daemonize = /www/myweb/run.log
disable-logging = true
wsgi-file = /www/myweb/myweb/wsgi.py
pidfile=/www/myweb/uwsgi.pid
chdir是django项目所在目录,socket后面的地址是和上面nginx配置文件中的地址uwsgi_pass 127.0.0.1:8000对应的,规定nginx和uWSGI之间的通信端口。daemonize就是日志文件的路径。disable-logging = true 表示不记录正常信息,只记录错误信息。wsgi-file是你django项目根目录下项目同名目录中有一个wsgi.py文件的路径。pidfile是uwsgi.pid文件的路径,这个文件是uWSGI运行后自动生成的,里面记录了uWSGI的进程号,可以用来重启uWSGI。但是我的uwsgi.pid文件记录的进程号老是不对,用不了。
uWSGI基本命令:
启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
python manage.py runserver 0.0.0.0:8001