马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 李金龙 于 2017-7-13 09:06 编辑
一把辛酸泪洒在了屏幕上,从开始部署,到部署成功差不多用了三天,其中发现各种bug,各种大毛病,小毛病,中毛病。。神经病都经历了不少,所以我把我这几天的内容全部整理下来给到你,希望你可以节省下这个时间。
部署环境要求
1、Ubutun 16_04_02 64位
2、Python2、7 和Python3.5(系统自带了)
3、Mysql = 5.7.18
4、Django==1.10.6
5、PyMySQL==0.7.11
6、uWSGI==2.0.15
为了降低出现bug的机会,请尽量使用的一样的环境
部署环境流程
更新内容(20170603,5:40):
在跑完下面的整个流程后发现有个问题,在测试uWSGI的时候,显示无法查找没有site模块(事实上也没有这个模块),后来估计判断是这样的,虚拟环境中用的是python3,而系统中默认的是python2.7,所以当同时使用uWSGI的时候,两个版本出现抵触了,就先这么理解吧,解决方案很简单。
将默认的python移除,使用python3update-alternatives --remove python /usr/bin/python2
update-alternatives --install /usr/bin/python python /usr/bin/python3
安装pip3替换默认的pipapt-get install python3-pip
ln -s /usr/bin/pip3 /usr/bin/pip
如果出现错误,请使用which pip3查找其位置,然后替换
1、环境安装
至于如何选择系统这个部分,没有什么可以聊的,在IDC那边选择系统安装即可。
为了系统的内容为最新状态,建议升级,执行以下命名行。sudo apt-get update
sudo apt-get upgrade
执行过程中需要输入Y进行安装确认
为了防止root对环境的破坏,这里选择创建一个超级用户useradd -m -s /bin/bash lee #创建用户lee
usermod -a -G sudo lee #用户lee加入超级权限组
passwd lee #为新用户输入密码
su - lee #切换为用户为lee
如需切换至root
su或su -
在下面的安装中如果您用的是新建的用户,则需要使用sudo + 命令,而如果是root则可以直接使用命令。注:在后面的测试中发现lee的权限还是用起来不爽,如果你现在只是在测试,还是root走起。
2、安装Nginx如果不行,尝试下面的命令安装完成后,可使用IP去访问是否正常显示,如不能试着使用下面的命令,查看系统是否未启动,看报错内容,然后去百度搜索。/etc/init.d/nginx start (restart / stop)
# 分别为nginx启动、重启和停止
3、安装Mysql
这个内容基本上没有什么要说,与环境本身影响也不大,所以放到另外的一篇内容中来说。且django本身已经默认带了Sqlite数据库,如无必要可以直接使用其数据库。
如需安装MySql,https://www.lijinlong.cc/fuwuqi/hjpz/1956.html
4、安装Virtualenv
在安装Virtualenv前要先安装下pip,有的视频教程里面没有这一步不知道是不是是系统自动带了。sudo apt-get install python-pip
在上面的内容开始的时候已经安装了pip3这里可以省略(20170701更新)
更新pip为最新版sudo pip install --upgrade pip
安装virtualenv使用python3指定虚拟目录
如果您有数据盘,那么建议您创建到数据盘中(linux数据盘重新挂载教程),本次教程使用的目录为/var/www/ 目录下cd /var/www/ #进入到 /var/www/ 中
virtualenv -p /usr/bin/python3.5 lee #指定python3创建虚拟目录lee
如果python位置不同可以使用,下面的命令,查找python的位置which python
which python3
which命令,也适用于其他的内容的搜索,更多内容请自行了解
上传本地的程序包
如果您是在服务器上面重新搭建django,可自行创建相关内容。
在上传项目前,您需要做一件事,就是将本地的环境需求导出到一个文件中。pip freeze #查看项目的配置环境
pip freeze > requirements.txt #将项目的配置环境导出至requirements.txt中
然后通过ftp或git或其他方式上传相关文件至服务器中。
配置程序需求环境
使用命令进入虚拟目录,然后安装项目配置环境。cd /var/www/lee #lee为python3创建虚拟目录
source bin/activate #激活虚拟目录
pip install -r requirements.txt # 安装原项目的环境配置
注:以下内容未申明退出虚拟目录,均在虚拟目录中运行。如遇到权限不够,请在命令前加上sudo
项目更新
1、文件更新
在项目blogproject下的文件夹blogproject下的setting.py文件中设置DEBUG = False #关闭调试,默认是开启状态
ALLOWED_HOSTS = ['域名'] #如无域名,可绑定IP地址,如果均为修改服务启动后,将会报错。
LANGUAGE_CODE = 'zh-Hans' #英文语言修改为中文
TIME_ZONE = 'Asia/Shanghai #国际时区设置为上海时区
在setting文件下面增加下面的内容,可能有部分内容文件中是有的。STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',)
2、数据库更新python manage.py makemigrations # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate # 创建表结构
如果您的数据不那么重要,可以删除/blogproject/blog/migrations/ 下的类似00.. 的记录文件.
这里默认使用的是Sqlite,如需变更,请点击:https://www.lijinlong.cc/django/djxs/1939.html
使用以下命令查看网站python manage.py runserver 0.0.0.0:8000
可通过IP:8000访问网站,如需退出,control + c 退出运行环境
3、静态文件统一至static目录python manage.py collectstatic
将静态文件放置到固定的目录,是为了实现动静分离,让服务器发挥更多的性能。
uWSGI配置测试uWSGI环境是否生效,因为80端口已经被nginx占用,所以只能使用8000端口,当然如果您对端口熟悉也可以用其他的端口。uwsgi --http :8000 --module blogproject.wsgi
如出现下面的内容,则运行成功spawned uWSGI worker 1 (and the only) (pid: 18417, cores: 1)
如需退出,control + c 退出测试环境
注:虚拟环境到此结束,请使用deactivate 退出虚拟环境。
5、配置文件
Nginx配置文件
nginx默认的配置文件为,/etc/nginx/sites-enabled/default,只需要编辑器文件内容为,可使用vi /etc/nginx/sites-enabled/default
upstream django{
server 127.0.0.1:8001; #叫啥忘记了,与uWSGI产生联系
}
server {
listen 80;
server_name demo.lijinlong.cc; # 绑定的域名
charset utf-8;
client_max_body_size 10M; #上传最大限制10M
location /static/ {
root /var/www/lee/blogproject; # 静态文件的地址
}
location / {
include /var/www/lee/uwsgi_params; # uwsgi_params别紧张,这个文件不需要编辑
uwsgi_pass django;
}
}
uWSGI配置
在虚拟机上安装了uWSGI,在环境外依然需要安装uWSGI,通过上面的经验在这里安装一个文件也变得很简单。
以下内容ini格式的内容,保存后命名为 blogproject.ini[uwsgi]
chdir = /var/www/lee/blogproject/ #模块位置
module = blogproject.wsgi #模块名称
home = /var/www/lee/ #项目位置
master = true
processes = 5
socket = :8001 #与楼上的那个内容挂钩,还有其他写法,没深入研究
chmod-socket = 666
vacuum = true
uwsgi_params文件的内容,请注意它没有任何后缀,保存后名称定义为:uwsgi_paramsuawsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
上述的两个配置文件,在保存后需要上传到项目地址中去。
自启动配置键盘I,切换至输入模式,在内容的最底部放置下面的命令。/usr/local/bin/uwsgi --ini /var/www/lee/blogproject.ini
输入完成后,按ESC键,输入:wq保存并退出环境
内容截止到了这里,整个项目的部署已经完成。
重启下服务器看看
命令:reboot
辛辛苦苦编辑的内容,如需转载请注明出处:https://www.lijinlong.cc/fuwuqi/hjpz/1962.html
20170701补充内容 在接近一周的时间,部署网站上线,一直出现错误(实际就是一个错误),不停的去看各种资料,各种排除,最后却死在自己写的教程上面的多了一个S
找不到这个配置文件,在Nginx默认配置文件中/etc/nginx/sites-enabled/default 写的是uwsgi_params,而写成了其他的名字。这也是今天才想起来查看系统的日志来查错。 Nginx的错误日志在以下文件中。
- #cat 的用途是查看
- cat /var/log/nginx/access.log #网站日志
- cat /var/log/nginx/error.log #系统日志
程序在修改一些内容的时候,需要重启uwsgi,比如在settings.py文件中增加域名,则需要重启uwsgi。 关于uwsgi的教程:https://diav79.github.io/python/2016/11/25/restart-uwsgi.html 官方文档:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Management.html
|