此文用于项目开发完成后,向服务器迁移部署用,
仅供参考,生产环境请根据情况更改
1.安装Nginx
edward@machine:~$ sudo apt-get install nginx
edward@machine:~$ ps aux | grep nginx
详情请参考Uwsgi文档
2.安装配置Mysql
安装过程中需要输入管理mysql用的root密码
edward@machine:~$ sudo apt-get install mysql-server
edward@machine:~$ ps aux | grep mysql
更改mysql的配置文件,并重启mysql服务
edward@machine:~$ sudo vim /etc/mysql/my.cnf
bind-address = 0.0.0.0
edward@machine:~$ sudo service mysql restart
添加mysql访问权限
edward@machine:~$ mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Abc,123.' WITH GRANT OPTION;
FLUSH PRIVILEGES;
将数据导入数据库
可利用Navicat建立与数据库的连接,右键点击新建链接,选择数据传输
3.virualenv的安装与部署
以下步骤尽量在一个终端下完成,切换终端有可能失败
edward@machine:~$ sudo pip install virtualenv
edward@machine:~$ sudo pip install virtualenvwrapper
edward@machine:~$ vim .bashrc
(在最后一行追加)
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
立即让修改后的文件生效
edward@machine:~$ source .bashrc
以上步骤执行完成后,可在任意目录下使用workon命令,
mkvirtualenv命令创建的虚拟环境在$HOME/.virtualenvs下
为项目创建虚拟目录
edward@machine:~$ mkvirtualenv 虚拟目录名
进入虚拟目录
edward@machine:~$ workon 虚拟目录名
退出虚拟目录
(虚拟目录) edward@machine:~$ deactivate
edward@machine:~$
4.安装开发包
4.1首先在开发环境中将开发包导出
可在开发环境中导出已安装的项目用开发包列表,方式有二:
(以下例子的开发环境为windows)
(1)在开发环境下,利用pip freeze命令导出项目安装的所有开发包
查看项目安装的所有开发包
(虚拟目录) C:\Users\Administrator> pip list
导出开发包
(虚拟目录) C:\Users\Administrator> pip freeze> packages.txt
(2)在开发环境下,利用开发工具找到项目所用的开发包
以pycharm为例,打开工具,在上方导航栏中 file>settings,在弹出的窗口中选择project Interpreter,会列出所有的开发包
4.2在服务器中安装开发包
将导出的packages.txt文件传入服务器内
根据**packages.txt**文件为服务器安装开发包,构建项目环境
(虚拟目录) edward@machine:~/$ pip install -r packages.txt
4.3可能遇到的问题
例1
EnvironmentError: mysql_config not found
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-gXwqlz/MySQL-python/
解决方法
(虚拟目录) edward@machine:~/$ sudo apt-get install libmysqlclient-dev
例2
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
解决方法
(虚拟目录) edward@machine:~/$ sudo apt-get install python-dev
4.4 安装后查看
(虚拟目录) edward@machine:~/$ pip list
5.Uwsgi安装
(虚拟目录) edward@machine:~/$ pip install uwsgi
测试uwsgi
(虚拟目录) edward@machine:~/项目根目录$ uwsgi --http :8000 --module 项目名.wsgi
在浏览器中查看网站是否可以运行
6.配置Nginx
edward@machine:~/项目根目录$ mkdir conf
edward@machine:~/项目根目录$ vim uc_nginx.conf
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name 192.168.52.142 (可继续添加网站的域名) ; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias 项目的根目录/media; # 指向django的media目录
}
location /static {
alias 项目的根目录/static; # 指向django的static目录
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installe /home/edward/mnt
}
}
将编辑好的配置文件拷贝或创建软连接至/etc/nginx/conf.d/目录下
edward@machine:项目的根目录$ sudo ln -s uc_nginx.conf /etc/nginx/conf.d/
[sudo] password for edward:
edward@machine:项目的根目录$ ll -a /etc/nginx/conf.d/
总用量 8
drwxr-xr-x 2 root root 4096 2月 26 11:37 ./
drwxr-xr-x 5 root root 4096 2月 23 11:23 ../
lrwxrwxrwx 1 root root 13 2月 26 11:37 uc_nginx.conf -> uc_nginx.conf
7.拉取Django所有需要的静态文件到同一个目录
在Django的setting文件中,添加下面一行内容:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
记得将setting文件中STATICFILES_DIRS注释掉
运行下方命令,会自动拷贝静态文件至配置好的路径下
(虚拟目录)edward@machine:~$ python manage.py collectstatic
8.利用配置文件开启Uwsgi
edward@machine:项目的根目录$mkdir conf
新建并编辑Uwsgi配置文件
edward@machine:项目的根目录/conf$ vim uwsgi.ini
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir =项目的根目录
# Django's wsgi file
module = 项目名.wsgi
# the virtualenv (full path)
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
virtualenv = /home/edward/.virtualenvs/虚拟目录名
利用配置文件启动Uwsgi
(虚拟目录) edward@machine:项目根目录/conf$ uwsgi -i uwsgi.ini
启动浏览器访问测试
提示
后台启动uwsgi
(虚拟目录) edward@machine:项目根目录/conf$ uwsgi -i uwsgi.ini &
重启uwsgi
(虚拟目录) edward@machine:项目根目录/conf$ pkill -f uwsgi
将调试模式改为上线模式
在Django的setting文件中变更如下代码
DEBUG = True => DEBUG = False
重启后再测试
edward@machine:项目根目录$ pkill -f uwsgi
关闭后台执行的uwsgi
edward@machine:项目根目录$ fg
再用Ctrl+c即可关闭uwsgi
可能会遇到的问题1:
bad request (400)
当django的settings.py变量DEBUG=False后,访问网站报错bad request (400)
原因:
ALLOWED_HOSTS=[]
可能会遇到的问题2:
internal server error
当django的settings.py变量DEBUG=False后,访问网站报错internal
server error
原因:
ALLOWED_HOSTS=[*]
正确设置方法:
ALLOWED_HOSTS=["*"]
我是参考链接