Bootstrap

傻瓜教程:逐步记录用MobaXterm迁移Django+mySql+Python项目至阿里云CengtOs7并正式发布

目录

       前  言

一、购买阿里云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.org/download.html ,这里是最新的版本

也不知道各个版本的区别,反正如法炮制,选择新版本这个安装即可,这个有配置文件。点击获取到sqlite3下载路径:https://sqlite.org/2024/sqlite-autoconf-3450300.tar.gz。我自己选的ECS上软件下载路径: /usr/local/ (下同,可自行选择)。

cd /usr/local
wget https://sqlite.org/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.org/ftp/python/3.7.7/Python-3.7.7.tgz

cd /usr/local
wget https://www.python.org/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.com/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.com/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.org/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 购买域名

     继续阿里云里一条龙服务,在域名平台下,搜索可购买域名,按步骤流程买下了 ***.com 域名,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.com; 
     #请填写证书文件的相对路径或绝对路径
     ssl_certificate xxx.com.pem; 
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key xxx.com.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.***.com;

        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.***.com;

        ssl_certificate      ***.com.pem;
        ssl_certificate_key  ***.com.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博客的帮助,太多了,不再一一列出。 

;