上线流程

上线流程

上线前准备

  1. 首先将跑在本地版本的项目,上传至远端(gitee、github上)

  2. 重新复制一份项目的配置文件,可以命名为pro.py(dev为开发阶段的配置文件,pro为上线的配置文件)

image

在pro文件内,修改以下配置项:

# 将调式模式改为false
DEBUG = False

# 运行的host地址,正常就是写服务端的ip地址,不知道可以先写*
ALLOWED_HOSTS = ['*']

# 数据库的配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy',
        'USER':'luffyapi',
        'PASSWORD':'Luffy123?',
        'HOST':'127.0.0.1', # 如果这里上线时,数据库没有和项目装在同一台服务器上,就需要配置装数据库服务器的ip地址
        'PORT':3306
    }
}

# redis配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache", #以后cache还是原来的方式使用,只不过不是存在浏览器了而是存在了redis里
        "LOCATION": "redis://127.0.0.1:6379", # 和上面数据库一样,装在一台机器就不用配了
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100} # 连接池的最大是100
            # "PASSWORD": "123", # 有密码就先密码,没有就不用写
        }
    }
}

# 支付相关的配置,上线改为公网ip
# 后台基URL
BASE_URL = 'http://106.15.104.37:8000'  #这里买好服务器之后,需要配置好自己服务器的ip地址并指定8000端口
# 前台基URL
LUFFY_URL = 'http://106.15.104.37' # 这个也是,端口前台采用默认的80端口
# 支付宝同步异步回调接口配置
# 后台异步回调接口
NOTIFY_URL = BASE_URL + "/order/success/"
# 前台同步回调接口,没有 / 结尾
RETURN_URL = LUFFY_URL + "/pay/success"
  1. 修改wsgi文件
# 将这里改成settings里的pro配置文件启动
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.pro')
  1. 重新复制一份上线的manage.py 改名为manage_pro.py
    # 修改一下配置文件为pro的那个
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.pro')
  1. 新建一个requirement.txt文本文件,里面放项目所需要用到的包

后面在服务器上只需要pip install -r requirement.txt就可以一次性下载完项目所需要的包

image

阿里云服务器的购买

买完之后,在安全设置里,释放自己需要的端口!!!

远程链接阿里云服务器的软件有:finalshell、xshell等

finalshell 下载安装地址:http://www.hostbuf.com/c/131.html

finalshell安装之后,打开使用ssh输入密码和ip连接远程服务器

连接上服务器之后,对服务器进行的初始化操作

  1. 更新系统软件包
yum update -y
  1. 安装软件管理包和可能使用的依赖
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

yum -y groupinstall "Development tools"
  1. 检测是否安装好那些依赖包
在终端输入git,看是否成功安装

服务端安装mysql

  1. 前往用户根目录
cd ~
  1. 下载并安装 MySQL 官方的 Yum Repository
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
  1. 然后进行repo的安装
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
  1. 安装MySQL服务器
yum -y install mysql-community-server

如果报密钥已安装,但不适用该软件包的错误,可以使用sudo yum install mysql-server --nogpgcheck方式重新安装
5. 启动mysql57并查看启动状态

systemctl start mysqld.service
systemctl status mysqld.service
  1. 查看默认密码并登录
grep "password" /var/log/mysqld.log
mysql -uroot -p
  1. 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Site123?';

服务端安装redis

  1. 前往用户根目录
cd ~
  1. 下载redis-5.0.5
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
  1. 解压安装包
tar -xf redis-5.0.5.tar.gz
  1. 进入目标文件
cd redis-5.0.5
  1. 编译环境
make
  1. 将安装完的redis复制到指定路径并改名为redis完成安装
cp -r ~/redis-5.0.5 /usr/local/redis
  1. 将redis服务端和客户端建立软连接
ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server
ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli
  1. 后台运行redis
cd /usr/local/redis # cd到redis文件夹里执行下面的命令
redis-server & # 加个&表示后台启动redis
  1. 关闭redis服务
pkill -f redis -9

服务端安装python3的环境

  1. 前往用户根目录
cd ~
  1. 下载 Python3.6.7
wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
  1. 解压安装包
tar -xf Python-3.6.7.tar.xz
  1. 进入目标文件
cd Python-3.6.7
  1. 配置安装路径
./configure --prefix=/usr/local/python3
  1. 编译并安装
make && sudo make install
  1. 建立软连接:终端命令 python3,pip3
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

服务端安装nginx

  1. 前往用户根目录
cd ~
  1. 下载nginx1.13.7
wget http://nginx.org/download/nginx-1.13.7.tar.gz
  1. 解压安装包
tar -xf nginx-1.13.7.tar.gz
  1. 进入目标文件
cd nginx-1.13.7
  1. 配置安装路径:/usr/local/nginx
./configure --prefix=/usr/local/nginx
  1. 编译并安装
make && sudo make install
  1. 建立软连接:终端命令 nginx
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
  1. 测试Nginx环境,服务器运行nginx,本地访问服务器ip
nginx
服务器绑定的域名 或 ip:80
  1. nginx的相关命令
nginx #启动nginx命令
nginx -s reload # 重启nginx
nginx -s stop # 结束nginx

服务端配置虚拟环境

  1. 安装依赖
pip3 install virtualenv
pip3 install virtualenvwrapper
  1. 建立虚拟环境软连接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
  1. 配置虚拟环境:填入下方内容
vim ~/.bash_profile # 打开该文件添加以下内容

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

  1. 更新配置文件内容
source ~/.bash_profile
  1. 关于虚拟环境的一些命令
# 创建虚拟环境
mkvirtualenv luffy
# 进入虚拟环境
workon luffy
# 退出虚拟环境
deactivate

配置上传前台项目

  1. 将base_url设置成自己服务器的公网ip
base_url: 'http://39.99.192.127:8000',  // 真实环境:django项目就是跑在8000端口上的
  1. 本地前台项目打包,前往luffycity项目目录下,打包前台项目成一个dist文件夹
cnpm run build
  1. 本地终端上传dist文件夹到服务器根目录下
scp -r dist root@39.99.192.127:~
-r表示文件夹一起传 root为服务器用户名,@后面为服务器ip,~表示传到根目录下
  1. 在服务端,将dist文件夹从~根目录下移动到home文件夹下,并将dist文件夹重命名为html
    mv ~/dist /home/html

  2. 去向Nginx配置目录,备份配置,完全更新配置:填入下方内容

cd /usr/local/nginx/conf # 进入nginx的配置文件目录
mv nginx.conf nginx.conf.bak  # 将nginx原本的配置文件重新移到一个新的文件nginx.conf.bak里
vim nginx.conf # 新建一个nginx.conf文件配置以下内容

# events表示最大连接数
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        # 监听的80端口
        listen 80;
        server_name  127.0.0.1; # 改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
            # 访问根路径时去root里找html文件夹里的index.html
            root /home/html; # html访问路径
            index index.html; # html文件名称
            try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题
        }
    }
}

此时,在访问服务端的ip地址,默认就会显示前台项目的页面

配置上传后台项目

  1. 创建存放后台项目的目录
mkdir /home/project
  1. 将远端的项目拉到服务器上
cd /home/project
# 从gitee或者github上拉下项目
git clone https://gitee.com/doctor_owen/luffyapi.git(项目地址)
  1. 配置虚拟环境
mkvirtualenv luffy
workon luffy

# 在虚拟环境中安装项目所需要的包
pip install -r requirement.txt
  1. 对服务端项目的数据库进行相应的操作
1)管理员连接数据库
mysql -uroot -p

2)创建项目对应数据库
create database luffy default charset=utf8;

3)设置权限账号密码:账号密码要与项目中配置的一致
create user 'username'@'%' identified by 'password';
grant all privileges on 库名.* to 'username'@'%' with grant option;
flush privileges;

4)退出mysql
quit;

搞完,本地的navicat就可以连接到服务端的数据库了(注意需要服务器开放3306端口)

删除,项目文件里的迁移文件,再执行数据库迁移命令

迁移完执行创建超级管理员命令,创建超级管理员!!

  1. 安装uwsgi,使用uwsgi代替python manage.py runserver启动项目
# 1)在真实环境和虚拟环境都要安装uwsgi
pip3 install uwsgi

uwsgi的基础命令:
uwsgi -x /home/project/siteapi/site.xml # 启动uwsgi
pkill -f uwsgi -9 # 关闭uwsgi
ps -aux|grep uwsgi # 查看uwsgi进程

# 2)建立软连接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

# 3) 进行uwsgi服务配置,内容如下
vim /home/project/luffyapi/luffyapi.xml # 创建一个xml文件并配置以下内容

<uwsgi>    
   <socket>127.0.0.1:8808</socket> <!-- 内部端口,自定义--> 
   <chdir>/home/project/siteapi/</chdir> <!-- 项目路径 -->            
   <module>siteapi.wsgi</module>  <!-- luffyapi为wsgi.py所在目录名--> 
   <processes>6</processes> <!-- 进程数 -->     
   <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>

# 4)去向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; # 改为自己的域名,没域名修改为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
    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 siteapi.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /home/project/siteapi/; # 项目路径
        }
    }
}

此时,重启nginx,在访问ip:8000端口,会经由nginx转发,交给uwsgi处理启动项目,但是还需要收集一下静态文件

  1. 后台样式:admin、rest_framework、xadmin等框架的静态样式也需要处理
1)项目目录下没有 static 文件夹需要新建
mkdir /home/project/luffyapi/luffyapi/static

2) 编辑线上配置文件
# 打开配置文件
vim /home/project/luffyapi/luffyapi/settings/prod.py

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

(如果报错,则修改STATICFILES_DIRS 为(os.path.join(BASE_DIR, "images"),))

3)完成静态文件迁移
python /home/project/luffyapi/manage_pro.py collectstatic
  1. Nginx配置静态路径
1)修改nginx配置
vim /usr/local/nginx/conf/nginx.conf

# 新增的配置静态文件
   location /static {
       # alias 后面是静态文件路径
       alias /home/project/luffyapi/luffyapi/static;  
        }

重启nginx和uwsgi就可以访问到页面了

访问ip:8000/admin路径可以查看后台管理页面

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:上线流程 - Python技术站

(0)
上一篇 2023年4月2日 下午4:19
下一篇 2023年4月2日 下午4:19

相关文章

  • 关于编辑器和解释型编译型语言

    各种语言用到的编辑器 python开发:pycharm(收费),vscode(免费),sublintext, go开发:goland(收费),vscode,国产的 java:idea(收费),eclipse(免费),MyEclipse(收费) android:androidstudio(免费),eclipse+adt 前端:webstorm(收费) php:…

    Python开发 2023年4月2日
    00
  • 实时展示用户上传的头像

    实时展示用户上传的头像 总体思路 “”” 1.首先需要给对应的上传头像input框绑定一个文本域变化事件 (当检测到用户对该文件框上传了头像就会触发一系列操作) 2.再生成一个文件阅读器对象 3.再获取用户上传的文件头像 4.把用户上传的文件头像交给文件阅读器对象FileReader读取 5.利用文件阅读器把读取的文件头像结果展示到前端页面 (修改img的s…

    Python开发 2023年4月2日
    00
  • 源码分析之序列化器的many关键字

    在序列多个数据时,我们需要指定一个关键字many=True 这是为什么呢? 其实是,当序列化器产生对象时,传入参数many和不传入会生成两个不同的对象!! 这是怎么实现的呢?? 1.类的对象生成–先调用类的__new__方法生成一个空对象2.对象 = 类名(name=‘lz’)–会触发类的__init__方法,产生一个有属性的对象3.类的__new__方…

    2023年4月2日
    00
  • 重构后台的django项目目录、配置开发环境、添加环境变量

    重构项目目录 celery_task: logs:项目运行时/开发时日志目录包 luffapi:项目同名文件夹 apps:项目所有应用的集合文件夹 libs:第三方类库的保存目录[第三方组件、模块] – 包 media:用户提交的文件目录文件夹 settings:配置目录,包含开发时的配置文件和上线时的配置文件 utils:多个模块[子应用]的公共函数类库[…

    2023年4月2日
    00
  • flask基础介绍和语法

    flask基础介绍和语法 flask项目初始化的app.py介绍 # 从flask包中导入flask类 from flask import Flask # 使用flask类实例化出一个app对象 # __name__:代表当前app.py这个模块 app = Flask(__name__) # 创建一个路由和视图的映射 @app.route(‘/’) def…

    2023年4月2日
    00
  • 迭代器与生成器

    1.什么是迭代器 迭代器是用来迭代取值的工具,而迭代的意思是一个重复的过程,每一次的重复都是基于上一次的结果继续的,单纯的重复并不是迭代 2.为何要有迭代器 在python中涉及到需要把多个值循环取出来的类型有:字符串、列表、元组、字典、集合、打开文件等,我们可以考虑使用while循环的方式来循环取出多个值,例如: list=[‘egon’,’lin’,11…

    Python开发 2023年4月2日
    00
  • 小程序开发环境搭建

    如何开发微信小程序 小程序:学习微信开发的语言(前端html、css、js、vue.js) 微信开发者工具 API:restful接口(Python+django+drf框架)。 pycharm 环境搭建 python环境搭建 虚拟环境 django drf pycharm 小程序环境 在微信公众平台上注册一个小程序账号 在开发设置里保存好自己的appid …

    2023年4月2日
    00
  • CORS跨域资源共享问题

    同源策略介绍 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同. 比如:我在本地上的域名是127.0…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部