- A+
注:此方案在百度云测试有效,但在阿里云测试无效,因为阿里云Ubuntu最新的版本是Ubuntu / 16.04,后续测试成功后,发布扩展内容。
Ubuntu、python3、django1.11、virtualenv、nginx多站部署教程,写在前面,截止到上一次的单站的环境部署,又过了好久,果然Django部署是个大坑。
为了您的部署顺利进行,请参考以下的环境配置。
Ubuntu / 16.04 LTS amd64 (64bit),
Python 3.5.2 系统已自带了,无需安装
服务器更新
如果您的服务器已安装好Ubuntu系统,请依次执行以下命令,升级
- sudo apt-get update #获取已安装软件最新软件包
- sudo apt-get upgrade #升级已安装软件包
Ubuntu创建用户
- adduser lee #创建用户lee
- usermod -aG sudo lee #给予lee用户sudo权限
- su lee #切换用户为lee,其对应的文件夹为/home/lee
以下为扩展阅读
- userdel lee #删除用户
- userdel -r lee #删除用户以及文件夹(/home/lee)
配置虚拟环境
- sudo apt-get install python3-pip # 安装pip3,系统默认是没有安装pip的,所以以下命令均使用pip3
- sudo pip3 install virtualenv virtualenvwrapper # 安装virtualenv virtualenvwrapper
环境变量
请注意在此处您必须切换到上面的创建的用户,否则以下的内容将在root文件夹生成,这样是绝对不安全的。
如果在切换用户,执行下面的内容遇到Permission denied报错的时候,证明用户组对这个文件夹的权限不够,可以执行以下命名
- chmod -R 777 /home/lee
- # /home/lee为用户的文件夹
- echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
- echo "export WORKON_HOME=~/Env" >> ~/.bashrc
- echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
- source ~/.bashrc
执行以上内容后会再home文件夹下,多出一个Env的文件夹,至此后面所有的网站的虚拟环境配置全部保存在此处。
注意,以下的紫色内容是多站可重复的内容
创建虚拟环境目录
- mkvirtualenv jarapadmablog
- # 创建虚拟环境 jarapadmablog,你可以在home/lee/Env(home/用户/虚拟环境)下看到 jarapadmablog文件夹,以后程序的配置环境全部存放在这里
扩展阅读
- workon jarapadmablog # 激活虚拟环境
- deactivate # 退出当前的虚拟环境
上传Django程序包
- cd ~ #当你的用户名为lee的时候cd ~返回到用户目录,及/home/lee/
- ls #查看当前目录下的文件夹,如果你按顺序执行到这里的,这里只有一个Env的文件夹
因为程序已经开发好了,直接上传即可。
小常识
在使用以下的命令时,请先激活虚拟环境workon jarapadmablog
- pip freeze > requirements.txt # 在原程序上生成程序所需要的配置文件
- pip install -r requirements.txt # pip安装原程序的所有配置文件
uWSGI环境配置
此处开始脱离虚拟环境,使用命令deactivate退出
- sudo apt-get install python3-dev # 安装python3开发包
- sudo pip3 install uwsgi # 安装uwsgi
测试uWSGI环境
- uwsgi --http :8080 --home /home/lee/Env/jarapadmablog --chdir /home/lee/jarapadmablog -w jarapadmablog.wsgi
- #以下为对应的介绍
- uwsgi --http :8080 --home 项目虚拟环境的位置 --chdir 项目位置 -w jarapadmablog.wsgi
你可能会遇到8080端口无法使用,可换成其他的端口,如果个端口都无法使用,请检查防火墙规则,这里不展开说明。
如果测试没有提示错误,则继续下面的内容,如果提示错误内容,请确认上面目录的相关位置,如确认,请搜索报错的内容。
uWSGI 项目配置文件
- sudo mkdir -p /etc/uwsgi/sites #创建文件夹sites,方便多站管理
- cd /etc/uwsgi/sites # 进入至此文件夹内容
- sudo vi jarapadmablog.ini # vi 是编辑器,sudo会提示需要您提供这个用户的密码,如果不加sudo文件为只读模式,无法保存。
配置文件内容
- [uwsgi]
- project = jarapadmablog #项目名称
- uid = lee #用户名
- base = /home/%(uid) #获取用户名对应的目录
- chdir = %(base)/%(project) #获取base的目录,以及项目的名称
- home = %(base)/Env/%(project) #获取项目的虚拟环境位置
- module = %(project).wsgi:application
- master = true
- processes = 5 #项目的进程数
- socket = /run/uwsgi/%(project).sock #Unix套接字,为了方便为nginx产生沟通
- chown-socket = %(uid):www-data #用户权限
- chmod-socket = 660
- vacuum = true
为uWSGI创建systemd单元文件
- sudo vi /etc/systemd/system/uwsgi.service
- [Unit]
- Description=uWSGI Emperor service
- [Service]
- ExecStartPre=/bin/bash -c 'mkdir -p /run/lee; chown sammy:www-data /run/uwsgi' #注意用户为lee,请修改
- ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
- Restart=always
- KillSignal=SIGQUIT
- Type=notify
- NotifyAccess=all
- [Install]
- WantedBy=multi-user.target
nginx环境建设
- sudo apt-get install nginx #安装nginx
nginx配置文件
- sudo vi /etc/nginx/sites-available/jarapadmablog #创建jarapadmablog环境配置文件
- server {
- listen 80;
- server_name demo.blog.lijinlong.cc; #绑定的域名
- location = /favicon.ico { access_log off; log_not_found off; }
- location /static/ {
- root /home/lee/jarapadmablog; #静态文件地址
- }
- location / {
- client_max_body_size 10m; #20170729新增对上传文件大小的限制
- include uwsgi_params;
- uwsgi_pass unix:/run/uwsgi/jarapadmablog.sock; #unix套接字与上文的套接字相关联
- }
- }
对于nginx配置文件来说,还有很多的参数可以写,比如上传的文件访问,网站的错误日志,网站的访问日,这些相关内容可以百度搜索,这块的内容要简单的多。
nginx软连接
- sudo ln -s /etc/nginx/sites-available/jarapadmablog /etc/nginx/sites-enabled
规则测试
- sudo nginx -t # nginx规则测试,如报错请查看对应的内容并修改
服务启动
nginx启动
- sudo systemctl start nginx #nginx启动
- sudo systemctl restart nginx #nginx重启,本次使用的是重启,因为增加了配置文件
- sudo systemctl stop nginx #nginx停止
uwsgi启动
- sudo systemctl start uwsgi #uwsgi启动,本次使用的是启动,因为安装后默认是未启动状态,后面当网站发生修改则需要重启
- sudo systemctl restart uwsgi #uwsgi重启
- sudo systemctl stop uwsgi #uwsgi停止
当您的操作进行到这一步的时候,您的网站已经开始正常打开了,不妨试试,你可能会遇到Django要你去settings.py里面去添加域名,这个这么简单的东西,不用解释了。
如果您是多站的,那么请重复上述紫色部分的内容即可。
系统启动自启动
- sudo systemctl enable nginx #自启动nginx
- sudo systemctl enable uwsgi #自启动uwsgi
最后上两个网站:
http://demo.blog.lijinlong.cc/
内容来源:
如何为在Ubuntu 16.04 Django的应用程序与uWSGI和Nginx的
https://www.howtoing.com/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-16-04/