当拥有一个服务器后,发现有众多的应用想要部署在这个服务器上,而且想要为每个应用创建一个独有的二级域名,比如个人博客- blog.haojunyu.com,比如个人项目页面- pro.haojunyu.com等等,反正就是想要将自己所折腾的一切都放到这个服务器上,一方面算是给自己这么长时间在应用开发上的成果做个展示,另一方面是提醒自己不要再重复的造轮子,毕竟青春有限,还有很多其他的事情值得去尝试。这个以 Nginx 部署两个 Python 的 Web 框架 Django 和 Flask 为例。
在之前的博文中我们仿照 在Ubuntu上使用Nginx部署Flask应用在自己的服务器上成功部署了 Flask 应用,下面先在 Ubuntu上使用Nginx 部署 Django 应用,然后将二者合并在一起。
Django应用
环境部署
我们使用 virtualenv (virtualenvwrapper来管理虚拟环境)来部署 Django 应用,部署流程如下:
1mkvirtualenv djangoEnv #在$HOME/.virtualenvs/目录下创建djangoEnv环境
2pip install django
3# 后台使用mysql数据库
4sudo apt install mysql-server-5.x
5sudo apt install python-mysqldb
常用Django命令
基本的 Django 应用命令如下:
1# 创建项目
2django-amdin.py startproject djangoPro
3# 重构数据库
4python manage.py migrate
5# 启动应用
6python manage.py runserver 0.0.0.0:8090
7# 创建应用模块
8python manage.py startapp djangoApp
Nginx配置
Django 应用在 Nginx 服务上面的配置是参考的菜鸟教程上的 使用Nginx部署Django应用。
uwsgi 配置 和Flask应用一样,uwsgi是作为Django应用和Nginx服务器之间的桥梁的。配置如下:
1[uwsgi] 2socket = 127.0.0.1:8090 3master = true //主进程 4vhost = true //多站模式 5no-site = true //多站模式时不设置入口模块和文件 6# workers = 2 //子进程数 7reload-mercy = 10 8vacuum = true //退出、重启时清理文件 9max-requests = 1000 10limit-as = 512 11buffer-size = 30000 12pidfile = /var/www/django/django_uwsgi.pid //pid文件,用于下面的脚本启动、停止该进程 13daemonize = /var/log/uwsgi/django_uwsgi.log
Nginx配置
1server { 2 listen 443; 3 server_name django.haojunyu.com; #此时域名已经映射到主机IP 4 5 ssl on; 6 ssl_certificate /var/www/django/1_haojunyu.com_bundle.crt; 7 ssl_certificate_key /var/www/django/2_haojunyu.com.key; 8 ssl_session_timeout 5m; 9 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 10 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 11 ssl_prefer_server_ciphers on; 12 13 location / { try_files $uri @yourapplication; } 14 location @yourapplication { 15 include uwsgi_params; 16 uwsgi_pass 127.0.0.1:8090; # 和uwsgi中socket配置的值一致 17 uwsgi_param UWSGI_SCRIPT djangoPro.wsgi; # 入口文件,即wsgi.py相对于项目根目录的位置,这里.相当于一层目录 18 uwsgi_param UWSGI_CHDIR /djangoPro; # 项目根目录 19 index index.html index.htm; 20 client_max_body_size 35m; 21 } 22}
TIPS:
- 当我们使用
sudo server nginx restart
重启Nginx失败时,一定要善用sudo nginx -t
命令来检测nginx.conf文件是否有问题。 - 这里uwsgi充当服务器和应用之间的桥梁作用,当浏览器访问返回
Bad GatWay
时就得用ps -aux | grep uwsgi
来检测uwsgi服务有没有启动
- 当我们使用
合并多应用
这里对于 Nginx 配置多个应用,建议将各个不同应用的 Nginx 配置文件放在 /etc/nging/conf.d/ 目录下,有几个应用就创建几个配置文件,这样易于管理和配置。
二级域名的使用
对于不同的应用,显然是不能使用相同的域名的,所以这就有了通过二级域名来区分不同的应用,这里分别用 django.haojunyu.com 来表示 django 应用,用 flask.haojunyu.com 来表示 flask 应用。在 Nginx 的配置文件中 server_name 就是相应的二级域名,而在域名解析中添加两条 A 记录,主机记录和记录值分别是 django 及对应的 IP 地址和 flask 及对应的 IP 地址。