目录
前 言
纯小白手工记录全称操作,以备以后查询修正。内容可能有所偏驳,操作也并非最佳途径,但绝对是真实操作记录,基本上每一步骤都有代码和对应的截图,所以也略显繁琐,记性不好没办法,供以后参考和复工。
本文内容:购买阿里云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博客
6、感谢其他很多前辈CSDN博客的帮助,太多了,不再一一列出。