Ubuntu、python3、nginx多站部署教程

注:此方案在百度云测试有效,但在阿里云测试无效,因为阿里云Ubuntu最新的版本是Ubuntu / 16.04,后续测试成功后,发布扩展内容。

 

Ubuntu、python3、django1.11、virtualenv、nginx多站部署教程,写在前面,截止到上一次的单站的环境部署,又过了好久,果然Django部署是个大坑。

为了您的部署顺利进行,请参考以下的环境配置。

Ubuntu / 16.04 LTS amd64 (64bit),

Python 3.5.2 系统已自带了,无需安装

服务器更新

如果您的服务器已安装好Ubuntu系统,请依次执行以下命令,升级

  1. sudo apt-get update  #获取已安装软件最新软件包
  2. sudo apt-get upgrade #升级已安装软件包

Ubuntu创建用户

  1. adduser lee #创建用户lee
  2. usermod -aG sudo lee #给予lee用户sudo权限
  3. su lee #切换用户为lee,其对应的文件夹为/home/lee

以下为扩展阅读

  1. userdel  lee #删除用户
  2. userdel -r lee #删除用户以及文件夹(/home/lee)

 

配置虚拟环境

  1. sudo apt-get install python3-pip  # 安装pip3,系统默认是没有安装pip的,所以以下命令均使用pip3
  2. sudo pip3 install virtualenv virtualenvwrapper  # 安装virtualenv virtualenvwrapper

环境变量

请注意在此处您必须切换到上面的创建的用户,否则以下的内容将在root文件夹生成,这样是绝对不安全的。

如果在切换用户,执行下面的内容遇到Permission denied报错的时候,证明用户组对这个文件夹的权限不够,可以执行以下命名

  1. chmod -R 777 /home/lee
  2. # /home/lee为用户的文件夹

 

  1. echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
  2. echo "export WORKON_HOME=~/Env" >> ~/.bashrc
  3. echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
  4. source ~/.bashrc

执行以上内容后会再home文件夹下,多出一个Env的文件夹,至此后面所有的网站的虚拟环境配置全部保存在此处。

注意,以下的紫色内容是多站可重复的内容

创建虚拟环境目录

  1. mkvirtualenv jarapadmablog
  2.  # 创建虚拟环境 jarapadmablog,你可以在home/lee/Env(home/用户/虚拟环境)下看到 jarapadmablog文件夹,以后程序的配置环境全部存放在这里

扩展阅读

  1. workon jarapadmablog   # 激活虚拟环境
  2. deactivate  # 退出当前的虚拟环境

 

上传Django程序包

  1. cd ~ #当你的用户名为lee的时候cd ~返回到用户目录,及/home/lee/
  2. ls #查看当前目录下的文件夹,如果你按顺序执行到这里的,这里只有一个Env的文件夹

因为程序已经开发好了,直接上传即可。

小常识

在使用以下的命令时,请先激活虚拟环境workon jarapadmablog

  1. pip freeze > requirements.txt  # 在原程序上生成程序所需要的配置文件
  2. pip install -r requirements.txt  # pip安装原程序的所有配置文件

uWSGI环境配置

此处开始脱离虚拟环境,使用命令deactivate退出

  1. sudo apt-get install python3-dev  # 安装python3开发包
  2. sudo pip3 install uwsgi  # 安装uwsgi

测试uWSGI环境

  1. uwsgi --http :8080 --home /home/lee/Env/jarapadmablog --chdir /home/lee/jarapadmablog -w jarapadmablog.wsgi
  2. #以下为对应的介绍
  3. uwsgi --http :8080 --home 项目虚拟环境的位置 --chdir 项目位置 -w jarapadmablog.wsgi

你可能会遇到8080端口无法使用,可换成其他的端口,如果个端口都无法使用,请检查防火墙规则,这里不展开说明。

如果测试没有提示错误,则继续下面的内容,如果提示错误内容,请确认上面目录的相关位置,如确认,请搜索报错的内容。

uWSGI 项目配置文件

  1. sudo mkdir -p /etc/uwsgi/sites  #创建文件夹sites,方便多站管理
  2. cd /etc/uwsgi/sites  # 进入至此文件夹内容
  3. sudo vi jarapadmablog.ini  # vi 是编辑器,sudo会提示需要您提供这个用户的密码,如果不加sudo文件为只读模式,无法保存。

配置文件内容

  1. [uwsgi]  
  2. project = jarapadmablog  #项目名称
  3. uid = lee  #用户名
  4. base = /home/%(uid) #获取用户名对应的目录
  5. chdir = %(base)/%(project) #获取base的目录,以及项目的名称
  6. home = %(base)/Env/%(project) #获取项目的虚拟环境位置
  7. module = %(project).wsgi:application 
  8. master = true 
  9. processes = 5 #项目的进程数
  10. socket = /run/uwsgi/%(project).sock  #Unix套接字,为了方便为nginx产生沟通
  11. chown-socket = %(uid):www-data #用户权限
  12. chmod-socket = 660 
  13. vacuum = true 

为uWSGI创建systemd单元文件

  1. sudo vi /etc/systemd/system/uwsgi.service
  1. [Unit]
  2. Description=uWSGI Emperor service
  3. [Service]
  4. ExecStartPre=/bin/bash -c 'mkdir -p /run/lee; chown sammy:www-data /run/uwsgi'  #注意用户为lee,请修改
  5. ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
  6. Restart=always
  7. KillSignal=SIGQUIT
  8. Type=notify
  9. NotifyAccess=all
  10. [Install]
  11. WantedBy=multi-user.target

nginx环境建设

  1. sudo apt-get install nginx #安装nginx

nginx配置文件

  1. sudo vi /etc/nginx/sites-available/jarapadmablog  #创建jarapadmablog环境配置文件
  1. server {  
  2.     listen 80;  
  3.     server_name demo.blog.lijinlong.cc;  #绑定的域名  
  4.   
  5.     location = /favicon.ico { access_log off; log_not_found off; }  
  6.     location /static/ {  
  7.         root /home/lee/jarapadmablog;   #静态文件地址  
  8.     }  
  9.   
  10.     location / {  
  11.         client_max_body_size    10m; #20170729新增对上传文件大小的限制
  12.         include         uwsgi_params;  
  13.         uwsgi_pass      unix:/run/uwsgi/jarapadmablog.sock;  #unix套接字与上文的套接字相关联  
  14.     }  
  15. }  

对于nginx配置文件来说,还有很多的参数可以写,比如上传的文件访问,网站的错误日志,网站的访问日,这些相关内容可以百度搜索,这块的内容要简单的多。

nginx软连接

  1. sudo ln -s /etc/nginx/sites-available/jarapadmablog /etc/nginx/sites-enabled  

规则测试

  1. sudo nginx -t  # nginx规则测试,如报错请查看对应的内容并修改

服务启动

nginx启动

  1. sudo systemctl start nginx  #nginx启动
  2. sudo systemctl restart nginx #nginx重启,本次使用的是重启,因为增加了配置文件
  3. sudo systemctl stop nginx #nginx停止

uwsgi启动

  1. sudo systemctl start uwsgi  #uwsgi启动,本次使用的是启动,因为安装后默认是未启动状态,后面当网站发生修改则需要重启
  2. sudo systemctl restart uwsgi #uwsgi重启
  3. sudo systemctl stop uwsgi #uwsgi停止

当您的操作进行到这一步的时候,您的网站已经开始正常打开了,不妨试试,你可能会遇到Django要你去settings.py里面去添加域名,这个这么简单的东西,不用解释了。

如果您是多站的,那么请重复上述紫色部分的内容即可。

系统启动自启动

  1. sudo systemctl enable nginx  #自启动nginx
  2. sudo systemctl enable uwsgi  #自启动uwsgi

最后上两个网站:

http://demo.blog.lijinlong.cc/

demo.cms.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/

 

 

 

李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: