centos+nginx+uwsgi+Django实现IP+port访问服务器
环境
- MacBookAir
- 阿里云ESC:Centos7.0
- nginx+1.16.1
- uwsgi=2.0.18
- django=2.2.7
服务器
进入阿里云网站注册账号进行购买,选择地区和服务器系统配置
购买成功之后添加安全组(设置可访问端口,不知道怎么设置的,网站有文档,这里不赘述了)
购买成功之后已经创建了一个实例,点击远程连接会有一个密码(不记得了可以重启实例进行设置)自己本地做好文档记录
进入远程连接界面后使用root+登录密码(这个密码我是重置实例密码获取到的)进行连接
远程连接服务器工具
我使用的是fianlshell
安装
cddir(进入你安装的目录) curl-ofinalshell_install.shwww.hostbuf.com/downloads/finalshell_install.sh; chmod+xfinalshell_install.sh; sudo./finalshell_install.sh
连接
完成连接进行环境配置
环境配置
python3安装:参考这篇文章进行安装(编译安装前(make&&makeinstall)先执行命令:yuminstalllibffi-devel-y(解决:ModuleNotFoundError:Nomodulenamed'_ctypes'))
pip3的使用:
因为已经安装了python3,python3安装目录下已经存在了pip3,很多安装包必须使用pip3进行安装;centos已经安装的python2中存在pip我们需要建立软连接(ln-s/usr/local/python3/bin/pip3/usr/bin/pip3)
mysql安装
下载mysql源安装包:wgethttp://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装mysql源:yumlocalinstallmysql57-community-release-el7-8.noarch.rpm 安装mysql源:yuminstallmysql-devel 安装MySQL(总计851M,翻墙):yuminstallmysql-community-server 执行命令:pip3installmysqlclient 启动MYSQL服务:systemctlstartmysqld 查看MYSQLd的启动状态:systemctlstatusmysqld 开机启动:systemctlenablemysqld 修改root本地登录密码: 获取密码:grep'temporarypassword'/var/log/mysqld.log 进入mysql:mysql-uroot-p 设置密码:setpasswordfor'root'@'localhost'=password('你的数据库密码');
*安装过程中可能出现重置密码失败的情况,我实现的情况是:1、实现mysql免密登录;2、重置密码(可能出现password不存在的情况,更password为authentication_string);3、刷新重置列表:FLUSHPRIVILEGES4、退出mysql;5、输入mysql-uroot-p。进行密码登录;复制代码
Django安装
执行:pip3installdjango
执行:django-adminhelp进行验证是否安装成功
uwsgi安装
执行:pip3installuwsgi
验证:uwsgi--version
注意:如果出现错误需要建立软连接:ln-s/usr/local/python3/bin/uwsgi/usr/bin/uwsgi
nginx安装
执行:yuminstallnginx
验证:nginx-V
注意:使用yum安装可能出现错误,这是因为安装了python3导致的,这个时候需要去修改文件内容(根据报错信息进行百度,进行错误修改)
注意
上面我们已经将所需要的环境和软件已经安装完毕了,这中间可能出现一些问题,我们需要搜索一些资料进行修改。因为这里每个人遇见的问题可能不一样,因此没有一一列举,还请包涵;
下面我们就创建django项目,实现IP加port对服务器进行访问;
创建Django项目
在根目录下创建Django项目
cd/ mkdirprojects cdprojects django-adminstartprojecttest
数据库中创建test数据库
mysql-uroot-p creatdatabasetest;
*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目录下,进行上面的修改就好了
执行数据迁移指令
python3manage.pymakemigrations python3manage.pymigrate
完成Django项目的创建
nginx.conf文件的配置
文件路径:/etc/nginx/nginx.conf
对下面的内容进行修改
这里的IP(如果是阿里云esc服务器的化)要使用服务器的私有IP
nginx的一些操作指令
systemctlstartnginx.service开启 systemctlstopnginx.service暂停 systemctlreloadnginx.service重启 systemctlstatusnginx.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 #自动移除unixSocket和pid文件当服务停止的时候 vacuum=true #序列化接受的内容,如果可能的话 thunder-lock=true #启用线程 enable-threads=true #设置自中断时间 harakiri=30 #设置缓冲 post-buffering=4096 #设置日志目录 daemonize=uwsgi.log
启动项目
启动nginx:systemctlstartnginx.service
启动uwsgi:uwsgi3--iniuwsgi.ini(若出现端口被占有,输入:sudofuser-k8080(你配置的端口)/tcp)
访问你的Django项目
浏览器输入:IP+port+django中设置的url
浏览器访问失败问题查找
uwsgi错误文档查询:/projects/test/uwsgi.log(该文件启动uwsgi会自动生成) nginx错误文档查询:/var/log/nginx/error.log和/var/log/nginx/access.log
结语
开发中总是会出现很多问题,重要的是要找到错误的根源在那里,那里可以找错误的详细描述,然后再根据详细描述去查找。不要盲目的查找问题,更不要臆测,面对浏览器,你输入的关键跟问题联系紧密才能够给你准确的找到答案。
一篇文章不可能解决所有问题,更不可能解决所有人的问题。还是那句话,踩过坑才能对知识有更深的感悟。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。