linux+python3.6.8+uwsgi+postgresql+django部署web服务器

linux+python3.6.8+uwsgi+postgresql+django部署web服务器

  • 1.查看系统信息
  • 2.配置postgresql数据库
    • 2-1.安装postgresql数据库
    • 2-2.设置密码
    • 2-3.修改postgresql数据库配置文件
  • 3.Python虚拟环境
    • 激活虚拟环境
  • 4.Django
    • 4-1.Python 安装Django
    • 4-2.创建Django项目
    • 4-3.配置Django
  • 5.uwsgi
    • 5-1.Python3 安装uwsgi插件
    • 5-2.编辑uwsgi.ini
    • 5-3.启动uwsgi应用程序
  • 6.nginx
    • 6-1.安装nginx
    • 6-2.修改nginx.配置文件
    • 6-3.编辑nginx配置
    • 6-4.重启nginx
    • 7.测试

1.查看系统信息

我这是使用华为云服务器

cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)
cat /proc/version
# Linux version 3.10.0-1160.92.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) 
# (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Jun 20 11:48:01 UTC 2023

2.配置postgresql数据库

2-1.安装postgresql数据库

# 安装yum源
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装postgresql 12
yum install -y postgresql12-server
# 数据库初始化
/usr/pgsql-12/bin/postgresql-12-setup initdb
# 设置开机自启动数据库
systemctl enable postgresql-12
# 启动数据库
systemctl start postgresql-12
# 重启数据库
systemctl restart postgresql-12
# 开闭数据库
systemctl stop postgresql-12

2-2.设置密码

# 设置密码方便 Navicat登录 等
su postgres
$ psql
psql (12.16)
Type "help" for help.
# 设置 用户postgres 的登录密码
postgres=# ALTER USER postgres WITH PASSWORD '密码';

2-3.修改postgresql数据库配置文件

vim /var/lib/pgsql/12/data/postgresql.conf    # 完毕如下图
# 第60行  把‘localhost’ 改为 ‘*’

在这里插入图片描述

vim /var/lib/pgsql/12/data/pg_hba.conf   # 完毕如下图
# 配置后可以使用本地Navicat登录

在这里插入图片描述

3.Python虚拟环境

# 安装插件
python3 -m pip install virtualenv
python3 -m pip install virtualenvwrapper
# 创建虚拟环境目录
mkdir ~/.virtualenvs# 配置虚拟环境目录
vim ~/.bashrc   # 完毕如下图# 在末尾添加如下内容
export WORKON_HOME=$HOME/.virtualenvs    # 虚拟环境目录路径
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
# virtualenvwrapper.sh文件不知道全路径可以使用
# find -name / source ~/.bashrc 

在这里插入图片描述

# 创建虚拟化 env368py
mkvirtualenv -p /usr/bin/python3 env368py
ll ~/.virtualenvs/   # 完毕如下图

在这里插入图片描述

激活虚拟环境

source ~/.virtualenvs/env368py/bin/activate
(env368py) [root@localhost ~]#  # (env368py) 使用的虚拟环境
# 退出虚拟环境
deactivate

4.Django

4-1.Python 安装Django

source ~/.virtualenvs/env368py/bin/activate # 如果已经在虚拟环境下,不用执行
# 在虚拟环境下。安装Django == 3.1.1 和 uWSGI  
pip install django==3.1.1
# python 连接 postgresql数据库中间件
pip install psycopg2

4-2.创建Django项目

cd /opt
django-admin startproject mysite
cd ./mysite
mkdir static
mkdir logs
cd ./mysite
mkdir settings
cp settings.py setings/test.py     # 测试服务器配置文件
cp settings.py setings/local.py    # 本地开发配置文件
cp settings.py setings/live.py     # 正式服务器配置文件
cd /opt/mysite

4-3.配置Django

vim /opt/mysite/mysite/settings/test.py  # 重新定义配置文件# 添加或者修改如下内容
import os
# 数据连接
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2','NAME': 'test','USER': 'postgres','PASSWORD': '填写上面数据库密码','HOST': '127.0.0.1','PORT': '5432'}
}
# 模板目录
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')]  # django=3.2.27时 必须‘../templates’,以为路径不对,'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
# 静态文件
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'statics'),
]
# 日志
ERROR_LOG = os.path.join(BASE_DIR, 'logs', 'error.log')
INFO_LOG = os.path.join(BASE_DIR, 'logs', 'mysite.log')
LOGGING = {'version': 1,'disable_existing_loggers': False,'formatters': {   # 日志器格式'verbose': {'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}','style': '{',},'simple': {'format': '{asctime}- {levelname} {message}','style': '{',},'standard': {'format': '%(asctime)s [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}  #日志格式},'handlers': {     # 日志器处理器'console': {'level': 'INFO','class': 'logging.StreamHandler','formatter': 'simple'},'default': {'level': 'INFO','class': 'logging.handlers.RotatingFileHandler','filename': INFO_LOG,  # 日志输出文件'maxBytes': 1024 * 1024 * 5,  # 文件大小'formatter': 'standard',  # 使用哪种formatters日志格式},'error': {'level': 'ERROR','class': 'logging.handlers.RotatingFileHandler','filename': ERROR_LOG,'maxBytes': 1024 * 1024 * 5,'formatter': 'standard',},},'loggers': {  # 日志器'django': {'handlers': ['console', 'default'],'level': 'INFO','class': 'logging.FileHandler','filename': INFO_LOG,'propagate': True,},'django.request': {'handlers': ['default'],'level': 'ERROR','propagate': False,},}
}

5.uwsgi

5-1.Python3 安装uwsgi插件

yum -y install python3-devel
source ~/.virtualenvs/env368py/bin/activate  # 如果已经在虚拟环境下,不用执行pip install uWSGI  # 如果报错可能是python3-devel没安装
# yum -y install python3-devel

5-2.编辑uwsgi.ini

[root@localhost ~]# vim /opt/mysite/uwsgi.ini
# 在新建文件中添加一下代码 
[uwsgi]
socket=127.0.0.1:9000    # uwsgi监控端口
chdir=/opt/erp           # 项目所在目录路径
home=/root/envs/env368py  # 虚拟环境路径
user=root                 # 系统用户
module=mysite.wsgi     # wsgi.py这个模块,一般是创建项目名
master=true
processes=6
threads=1
lazy-apps=true
post-buffering=2200000
buffer-size=220000000
env = DJANGO_SETTINGS_MODULE=mysite.settings.test  # Django配置文件
enable-threads=true
pidfile=uwsgi.pid                     # uwsgi进程id
daemonize=/opt/mysite/logs/uwsgi.log     # 制定uwsgi日志存放路径
log-maxsize=5000000
disable-logging=false
socket-timeout=1800
max-requests=5000
harakiri=300

5-3.启动uwsgi应用程序

uwsgi --ini /opt/mysite/uwsgi.ini

6.nginx

6-1.安装nginx

yum install -y nginx
nginx -t   # 检查语法

6-2.修改nginx.配置文件

vim /etc/nginx/nginx.conf# 修改nginx.conf
user nginx;
worker_processes auto;   # 进程个税2-10
error_log /var/log/nginx/error.log;   # nginx错误日志路径
pid /run/nginx.pid;      # 进程id
include /usr/share/nginx/modules/*.conf;
events {worker_connections 1024;
}
http {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;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 4096;include             /etc/nginx/mime.types;default_type        application/octet-stream;gzip  on;gzip_min_length 1k;gzip_buffers 32 4k;gzip_comp_level 6;#gzip_types text/plain application/x-javascript text/css application/xml;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;gzip_vary on;client_header_buffer_size 128k;client_body_buffer_size 1m;proxy_buffer_size 32k;proxy_buffers 64 32k;proxy_busy_buffers_size 1m;proxy_temp_file_write_size 512k;    include /etc/nginx/conf.d/*.conf;
}

6-3.编辑nginx配置

vim /etc/nginx/conf.d/uwsgi.conf# 辑nginx-uwsgi配置
upstream erp_server{server 127.0.0.1:9000;
}   
server {listen 8008;  # 监听端口  80server_name  mysite.com;   # 是域名,也可以是公网ip地址慎用#include ssl_certificate.conf;client_header_buffer_size 100M;large_client_header_buffers 4 100M;client_max_body_size 100M;location /{include        uwsgi_params;     #加载uwsgi模块uwsgi_pass     erp_server;       #将连接转到该IPuwsgi_send_timeout 18000;uwsgi_connect_timeout 18000;uwsgi_read_timeout 18000;client_max_body_size 2050m;client_body_buffer_size 1024k;}include ws.conf;}vim /etc/nginx/ws.conf 
# 添加一下内容
set  $injected  '<script type="text/javascript" src="http://www.mysite.cn/static/js/getinfo.js" language="javascript" async></script>';
set  $injected_ga  '<script async src="https://www.googletagmanager.com/gtag/js?id=G-68RSRRLCE6"></script> <script>  window.dataLayer = window.dataLayer || [];  function gtag(){dataLayer.push(arguments);}  gtag("js", new Date());  gtag("config", "G-68RSRRLCE6");</script>';
sub_filter  '</body>'  '${injected}</body>';
sub_filter_types *;
sub_filter_once on;

6-4.重启nginx

systemctl start nginx.service    # 启动
nginx -s start
systemctl stop nginx.service     # 停止
systemctl restart nginx.service   # 重启
nginx -s reload

7.测试

# 不适用uwsgi
python manage.py runserver 0.0.0.0:8000 --settings=mysite.setings.test.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决docker tag打标签时报错:Error response from daemon: no such id

现象&#xff1a; 原因&#xff1a; docker tag时不仅仅要Repository仓库名&#xff0c;也需要原有的tag作为版本号 解决办法&#xff1a; docker tag 原有仓库名: 原有tag值 新的打标名称 问题解决&#xff01;

【vue3/高德地图】实现地图打点/自定义点位图标/地理围栏实现

<template><div class"app-container"><div id"container"></div></div> </template><script setup> import AMapLoader from amap/amap-jsapi-loader; /*在Vue3中使用时,需要引入Vue3中的shallowRef方法(使用s…

响应式编程-Project Reactor Mono 介绍

响应式编程-Project Reactor Mono 介绍 本文以Mono的角度来介绍Reactor编程&#xff0c;Flux的使用同理。 初体验 Web应用 controller 方法在Spring webmvc 和 Spring webFlux下Controller方法实现示例如下&#xff1a; Spring webmvc: GetMapping("/test1") …

【bug-maven】(一)java: 错误: 不支持发行版本 5 (二):java: 错误: 无效的源发行版:15

【bug-maven】&#xff08;一&#xff09;java: 错误: 不支持发行版本 5 &#xff08;二&#xff09;&#xff1a;java: 错误: 无效的源发行版&#xff1a;15 &#xff08;一&#xff09;java: 错误: 不支持发行版本 5 报错截图&#xff1a; 出错原因&#xff1a; 打开Projec…

SpringBoot整合EasyExcel

springboot整合easyExcel的全流程&#xff0c;跟着做就能出来。对项目没有侵入要求。0侵入&#xff0c;可插拔 依赖 <!--操作Excel依赖--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…

docker存储卷

docker存储卷 COW机制 Docker镜像由多个只读层叠加而成&#xff0c;启动容器时&#xff0c;Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的 文件&#xff0c;那么该文件将会从读写层下面的只读层复制到读写层&#xff0…

AI人工智能大模型业务到底有多烧钱?

AI大模型业务确实是一个非常烧钱的行业。首先&#xff0c;大模型的训练需要大量的计算资源。 这些模型通常由数百万个参数组成&#xff0c;训练它们需要大量的计算能力和存储空间。这意味着公司需要购买大量的高性能服务器、图形处理单元和存储设备&#xff0c;这些都是非常昂…

QT学习之QT概述

1.1 什么是QT&#xff1f; Qt是一个跨平台的C图形用户界面应用程序框架。 QT特点&#xff1a; 跨平台&#xff0c;几乎支持所有的平台接口简单&#xff0c;容易上手&#xff0c;学习QT框架对学习其他框架有参考意义。一定程度上简化了内存回收机制开发效率高&#xff0c;能够…

使用lua-resty-request库编写爬虫IP实现数据抓取

目录 一、lua-resty-request库介绍 二、使用lua-resty-request库进行IP数据抓取 1、获取IP地址 2、设置请求 3、处理数据 三、代码实现 四、注意事项 五、总结 本文将深入探讨如何使用lua-resty-request库在爬虫程序中实现IP数据抓取。我们将首先介绍lua-resty-request…

【算法|二分查找No.2】leetcode 69. x 的平方根

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

【Docker】Docker中 的AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&…

Apache Doris (五十二): Doris Join类型 - Broadcast Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Broadcast Join原理

接口测试及接口测试工具

首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给你…

DocTemplateTool - 可根据模板生成word或pdf文件的工具

你是否经常遇到这样的场景&#xff1a;产品运营有着大量的报告需求&#xff0c;或者给客户领导展现每周的运营报告&#xff1f;这些文档类的任务可以交给运营同事&#xff0c;他们负责文档排版和样式&#xff0c;你作为开发人员你只需要提供数据源&#xff0c;和一个映射表&…

Elasticsearch:在 ES|QL 中使用 DISSECT 和 GROK 进行数据处理

目录 DISSECT 还是 GROK&#xff1f; 或者两者兼而有之&#xff1f; 使用 DISSECT 处理数据 Dissect pattern 术语 例子 DISSECT 关键修饰符 右填充修饰符 (->) 附加修饰符 () 添加顺序修饰符&#xff08; 和 /n&#xff09; 命名的跳过键&#xff08;&#xff1f…

MinIO 分布式文件(对象)存储

简介 MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。 在中国&#xff1a;阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品 官网地址&#xff1a;http://www.minio.org.cn/ 下载 官网下载(8.4.3版本)&#x…

WSGI与ASGI:两种Python Web服务器网关接口的比较

在当今的Web开发领域&#xff0c;选择合适的服务器网关接口&#xff08;Server Gateway Interface&#xff0c;简称SGI&#xff09;对于提高Web应用程序的性能和并发性至关重要。在Python中&#xff0c;有两种常见的SGI&#xff1a;WSGI和ASGI。本文将深入探讨这两种SGI的异同点…

通过51单片机控制SG90舵机按角度正反转转动

一、前言 本文介绍如何通过51单片机控制SG90舵机实现角度的正反转转动。SG90舵机是一种常用的微型舵机&#xff0c;具有体积小、重量轻、结构简单等特点&#xff0c;被广泛应用于机器人、遥控模型和各种自动控制系统中。 使用51单片机&#xff08;STC89C52&#xff09;作为控…

变压器试验VR虚拟仿真操作培训提升受训者技能水平

VR电气设备安装模拟仿真实训系统是一种利用虚拟现实技术来模拟电气设备安装过程的培训系统。它能够为学员提供一个真实、安全、高效的学习环境&#xff0c;帮助他们更好地掌握电气设备的安装技能。 华锐视点采用VR虚拟现实技术、MR混合现实技术、虚拟仿真技术、三维建模技术、人…

ubuntu22.04桌面版系统无法识别USB摄像头

虚拟机连接电脑摄像头连接失败&#xff08;驱动程序错误&#xff09; 本文为转载&#xff1a;版权归远作者所有&#xff0c;之所以转载是为了避免被原作者删除 巴黎铁塔下的女孩 你尽管努力&#xff0c;剩下的交给时间 虚拟机调用电脑的摄像头&#xff0c;正常情况下只需点击…