首页 > 数据库 >路飞项目,上线,阿里云按量付费,云服务器安装mysql,云服务器安装redis,云服务器安装python3.8,安装uwsgi,安装虚拟环境,安装nginx,路飞前端部署,路飞后端部署,路飞后台管理样

路飞项目,上线,阿里云按量付费,云服务器安装mysql,云服务器安装redis,云服务器安装python3.8,安装uwsgi,安装虚拟环境,安装nginx,路飞前端部署,路飞后端部署,路飞后台管理样

时间:2023-03-14 23:22:37浏览次数:44  
标签:nginx redis django 路飞 luffy 服务器 安装 uwsgi

内容回顾

文件存储

之前上传到服务器,放到media文件夹下

使用文件服务器托管文件

1.第三方托管

​ 腾讯云

​ 阿里云

​ 七牛云

2.基于开源文件服务器自己搭建

​ fastdsf 》中小文件

​ minio

​ go-fastdsf :是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简单设计,使得它的运维及扩展变得更加简单,它具有高性能,高可用,无中心,面维护等优点

搜索功能

前端header.vue 搜索框

搜接口:结果:实战课,轻课,免费》分布式全文检索引擎

前端搜索结果页面

支付宝支付

商户:我们系统》申请商户号,需要营业执照

沙箱环境:测试商户号

买家:测试买家

支付流程:用户在我们系统中点击立即购买》我们后端生成支付链接》返回给前端》打开这个支付地址(支付宝付款页面)》用户扫码输入账户密码付款》支付宝收到用户付款》用户付到支付宝商户上》支付宝会有前端回调地址(get)》调到我们配置的前端回调地址》我们做了个付款成功的页面》后台写了个支付宝回调的地址(post,支付宝用,验证了签名,防止破解)

使用第三方sdk

封装了包

-__init__
-settings.py
-pay.py
-pem
    -支付宝公钥
    -我们私钥

订单板块结构表

order

orderDetail

下单接口

前端传入的数据

{courses:[1,],total_amount:99,subject:订单标题}

后端

1取出课程列表,根据课程列表拿到course对象,统计里面的金额与前端对比是否一致

2.生成订单 uuid

3.拿到购买用户request.user中取

4.生成支付链接 放到context中

5.把订单存起来,存到order订单表与orderDetail订单详情表中

6.取出context中的支付链接把支付链接返回前端,前端跳转到支付宝支付页面

前端支付

open函数打开支付链接地址

付款成功回到支付成功页面

两个回调

get回调地址用于给前端查询是否真正付款成功

post回调地址用来给支付宝,当用户支付成功回调的地址,更新用户订单状态

内容详细

上线架构图

服务器,公网ip地址

云服务器:阿里云,腾讯云

上线架构图

上线图

阿里云购买

购买阿里云服务器

ssh客户端

xshell

finalshellhttp://www.hostbuf.com/t/988.html

git Bash命令

配置一下服务器,装一些常用的依赖

#更新yum工具
yum update -y  
# 装了一堆开发用的工具,git
yum -y groupinstall "Development tools"  
# 安装一些可能会用到的工具
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel -y

云服务器安装mysql

前往用户根目录

# 回到家目录/root
cd ~   

下载mysql57

这个版本不需要只需跟着步骤来就行了

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

安装

yum -y install mysql57-community-release-el7-10.noarch.rpm
# 真正安装上面选择完毕后这个直接执行
yum install mysql-community-server --nogpgcheck -y

启动mysql57并查看启动状态

启动mysql

systemctl start mysqld.service

查看mysql启动状态

systemctl status mysqld.service

image-20230314192822108

查看默认密码并登录

grep "password" /var/log/mysqld.log

# 密码 qTPzt<srl5**

image-20230314192906943

登录

mysql -uroot -p
# 密码 qTPzt<srl5**

image-20230314193019068

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lqz12345?';

云服务器安装redis(源码安装)

前往用户跟目录

cd ~

下载redis-5.0.5

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

解压安装包

tar -xf redis-5.0.5.tar.gz

进入目标文件

cd redis-5.0.5

编译环境

make
# 在src路径下会有可执行文件:redis-server redis-cli

复制环境到指定路径完成安装

cp -r ~/redis-5.0.5 /usr/local/redis

配置redis可以后台启动:修改下方内容

vim /usr/local/redis/redis.conf

daemonize yes

完成配置

esc
:wq
回车

建立软连接(因为/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

后台运行redis

cd /usr/local/redis

redis-server ./redis.conf &

查看是否正常运行

ps aux |grep redis

测试redis环境

redis-cli

image-20230314194116325

关闭redis服务

pkill -f redis -9

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

linux mac 系统服务是用python写的python2写所以系统中默认带了python2

阿里云的centos自动装了python3.6

云服务器上有python2和python3.6

自己装python3.8

centos快速安装 yum install python 可以快速安装,但是不能指定版本,不能指定安装目录

源码安装 下载指定版本的源码,编译安装

所以linux和mac都自带python2:系统服务,用的python2写的

阿里云的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

前往用户根目录

cd ~

下载或上传python3.8.6 到服务器终端

wget https://registry.npmmirror.com/-/binary/python/3.8.6/Python-3.8.6.tgz

解压安装包

tar -xf Python-3.8.6.tgz

进入目标文件

cd Python-3.8.6

配置安装路径:/usr/local/python3

把python3.8.6 编译安装到/usr/local/python38路径下

./configure --prefix=/usr/local/python38

编译安装如果报错,说明却依赖

make &&  make install
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel zlib* libffi-devel  -y

建立软连接/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

删除安装包与文件

rm -rf Python-3.8.8
rm -rf Python-3.8.8.tar.xz

安装uwsgi

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

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

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

安装步骤

在真实环境安装

pip3.8 install uwsgi

安装到了python38的安装路径的bin路径下了

建立软链接

ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi

image-20230314200019952

安装虚拟环境

pip换源

在root文件夹.pip文件夹pip.conf文件内填写
# 创建文件
mkdir .pip
cd .pip
vim pip.conf
下入下面代码
esc
:wq
回车
退出保存


[global]
index-url = https://mirrors.aliyun.com/pypi/simple

[install]
trusted-host = mirrors.aliyun.com

安装前先更新一下pip 与setuptools pbr 减少安装模块错误

# 升级pip版本
python3.8 -m pip install --upgrade pip    

#升级setuptools
python3.8 -m pip install --upgrade setuptools

pip3.8 install pbr

安装依赖

pip3.8 install virtualenv


pip3.8 install virtualenvwrapper

建立虚拟环境软连接

ln -s /usr/local/python38/bin/virtualenv /usr/bin/virtualenv

配置虚拟环境:填入下方内容

~/ 表示用户家路径:root用户,就是

在/root/.bash_profile

vim ~/.bash_profile

退出编辑并保存

esc
:wq

更新配置文件内容

source ~/.bash_profile

image-20230314200908841

虚拟环境默认环境目录~/.virtualenvs

创建虚拟环境

mkvirtualenv -p python3.8 luffy

image-20230314201400671

# 退出虚拟环境
deactivate
# 查看虚拟环境
workon
# 进入虚拟环境
workon 虚拟环境名

image-20230314201421006

按章nginx(源码安装)

nginx:软件网关软件

Nginx(enigne x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·塞索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的服务器

运行在服务器上,监听某个端口,可以向这个服务器发生http请求

转发http请求,代理静态文件,负载均衡

安装Nginx

前往用户根目录

cd ~

下载nginx1.13.7

wget http://nginx.org/download/nginx-1.13.7.tar.gz

解压安装包

tar -xf nginx-1.13.7.tar.gz

进入目标文件

cd nginx-1.13.7

配置安装路径 /usr/local/nginx

./configure --prefix=/usr/local/nginx

编译并安装

make && sudo make install

建立软连接:终端命令 nginx

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

删除安装包与文件

cd ~

rm -rf nginx-1.13.7

rm -rf nginx-1.13.7.tar.xz

测试Nginx环境,服务器运行Nginx,本地访问服务器ip

nginx

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

image-20230314202635471

无法访问时记得查看服务器防护墙是否在开启着,如果在开启着需要关闭才能访问

1、命令行界面输入命令
systemctl status firewalld.service
并按下回车键。

2、然后在下方可度以查看得到“active(running)”,此时说明防火墙已经被打开了。

3、在命令行中输入
systemctl stop firewalld.service
命令,进行关闭防火墙。

4、然后再使用命令
systemctl status firewalld.service
在下方出现disavtive(dead),这权样就说明防火墙已经关闭。

5、再在命令行中输入命令
systemctl disable firewalld.service
命令,即可永久关闭防火墙。

路飞前端部署

把vue项目编译成存粹的静态文件,把ajax远程链接的地址改成服务器的地址]

settings.js

export default {
    BASE_URL:'http://127.0.0.1:80/api/v1'
}

image-20230314203016281

编译前端

npm run build

image-20230314203305359

编译后打包成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问题
        }
    }
} 

image-20230314204505441

把dist下所有内容 cp 到/home/html 注意路径

cp -r dist /home/html

重启nginx

ginx -s reload

image-20230314204759703

访问自己云服务器ip就能看到前端页面了

http://自己的云服务器ip/

路飞后端部署

提交本地代码

把配置文件修改

Debug模式
ALLOWED_HOSTS
点后端地址
数据库地址
redis地址

上线配置文件

prov.py

"""
Django settings for luffy_api project.

Generated by 'django-admin startproject' using Django 3.2.2.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
import sys, os

sys.path.insert(0, str(BASE_DIR))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-t9pg0*4&7qu29p^yth8u@w8puvp6u6475p=*bt8*6q-gabz530'

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False

ALLOWED_HOSTS = ['*']

# Application definition
INSTALLED_APPS = [
    'simpleui.apps.SimpleApp',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home',
    'user',
    'rest_framework',
    'rest_framework_jwt',
    'corsheaders',
    'course',
    'django_filters',
    'order',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'utils.common_middleware.ResponseMiddlerware',
    'corsheaders.middleware.CorsMiddleware'
]

ROOT_URLCONF = 'luffy_api.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'luffy_api.wsgi.application'

# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
name = os.environ.get('luffy_name', 'luffy')
password = os.environ.get('luffy_password', 'Luffy123?')

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # },
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy01',
        'HOST': 'localhost',
        'PORT': 3306,
        'USER': name,
        'PASSWORD': password,
        'CHARSET': 'utf8mb4'
    }
}

# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

# USE_TZ = True
USE_TZ = False

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'  # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # 过滤日志
    'handlers': {
        # 打印到终端的日志
        'console': {
            'level': 'ERROR',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        # 打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': os.path.join(os.path.dirname(BASE_DIR), 'log', 'log.log'),  # 日志文件
            'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        # logging.getLogger(__name__)拿到的logger配置
        'django': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'propagate': True,  # 向上(更高level的logger)传递
            # 'level': 'DEBUG',   # 如果debug等级日志不打印不记录,那么把这个加上都,文件记录日志的就能生效了,但是控制台打印的还是不能生效
            # 正常项目不会用这么低,因为django用的debug日志太多了,对于我们来说也没什么用所有就info就行了
        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
        # '购物车记录': {
        #     'handlers': ['default','console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
        #     'level': 'WARNING',
        #     'propagate': True,  # 向上(更高level的logger)传递
        # },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
    },
}

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'utils.common_exceptions.exception',
}
AUTH_USER_MODEL = 'user.User'

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

DB_PREFX = 'luffy'

TENG_CLOUD = {
    'SECRET_ID': os.environ.get('SECRET_ID'),
    'SECRET_KEY': os.environ.get('SECRET_KEY'),
    # 短信应用id
    'SMSSDK_APPID': os.environ.get('SMSSDK_APPID'),
    # 签名名称
    'SIGN_NAME': os.environ.get('SIGN_NAME'),
    # 模板id
    'TEMPLATE_ID': os.environ.get('TEMPLATE_ID'),
}
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
    'token'
)

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}
            # "PASSWORD": "123",
        }
    }
}

BASE_URL = 'http://10.0.0.200:8080'

# 后台基URL
BACKEND_URL = 'http://10.0.0.200:8080'
# 前台基URL
LUFFY_URL = 'http://10.0.0.200:80'
# 支付宝同步异步回调接口配置
# 后台异步回调接口
NOTIFY_URL = BACKEND_URL + "/api/v1/order/success/"  # 如果这个接口不对,支付宝永远掉不回来,订单状态永远不会改
# 前台同步回调接口,没有 / 结尾
RETURN_URL = LUFFY_URL + "/pay/success"
import datetime

JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
}

新建一个manage_pro.py在线上使用这个来迁移数据库

wsgi.py配置修改

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prov')

生成项目依赖

pip freeze >requirements.txt

提交到git上

git add .
git commit -m '路飞项目v1上线版'
git push origin master

image-20230314205908907

部署到服务器上

mkdir /home/project
cd /home/project
git clone https://gitee.com/xuwuw/luffy_api.git

image-20230314210115827

配置luffy数据库

管理员链接数据库

mysql -uroot -p

创建数据库

create database luffy default charset=utf8;

设置权限账户密码:账户密码要与项目配置的一致

grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';

grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';

# 刷新权限
flush privileges;

退出msyql

quit

image-20230314210532130

检查用户

mysql -uroot -p
Luffy123?

show databases;

image-20230314210854096

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

在远端,安装项目依赖

进入到虚拟环境,进入到项目路径下,只需

workon luffy

如果mysqlclient装不上,先把mysqlclient注释

pip install -r requirements.txt

image-20230314211941966

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

迁移的记录文件,要不要提交到git上

官方建议提交

我们自己不推荐:如果多人开发,提交会造成冲突,所有不提交

需要修prov.py中的数据库名改为由luffy01修改为luffy
python manage_pro.py makemigrations
python manage_pro.py migrate

迁移成功

image-20230314213134216

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

image-20230314213346610

使用uwsgi启动django

运行django(老司机经验,现有wsgiref运行起来,再用uwsgi跑)

原来测试阶段,使用wsgiref运行

跑起来,访问测试一下,可能访问不到

原因是:安全组没有开启 8888和8000端口

最后期:只留22,3306,6379,80,8080

上线使用uwsgi

# 测试使用
# 监听本机所有ip
python manage_pro.py runserver 0.0.0.0:8000

image-20230314214547778

使用uwsgi步骤

写一个wusgi的配置文件(ini,[xml]) 我们使用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>

image-20230314215551535

使用uwsgi启动django

uwsgi -x ./luffyapi.xml
ps aux |grep uwsgi  
# 看到有四个进程说明没问题

image-20230314220249280

现在访问8888没有响应

image-20230314220458422

uWSGI:配置文件是socket,说明它只能监听uwsgi协议,浏览器只能发出http协议,他不能响应

只能http请求发送到nginx上,使用nginx把http请求,转发到uwsgi,nginx支持把http协议转成uwsgi

修改nginx配置文件,完成对http请求的转发

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

image-20230314222222866

uwsgi上线成功

image-20230314224849761

路飞后台管理样式处理

访问后台管理http://服务器ip地址:8080/admin

image-20230314225001036

发现没有样式

uwsgi为了提高性能,只负责处理动态请求,静态资源不管

wgisref 既能访问静态资源,又能访问动态资源 测试阶段

上线后,uwsgi为了提高性能,只处理动态请求【动静分离】

静态资源,需要使用nginx代理

使用步骤

第一步:收集静态资源

simpleui的静态资源

drf的静态资源

前后端项目混合,项目的静态资源

media文件夹资源

第二步 创建文件夹

mkdir /home/project/luffy_api/luffy_api/static

第三步修改配置文件prov.py

STATIC_URL = '/static/'
STATIC_ROOT = '/home/project/luffy_api/luffy_api/static' 

执行这个命令,把静态文件搜集到STATIC_ROOT对应的文件夹下

image-20230314225820197

修改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 luffyapi.wsgi;  #wsgi.py所在的目录名+.wsgi
            uwsgi_param UWSGI_CHDIR /home/project/luffyapi/; # 项目路径
        }
        # 新增的配置静态文件
        location /static {
            alias /home/project/luffy_api/luffy_api/static;
        }
        location /static {
            alias /home/project/luffy_api/luffy_api/media;
        }
    }
}

重启nginx

nginx -s reload

访问80端口是前端http://服务器ip地址/

访问 8080后端 http://服务器ip地址:8080/admin

image-20230314230645319

以后使用

python manag_pro.py runserver  0.0.0.0:8888 
# 就运行不了了

补充

域名转发

购买域名》备案》域名解析配置

以后访问域名即可

标签:nginx,redis,django,路飞,luffy,服务器,安装,uwsgi
From: https://www.cnblogs.com/clever-cat/p/17216849.html

相关文章

  • Biopython 安装
    参考:Biopython安装Biopython安装本节解释了如何在你的机器上安装Biopython。它的安装非常简单,不会超过5分钟。第1步 -验证Python的安装Biopython被设计为与Python......
  • 如何访问Linux服务器上的图片资源呢
    一、Nginx实现图片访问这里是用的nginx搭建编辑nginx下conf目录下的nginx.conf文件找到对应的server,我这里端口设置的为8000添加location~.*\.(gif|jpg|pdf|jpeg|......
  • debian安装最小桌面,中文和 浏览器
    debian安装最小桌面,适合vnc使用apt-yupdateapt-yupgrade#安装中文apt-yinstallaptitudeaptitudeinstalllocalesdpkg-reconfigurelocalesnano/etc/default/l......
  • npm暴力安装解决依赖冲突
    今天安装一直报错依赖冲突没办法只能暴力安装上去然后跑了下项目居然没事 项目顺利跑起来了 安装的包也起了作用小伙伴门实在找不到方法可以试试暴力安装..........
  • 38 openEuler搭建FTP服务器-FTP总体介绍
    38openEuler搭建FTP服务器-FTP总体介绍38.1FTP简介FTP(FileTransferProtocol)即文件传输协议,是互联网最早的传输协议之一,其最主要的功能是服务器和客户端之间的文件传输......
  • Centos 7 安装系列(9):Minio (rpm 方式)
    一、系统环境操作系统:Centos7已配置环境:空二、安装步骤2.1下载安装包yuminstall-ywgetmkdir/opt/miniowgethttps://dl.minio.org.cn/server/minio/release/linux-am......
  • pip下载安装库、模块慢,配置windows全局的国内源
    步骤windows+r打开命令行;输入%appdata%回车;在出现的文件夹中找到名称为pip的文件夹(没有则创建)创建pip.ini文件[global]timeout=6000index-url=http://pypi.......
  • Visual Studio 2022 安装.NET Framework4.5及以下目标包
    VisualStudio2022不再支持.NET4.5,如果打开.Net4.8目标包或.NET4.8以下的.NET版本项目时,会提示不再支持。即使在VisualStudioInstaller中也找不到.NET4.5及以下的选......
  • 路飞-支付宝支付接口
    支付宝支付接口#立即购买功能,点击立即购买按钮,使用支付宝支付#支付宝支付 -测试环境:大家都可以测试ß-正式环境:申请,有营业执照 -咱们做不了#咱们开发......
  • nodejs、vue安装
    安装完成软件后注意点:本人只做记录防止原文删除原文:https://www.jb51.net/article/251371.htm一、创建全局安装目录和缓存日志目录运行 npmconfigsetcache"D:\Pro......