admin管理员组文章数量:1607673
目录
前 言
一、购买阿里云ECS
二、MobaXterm登录测试
三、安装相关软件
3.1 更新系统软件包
3.2 安装软件管理包和可能使用的依赖
3.3 安装新版本sqlite3
3.3.1 下载sqlite3新版本
3.3.2 编译和安装
(1)新建安装目录
(2)编译
(3)安装
(4)建立软连接
(5)配置系统lib库
四、安装Python3.7
4.1 下载和解压
4.2 编译和安装
4.3 建立软连接
五、安装Mysql1.57
5.1下载mysql安装包
5.2 安装mysql服务:
5.3 启动mysql
5.4 修改MySQL临时密码
5.5 允许远程访问
5.6 使用Navicat连接测试
六、安装virtualenv项目环境
6.1 安装virtualenv
6.2 创建虚拟环境
6.3 虚拟环境里安装uwsgi
6.4 给uwsgi建立软链接
七、本地项目复制至云服务器
7.1 本地导出requirements.txt文件
7.2 项目文件复制
7.3 虚拟环境里安装requirements.txt
八、创建项目数据库
8.1 新建数据库
8.2 Django创建数据表
8.2 导入本地sql数据
8.2.1 本地导出sql文件
8.2.2 sql文件导入新库
九、项目运行
9.1 试运行项目程序
9.2 配置uwsgi文件
9.3 安装nginx
9.4 配置nginx.conf文件
9.5 访问项目页面
十、购买解析备案域名
10.1 购买域名
10.2 解析域名
10.3 备案域名
十一、部署SSL证书
11.1 申请SSL证书
11.2 下载SSL证书
11.3 部署SSL证书
11.4 重启nginx
11.5 解决SSL模块报错
11.5.1 报错原因
11.5.2 安装SSL模块
11.5.3. 重启nginx
11.6 443加载static文件
11.7 完美结束!!
鸣谢:
前 言
纯小白手工记录全称操作,以备以后查询修正。内容可能有所偏驳,操作也并非最佳途径,但绝对是真实操作记录,基本上每一步骤都有代码和对应的截图,所以也略显繁琐,记性不好没办法,供以后参考和复工。
本文内容:购买阿里云ECS、安装环境文件、项目文件上传至服务器、项目试运行、安装nginx运行项目、购买域名、域名备案、申请SSL证书并部署。迁移前提:已有本地Django项目,项目目录、文件已齐全(尤其是static文件夹已在setting里设置好),能运行正常。纯粹是第一次部署,因为看阿里云特价便宜,就拿之前做的一个Django项目试试手,顺便买个域名和免费SSL证书全套部署,拿真金白银来学习也是拼了,O(∩_∩)O哈哈~! 考虑用MobaXterm或Xshell还是用宝塔面板呢,具体优劣性参考了大神们大作,也是发蒙,先用MobaXterm试试吧,估计相差不大,边摸索边学习,走起……
一、购买阿里云ECS
既然选的阿里云特价机,也就不能选配置了,都是固定的,按照阿里云步骤直到付款就行了。
付款了,心里还有点茫然,不知道下面要经历多少颠簸和困难,逢山开路遇水搭桥,最终结果必然是成功的,继续……
付款就有了云服务器ECS,先修改实例名称和重置密码,方便以后使用:
看了配置,发现买的系统是默认阿里云操作系统:Alibaba Cloud Linux / Alibaba Cloud Linux 3.2104 LTS 64位,不懂这是啥玩意操作系统,立马就又更换了CentOS 7.6 64位操作系统重启,继续……
更改实例名:ip4g
更改密码:***
年纪大了,记性不好,最好详细记录每一步,一旦发现问题了,可以回头查记录,呵呵!
改完密码,利用阿里云自带的远程登录试测试一下,成功。
二、MobaXterm登录测试
连接后居然失败,想想是不是要开放端口。转头登录阿里云安全组配置端口去。列举我可能用到的端口:django 8000端口,mysql 3306端口, https 443和80端口,预设nginx、uwsgi用 7788端口备用,MobaXterm SSH 22端口,这些端口都开放一下。
设置时,发现22是默认开放的,再看MobaXterm为啥没登录上,汗!!! 公网IP输入错了,改正了就登上了。我的老脸呀!!!
继续开放端口操作,新建安全组,手工输入端口,开启。这个以后有需要,可以随时来修改、添加。
三、安装相关软件
操作系统环境搭建好了,接下来开始正儿八经和项目相关内容了,安装相关软件。
3.1 更新系统软件包
yum update -y
3.2 安装软件管理包和可能使用的依赖
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
# 安装软件管理包和可能使用的依赖
3.3 安装新版本sqlite3
根据之前的经验,默认sqlite3的版本为3.7.17,django是会报错的,所以先查看一下默认版本。果然3.7.17,开始安装新版本。
python
import sqlite3
sqlite3.sqlite_version
exit()
注:保留原装的python2.7.5,据说centos7有一些命令是依赖2.7.5的。
3.3.1 下载sqlite3新版本
到SQLite官网的下载页面:https://sqlite/download.html ,这里是最新的版本
也不知道各个版本的区别,反正如法炮制,选择新版本这个安装即可,这个有配置文件。点击获取到sqlite3下载路径:https://sqlite/2024/sqlite-autoconf-3450300.tar.gz。我自己选的ECS上软件下载路径: /usr/local/ (下同,可自行选择)。
cd /usr/local
wget https://sqlite/2024/sqlite-autoconf-3450300.tar.gz
tar -zxvf sqlite-autoconf-3450300.tar.gz
cd sqlite-autoconf-3450300
3.3.2 编译和安装
(1)新建安装目录
安装目录也可按自己的习惯选择或新建
mkdir /usr/local/sqlite3.45
(2)编译
./configure --prefix=/usr/local/sqlite3.45/
固定语法:‘–prefix’后接安装路径。
(3)安装
make clean # 清除缓存
make && make install # 安装
上面这些命令将会下载SQLite源代码,并进行解压和编译、安装。
按上述方式安装后,
会把编译好的二进制文件安装到 /usr/local/sqlite3.45/lib
,
会把头文件sqlite3.h sqlite3ext.h
安装到/usr/local/sqlite3.45/include
,
我们需要知道这两个路径,下面安装python3时要用到。
(4)建立软连接
cd /usr/bin # 切换到bin路径
ls -la sqlite* # 查看sqlite已经存在的软连接
#若提示:ls: cannot access sqlite*: No such file or directory。则还未建立软连接,直接执行下面的代码,建立软连接即可
ln -s /usr/local/sqlite3.45/bin/sqlite3 /usr/bin/sqlite3
注:其中/usr/local/sqlite3.45/bin/sqlite3为sqlite3的安装路径下的bin路径中的sqlite3, /usr/bin/sqlite3为固定位置
查看是否已存在软连接结果:
如上图红圆框,已有软连接,则要先删除之前的软连接后再新建。
rm -rf sqlite3 # 删除
ln -s /usr/local/sqlite3.45/bin/sqlite3 /usr/bin/sqlite3 # 新建
ls -la sqlite* # 再次查看软连接
sqlite3 --version # 查看版本
如下图,红色方框显示sqlite3版本 3.45.3,安装告成!
(5)配置系统lib库
编译安装完成后,你需要将sqlite的库文件路径加入到系统环境变量中。
echo "/usr/local/sqlite3.45/lib" > /etc/ld.so.conf.d/sqlite3.conf
ldconfig
该命令将会在`/etc/ld.so.conf.d/`目录下创建一个名为`sqlite.conf`的文件,并将`/usr/local/sqlite3.45/lib`路径添加到其中。然后重新加载系统动态链接库。
至此,新版本sqlite3已成功安装并配置完成。
四、安装Python3.7
4.1 下载和解压
下载方法和sqlite3的下载相似。本地安装的python3.7.7版本,所以阿里云我也安装该版本。官网下载地址为: https://www.python/ftp/python/3.7.7/Python-3.7.7.tgz
cd /usr/local
wget https://www.python/ftp/python/3.7.7/Python-3.7.7.tgz
tar -zxvf Python-3.7.7.tgz
4.2 编译和安装
进入 解压的Python-3.7.7文件夹:
cd Python-3.7.7
新建python安装路径(可自行选择路径),
mkdir /usr/local/python3
常规安装python3如下代码,该代码没有加sqlite3参数的默认安装,python会自动导入原版本的sqlite3.7.17,导致以上安装的sqlite3失效(注:失效也可以通过重新设置生效)。
# 这四行代码是常规操作,不要使用
cd /usr/local/Python-3.7.7/ # 切换到解压后的路径
./configure --prefix=/usr/local/python3 # 编译,‘--prefix’后接安装路径
make clean # 清除缓存
make && make install # 安装
划重点:将上述代码修改为(指定上面安装的sqlite3.45版本):
cd /usr/local/python-3.7.7/ # 切换到解压后的路径
# 编译,‘--prefix’后接安装路径,其中LD_RUN_PATH和LDFLAGS为sqlite3的二进制文件位置路径,CPPFLAGS是头文件的位置路径。上面安装sqlite3时已经提到。
LD_RUN_PATH=/usr/local/sqlite3.45/lib/ ./configure LDFLAGS="-L/usr/local/sqlite3.45/lib" CPPFLAGS="-I/usr/local/sqlite3.45/include" --prefix=/usr/local/python3/
LD_RUN_PATH=/usr/local/sqlite3.45/lib/ make # 编译时将sqlite3的二进制文件路径添加到动态链接库的搜索路径中
make clean # 清除缓存
make && make install # 安装
重复第三章的一句话:
按第三章方式安装sqlite3
后,
会把编译好的二进制文件安装到/usr/local/sqlite3.45/lib
,
会把头文件sqlite3.h sqlite3ext.h
安装到/usr/local/sqlite3.45/include
,
这两个路径,现在安装python3时用到了。
4.3 建立软连接
建立方法与sqlite3的软连接建立方式相同,先查看以前的软连接
ls -la python* # 查看python已存在的软连接
一般情况下,如果是新CentOS系统,查看以前的软连接会存在三个python软连接:
以上原来的三个软连接不做更改(因为很多系统命令会依赖python2.7),直接再新建一个python3的软连接即可:
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
Python3安装完成之后pip3也一块安装完成,不需要再单独安装,同样给pip3建立软链接。
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
至此,sqlite3和python3已经安装并且连接好了,可进行如下验证:
python3
import sqlite3
sqlite3.sqlite_version
exit()
[root@ip4g bin]# python3
Python 3.7.7 (default, May 22 2024, 14:57:23)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.45.3'
>>> exit()
可以看到,其中python版本为3.7.7,并且python3内的sqlite3版本为3.45.3,安装成功。
五、安装Mysql1.57
5.1下载mysql安装包
下载方法和python3.7、sqlite3大同,不再繁述,看代码:
cd /usr/local/
wget https://dev.mysql/get/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
5.2 安装mysql服务:
首先进入 cd /etc/yum.repos.d 目录,执行 yum -y install mysql-server
cd /etc/yum.repos.d
yum -y install mysql-server
然后报错,查大家都这样说的原因:GPG验证不通过,本机配置的这个软件包对应的公钥不对,签名验证失败。大意是如果使用的4.1以上版本的rpm的话,除了import mysql的公钥到个人用户的配置中,还需要import mysql的公钥到RPM的配置中。
解决办法如下,先执行:
rpm --import https://repo.mysql/RPM-GPG-KEY-mysql-2022
再次执行命令:yum -y install mysql-server,即可。
yum -y install mysql-server
5.3 启动mysql
systemctl start mysqld
ps -ef | grep mysql # 查看进程
5.4 修改MySQL临时密码
MySQL安装成功后会有一个临时密码,我们可以使用grep命令查看临时密码先登录进去MySQL,然后修改MySQL密码。
先获取MySQL临时密码:
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p*ixrF\)Fc\?9cf # 一定要注意转义字符,白白浪费一下午 汗!
# p后紧跟密码 无空格
注意一点:临时密码很有可能含有转义字符,登录输入时一定要转化,否则登录失败,不知道这个原因就可能浪费很长时间研究。白白浪费的一下午时间呀,汗!报错如下图:
转义字符转化后重新登录成功:
把mysql的密码校验强度改为低风险,修改mysql的密码长度,修改密码:
set global validate_password_policy=LOW;
set global validate_password_length=11
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mypassword0'; # 改密码
本想着设置一个稍微复杂的密码,不料报错:
注意:设置密码,密码含有@不行(含有非常规字符都不行),长度小于设置长度也不行。随后改正后修改密码成功。
5.5 允许远程访问
登录mysql后,切换到mysql数据库,
use mysql;
查看user表:
select User,Host from user;
发现默认root只允许localhost主机登录。修改为任何地址都可以访问。
update user set Host='%' where User='root';
刷新权限:
flush privileges;
刷新权限后,再重新查看user表:
select User,Host from user;
如上图,方框内“%”即:root已允许任意主机登录。
5.6 使用Navicat连接测试
连接名:自定义
主机:公网IP
密码:刚设置的密码
连接成功,读取到数据表数据,安装MySQL1.57大功告成。
六、安装virtualenv项目环境
6.1 安装virtualenv
建议大家都安装一个virtualenv,方便以后不同版本的项目管理,虽然当前只有这一个项目,O(∩_∩)O哈哈~。在任意目录下安装:pip3 install virtualenv, 并建立软连接:ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv 。
pip3 install virtualenv # 安装
# 建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
安装成功。
6.2 创建虚拟环境
在根目录下建立两个文件夹,主要用于存放env和网站项目文件的。(个人习惯,可根据自己的实际情况选择或创建)
mkdir -p /www/env # 该项目虚拟环境
mkdir -p /www/wwwroot # 该项目文件存放目录
切换到/www/env/下,创建指定版本的虚拟环境。
cd /www/env/
virtualenv --python=/usr/bin/python3 ip4g_env # 创建指定版本的虚拟环境
然后进入/www/env/ip4g_env/bin,启动虚拟环境:
cd /www/env/ip4g_env/bin
source activate # 启动该虚拟环境
如上图,标记红色圆圈的位置,出现(ip4g_env),说明是成功进入虚拟环境,ip4g是自定义的项目名称。
注意:以后项目操作大都在该虚拟环境下运行。
6.3 虚拟环境里安装uwsgi
pip3 install uwsgi
注意: 有人说,uwsgi要安装两次,系统里安装一次,虚拟环境安装一次。但我只在虚拟环境里安装了,之后一直也正常。
6.4 给uwsgi建立软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
七、本地项目复制至云服务器
7.1 本地导出requirements.txt文件
在本地项目根目录下,用下面的命令把当前的环境依赖包导出到requirements.txt文件。
pip freeze > requirements.txt
7.2 项目文件复制
把本地项目文件夹完整复制(拖拽)至:/www/wwwroot/
7.3 虚拟环境里安装requirements.txt
在虚拟环境下,进入项目根目录安装requirements.txt里的依赖包。
cd /www/wwwroot/IP4G/ # 在虚拟环境下进行
pip3 install -r requirements.txt # 依赖包
注:pip3 install -r requirements.txt时,把mysqlclient==1.4.6删掉才没报错。继续吧,之后报错了再来安装这个。先运行python3 manage.py check检查一下有没有报错,运行结果如图,没有报错。很好,继续。
python3 manage.py check
八、创建项目数据库
8.1 新建数据库
在阿里云数据库里,右键点击“新建数据库”,为防止编码报错,编码选择和本地项目一样的,如图(即便如此,也可能会有未知原因使导入sql时编码报错,下有解决方案):
当然也可以用代码来创建数据库,但总没有图形界面来的直接。
8.2 Django创建数据表
有了数据库之后,就可以用Django创建数据表了。在虚拟环境下,进入项目根目录依次执行以下代码:
cd /www/wwwroot/IP4G/
python3 manage.py check
python3 manage.py makemigrations
python3 manage.py migrate
(此处省去一个截图:该截图在编辑该文章时无缘无故或者不小心就不见了。这个代码又不能重复执行截图,只能就少个截图吧)
8.2 导入本地sql数据
8.2.1 本地导出sql文件
有了数据表,就把本地的数据库数据导入吧。还是使用Navicat 吧。直观省事,可少打字。
选中要导出的数据库,右键“转储SQL文件”->“结构和数据”,本地数据库导出sql文件,文件保存任意位置,如图:
8.2.2 sql文件导入新库
直观可见,新数据库右键,选择“运行SQL文件”进行导入,选择上一步保存的sql文件。
选好文件后,务必编码选:UTF-8(同你的sql文件,这也是默认值,一般不会错)。
如下图显示,即代表导入成功。如果中间有错误数据,根提日志提示解决。
注意一点: 当编码不一致时,可能会出现报错。当初第一次本地练习时就报错了,解决办法:用Pycharm打开sql文件,编码替换解决了(Pycharm 当前文件替换的快捷键为Ctrl+R,全局文件则为shift+Ctrl+R)
1.把文件中的所有的utf8mb4_0900_ai_ci替换为utf8_general_ci
2.把文件中的所有的utf8mb4替换为utf8
这是根据实际报错内容来对应替换的,大家各自按照报错内容替换。尽量不让报错。
九、项目运行
9.1 试运行项目程序
数据库有了数据后就可以试运行Django程序了(没有数据也能运行,只是没法检验结果)。在虚拟环境下,进入项目根目录运行程序:
cd /www/wwwroot/IP4G/
python3 manage.py runserver
如上图正常运行。
9.2 配置uwsgi文件
Django正常运行之后我们就开始配置一下uwsgi。在项目根目录里创建 uwsgi.ini 文件,编辑文件,设置uwsgi属性
#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:7788
#配置项目路径,项目的所在目录
chdir=/www/wwwroot/ip4g/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=ip4g/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
通过下面的命令启动运行uwsgi
uwsgi --ini uwsgi.ini
显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功
可能通过ps -ef|grep uwsgi 查看确认是否uwsgi启动.
ini配置文件其它相关命令,以后备用:
# 查看确认是否uwsgi启动
ps -ef|grep uwsgi
#停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid
#重启uwsgi
uwsgi --reload uwsgi.pid
9.3 安装nginx
进入cd /usr/local/目录,下载nginx
cd /usr/local/
wget http://nginx/download/nginx-1.13.7.tar.gz
下载完成后,执行解压命令:
tar -zxvf nginx-1.13.7.tar.gz
进入解压后的nginx-1.13.7文件夹,依次执行以下命令:
./configure
make && make install
9.4 配置nginx.conf文件
nginx默认安装的路径为:/usr/local/nginx
在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外.
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak
然后打开nginx.conf,把原来的内容删除,直接加入以下内容:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name 127.0.0.1:80; #改为自己的域名,没域名修改为127.0.0.1:80
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:7788; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT IP4G.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /www/wwwroot/IP4G/; #项目路径
}
location /static/ {
alias /www/wwwroot/IP4G/static/; #静态资源路径
}
}
}
进入/usr/local/nginx/sbin/目录
执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:./nginx
cd /usr/local/nginx/sbin/
./nginx -t
./nginx
终端没有任何提示就证明nginx启动成功。
9.5 访问项目页面
进入网站项目目录:cd /www/wwwroot/IP4G/
cd /www/wwwroot/IP4G/
执行下面命令
uwsgi --ini uwsgi.ini
以上步骤都没有出错的话。再进入/usr/local/nginx/sbin/目录,执行重启nginx : ./nginx -s reload
cd /www/wwwroot/IP4G/
uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
cd /usr/local/nginx/sbin/
./nginx -s reload
然后在浏览器里访问你的项目地址!(此时只能用http,不能用https)
成功访问,输入工号、密码登录,进入首页:
点开菜单栏每项,都能操作,大功告成,心里不免有些激动了,呼呼!
注意:项目的路径不要弄错,还有,项目的所有操作都要在虚拟环境下进行。
到这里,正常的部署工作就算结束了。但我要用真金白银继续部署下去。开始购买域名和申请SSL证书。
十、购买解析备案域名
10.1 购买域名
继续阿里云里一条龙服务,在域名平台下,搜索可购买域名,按步骤流程买下了 *** 域名,1年78元大洋,略微心疼下,继续……
10.2 解析域名
有了域名,马上开始解析,都在阿里云系统内,点几个鼠标的事,over:
10.3 备案域名
解析完测试,梦想着直接用域名访问项目页面,结束战斗呢,突然就跳出来了这个:
哎呀,忘了还得备案这回事呢,管的真宽呀,早知道不买域名浪费钱了。走,去备案,还好都在阿里云系统内进行,还算简单:
开始填写备案网页信息内容:
填完信息发现下一步要提交身份证拍照,用身份证照片还不行。只能等晚上到家了拿身份证继续了。晚上10点用手机阿里云APP提交身份证照片,并真人脸部识别通过后算真正提交资料了。第二天早上9点,阿里云客服致电2件事:1、身份验证;2、网页填写信息不合适,协商沟通修改后提交了。一个小时后,收到工信部ICP备案验证短信,限时1天内登录网站验证。立即执行验证。然后就是等待了…………。好在域名不能访问,用公网IP地址还是不影响访问的。备案没完成不影响,继续……
十一、部署SSL证书
11.1 申请SSL证书
继续阿里云里一条龙服务,SSL证书平台下,购买了免费证书,新政策有效期只有三个月,无所谓,够部署这个项目了。
按步骤申请SSL证书,填写申请信息提交。
按步骤完成DNS验证,也不知该点啥,反正点来点去就成功签发了。
看域名解析页面,确实添加了一条验证记录:
11.2 下载SSL证书
看SSL证书页面,有效期三个月,点击“下载”继续:
选择服务器类型Nginx的证书,点击下载,保存在任意位置,继续:
11.3 部署SSL证书
下载的证书文件解压后是二个文件。上传证书,把二个证书文件上传(拖拽)至:/usr/local/nginx/conf/ (即nginx安装目录)
注:上传目录可以按自己习惯随便选,配置文件里填对应位置即可。我选的是nginx安装目录,就是相对路径,这样配置文件里就不用填路径了,只填文件名即可。
修改配置文件:
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name xxx;
#请填写证书文件的相对路径或绝对路径
ssl_certificate xxx.pem;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key xxx.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
}
11.4 重启nginx
进入nginx安装目录:cd /usr/local/nginx/sbin/ ,
重启nginx:./nginx -s reload
cd /usr/local/nginx/sbin/
./nginx -s reload
居然报错,报错原因:
未安装SSL模块--ngx_http_ssl_module
11.5 解决SSL模块报错
11.5.1 报错原因
先查看nginx原有的模块:
/usr/local/nginx/sbin/nginx -V
执行:/usr/local/nginx/sbin/nginx -V (或./nginx -V)
在configure arguments:后面显示的参数如下或者如图:
--prefix=/usr/local/nginx --with-http_stub_status_module ,
则代表未安装SSL模块
11.5.2 安装SSL模块
注:先备份原有的nginx,以防万一。
1. nginx的安装目录是/usr/local/nginx,源码包在/usr/local/nginx-1.13.7/目录下。
2.切换到源码包: cd /usr/local/nginx-1.13.7/
3.进行重新编译,注意带上SSL模块:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
cd /usr/local/nginx-1.13.7/
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
4.配置完成后,运行命令:make
5.make命令执行后,不要进行make install,否则会覆盖安装。
make # 仅 make, 不要make install,否则会覆盖安装
6.备份原有已安装好的nginx:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
7.停止nginx状态:
/usr/local/nginx/sbin/nginx -s stop
# 如果.nginx -s stop 不管用,直接用killall nginx替代
注:如果/usr/local/nginx/sbin/nginx -s stop 不管用,直接用:killall nginx
8.将编译好的nginx覆盖掉原有的nginx:
cd /usr/local/nginx-1.13.7/
cp ./objs/nginx /usr/local/nginx/sbin/
9.提示是否覆盖,输入yes回车确认即可。
10.然后启动nginx:
/usr/local/nginx/sbin/nginx
11.进入nginx/sbin目录下,通过命令查看模块是否已经加入成功:
cd /usr/local/nginx/sbin/
./nginx -V
12.有以下提示,证明已经编译成功:
11.5.3. 重启nginx
11.6 443加载static文件
nginx重新启动成功后,
用https+公网ip访问,只显示文字。未加载static静态文件。孰不可忍呀
用http+ip访问,能正常显示css及图片。
原因:443端口未填写 static 路径。
解决办法:把监听80的static代码 ,复制至443即可。然后把80的http转至https。完美访问。
修改后完整nginx配置如下:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name www.***;
rewrite ^(.*)$ https://$host$1; # 重写转https
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:7788; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT IP4G.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /www/wwwroot/IP4G/; #项目路径
}
location /static/ {
alias /www/wwwroot/IP4G/static/; #静态资源路径
}
}
# HTTPS server
server {
listen 443 ssl;
server_name www.***;
ssl_certificate ***.pem;
ssl_certificate_key ***.key;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:7788; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT IP4G.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /www/wwwroot/IP4G/; #项目路径
}
location /static/ {
alias /www/wwwroot/IP4G/static/; #静态资源路径
}
}
}
nginx配置好后,重新启动:
cd /www/env/ip4g_env/bin
source activate
cd /www/wwwroot/IP4G/
uwsgi --ini uwsgi.ini
cd /usr/local/nginx/sbin/
./nginx -s reload
cd /www/wwwroot/IP4G/
python3 manage.py runserver
再次访问,http也自动转成https了,静态文件也加载了,完美!!!
现在,地址栏还出现:“证书风险”,锁带红叉,如图,是因为用的IP地址访问,不是域名访问,所以浏览器检测到不一致就提示了。等域名备案通过,通过域名访问就不会再出现了。
11.7 完美结束!!
至此,已全部部署完毕,结束了二天的费眼工作,虽苦然开心!! o( ̄ヘ ̄o#) !!
鸣谢:
1、帮助你如何将http转换成https | Help you how to convert http to https-CSDN博客
2、Centos内安装MySQL详细教程_centos mysql-CSDN博客
3、Centos7安装Python3和升级SQLite高版本_虚拟环境中sqlite3库版本过低怎么解决-CSDN博客
4、CentOS7下部署Django项目详细操作步骤_centos部署django-CSDN博客
5、nginx异常:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf_the 'ssl' parameter-CSDN博客
6、感谢其他很多前辈CSDN博客的帮助,太多了,不再一一列出。
版权声明:本文标题:傻瓜教程:逐步记录用MobaXterm迁移Django+mySql+Python项目至阿里云CengtOs7并正式发布 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728533947a1162436.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论