python之路86 路飞项目终于上线 上线架构图、阿里云购买、云服务器安装mysql、云服务器安装redis(源码安装)、云服务器安装python3.8(源码安装)、安装uwsgi、安装虚拟环境、安装nginx(源码安装)、路飞前端部署、路飞后端部署、路飞后台管理样式处理

上线结构图

服务器,公网ip地址
  云服务器:阿里云,腾讯云
  
上线架构图

image

阿里云购买

阿里云官网,点选购买

ssh客户端
  xshell
  finalshell:
  http://www.hostbuf.com/t/988.html
  下载后安装 连接阿里云的ecs实例 注意账号密码
  Bash命令
  
配置一下服务器,装一些常用的依赖
   yum update -y
   yum -y groupinstall "Development tools"  # 装了一堆开发用的工具  git
   yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel -y
  

云服务器安装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 启动mysql5.7并查看启动状态
systemctl start mysqld.service

systemctl status mysqld.service

5 查看默认密码并登录
grep "password" /var/log/mysqld.log

mysql -uroot -p

6 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';    密码长一点  要不就修改不过

云服务器安装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 编译环境
make  # 在src路径下会有可执行文件:redis-server    redis-cli

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

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

daemonize yes

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
ctrl + c

12)关闭redis服务
>: pkill -f redis -9


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

# linux mac 系统服务是用python写的 python2 写的,所以这俩系统中默认自带了python2,不要写在

# 阿里云的centos 自动装了python3.6
# 你的云服务器上有python2 和python3.6 


# 自己装python3.8

# centos安装:yum install 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
#没有吧/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

# 机器上有多个python和pip命令,对应关系如下
python       2.x      
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

安装uwsgi

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


# 使用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

安装虚拟环境

1 安装依赖
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   # 创建虚拟环境并进入  名字叫luffy 可以cd到上面根路径ls查看 

退出虚拟环境 deactivate
workon查看虚拟环境文件夹

安装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 编译并安装   如果缺少gcc底层应用执行 yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel   后再把安装路径再重新配置一下
make && sudo 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
服务器绑定的域名 或 IP:80

注意云服务器实例加入安全组  增加80端口和3306端口

路飞前端部署

# 把vue的项目编译成纯粹的静态文件,把ajax远程链接的地址改成服务器的地址
settings.js
export default {
    BASE_URL:'http://47.102.136.104:8080/api/v1'
}
    
# 编译前端
    npm run build
# 编译后,打成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   # 注意路径
     cp -r dist /home/html

    # 重启ngixn
    nginx -s reload



    #访问  http://47.102.136.104/  前端页面

路飞后端部署

提交本地代码

# 把配置文件修改
   Debug模式
   ALLOWED_HOSTS
   后端地址
   数据库地址
   redis地址
   
新建一个manage_pro.py 在线上使用这个来迁移数据库
wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod')

生成项目依赖
   pip freeze >requirements.txt
   
提交到git
   git add .
   git commit -m 'v1版本提交'
   git push origin master
   
部署到服务器上
   mkdir /home/project
   cd /home/project
   git clone https://gitee.com/Zhuiyue_55/luffy_api.git
   

配置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 退出
quit;

本地使用Navicate远程连接  注意与本地库区分

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

####### 在远端,安装项目依赖###########
进入到虚拟环境,进入到项目路径下,执行
workeron luffy
# 如果mysqlclient装不上,先把mysqlclient注释(vim requirements.txt 中mysqlclient前加#)

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

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


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

##### 迁移的记录文件,要不要提交到git上######
     官方推荐:提交
     我推荐:如果多人开发,不提交

# 录入数据,我们由于是测试,把本地的sql导出,导入到远端

==使用uwsgi启动django

运行django(个人经验,先用wsgiref运行起来,再用uwsgi跑)
    原来测试阶段,使用wsgiref运行
         跑起来,访问测试一下,你们可能访问不到
         原因是:安全组开启 8888和8080端口
         最后期:只留22,3306,6379,80,8080
     上线使用uwsgi

使用uwsgi步骤
    写一个uwsgi的配置文件(ini,【xml】)
    在luffy_api项目路径下 :
    vim luffy_api.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>
    、
# 使用uwsgi启动djagno
    uwsgi -x ./luffy_api.xml
    ps aux |grep uwsgi  # 看到有四个进程说明没问题

# 现在访问8888,没有响应
     uWSGI:配置文件是socket,说明它只能监听 uwsgi协议,浏览器发出去的是http协议,它不能响应
     只能http请求发送到nginx上,使用nginx把http请求,转发到uwsgi,nginx支持把http协议转成uwsgi
    
# 修改nginx 配置文件,完成对http请求的转发
在 nginx里面添加一个服务:

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/;
        }
    }

重启nginx
nginx -s reload

访问前端 查看
因为使用沙箱环境 会弹出错误

路飞后台管理样式处理

# 后台管理
     访问地址是:http://106.14.120.164:8080/admin
     发现样式没有      
            
            
            
# uwsgi为了提高性能,只负责处理动态请求,静态资源不管
     wgisref  既能访问静态资源,又能访问动态  测试阶段
     上线后,uwsgi为了提高性能,只处理动态请求【动静分离】
     静态资源,需要使用nginx代理
    
    
    
    
    
# 使用步骤
    1 第一步:收集静态资源
         simpleui的静态资源
         drf的静态资源
         前后端混合项目,你项目的静态资源
        
        
    2 创建文件夹 
    mkdir /home/project/luffy_api/luffy_api/static
    
    3 修改配置文件  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
    
    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 8000;
            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 luffy_api.wsgi;  #wsgi.py所在的目录名+.wsgi
               uwsgi_param UWSGI_CHDIR /home/project/luffy_api/; # 项目路径
            }
            # 新增的配置静态文件
            location /static {
                alias /home/project/luffy_api/luffy_api/static;
            }
        }
    }
    
    
    #6 重启nginx
    nginx -s reload
    
    
    
 # 访问:80端口是前端 http://106.14.120.164/

#  访问 8080后端 http://47.102.136.104:8080/admin
    
    
    
    
    
    
# 以后使用
    python manag_pro.py runserver  0.0.0.0:8888 运行不了了


posted @ 2023-03-14 23:23  缀月  阅读(61)  评论(0编辑  收藏  举报