返回列表 发帖

CentOS8安装Django+Nginx反向代理

实验中,操作系统的版本信息:
[root@centos8 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@centos8 ~]#
[root@centos8 ~]# uname -r
4.18.0-193.el8.x86_64


Python的版本信息:
[root@centos8 ~]# python3 --version
Python 3.6.8


服务器连接公网安装第三方库(Django):
[root@centos8 ~]# pip3 install Django -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com > 1.txt
[root@centos8 ~]#

查看安装记录:
[root@centos8 ~]# cat 1.txt
Looking in indexes: http://mirrors.aliyun.com/pypi/simple
Collecting Django
  Downloading http://mirrors.aliyun.com/pypi/packages/9c/0e/02b7eff8fac2c25ede489933d4e899f6e6f283ae8eaf5189431057c8d406/Django-3.2.12-py3-none-any.whl (7.9MB)
Collecting sqlparse>=0.2.2 (from Django)
  Downloading http://mirrors.aliyun.com/pypi/packages/05/40/d836d55fb3f467243ee839ab7b814822fda522cd395fa41e282684e71ee5/sqlparse-0.4.2-py3-none-any.whl (42kB)
Collecting pytz (from Django)
  Downloading http://mirrors.aliyun.com/pypi/packages/60/2e/dec1cc18c51b8df33c7c4d0a321b084cf38e1733b98f9d15018880fb4970/pytz-2022.1-py2.py3-none-any.whl (503kB)
Collecting asgiref<4,>=3.3.2 (from Django)
  Downloading http://mirrors.aliyun.com/pypi/packages/fe/66/577f32b54c50dcd8dec38447258e82ed327ecb86820d67ae7b3dea784f13/asgiref-3.4.1-py3-none-any.whl
Collecting typing-extensions; python_version < "3.8" (from asgiref<4,>=3.3.2->Django)
  Downloading http://mirrors.aliyun.com/pypi/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
Installing collected packages: sqlparse, pytz, typing-extensions, asgiref, Django
Successfully installed Django-3.2.12 asgiref-3.4.1 pytz-2022.1 sqlparse-0.4.2 typing-extensions-4.1.1
[root@centos8 ~]#


安装成功后,列出当前环境中所有已经安装的第三方库的名称和其版本号:
[root@centos8 ~]# pip3 freeze
asgiref==3.4.1
Django==3.2.12
pytz==2022.1
sqlparse==0.4.2
typing-extensions==4.1.1
[root@centos8 ~]#

注释:会附带安装一些其他的依赖软件包。


查看Django的版本:
[root@centos8 ~]# python3 -c "import django; print(django.get_version())"
3.2.12



打开防火墙(firewalld)的TCP 8081端口:
[root@centos8 ~]# firewall-cmd --zone=public --add-port=8081/tcp --permanent
success

使规则生效:
[root@centos8 ~]# firewall-cmd --reload
success



先在创建一个目录/Mysite,用来专门放置Django项目,再创建Web应用“Myapp”:
[root@centos8 ~]# mkdir -p /Mysite
[root@centos8 ~]# cd /Mysite/
[root@centos8 Mysite]# django-admin.py startproject Myapp
[root@centos8 Mysite]#

在项目目录里,可以通过tree命令查看目录结构:
图片1.png
2022-3-30 20:09


笺注:
如果提示没有tree命令的话,就安装 yum -y install tree

以上是项目目录里的初始文件,manage.py是一个脚本文件,可以通过它管理Django服务;


启动Django的Web应用“Myapp”:
cd /Mysite/Myapp/
python3 manage.py runserver 192.168.168.154:8081
图片2.png
2022-3-30 20:09

笺注:
192.168.168.154为服务器IP地址;
这里的访问端口设置为8081,即TCP 8081端口,也可以自定义为别的数字的;


Django的Web应用“Myapp”运行中的效果:(组合键Ctrl+c可结束程序的执行)
图片3.png
2022-3-30 20:10



客户端访问Django网站:
http://192.168.168.154:8081/

有可能会报以下错误:
Invalid HTTP_HOST header: '192.168.168.154:8081'. You may need to add '192.168.168.154' to ALLOWED_HOSTS.
图片4.png
2022-3-30 20:11


解决方法:
[root@centos8 ~]# vi /Mysite/Myapp/Myapp/settings.py
ALLOWED_HOSTS = []
修改为:
ALLOWED_HOSTS = ['*']


重新启动Web应用“Myapp”,客户端再刷新页面即可:(建议使用Firefox浏览器)
图片5.png
2022-3-30 20:11



笺注:
一旦结束脚本的运行,客户端就无法访问Django网站了;可以把Django的脚本“manage.py”放在后台执行,具体命令如下:
[root@centos8 ~]# nohup python3 /Mysite/Myapp/manage.py runserver 192.168.168.154:8081 &
[1] 40450
[root@centos8 ~]# nohup: 忽略输入并把输出追加到'nohup.out'


[root@centos8 ~]#


查看脚本“manage.py”的进程号:
[root@centos8 ~]# ps -aux | grep "manage.py" |grep -v grep
root       40450  0.9  2.0 130240 36932 pts/3    S    14:33   0:00 python3 /Mysite/Myapp/manage.py runserver 192.168.168.154:8081
root       40452  2.1  2.2 228328 40932 pts/3    Sl   14:33   0:01 /usr/local/bin/python3 /Mysite/Myapp/manage.py runserver 192.168.168.154:8081
[root@centos8 ~]#


终止脚本“manage.py”的运行:(等于终止Web应用“Myapp”)
[root@centos8 ~]# kill -9 40450
[root@centos8 ~]# kill -9 40452
[1]+  已杀死               nohup python3 /Mysite/Myapp/manage.py runserver 192.168.168.154:8081
[root@centos8 ~]#





######

Nginx反向代理+Django

目的:把客户端对本机的TCP 80端口的访问,反向代理到本机的TCP 8081端口。

Nginx的安装可参考: CentOS8安装LNMP+phpMyAdmin

查看Nginx的版本:
[root@centos8 ~]# nginx -v
nginx version: nginx/1.14.1


Nginx的反向代理配置:(Nginx默认使用的是TCP 80端口)
[root@centos8 ~]# find / -name "nginx.conf"
/etc/nginx/nginx.conf
[root@centos8 ~]#

[root@centos8 ~]# vi /etc/nginx/nginx.conf
插入:
proxy_pass http://192.168.168.154:8081;
图片6.png
2022-3-30 20:13


保存文件退出后,重启Nginx:
[root@centos8 ~]# systemctl restart nginx

注释:
反向代理成功后,防火墙只需要打开TCP 80端口;
Django使用的端口不得与Nginx使用的端口冲突;


反向代理成功,客户端直接访问服务器的IP地址即可:(访问本机的TCP 80端口等于访问本机的TCP 8081端口)
http://192.168.168.154/
图片7.png
2022-3-30 20:14






######

Linux下卸载安装好的第三方库(Django):
[root@centos8 ~]# pip3 uninstall Django -y
Uninstalling Django-3.2.12:
  Successfully uninstalled Django-3.2.12






######

把文件1.txt里的链接地址筛选出来,并写到文件2.txt:
[root@centos8 ~]# cat xx.py
#coding=utf-8
from io import StringIO
String_1 = StringIO()

Path_1 = "./1.txt"
f_name = open(Path_1,'r')

fields_1 = f_name.readlines() #输出结果为列表,包含换行符
f_name.close()


K_1 = "Downloading" #关键字

for Key_1 in fields_1:
        if K_1 in Key_1:
                Result_1 = f"{Key_1.split()[1]}\n"
                String_1.write(Result_1) #把输出结果追加到StringIO()
       
Result_2 = String_1.getvalue()

Result_3 = Result_2.strip() #去除左边和右边的空格、换行符
print(Result_3)


#把最终的输出结果写入(覆盖)到文件2.txt;文件不存在时,会自动创建
Path_2 = r'./2.txt'
f_name = open(Path_2,'w')
print(Result_3,file=f_name)


脚本“xx.py”运行后的效果:
[root@centos8 ~]# python3 xx.py
http://mirrors.aliyun.com/pypi/packages/9c/0e/02b7eff8fac2c25ede489933d4e899f6e6f283ae8eaf5189431057c8d406/Django-3.2.12-py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/05/40/d836d55fb3f467243ee839ab7b814822fda522cd395fa41e282684e71ee5/sqlparse-0.4.2-py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/60/2e/dec1cc18c51b8df33c7c4d0a321b084cf38e1733b98f9d15018880fb4970/pytz-2022.1-py2.py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/fe/66/577f32b54c50dcd8dec38447258e82ed327ecb86820d67ae7b3dea784f13/asgiref-3.4.1-py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
[root@centos8 ~]#

可以看到文件2.txt里都是链接地址:
[root@centos8 ~]# cat 2.txt
http://mirrors.aliyun.com/pypi/packages/9c/0e/02b7eff8fac2c25ede489933d4e899f6e6f283ae8eaf5189431057c8d406/Django-3.2.12-py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/05/40/d836d55fb3f467243ee839ab7b814822fda522cd395fa41e282684e71ee5/sqlparse-0.4.2-py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/60/2e/dec1cc18c51b8df33c7c4d0a321b084cf38e1733b98f9d15018880fb4970/pytz-2022.1-py2.py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/fe/66/577f32b54c50dcd8dec38447258e82ed327ecb86820d67ae7b3dea784f13/asgiref-3.4.1-py3-none-any.whl
http://mirrors.aliyun.com/pypi/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
[root@centos8 ~]#



######

根据文件2.txt里的链接地址下载文件:

服务器连接公网安装第三方库(wget):
[root@centos8 ~]# pip3 install wget==3.2 -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com
Looking in indexes: http://mirrors.aliyun.com/pypi/simple
Collecting wget==3.2
  Downloading http://mirrors.aliyun.com/pypi/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip
Installing collected packages: wget
  Running setup.py install for wget ... done
Successfully installed wget-3.2
[root@centos8 ~]#


创建存放下载下来的文件的目录:
[root@centos8 ~]# mkdir -p /down


[root@centos8 ~]# cat yy.py
#coding=utf-8
import wget

Path_1 = "./2.txt"
f_name = open(Path_1,'r')

fields_1 = f_name.readlines()
f_name.close()


Path_2 = '/down'

for Key_1 in fields_1:
        Key_1 = Key_1.strip()
        wget.download(Key_1,Path_2)


脚本“yy.py”运行后的效果:
[root@centos8 ~]# python3 yy.py
100% [....................................................] 26844 / 26844
[root@centos8 ~]#


文件下载成功:
[root@centos8 ~]# du -ah /down
7.6M    /down/Django-3.2.12-py3-none-any.whl
44K     /down/sqlparse-0.4.2-py3-none-any.whl
492K    /down/pytz-2022.1-py2.py3-none-any.whl
28K     /down/asgiref-3.4.1-py3-none-any.whl
28K     /down/typing_extensions-4.1.1-py3-none-any.whl
8.2M    /down
[root@centos8 ~]#


当切换到一台新的服务器时,一次性安装多个已经存在的whl文件:
[root@centos8 ~]# pip3 install /down/*.whl
Processing /down/asgiref-3.4.1-py3-none-any.whl
Processing /down/Django-3.2.12-py3-none-any.whl
Processing /down/pytz-2022.1-py2.py3-none-any.whl
Processing /down/sqlparse-0.4.2-py3-none-any.whl
Processing /down/typing_extensions-4.1.1-py3-none-any.whl
Installing collected packages: typing-extensions, asgiref, sqlparse, pytz, Django
Successfully installed Django-3.2.12 asgiref-3.4.1 pytz-2022.1 sqlparse-0.4.2 typing-extensions-4.1.1
[root@centos8 ~]#


安装成功:
[root@centos8 ~]# pip3 freeze
asgiref==3.4.1
Django==3.2.12
pytz==2022.1
sqlparse==0.4.2
typing-extensions==4.1.1
[root@centos8 ~]#





相关文章:
CentOS8安装Flask+Apache2.4反向代理
CentOS6_Nginx反向代理+负载均衡(轮询)

StringIO()函数

返回列表