百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

CentOS 7.5上搭建Nginx、uWSGI、Django环境

bigegpt 2024-09-27 00:39 3 浏览



最近公司有个项目需要使用到CMDB,就顺便研究了一下搭建环境,正式上线后需要使用到Nginx来控制服务的启停,下面是具体的搭建过程;

1. 安装环境

  • CentOS 7.5
  • Python 3.6.5
  • Django 2.1
  • uWSGI 2.0.17.1
  • Nginx 1.14.0

2. 关闭防火墙和SElinux

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld #开机禁用firewall服务
[root@localhost ~]# getenforce #查看SELinux状态
Enforcing
[root@localhost ~]# /usr/sbin/sestatus #Current mode表示当前selinux防火墙的安全策略
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
[root@localhost ~]# setenforce 0 #临时关闭SElinux
[root@localhost ~]# getenforce 
Permissive
[root@localhost ~]# vim /etc/selinux/config #永久关闭
将 "SELINUX=enforcing" 改为 "SELINUX=disabled",保存后退出,重启才会生效

3. 安装所需软件包

最小化安装Linux系统后有很多软件包没有安装,有些命令不能使用,需要手动自己安装,把所需的工具包装上,方便后续配置的工作;

[root@localhost ~]# yum install -y vim tree net-tools lrzsz 
[root@localhost ~]# yum groupinstall "Development Tools" -y

4. pyenv的安装

pyenv是一款特别好用的Python版本管理器,程序员可以建立不同的目录,在不同的目录里分别运行不同版本的Python, 并且互不影响,安装的包也互不影响。github项目地址:https://github.com/yyuu/pyenv

pyenv-virtualenv是pyenv的一个plugin(插件),可以用来创建基于不同Python版本的干净的虚拟环境。github项目地址:https://github.com/yyuu/pyenv-virtualenv

4. 1 安装依赖包

[root@localhost ~]# yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite-devel bzip2-devel readline-devel

4.2 安装pyenv(pyenv-virtualenv插件会自动安装)

安装(下面一条命令可以把pyenv和pyenv-virtualenv插件都装上):

[root@localhost ~]# curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

4.3 设置环境变量

在~/.bash_profile环境变量配置加入下面三行

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

需要使环境变量生效

运行命令exec "$SHELL" 或者source ~/.bash_profile ,如果还没有效果,就退出终端,重新打开。

4.4 pyenv 使用指南

[root@localhost ~]# pyenv install --list #查看可以安装的版本
# `...`表示省略
...
2.7.13
...
3.6.5
...

pyenv versions 查看系统的上安装的Python版本。 其中前面的 * 表示当前工作目录正在使用的python版本,其中的 system 表示系统自带的 Python 版本:

[root@localhost ~]# pyenv versions
*system (set by /Users/yulongjun/.pyenv/version)

pyenv install <version> 安装其他版本的Python。我们以安装2.7.13和安装3.6.5版本:

[root@localhost ~]# pyenv install 3.6.5
[root@localhost ~]# pyenv install 2.7.13
[root@localhost ~]# pyenv versions #可以看到安装的版本
* system (set by /root/.pyenv/version)
 2.7.13
 3.6.5

pyenv local <version> 切换python版本。

示例:

pyenv local 2.7.13
pyenv local 3.6.5

4.5 pyenv-virtualenv 使用指南

pyenv-virtualenv是用来创建一个干净的虚拟Python环境的命令,通常在创建干净的新项目时候使用。使用方法如下:

创建虚拟环境 pyenv virtualenv 版本号 虚拟环境名

[root@localhost ~]# pyenv virtualenv 3.6.5 venv-3.6.5

创建项目,让项目使用干净的Python3.6.5的虚拟环境:

[root@localhost ~]# mkdir Python3
[root@localhost Python3]#pyenv local venv-3.6.5
(venv-3.6.5) [root@localhost Python3]# 
(venv-3.6.5) [root@localhost Python3]# cd ..
[root@localhost Python3]# cd Python3
(venv-3.6.5) [root@localhost Python3]#
(venv-3.6.5) [root@localhost python3]# python -V
Python 3.6.5

我们会发现:只要我们进入Python3目录,就会自动激活virtualenv,退出Python3目录,就会关闭virtualenv。

如果要关闭自动激活,可以运行命令pyenv deactivate,要重新启用的话,运行pyenv activate 虚拟环境名。

5. 安装Django

Django是一个开放源代码的Web应用框架,由Python写成,能够以最小的代价构建和维护高质量的Web应用。

(venv-3.6.5) [root@localhost Python3]# pip install django

安装完成后检查Django版本,表示安装成功

(venv-3.6.5) [root@localhost Python3]# python3 -c "import django; print(django.get_version())"
或者
(venv-3.6.5) [root@localhost Python3]# python -m django --version
2.1

查看已经安装的第三方库

(venv-3.6.5) [root@localhost Python3]# pip freeze
Django==2.1
pytz==2018.5
uWSGI==2.0.17.1 #这个是后面安装

创建CMDB项目

(venv-3.6.5) [root@localhost Python3]# django-admin startproject cmdb

在CMDB项目中创建app应用

(venv-3.6.5) [root@localhost Python3]# cd cmdb
(venv-3.6.5) [root@localhost Python3]# pwd
 /root/Python3/cmdb #临时的测试目录,生产环境不应放到/root目录下,根据需求自己调整
(venv-3.6.5) [root@localhost Python3]# python3 manage.py startapp cmdb #创建App应用

设置项目允许访问的域名,可以配置域名或IP,这里为了方便,'*' 表示所有的都可访问

(venv-3.6.5) [root@localhost cmdb]# vim cmdb/setting.py
……
ALLOWED_HOSTS = ['*'] 
……

初始化数据库,使数据库状态与当前模型集和迁移集同步。就是将对数据库的更改,主要是数据表设计的更改,在数据库中真实执行。例如,新建、修改、删除数据表,某数据表内的字段等等。

python manage.py migrate

启动服务

(venv-3.6.5) [root@localhost Python3]# python manage.py runserver 0.0.0.0:8080

使用浏览器打开,如下图:



6. 安装和配置uWSGI

WSGI 全称Web Server Gateway Interface ,或者Python Web Server Gateway Interface,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

uWSGI是一种WSGI实现,其工作原理是让它创建一个Unix socket,并且通过WSGI协议提供响应到web服务器。最后,我们完整的组件栈看起来将是这样的:

the web client <-> the web server <-> the socket <-> uwsgi <-> Django

安装uwsgi

pip install uwsgi

编写一个测试文件保存为 mytest.py ,写入以下内容

# !/usr/bin/python3
def application(env, start_response):
 start_response('200 OK', [('Content-Type', 'text/html')])
 return [b'UWSGI Test...']

然后再启动uWSGI服务来测试

(venv-3.6.5) [root@localhost cmdb]# uwsgi --http :80 --wsgi-file mytest.py



使用下面的方式,测试uwsgi是否可以正常运行,相当于 python manage.py runserver 0.0.0.0:8080

(venv-3.6.5) [root@localhost cmdb]# uwsgi --http :8080 --chdir /root/python3/cmdb/ --module cmdb.wsgi --static-m=/static=static



编写uwsgi配置文件

在CMDB项目目录中新建一个uwsgi.ini 文件,和manage.py在同一个文件夹内即可,文件内容如下:

#uwsgi.ini file
[uwsgi]
# Django-related settings
socket = 127.0.0.1:8001
# the base directory (full path)
chdir = /root/Learning-Python3/cmdb 
# Django's wsgi file
module = cmdb.wsgi 
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 2
# ... with appropriate permissions - may be needed
# chmod-socket = 666
# chown-socket = nginx:nginx
# clear environment on exit
vacuum = true
# enable-threads = true

socket 中 127.0.0.1 表示本机,后面的 8001 表示端口,这里配置的端口要和后面Nginx配置文件中的socket端口相同。

7. 安装Nginx服务

使用 yum 来安装 Nginx服务

[root@localhost ~]# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=0
enabled=1
[root@localhost ~]# yum install -y nginx
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx

nginx的配置文件

(venv-3.6.5) [root@localhost cmdb]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
 worker_connections 1024;
}
http {
 include /etc/nginx/mime.types;
 default_type application/octet-stream;
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for"';
 access_log /var/log/nginx/access.log main;
 sendfile on;
 #tcp_nopush on;
 keepalive_timeout 65;
 #gzip on;
 include /etc/nginx/conf.d/*.conf;
 #新加入的部分
 upstream django { 
 server 127.0.0.1:8001; #端口8001必须和uwsgi配置文件中的socket端口一样
 }
 server {
 listen 80 default_server;
# listen [::]:80 default_server;
 server_name www.your_domain.com your_domain.com your_ip_addr;
 root /root/Learning-Python3/cmdb; #项目路径
 # Load configuration files for the default server block.
 include /etc/nginx/default.d/*.conf;
 location / {
 include uwsgi_params;
 uwsgi_pass django;
 }
 } #一直到这里
}

修改完后,检查nginx的配置

(venv-3.6.1) [root@localhost cmdb]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

启动uWSGI服务和Nginx服务

(venv-3.6.1) [root@localhost cmdb]# uwsgi --ini uwsgi.ini #或者使用& 后台启动,或者加入到开机自启动
(venv-3.6.1) [root@localhost cmdb]# systemctl restart nginx

能够使用默认的80端口访问成功,表示环境已经全部搭建好了,下一步需要把项目的代码弄进来,就能够正常跑项目了,以后的服务启动都是通过Nginx来控制,需要把uwsgi服务放在后台跑;



8. 安装报错解决

1. 安装pyenv报错

最小化安装导致一些软件包没有安装,需要把这些包装上:

[root@localhost ~]# curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
……
/root/.pyenv/plugins/python-build/bin/python-build: line 1625: patch: command not found
……

需要安装 patch 包,使用 yum 安装:

[root@localhost ~]# yum -y install patch

安装过程中继续报错:

……
configure: error: no acceptable C compiler found in $PATH #确少 gcc 软件包
……
[root@localhost ~]# yum groupinstall "Development Tools" -y #把所需的开发工具包都安装上

2. 升级pip报错

安装完Django后,会有提示升级pip 版本过低(这一步可忽略),直接使用提示的命令安装会报错

[root@localhost ~]# pip install --upgrade pip
Collecting pip
 Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
 28% |█████████▎ | 378kB 5.6kB/s eta 0:02:46Exception:
Traceback (most recent call last):
 File "/root/.pyenv/versions/3.6.1/envs/venv-3.6.1/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/response.py", line 232, in _error_catcher
 yield
 File "/root/.pyenv/versions/3.6.1/envs/venv-3.6.1/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/response.py", line 314, in read
 data = self._fp.read(amt)
 File "/root/.pyenv/versions/3.6.1/envs/venv-3.6.1/lib/python3.6/site-packages/pip/_vendor/cachecontrol/filewrapper.py", line 60, in read

可以使用这个命令更新:

pip3 install --upgrade pip

相关推荐

有些人能留在你的心里,但不能留在你生活里。

有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。Sometimes,youhavetorealize,Somepeoplecanstayinyourheart,...

Python学不会来打我(34)python函数爬取百度图片_附源码

随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...

软网推荐:图像变变变 一“软”见分晓

当我们仅需要改变一些图片的分辨率、裁减尺寸、添加水印、标注文本、更改图片颜色,或将一种图片转换为另一种格式时,总比较讨厌使用一些大型的图像处理软件,尤其是当尚未安装此类软件时,更是如此。实际上,只需一...

首款WP8.1图片搜索应用,搜照片得资料

首款WP8.1图片搜索应用,搜照片得资料出处:IT之家原创(天际)2014-11-1114:32:15评论WP之家报道,《反向图片搜索》(ReverseImageSearch)是Window...

分享一组美图(图片来自头条)(头条美女头像)

...

盗墓笔记电视剧精美海报 盗墓笔记电视剧全集高清种子下载

出身“老九门”世家的吴邪,因身为考古学家的父母在某次保护国家文物行动时被国外盗墓团伙杀害,吴家为保护吴邪安全将他送去德国读书,因而吴邪对“考古”事业有着与生俱来的兴趣。在一次护宝过程中他偶然获得一张...

微软调整Win11 24H2装机策略:6月起36款预装应用改为完整版

IT之家7月16日消息,微软公司今天(7月16日)发布公告,表示自今年6月更新开始,已默认更新Windows1124H2和WindowsServer2025系统中预装...

谷歌手把手教你成为谣言终结者 | 域外

刺猬公社出品,必属原创,严禁转载。合作事宜,请联系微信号:yunlugongby贾宸琰编译、整理11月23日,由谷歌新闻实验室(GoogleNewsLab)联合Bellingcat、DigD...

NAS 部署网盘资源搜索神器:全网资源一键搜,免费看剧听歌超爽!

还在为找不到想看的电影、电视剧、音乐而烦恼?还在各个网盘之间来回切换,浪费大量时间?今天就教你如何在NAS上部署aipan-netdisk-search,一款强大的网盘资源搜索神器,让你全网资源...

使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建

前言回顾在上一篇文章《搭建持久化的INFINIConsole与Easysearch容器环境》中,我们详细介绍了如何使用基础的dockerrun命令,手动启动和配置INFINICon...

为庆祝杜特尔特到访,这个国家宣布全国放假?

(观察者网讯)近日,一篇流传甚广的脸书推文称,为庆祝杜特尔特去年访问印度,印度宣布全国放假,并举办了街头集会以示欢迎。菲媒对此做出澄清,这则消息其实是“假新闻”。据《菲律宾世界日报》2日报道,该贴子...

一课译词:毛骨悚然(毛骨悚然的意思是?)

PhotobyMoosePhotosfromPexels“毛骨悚然”,汉语成语,意思是毛发竖起,脊梁骨发冷;形容恐惧惊骇的样子(withone'shairstandingonend...

Bing Overtakes Google in China&#39;s PC Search Market, Fueled by AI and Microsoft Ecosystem

ScreenshotofBingChinahomepageTMTPOST--Inastunningturnintheglobalsearchenginerace,Mic...

找图不求人!6个以图搜图的识图网站推荐

【本文由小黑盒作者@crystalz于03月08日发布,转载请标明出处!】前言以图搜图,专业说法叫“反向图片搜索引擎”,是专门用来搜索相似图片、原始图片或图片来源的方法。常用来寻找现有图片的原始发布出...

浏览器功能和“油管”有什么关联?为什么要下载

现在有没有一款插件可以实现全部的功能,同时占用又小呢,主题主要是网站的一个外观,而且插件则主要是实现wordpress网站的一些功能,它不仅仅可以定制网站的外观,还可以实现很多插件的功能,搭载chro...