Welcome to kimi's blog

路飞上线流程

路飞上线流程

上线架构图

服务器:公网ip地址---云服务器:阿里云、腾讯会

image

阿里云购买

# 购买阿里云服务器
    -阿里云官网,点选购买
    注册-->云服务器ECS-->点击购买
    
# ssh客户端
     1.xshell:只能在windows运行
     2.finalshell:多平台支持Windows,macOS,Linux---推荐使用
        官网:http://www.hostbuf.com/t/988.html
     3.Bash命令
    
    
# 配置一下服务器,装一些常用的依赖
   在finalshell客户端装常用的依赖
    -yum update -y   # 没执行下条命令之前是没有git工具的
    -yum -y groupinstall "Development tools"  # 装了一堆开发用的工具,git
    -yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

阿里云申请实例
image

FinalShell客户端连接阿里云服务器,主机用户和密码是阿里云服务器里的.
image

云服务器安装mysql

1. 前往用户根目录
   cd ~  # 回到你家路径  /root

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 -y

4. 启动mysql57并查看启动状态
   systemctl start mysqld.service  # 启动mysqld服务端
   systemctl status mysqld.service  # 查看状态

5. 查看默认密码并登录
   vim /var/log/mysqld.log # 查看密码
   grep "password" /var/log/mysqld.log
     #  kJJt%x-oo5Yj
 

6.登录mysql数据库
    mysql -uroot -p.o1z;ty4Cff(


6. 修改密码
   ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
   ALTER USER 'root'@'localhost' IDENTIFIED BY 'Kimi123?';

image

image

image

image

云服务器安装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
    #删除压缩包
    rm -rf redis-5.0.5.tar.gz

4. 进入目标文件
   cd redis-5.0.5

5. 编译环境
   make   #ls-cdsrc  在src路径下会有可执行文件:redis-server    redis-cli

6. 复制环境到指定路径完成安装
   cp -r ~/redis-5.0.5 /usr/local/redis

7. 配置redis可以后台启动:修改下方内容
    vim /usr/local/redis/redis.conf
     daemonize no--->改为yes
     """
     bind 127.0.0.1  port 6379
     按a插入---yes
     按ESC+:wq保存退出
     """
 
8. 完成配置修改
    esc
    :wq

9. 建立软连接(因为/usr/local/redis/src没有加到环境变量)
# /usr/bin/ 在环境变量中,所有以后直接敲redis-server就能找到了
   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  ##进入测试环境 set name kimi ,get name 
    ctrl + c

12. 关闭redis服务
     pkill -f redis -9

image

云服务器安装python3.8(源码安装)

linux和mac系统服务是用python2写的,所以这俩系统中默认自带了python2, 阿里云的centos 自动装了python3.6,你的云服务器上有python2 python3.6 ,需要手动装python3.8

两种安装python3.8的方法
    1.centos安装:yum install python  可以快速安装,但是不能指定版本和指定安装目录
    2.选择源码安装了,源码安装,下载指定版本的源码,编译安装

# 源码安装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
    #删除压缩包
    rm -rf Python-3.8.6.tgz

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

5.  配置安装路径:/usr/local/python38
   # 把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
     #没有把/usr/local/python38/bin加入到环境变量
     ln -s /usr/local/python38/bin/python3 /usr/bin/python3.8
     ln -s /usr/local/python38/bin/pip3 /usr/bin/pip3.8
    
    # /usr/local/python38/bin  解释器在的位置

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

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

安装uwsgi

# django flask项目上线,需要使用uwsgi部署,uwsgi性能高,是符合wsig协议的web服务器

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

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

# 安装步骤
1. 在真实环境下安装----切到解释位置安装--->cd /usr/local/python38/bin
  pip3.8 install uwsgi   #安装到了python38的安装路径的bin路径下了

2.  建立软连接
   ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi   

image

安装虚拟环境

1. 安装依赖
    cd 
    pip3.8 install virtualenv
   # python3.8 -m pip install --upgrade pip    # 升级pip版本
   # python3.8 -m pip install --upgrade setuptools #升级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
   pip install django==3.2.2


""" cp -r /usr/local/python38/lib/python3.8/site-packages/virtualenv /usr/local/python38/bin/virtualenv
"""

安装nginx(源码安装)

# nginx:软件
    -Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器  ,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点
    -运行在服务器上,监听某个端口,可以向这个服务器发送http请求了
    
    -转发http请求,代理静态文件,负载均衡
    

# 安装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 && sudo make install

7. 建立虚拟环境软连接
   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    # 查看 ps aux |grep nginx

  服务器绑定的域名 或 ip:80

前端页面部署

# 把vue的项目编译成纯粹的静态文件,把ajax远程链接的地址改成服务器的地址
settings.js
export default {
    BASE_URL:'http://47.102.20.8:8080/api/v1'
}
   

# 编译前端
    npm run build  dist
    
# 编译后,打成zip的压缩包,传到云服务器上去
    在云服务器上安装上传下载的软件
        yum install -y lrzsz
        rz  选择上传就行
        
# 解压 zip  
     yum install unzip -y
     unzip dist.zip     
          
# 修改nginx配置文件,实现代理路飞前端
     # 来到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; # 改为自己的域名,没域名修改为127.0.0.1:80
            charset utf-8;
            location / {
                root /home/html; # html访问路径
                index index.html; # html文件名称
                try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题
            }
        }
    } 

   # 把dist下的所有内容,cp到 /home/html   # 注意路径不能首先创建html
    cp -r dist /home/html
    
    
    # 重启ngixn
    nginx -s reload 
    
    #访问  http://47.102.20.8/  前端页面 ,提前在云服器安全组设置访问规则

image

后端部署

1. 提交本地代码

1.把prod.py配置文件修改
	-DEBUG = False
     -ALLOWED_HOSTS = ['47.102.20.8']  # 服务端得地址或者*
     -redis地址--location--- # 上线后要连线上地址
     -数据库地址---连线上地址
     -点后端地址--- BACKEND_URL = '47.102.20.8:8080'
     -前台基URL------LUFFY_URL = '47.102.20.8:80' # 80端口可不写
    
2.新建一个manage_pro.py,在线上使用这个来迁移数据库
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod')
3.在wsgi.py修改路径
	os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod')
    
4.生成项目依赖
	pip freeze >requirements.txt
     
5.提交到git
  git add .
  git commit -m 'v1版本提交'
  git push origin master

6.部署服务器上--
	mkdir /home/project
    cd /home/project
    git clone https://gitee.com/liuqingzheng/luffy_api.git

image

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;
    
5.使用luffy用户和密码登录
    mysql -uluffy -pLuffy123?

# 本地使用Navicate连接

image

3.安装项目依赖,迁移数据库

1.在远端,安装项目依赖
 进入到虚拟环境,进入到项目路径下,执行 workeron luffy
# 如果mysqlclient装不上,先把mysqlclient注释
   进-vim requirements.txt---注释#mysqlclient
    强制退出---:q!

  pip install -r requirements.txt
  yum install mysql-devel -y  # 失败了就先执行第四句再执行这句
  yum install python-devel -y
  rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
  pip install mysqlclient

2.重点 要在虚拟环境中也安装uwsgi
  pip install uwsgi


3.迁移数据库
  python manage_pro.py makemigrations
  python manage_pro.py migrate



4.迁移的记录文件,要不要提交到git上
	-官方推荐:提交
    -我推荐:如果多人开发,不提交
    
    
    python manage_pro.py makemigrations
    python manage_pro.py migrate
    
    # 录入数据,我们由于是测试,把本地的sql导出,导入到远端

image

image

4.使用uwsgi启动django

1.运行django(个人经验,先用wsgiref运行起来,再用uwsgi跑)
	# 原来测试阶段,使用wsgiref运行
    	-访问测试-python manage_pro.py runserver 0.0.0.0:8888 能跑起来得原因是:安全组开启 8888和8080端口
        -浏览器访问:http://47.102.20.8:8888/api/v1/home/banner/
        -后期:只留22,3306,6379,80,8080
    # 上线使用uwsgi

2.使用uwsgi步骤
	写一个uwsgi的配置文件(ini,【xml】)---最好在项目路径下/也可不在
    vim luffyapi.xml
    <uwsgi>    
       <socket>127.0.0.1:8888</socket> <!-- 内部端口,自定义 --> 
       <chdir>/home/project/luffy_api/</chdir> <!-- 项目路径 -->            
       <module>luffy_api.wsgi</module>  <!-- luffyapi为wsgi.py所在目录名--> 
       <processes>4</processes> <!-- 进程数 -->     
       <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
    </uwsgi>
    
3.使用uwsgi启动djagno
    uwsgi -x ./luffyapi.xml
    ps aux |grep uwsgi  # 看到有四个进程说明没问题

4.现在访问8888,没有响应
	#uWSGI:配置文件是--》socket,说明它只能监听 uwsgi协议,浏览器发出去的是http协议,它不能响应,如何解决?
    解决方法:只能将http请求发送到nginx上,使用nginx把http请求转发到uwsgi,nginx支持把http协议转成uwsgi
    
5. 修改nginx 配置文件,完成对http请求的转发
     cd /usr/local/nginx/conf/
     vim nginx.conf
    
    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/project/luffy_api/;
        }
    }
    
    
6. 重启nginx 
nginx -s reload

# 访问前端,查看
http://47.102.20.8/

路飞后台管理样式处理

访问地址是:http://47.102.20.8:8080/admin,发现没有样式,原因是:uwsgi为了提高性能,只负责处理动态请求,静态资源不管,如何解决既能访问静态资源,又能访问动态问题?

1.wgisref  既能访问静态资源,又能访问动态  测试阶段
2.上线后,
    uwsgi为了提高性能,只处理动态请求【动静分离】
    静态资源,需要使用nginx代理
    
# 后台管理
    """nginx 监听着8080端口---8888"""

使用步骤

1. 第一步:收集静态资源
    	-simpleui的静态资源--static
        -drf的静态资源----static
        -前后端混合项目,你项目的静态资源
        最好在远端创建静态文件资源---在本地创建后就运行不了
        
2. 创建文件夹 
    mkdir /home/project/luffy_api/luffy_api/static
3. 修改配置文件  settings--->prod.py
    STATIC_URL = '/static/'
    STATIC_ROOT = '/home/project/luffy_api/luffy_api/static'  
    # STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)报错不加
4. 执行这个命令,就会把静态文件收集到STATIC_ROOT对应的文件夹下
    python manage_pro.py collectstatic  # luffy_api
    
5. 修改nginx配置文件
    events {
    worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        server {
            listen 80;
            server_name  127.0.0.1; # 改为自己的域名,没域名修改为127.0.0.1:80
            charset utf-8;
            location / {
                root /home/html; # html访问路径
                index index.html; # html文件名称
                try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题
            }
        }
        server {
            listen 8080;
            server_name  127.0.0.1; # 改为自己的域名,没域名修改为127.0.0.1:80
            charset utf-8;
            location / {
               include uwsgi_params;
               uwsgi_pass 127.0.0.1:8808;  # 端口要和uwsgi里配置的一样
               uwsgi_param UWSGI_SCRIPT luffyapi.wsgi;  #wsgi.py所在的目录名+.wsgi
               uwsgi_param UWSGI_CHDIR /home/project/luffyapi/; # 项目路径
            }
            # 新增的配置静态文件
            location /static {
                alias /home/project/luffy_api/luffy_api/static;
            }
        }
    }
    
    
6. 重启nginx
    nginx -s reload
    
# 访问:80端口是前端 http://47.102.20.8/
#  访问 8080后端 http://47.102.20.8:8080/admin
# 以后使用
    python manag_pro.py runserver  0.0.0.0:8888 运行不了了

域名转发

# 域名转发
	-购买域名---》备案----》域名解析配置
# 以后访问域名即可
posted @ 2023-03-15 08:51  魔女宅急便  阅读(56)  评论(0)    收藏  举报
Title