centos+nginx+uwsgi+Django实现IP+port访问服务器


Posted in Python onNovember 15, 2019

环境

  • MacBookAir
  • 阿里云ESC: Centos7.0
  • nginx+1.16.1
  • uwsgi=2.0.18
  • django=2.2.7

服务器

进入阿里云网站注册账号进行购买,选择地区和服务器系统配置

购买成功之后添加安全组(设置可访问端口,不知道怎么设置的,网站有文档,这里不赘述了)

centos+nginx+uwsgi+Django实现IP+port访问服务器

centos+nginx+uwsgi+Django实现IP+port访问服务器

购买成功之后已经创建了一个实例,点击远程连接会有一个密码(不记得了可以重启实例进行设置)自己本地做好文档记录

进入远程连接界面后使用root+登录密码(这个密码我是重置实例密码获取到的)进行连接

centos+nginx+uwsgi+Django实现IP+port访问服务器

远程连接服务器工具

我使用的是fianlshell

安装

cd dir(进入你安装的目录)
curl -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_install.sh;
chmod +x finalshell_install.sh;
sudo ./finalshell_install.sh

连接

centos+nginx+uwsgi+Django实现IP+port访问服务器centos+nginx+uwsgi+Django实现IP+port访问服务器

完成连接进行环境配置

环境配置

python3安装: 参考这篇文章进行安装(编译安装前(make && make install) 先执行命令:yum install libffi-devel -y (解决:ModuleNotFoundError: No module named '_ctypes'))

pip3的使用:

因为已经安装了python3,python3安装目录下已经存在了pip3,很多安装包必须使用pip3进行安装;centos已经安装的python2中存在pip我们需要建立软连接(ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3)

mysql安装

下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
安装mysql源:yum localinstall mysql57-community-release-el7-8.noarch.rpm
安装mysql源:yum install mysql-devel
安装MySQL(总计851M,翻墙):yum install mysql-community-server
执行命令:pip3 install mysqlclient
启动MYSQL服务:systemctl start mysqld
查看MYSQLd的启动状态:systemctl status mysqld
开机启动:systemctl enable mysqld
修改root本地登录密码:
获取密码:grep 'temporary password' /var/log/mysqld.log
进入mysql:mysql -uroot -p
设置密码:set password for 'root'@'localhost'=password('你的数据库密码');

* 安装过程中可能出现重置密码失败的情况,我实现的情况是:1、实现mysql免密登录;2、重置密码(可能出现password不存在的情况,更password为authentication_string );3、刷新重置列表:FLUSH PRIVILEGES 4、退出mysql; 5、输入mysql -u root -p。进行密码登录;复制代码

Django安装

执行:pip3 install django

执行:django-admin help 进行验证是否安装成功

uwsgi安装

执行:pip3 install uwsgi

验证:uwsgi --version

注意:如果出现错误需要建立软连接:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

nginx安装

执行:yum install nginx

验证:nginx -V

注意:使用yum安装可能出现错误,这是因为安装了python3导致的,这个时候需要去修改文件内容(根据报错信息进行百度,进行错误修改)

注意

上面我们已经将所需要的环境和软件已经安装完毕了,这中间可能出现一些问题,我们需要搜索一些资料进行修改。因为这里每个人遇见的问题可能不一样,因此没有一一列举,还请包涵;

下面我们就创建django项目,实现IP加port对服务器进行访问;

创建Django项目

在根目录下创建Django项目

cd /
mkdir projects
cd projects
django-admin startproject test

数据库中创建test 数据库

mysql -u root -p
creat database test;

*test项目的settings 文件

DEBUG = False
ALLOWED_HOSTS = ['你的服务器IP']

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'test' #你的项目名称
]

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'test',
 'USER': 'root',
 'PASSWORD': 'mysql登录密码',
 'HOST': 'localhost',
 'PORT': '3306',
 }
}

:warning:这里最好是一个本地项目能够正常运行的项目拖入到projects目录下,进行上面的修改就好了

执行数据迁移指令

python3 manage.py makemigrations
python3 manage.py migrate

完成Django项目的创建

nginx.conf文件的配置

文件路径:/etc/nginx/nginx.conf

对下面的内容进行修改

centos+nginx+uwsgi+Django实现IP+port访问服务器

这里的IP(如果是阿里云esc服务器的化)要使用服务器的私有IP

nginx的一些操作指令

systemctl start nginx.service 开启
systemctl stop nginx.service 暂停
systemctl reload nginx.service 重启
systemctl status nginx.service 查看状态

注意:在你重复开启nginx的时候,你需要先杀死nginx进程才可以开启nginx不然会有错误。

错误文档查看路径:/var/log/nginx/error.log和/var/log/nginx/access.log

uwsgi的使用和配置

在/projects/test路径下创建uwsgi.ini文件(与manage.py在同一个目录下)

uswgi中的内容如下

[uwsgi]

wsgi-file=/server/http_practice/http_practice/wsgi.py

# 项目目录
chdir=/projes/test
# 指定项目的application
module=test.wsgi:application
# 指定sock的文件路径 
#socket=你的IP+端口号(这里的IP要使用服务器(如果是阿里云esc服务器的化)的私有IP,端口要与nginx.conf中写的IP+port一致)
# 进程个数 
workers=5
pidfile=uwsgi.pid
# 指定IP端口 
http=172.18.81.20:80
# 指定静态文件
#static-map=/static=/opt/proj/teacher/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=uwsgi.log

启动项目

启动nginx:systemctl start nginx.service

启动uwsgi:uwsgi3 --ini uwsgi.ini(若出现端口被占有,输入:sudo fuser -k 8080(你配置的端口)/tcp)

访问你的Django项目

浏览器输入:IP+port+django中设置的url

浏览器访问失败问题查找

uwsgi错误文档查询:/projects/test/uwsgi.log(该文件启动uwsgi会自动生成)
nginx错误文档查询:/var/log/nginx/error.log和/var/log/nginx/access.log

结语

开发中总是会出现很多问题,重要的是要找到错误的根源在那里,那里可以找错误的详细描述,然后再根据详细描述去查找。不要盲目的查找问题,更不要臆测,面对浏览器,你输入的关键跟问题联系紧密才能够给你准确的找到答案。

一篇文章不可能解决所有问题,更不可能解决所有人的问题。还是那句话,踩过坑才能对知识有更深的感悟。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python开发之thread线程基础实例入门
Nov 11 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
使用Python更换外网IP的方法
Jul 09 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
python面向对象法实现图书管理系统
Apr 19 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
python前后端自定义分页器
Apr 13 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 #Python
python matplotlib如何给图中的点加标签
Nov 14 #Python
Python中的引用和拷贝实例解析
Nov 14 #Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 #Python
通过python扫描二维码/条形码并打印数据
Nov 14 #Python
VSCode中自动为Python文件添加头部注释
Nov 14 #Python
python中的函数递归和迭代原理解析
Nov 14 #Python
You might like
深入php self与$this的详解
2013/06/08 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
PHP基本语法实例总结
2016/09/09 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
django_orm查询性能优化方法
2018/08/20 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Python学习之os模块及用法
2020/06/03 Python
"引用"与指针的区别是什么
2016/09/07 面试题
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
秋游活动策划方案
2014/02/16 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
三万活动总结
2014/04/28 职场文书
大学生新学期计划书
2014/04/28 职场文书
迎七一演讲稿
2014/09/12 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
迎新生欢迎词
2015/01/23 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL