上线前准备、阿里云机器购买、上线架构图、安装git、云服务器安装mysql、云服务器安装redis、云服务器源码安装python、安装uwsgi、安装虚拟环境、安装nginx、路飞前端部署、路飞后端部署、路飞后台样式处理、路飞后台管理样式处理

# 1 支付功能
	-支付宝
    -微信支付:官方API
    
# 2 支付流程
	-用户在我们的系统点击购买----》我们后端生成订单,订单是未支付状态,生成支付链接---》返回到前端---》打开支付链接页面----》用户扫描支付----》支付完成,支付宝商家账户收到钱----》get回调回调前端--->post回调,回调后端----》通过post回调,验签后修改订单状态----》前端通过get回调回来显示,支付成功页面,为了准确性,二次校验
    
    
# 3 支付宝沙箱环境 测试生成支付链接
	-生成公钥,私钥---》软件
    -公钥配置在支付宝网站----》支付宝公钥
    -项目中使用私钥和支付宝公钥
    -API,sdk,第三方sdk
    -实例化得到alipay对象,传一堆参数
    -使用对象的api_alipay_trade_page_pay生成支付链接
    -前面拼接上支付宝地址(测试地址,实际地址) do?生成的
    
# 4 对支付宝二次封装

# 5 下单接口
	-向数据库写入数据【订单,订单详情表】
    -生成支付链接
    -validate(self, attrs):
        # 1 校验价格:计算一下总价格和后端算出来的总价格是否一致
        # 2)生成订单号:唯一的: uuid
        	-你们公司唯一id号如何生成的?
            	-使用uuid:uuid好像有重复的可能,我们知道有重复的可能,但是我们没有遇到过,可能因为数据量比较小
                -如果使用时间戳:会重复
                -时间戳+mysql自增(速度慢)
                -时间戳+redis自增
                -雪花算法,美图leaf算法。。。
        # 3)支付用户:request.user
        	
        # 4)支付链接生成,放入到self.context中
        # 5)入库(两个表)的信息准备:重写create方法
	-重写create 存两个表
    	修改个人信息:名字,年龄,地址。。。
        用户表,用户详情表
        重写update方法
        
 # 6 下单前端
	-点击向后端发送请求
    -验证是否登录:只要cookie中有token
    -携带token【请求头】,携带请求参数[body]
    -返回后,前端判断code,成功open支付页面
    
    
# 7 支付成功页面
# 8 两个回调接口
	-post:支付宝
    -get:咱们前端,二次校验
    
    
    
    
    
# 9 内网穿透
	-我们写的项目,如果没有公网ip,都是内网,只能公司内部使用,外网的人访问不到
    -内网穿透的工具,让外网的人能够访问到我们的项目
    	-花生壳
    -做测试用
        
 # 10 localhost,127.0.0.1  本机网卡地址
	-程序监听了 127.0.0.1,只能使用localhost,127.0.0.1
    -程序监听了 0.0.0.0   localhost,127.0.0.1  本机网卡地址 都可以访问
    	-局域网内的机器可以通过你的ip[本机网卡地址],访问到你
    -如果监听了127.0.0.1,是不行的
    
    
  

今日内容

0 上线前准备

# 1 把logs做成了包
	-忽略掉日志文件后,空文件夹不会被git管理,做成包后会被管理,咱们需要logs文件夹
    
# 2 新建了一个manage_pro.py
	-服务端,迁移数据库,如果执行 python manage.py migrate  使用的数据库是测试环境
    -服务端使用manage_pro.py,迁移到正式的数据库中
    
    
# 3 migrations 中得修改记录要不要提交到git
	-官方建议:提交
    -我建议:不要提
    	-改了后,有记录
        -服务端:
        python manage.py makemigrations
        python manage.py migrate
        
        
        -假设:
        	本地张三在user表增加了一个字段,migrations记录
        	本地张三在user表增加了一个字段,migrations记录
            提到远端,服务端看到两个变更记录
            服务端只需要执行python manage.py migrate
            
        -我的建议:
        	本地张三在user表增加了一个字段,migrations记录
        	本地张三在user表增加了一个字段,migrations记录
            不提到远端,服务端没有变更记录
            服务端只需要执行
            python manage.py makemigrations   只生成一条
            python manage.py migrate
   

# 4 配置文件中得,后台和前台地址,修改,修改成上线服务器的地址,但是现在还没有
	-在配置文件中配置好阿里云的地址

# 5 后端项目提交到git上


# 6 本地把前端项目打包:html,css,js
	-修改ajax的地址
    export default {
        BASE_URL:'http://101.132.179.71:8080/api/v1/'
    }
    -编译
    	npm run build
    -项目路径下出现dist文件夹:html,css,js

1 阿里云机器购买

# 1 有一台服务器:虚拟机,购买一台阿里云的:云服务器,相当于你去电脑城配了一台电脑
# 2 公网ip地址:所有人都可以通过ip地址访问到我
# 3 域名:万网:  域名解析



# 购买机器:(阿里云,腾讯,新用户都很便宜,虚拟机)
	-包年包月:公司买,一买买几年
    -按量付费:用一会,用完就释放:余额里必须大于100
    -抢占式:空跑的资源,偏移卖给你,等有人正常买,空跑的越来越少,就会把抢占式实例释放调
	-选择流量付费
    -2核4g
    -centos 7.9系统
    -选公网ip
    -自定义密码:root用户和自己写的密码
    -确定购买成功
    
    
# 远程链接:xshell,finalshell



# 开启这几个安全组端口
	80
    8080
    3306
    6379
    

2 上线架构图

# 后端项目djagno写的
	-mysql 5.7
    -redis 5.x
    -python解释器 3.8
    -创建虚拟环境
# 前端项目vue


# 云服务器上要装的软件
	-mysql
    -redis
    -python3.8
    -nginx:代理静态资源
    -git:拉取代码
    -uwsgi:运行django

image-20221122104322693

3 安装git

# 方式一:
	yum install git -y
# 方式二:# 包含了git和一些别的开发需要软件
	yum -y groupinstall "Development tools" 
    
# 源码安装python,redis,需要有别的依赖支持
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel -y

3 云服务器安装mysql

# 安装步骤
1)前往用户根目录
  cd ~   #切换到用户家路径

2)下载mysql57
>: wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm


3)安装mysql57
>: yum -y install mysql57-community-release-el7-10.noarch.rpm
>: yum install mysql-community-server --nogpgcheck

4)启动mysql57并查看启动状态
>: systemctl start mysqld.service
>: systemctl status mysqld.service

5)查看默认密码并登录
>: grep "password" /var/log/mysqld.log
  )kemghUlR6I6
>: mysql -uroot -p

6)修改密码
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lqz12345?';

4 云服务器安装redis

1)前往用户根目录
>: cd ~

2)下载redis-5.0.5(源码包)
>: wget http://download.redis.io/releases/redis-5.0.5.tar.gz


3)解压安装包
>: tar -xf redis-5.0.5.tar.gz

4)进入目标文件
>: cd redis-5.0.5

5)编译环境(gcc编译---》可执行文件--》src---》可执行文件)
# c语言写的redis,是编译型语言,需要在不同平台编译成不同平台的可执行文件,才能执行
>: make

6)复制环境到指定路径完成安装
>: cp -r /root/redis-5.0.5 /usr/local/redis

7)配置redis可以后台启动:修改下方内容
>: vim /usr/local/redis/redis.conf

daemonize yes

8)完成配置修改
>: esc
>: :wq

9)建立软连接
>: ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server
>: ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli

10)后台运行redis
>: cd /usr/local/redis
>: redis-server ./redis.conf &
# 查看进程是否在运行:ps aux | grep redis
ctrl + c

11)测试redis环境
>: redis-cli
ctrl + c

12)关闭redis服务
# 客户端连进去,敲  shutdown
>: pkill -f redis -9

5 云服务器源码安装python

# 可以使用yum 安装,不能指定版本
#源码安装,下载指定版本的源码,编译安装

# 所有linxu和mac,都自带python2:系统服务,是用python写的
# 阿里云的centos默认装了python3.6
# python2,python3.6 python3.8 


# 源码安装python,依赖一些第三方zlib* libffi-devel
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel zlib* libffi-devel  -y

# 1前往用户根目录
>: cd ~

#2 下载 或 上传 Python3.8.6  服务器终端
wget https://registry.npmmirror.com/-/binary/python/3.8.6/Python-3.8.6.tgz

#3  解压安装包
tar -xf Python-3.8.6.tgz

#4 进入目标文件
cd Python-3.8.6

#5  配置安装路径:/usr/local/python3
# 把python3.8.6 编译安装到/usr/local/python38路径下
>: ./configure --prefix=/usr/local/python38

#6  编译并安装,如果报错,说明缺依赖
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel zlib* libffi-devel  -y
make &&  make install

#7  建立软连接:/usr/local/python38路径不在环境变量,终端命令 python3,pip3
ln -s /usr/local/python38/bin/python3 /usr/bin/python3.8
ln -s /usr/local/python38/bin/pip3 /usr/bin/pip3.8

# 机器上有多个python和pip命令,对应关系如下
python       2.x      pip 
python3      3.6      pip3
python3.8    3.8      pip3.8

#8  删除安装包与文件:
>: rm -rf Python-3.8.8
>: rm -rf Python-3.8.8.tar.xz

6 安装uwsgi

# 使用uwsgi运行django,不再使用测试阶段的wsgiref来运行django了

# uwsgi是符合wsgi协议的web服务器,使用c写的性能高,上线要使用uwsgi

# 安装步骤
1)在真实环境下安装
pip3.8 install uwsgi
#安装到了python38的安装路径的bin路径下了
2)建立软连接
ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi

7 安装虚拟环境


1)安装依赖
>: pip3.8 install virtualenv
# python3.8 -m pip install --upgrade pip
# python3.8 -m pip install --upgrade setuptools
# pip3.8 install pbr
>: pip3.8 install -U virtualenvwrapper -i https://pypi.douban.com/simple/ 
>: pip3.8 install virtualenvwrapper

2)建立虚拟环境软连接
>: ln -s /usr/local/python38/bin/virtualenv /usr/bin/virtualenv

3)配置虚拟环境:填入下方内容
# ~/ 表示用户家路径:root用户,就是在/root/.bash_profile
>: vim ~/.bash_profile

VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.8
source /usr/local/python38/bin/virtualenvwrapper.sh

4)退出编辑状态
>: esc

5)保存修改并退出
>: :wq

6)更新配置文件内容
>: source ~/.bash_profile

7)虚拟环境默认根目录:~/.virtualenvs


8)  mkvirtualenv -p python3.8 luffy

8 安装nginx

1)前往用户根目录
>: cd ~

2)下载nginx1.13.7
>: wget http://nginx.org/download/nginx-1.13.7.tar.gz

3)解压安装包
>: tar -xf nginx-1.13.7.tar.gz

4)进入目标文件
>: cd nginx-1.13.7

5)配置安装路径:/usr/local/nginx
>: ./configure --prefix=/usr/local/nginx

6)编译并安装
>: make && make install

7)建立软连接:终端命令 nginx
>: ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

8)删除安装包与文件:
>: cd ~
>: rm -rf nginx-1.13.7
>: rm -rf nginx-1.13.7.tar.xz

9)测试Nginx环境,服务器运行nginx,本地访问服务器ip
>: # 启动 :nginx 
   # 停止: nginx -s stop
>: 服务器绑定的域名 或 ip:80

# netstat -nlp | grep 80
# ps aux | grep 进程名

9 路飞前端部署

# 编译成静态资源了 dist文件夹下
# 文件夹压缩zip ,传到服务器上
# 安装几个软件
	-解压zip软件:yum install -y unzip
    -上传下载的软件:yum install lrzsz -y
    
    
    
#1  修改前端向后端发ajax请求的地址:项目的地址
#2  编译vue项目成html,css,js
npm run build  
#3  项目根路径下生成dist文件夹(编译过后的文件)

#4  本地压缩成zip  (不要压成rar)

#5 在服务器安装软件:yum install lrzsz 
#6 直接把dist.zip 拖到 云服务器上去
#或者在云服务器敲 rz  选择上传

#7 yum install unzip
unzip dist.zip
#8 移动并重命名
mv ~/dist /home/html

# 9 去向Nginx配置目录,备份配置,完全更新配置:填入下方内容
#/usr/local/nginx/conf/nginx.conf 是nginx的配置文件
	# 制定nginx启动监听哪个端口
    # 做请求转发,做负载均衡
    # 做静态文件代理
>: cd /usr/local/nginx/conf
>: mv nginx.conf nginx.conf.bak   #做个备份
>: vim 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;
        charset utf-8;
        location / {
            root /home/html;
            index index.html;
        }
    }
} 

# 10 执行 
# ps aux |grep nginx
nginx -s reload  #重新加载配置文件
#或者
nginx -s stop
nginx

10 路飞后端部署

10.1 git拉取最新代码-安装依赖

# 1确认好wsgi.py 中得配置文件是不是用的prod.py

#2  导出项目所有的依赖,当前虚拟环境的依赖,就是当前项目的依赖
pip freeze > requirements.txt

#3  拉取项目
git clone https://gitee.com/liuqingzheng/luffy_api.git
#4  切换到luffy的虚拟环境
workon luffy
#5  安装依赖
pip install -r requirements.txt
# 先把mysqlclient注释掉,把其他装完,再装它
yum install mysql-devel -y
yum install python-devel -y
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
pip install mysqlclient

10.2 配置数据库

# 创建数据库用户,和数据库,再迁移表
1)管理员连接数据库
>: mysql -uroot -p

2)创建数据库
>: create database luffy default charset=utf8;

3)设置权限账号密码:账号密码要与项目中配置的一致
>: grant all privileges on luffy.* to 'luffy_api'@'%' identified by 'Luffy123?';
>: grant all privileges on luffy.* to 'luffy_api'@'localhost' identified by 'Luffy123?';
>: flush privileges;

4)退出mysql
>: quit;

10.3 迁移数据库

# manage.py   --->dev.py
# manage_pro.py  --->prod.py
python manage_pro.py makemigrations
python manage_pro.py migrate

# 表中没数据,加入点测试数据

# 把之前本地测试库中得数据导入
	-本地的导出成sql
    	-在navicate上右键---》导出成sql
    	
    -导入到远端中取
    	-右键导入即可

10.4 使用uwsgi启动djagno

# 0 使用uwsgi跑之前先执行
python manage_pro.py runserver 0.0.0.0:8080
外部机器浏览器里输入:http://101.132.179.71:8080/api/v1/home/banner/就能访问到

# 1进行uwsgi服务配置,内容如下
>: vim ./luffyapi.xml   # uwsgi的配置文件

<uwsgi>
   <socket>127.0.0.1:8888</socket>
   <chdir>/home/luffy_api/</chdir>
   <module>luffy_api.wsgi</module>
   <processes>4</processes>
   <daemonize>uwsgi.log</daemonize>
</uwsgi>

# 2 启动uwsgi
uwsgi -x ./luffyapi.xml
# 3 查看uwsgi进程
 ps aux |grep uwsgi
 
# 4 配置nginx,把8080的动态请求转发给8888端口
 vim /usr/local/nginx/conf/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;
        charset utf-8;
        location / {
            root /home/html;
            index index.html;
            try_files $uri $uri/ /index.html; # 解决vue路由问题
  
        }
    }
    # 新增的server
    server {
        listen 8080;
        server_name  127.0.0.1;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8888;
           uwsgi_param UWSGI_SCRIPT luffy_api.wsgi;
           uwsgi_param UWSGI_CHDIR /home/luffy_api/;
        }
    }
} 

# 重启nginx
nginx -s reload


补充:停掉uwsgi
 pkill -8 uwsgi


11 路飞后台样式处理

# 确认好wsgi.py的配置文件是os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.pro')


1)创建线上luffy项目虚拟环境
>: mkvirtualenv luffy
>: workon luffy

2)安装所需环境,在packages.txt所在目录下安装执行requirements.txt文件
>: pip install uwsgi   # 虚拟环境下也要装uwsgi
>: pip install -r ./requirements.txt
# 先把mysqlclient注释掉
yum install mysql-devel
yum install python-devel
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
pip install mysqlclient

12.2 配置luffy数据库

1)管理员连接数据库
>: mysql -uroot -p

2)创建数据库
>: create database luffy default charset=utf8;

3)设置权限账号密码:账号密码要与项目中配置的一致
>: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
>: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
>: flush privileges;

4)退出mysql
>: quit;

12.3 迁移数据库

# 必须在luffy环境下
1)数据库迁移
python manage_prod.py makemigrations
python manage_prod.py migrate

2)把本地数据,导入到生产库
#在 navicate中 把数据库转储成sql
# 在生产库导入进去

12.4 使用uwsgi启动django

#1进行uwsgi服务配置,内容如下
>: vim ./luffyapi.xml   # uwsgi的配置文件

<uwsgi>
   <socket>127.0.0.1:8888</socket>
   <chdir>/home/luffy_api/</chdir>
   <module>luffy_api.wsgi</module>
   <processes>4</processes>
   <daemonize>uwsgi.log</daemonize>
</uwsgi>

# 2 启动uwsgi
# 虚拟环境中也要安装uwsgi
pip install uwsgi
uwsgi -x ./luffyapi.xml
# 3 查看uwsgi进程
 ps aux |grep uwsgi
 
# 4 配置nginx,把8080的动态请求转发给8888端口
 vim /usr/local/nginx/conf/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;
        charset utf-8;
        location / {
            root /home/html;
            index index.html;
  
        }
    }
    # 新增的server
    server {
        listen 8080;
        server_name  127.0.0.1;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8888;
           uwsgi_param UWSGI_SCRIPT luffyapi.wsgi;
           uwsgi_param UWSGI_CHDIR /home/project/luffyapi/;
        }
    }
} 

# 重启nginx
nginx -s reload

13 路飞后台管理样式处理

# uwsgi 只转发动态请求,静态资源它不管

1)编辑线上配置文件
>: vim /home/project/luffyapi/luffyapi/settings/pro.py


2)修改static配置,新增STATIC_ROOT、STATICFILES_DIRS
STATIC_URL = '/static/'
STATIC_ROOT = '/home/luffy_api/luffy_api/static'  
STATICFILES_DIRS = (os.path.join(BASE_DIR, "../static"),)

3)退出编辑
>: esc
>: :wq

4)项目目录下没有 static 文件夹需要新建
>: mkdir /home/luffy_api/static

5)完成静态文件迁移
>: python manage_pro.py collectstatic


6)1)修改nginx配置
>: vim /usr/local/nginx/conf/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;
        charset utf-8;
        location / {
            root /home/html;
            index index.html;
        }
    }
    server {
        listen 8080;
        server_name  127.0.0.1;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8888;
           uwsgi_param UWSGI_SCRIPT luffyapi.wsgi;
           uwsgi_param UWSGI_CHDIR /home/luffy_api/luffy_api/;
        }
        location /static {
            alias /home/luffy_api/luffy_api/static;
        }
    }

}

posted @ 2023-03-15 16:52  冰柠檬檬  阅读(20)  评论(0)    收藏  举报