从0到1【建站:AWS+Ubuntu+Python+Django+uwsgi+nginx+ssl】

news2024/12/22 17:15:38

目录

  • 一、创建服务器
      • 1、进入AWS官网
      • 2、启动实例
      • 3、创建新密钥对
      • 4、选择密钥对
      • 5、网络设置
      • 6、配置存储
      • 7、启动实例
      • 8、查看实例
      • 9、配置安全组
  • 二、连接服务器
      • 1、在AWS官网进行连接
      • 2、使用Xshell7进行连接
      • 3、设置允许root登录
  • 三、域名解析
      • 1、进行腾讯云官网
      • 2、管理域名解析
      • 3、绑定公有 IPv4 地址
      • 4、下载SSL证书
  • 四、配置服务器环境
      • 1、查看系统版本
      • 2、查看Python版本
      • 3、更新apt
      • 4、安装pip
      • 5、更换pip镜像源
      • 6、安装django
  • 五、启动Django项目
      • 1、创建项目文件夹
      • 2、获取项目
      • 3、启动Django项目
      • 4、关闭项目
  • 六、用uwsgi进行部署
      • 1、安装uwsgi
      • 2、新建uwsgi.ini文件
      • 3、启动Django项目
  • 七、用nginx进行部署
      • 1、安装netstat
      • 2、关闭uwsgi服务
      • 3、修改uwsgi.ini文件
      • 4、再次启动uwsgi服务
      • 5、安装nginx
      • 6、查看nginx版本
      • 7、查找nginx.conf配置文件的路径
      • 8、修改nginx.conf文件
      • 9、启动nginx
  • 八、nginx适配ssl证书
      • 1、上传ssl证书到服务器
      • 2、修改nginx.conf文件
      • 3、重启nginx服务
  • 九、注意事项
      • 1、注意事项
      • 2、gitee常用命令

一、创建服务器

以AWS(亚马逊Web服务)为例

1、进入AWS官网

AWS官网网址
在这里插入图片描述

2、启动实例

在这里插入图片描述
在这里插入图片描述

3、创建新密钥对

在这里插入图片描述
创建密钥对之后会下载到电脑本地,一定要保存好
在这里插入图片描述

4、选择密钥对

在这里插入图片描述

5、网络设置

在这里插入图片描述

6、配置存储

在这里插入图片描述

7、启动实例

在这里插入图片描述

8、查看实例

在这里插入图片描述
勾选实例,可以查看该实例,记住这里的公有 IPv4 地址;

发现ping不通:
在这里插入图片描述

9、配置安全组

点击这个安全组,然后进去;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将SSH的选为所有流量,并保存规则;
在这里插入图片描述
在本机电脑的cmd,发现可以ping得通了:
在这里插入图片描述
注:这里一定要能够ping得通;

二、连接服务器

1、在AWS官网进行连接

在这里插入图片描述
在这里插入图片描述
发现可以连接得上:
在这里插入图片描述

2、使用Xshell7进行连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
鼠标选中Public Key之后,点击设置;
在这里插入图片描述
在这里插入图片描述
找到刚才在创建密钥对时下载的密钥文件:
在这里插入图片描述
选中导进来的密钥之后点击确定:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现可以登进来了:
在这里插入图片描述

3、设置允许root登录

设置root密码:

sudo passwd root

切换到root账户:

su - root

在这里插入图片描述
给ubuntu用户设置密码:

passwd ubuntu

修改ssh配置文件:

vim /etc/ssh/sshd_config
#PermitRootLogin prohibit-password  改成  PermitRootLogin yes
PasswordAuthentication no  改成  PasswordAuthentication yes
UsePAM yes  改成  UsePAM no

在这里插入图片描述
在这里插入图片描述
:wq保存并退出;

修改authorized_keys文件:

sed -ri 's/^/#/;s/sleep 10"\s+/&\n/' /root/.ssh/authorized_keys

重启sshd.service:

systemctl restart sshd.service

在这里插入图片描述
现在可以用Xshell7进行root连接了;
选中“新建会话”,鼠标右键点击,选择属性:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、域名解析

以腾讯云为例

1、进行腾讯云官网

腾讯云域名注册网址
在这里插入图片描述

2、管理域名解析

在这里插入图片描述

3、绑定公有 IPv4 地址

在这里插入图片描述

4、下载SSL证书

如果没有获取SSL证书,要点击获取一下:
在这里插入图片描述
在这里插入图片描述
后面搭建服务器要用到nginx,所以这里下载对应的nginx证书就可以了:
在这里插入图片描述
下载好之后解压:
在这里插入图片描述
可以得到这4个文件:

xxx.csr
xxx.key
xxx_bundle.crt
xxx_bundle.pem

四、配置服务器环境

1、查看系统版本

lsb_release -a

在这里插入图片描述
可以看到,我这里使用的是Ubuntu22.04;

2、查看Python版本

python3 -V

在这里插入图片描述
可以看到,我这里使用的是Python3.10.6;

3、更新apt

在我们安装任何软件之前,请务必通过运行以下命令来确保您的系统是最新的 apt 终端中的命令:

apt update
apt upgrade
apt install wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev

注:
遇到问句,输入y就可以了;
遇到界面形式的,Tab到OK,然后Enter就差不多可以了;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、安装pip

现在正式安装pip:

apt-get install python3-pip

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完成,查看pip版本:

pip3 -V

在这里插入图片描述
可以看到,我这里使用的是pip22.0.2;

5、更换pip镜像源

家目录~下创建.pip文件夹

mkdir ~/.pip 

创建pip.conf文件

vi ~/.pip/pip.conf

将以下内容复制进pip.conf中

[global]
index-url = https://repo.huaweicloud.com/repository/pypi/simple/
[install]
trusted-host=repo.huaweicloud.com

:wq保存并退出;
可以看到,我这里使用的是华为云镜像源;

6、安装django

pip3 install django

在这里插入图片描述
可以看到,我这里使用的是django4.1.3;

五、启动Django项目

1、创建项目文件夹

利用Xftp便捷的功能新建/data/www文件夹,并进入:
在这里插入图片描述
在这里插入图片描述

2、获取项目

这里利用git命令获取示例项目

git clone https://gitee.com/leaftest/testdjango.git

3、启动Django项目

这里使用django自带的wsgi模式启动Django项目;
进入项目文件夹下面的目录下面:

cd /data/www/testdjango

启动项目:

python3 manage.py runserver 0.0.0.0:8000

在这里插入图片描述

可以看到,这里django项目默认启动的是8000端口;
现在,就可以在电脑本机进行访问了【也可以换成自己域名进行访问,也要加端口号:8000】:
在这里插入图片描述
注意这里的网址前缀是http://

4、关闭项目

直接在刚才启动的地方按键Ctrl+C就可以了;
在这里插入图片描述

六、用uwsgi进行部署

1、安装uwsgi

pip3 install uwsgi

在这里插入图片描述
查看uwsgi版本:

uwsgi --version

在这里插入图片描述
可以看到,我这里使用的是uwsgi2.0.20;

2、新建uwsgi.ini文件

在项目下新建uwsgi.ini文件:
在这里插入图片描述
uwsgi.ini文件内容如下:

[uwsgi]
http=0.0.0.0:8000
chdir=/data/www/testdjango
wsgi-file=/data/www/testdjango/testdjango/wsgi.py

pidfile=/data/www/testdjango/uwsgi.pid
daemonize=/data/www/testdjango/uwsgi.log

解释说明:

http=0.0.0.0:8000 # 外部通过http方式访问;
chdir=/data/www/testdjango # 项目目录
wsgi-file=/data/www/testdjango/testdjango/wsgi.py # 加载项目下的wsgi.py文件
pidfile=/data/www/testdjango/uwsgi.pid # 指定pid文件,避免启动后不能操作窗口
daemonize=/data/www/testdjango/uwsgi.log # 指定log文件,避免启动后不能操作窗口 

3、启动Django项目

用uwsgi方式启动django项目之前,记得先把刚才的wsgi方式启动的关掉,然后进入刚才新建了uwsgi.ini文件的目录下;
用uwsgi方式启动django项目的命令:

uwsgi --ini uwsgi.ini

在这里插入图片描述

现在,就可以在电脑本机进行访问了【也可以换成自己域名进行访问,也要加端口号:8000】:
在这里插入图片描述
注意这里的网址前缀是http://

七、用nginx进行部署

1、安装netstat

apt install net-tools

在这里插入图片描述
在这里插入图片描述

2、关闭uwsgi服务

先找到uwsgi启动的进程号:

netstat -apn|grep uwsgi

在这里插入图片描述
结束对应进程:

kill -9 16767

再检查一下:

netstat -apn|grep uwsgi

在这里插入图片描述

3、修改uwsgi.ini文件

修改为:

[uwsgi]
socket=0.0.0.0:8000 # 这里修改一下就可以了
chdir=/data/www/testdjango
wsgi-file=/data/www/testdjango/testdjango/wsgi.py

pidfile=/data/www/testdjango/uwsgi.pid
daemonize=/data/www/testdjango/uwsgi.log

4、再次启动uwsgi服务

uwsgi --ini uwsgi.ini

在这里插入图片描述

5、安装nginx

apt-get install nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、查看nginx版本

nginx -v

在这里插入图片描述
可以看到,我这里使用的是nginx1.18.0;

7、查找nginx.conf配置文件的路径

nginx -t

在这里插入图片描述
我这里在/etc/nginx/目录下,进去,修改nginx.conf配置文件

8、修改nginx.conf文件

原文件内容如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
#
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

直接替换为:

# 不开启ssl的成功版本

events {
    worker_connections  1024;
}

http {
    upstream django {
       server 127.0.0.1:8000; #web的socket端口
    }

    server{
        listen 80; # 监听80端口
        server_name localhost; 
          
        location / { 
            include uwsgi_params; 
            uwsgi_pass django; 
        }
    }
}

9、启动nginx

nginx

在这里插入图片描述
可以看到,80端口被占用;

netstat -apn|grep 80

在这里插入图片描述

结束对应进程:

kill -9 17349

再次启动nginx:

nginx

在这里插入图片描述
在本地浏览器进行访问,可以看到并不安全【也可以换成自己域名进行访问】:
在这里插入图片描述
注意这里的网址前缀是http://
另外,这里的访问可能会失败,可能是浏览器缓存导致的原因。

也可能是uwsgi服务不小心关闭了,查看一下进程还在不在,没有了就去启动一下:

netstat -apn|grep uwsgi
uwsgi --ini uwsgi.ini

八、nginx适配ssl证书

1、上传ssl证书到服务器

这里需要将之前在腾讯云下载的ssl证书放到指定的位置:/etc/nginx/cert/
没有文件夹就新建;

2、修改nginx.conf文件

直接替换为【ssl证书地址改成自己的】:

# 开启ssl的成功版本

events {
    worker_connections  1024;
}

http {
    upstream django {
        server 127.0.0.1:8000; # web的socket端口
    }
    server {
        listen 80; # 监听80端口
        server_name localhost;
        rewrite ^(.*)$ https://$host$1 permanent;
    }

    server {
        listen 443 ssl; # 监听443端口并开启ssl
        server_name  localhost;
        ssl_certificate /etc/nginx/cert/xxx_bundle.crt; # pem文件也行,这里替换成自己的ssl证书地址
        ssl_certificate_key /etc/nginx/cert/xxx.key; # 这里替换成自己的ssl证书地址
        location / {
            include uwsgi_params;
            uwsgi_pass django;
       }
    }
}

3、重启nginx服务

先找到,再结束进程,再启动:

netstat -apn|grep nginx
kill -9 18455
nginx

在这里插入图片描述
在本地电脑采用域名访问,可以看到,是安全的:
在这里插入图片描述
注意这里的网址前缀是https://

九、注意事项

1、注意事项

由于浏览器存在缓存等原因,可能导致调试不成功;
推荐浏览器:谷歌浏览器、微信的内置浏览器;
由于Ubuntu、Python、Django、uwsgi、nginx的版本原因,可能导致调试不成功;

2、gitee常用命令

git init
git remote add origin https://gitee.com/leaftest/testdjango.git

git add .
git commit -m 'init'
git push origin master

git clone https://gitee.com/leaftest/testdjango.git
git pull origin master

免责声明:
1.编写此文是为了更好地学习,如果损害了有关人的利益,请联系删除;
2.如果文中描述欠妥,请在评论中进行指正;
3.文字编写不易,若感觉有用,点赞收藏关注会让博主很开心哦;
4.此外,转载请注明出处,非常感谢!!!
本文源自:https://blog.csdn.net/testleaf/article/details/128692183

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xilinx ZYNQ 7000 XADC 片上模拟转数字模块

上图所示,XADC 属于 PL部分的资源 XADC是一种硬逻辑实现,位于PL功率域。PS- xadc接口是PS的一部分,可以被PS APU访问,而不需要对PL进行编程。PL必须上电才能配置PS-XADC接口、使用PL- jtag或DRP接口以及操作XADC。 上面的机构图能…

通关算法题之 ⌈回溯算法⌋

回溯算法 子集组合排列 78. 子集 给你一个整数数组 nums,数组中的元素互不相同 ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集,你可以按任意顺序 返回解集。 输入:nums [1,2,3] 输出&…

LeetCode 5. 最长回文子串

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 5. 最长回文子串,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode 5…

1590_AURIX_TC275_PMU_Flash的操作

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这里提到的这个复位读取操作,复位的对象其实是当前的操作,也就是命令序列。主要是命令序列的最后一个命令还没有被接收到,都可以被这个命令中断。在复位…

目标检测:特征金字塔网络(Feature Pyramid Network)

目标检测:特征金字塔网络(Feature Pyramid Network)概述核心思想概述 由于在目标检测任务中,对与大目标的检测,需要feature map每个点的感受野大一点(高层语义特征),对于小目标&…

GPIO 八种工作模式及其硬件框图

参考资料: STM32F1xx 官方资料:《STM32中文参考手册V10》- 第 8 章通用和复用功能 IO(GPIO 和 AFIO) GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32 的八种 …

图像融合笔记(一):RFN-Nest

RFN-NestAbstractIntroductionRelated worksThe proposed fusion frameworkThe architecture of the fusion networkTwo-stage training strategy论文: RFN-Nest: An end-to-end residual fusion network for infrared and visible images代码: https://…

[Android Input系统]MotionEvent的序列化传送

这里从云游戏的触控操作看起,PC端的客户端支持按键和鼠标滑动操作,手机上的云游戏客户端则是和手机游戏一样的touch触控,客户端的touch操作是怎样处理给服务端的呢,猜测是把touch操作“实时”的传送给了服务器,Android…

COM,Component Object Model 简介

COM,Component Object Model 简介 1. COM 是什么 COM 的英文全称是,Component Object Model,中文译为,组件对象模型。它官方的概念是: The Microsoft Component Object Model (COM) is a platform-independent, dis…

一个简单、功能完整的开源WMS​仓库管理系统

今天给大家推荐一个简单、功能完整的仓库管理系统。 项目简介 这是基于.NetCore 7、Vue 3开发的开源项目,支持中英文,界面简单清爽,采用前后端分离架构。 该项目主要是针对小型物流仓储供应链流程,采用的技术也都比较新&#x…

Redis基础配置之RDB持久化

测试环境: windows RDB的触发机制 save bgsave flushall 自动触发(配置文件配置) save命令触发: 触发方式 :首先手动删除dump.rdb文件。 当执行save命令时,自动生成dump.rdb文建测试成功 bgsave命令触发: 触…

jsp网络课程管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 网络课程管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统采用web模式开发,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff…

JVM内存组成简介

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存&#xf…

【C语言航路】第十二站:自定义类型:结构体、枚举、联合体

目录 一、结构体 1.结构体的基础知识 2.结构体的声明 3.特殊的声明(匿名结构体) 4.结构体的自引用 5.结构体变量的定义和初始化 6.结构体的内存对齐 7.修改默认对齐数 8.结构体传参 二、位段 1.什么是位段 2.位段的内存分配 3.位段的跨平台问…

小程序目录结构和全局配置

小程序目录结构和全局配置小程序目录结构目录结构和web结构对比全局配置—pages & windows配置文件简介全局配置pages & window全局配置—tabBartabBar简介页面配置页面配置简介小程序目录结构 目录结构 和web结构对比 全局配置—pages & windows 配置文件简介 …

块级元素、行内元素、元素嵌套

HTML标签有两类:块级元素行内元素 (1)块级元素-默认总是在新行开始 div、h1~h6、blockquote、dl、dt、dd、form、hr、ol、p、pre、table、ul … 特点:总是在新行上开始,高度、行高以及顶和底边距都可控制,宽…

Kubernetes_HPA实践使用

文章目录一、前言二、配置APIServer和安装Metrics2.1 APIServer开启Aggregator2.2 安装Metrics Server (需要用到metris.yaml)安装metrics Server之前安装metrics Server之中全部命令实践演示安装metrics Server之后三、使用HPA测试 (需要使用到test.yaml,里面包括 …

明清专题数据库:企业匹配官办书局距离、科举考试、商帮文化变量等

一、企业到明清官办书局,印刷局的最小距离测算 以明清进士数量的地域分布测度儒家文化的历史积淀,使用企业到古代印刷局的距离作为工具变量解决内生性问题! 数据来源:自主整理 时间跨度:-- 区域范围:全国…

第十四届蓝桥杯单片机组学习笔记(1):点亮板子第一个LED

点亮板子第一个LED前言单片机IO控制M74HC573M1R-数据锁存器74HC138-38译码器代码前言 使用CT107D实验板子的时候可以看到为了IO口对多个外设的复用,所以板子使用了几个锁存器来对LED、数码管、蜂鸣器等外设进行了一个选择,最后再使用38译码器来使用三个…

如何对时间序列进行小波分析,得出其周期?

从信号处理角度进行分析 简单的时间序列直接做各种谱分析(频谱,包络谱,平方包络谱,功率谱,倒谱等等) 比如一些简单的旋转机械振动时间序列信号 ​如果频谱不好分析,那可以分析如下图所示的时间序…