上线部署
1 上线前准备
# 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://106.15.177.33:8080/api/v1/' } -编译 npm run build -项目路径下出现dist文件夹:html,css,js
2 阿里云机器购买
# 1 有一台服务器:虚拟机,购买一台阿里云的:云服务器,相当于你去电脑城配了一台电脑 # 2 公网ip地址:所有人都可以通过ip地址访问到我 # 3 域名:万网: 域名解析 # 购买机器:(阿里云,腾讯,新用户都很便宜,虚拟机) -包年包月:公司买,一买买几年 -按量付费:用一会,用完就释放:余额里必须大于100 -抢占式:空跑的资源,偏移卖给你,等有人正常买,空跑的越来越少,就会把抢占式实例释放调 -选择流量付费 -2核4g -centos 7.9系统 -选公网ip -自定义密码:root用户和自己写的密码 -确定购买成功 # 远程链接:xshell,finalshell # 开启这几个安全组端口 80 8080 3306 6379
3 上线架构图
# 后端项目djagno写的 -mysql 5.7 -redis 5.x -python解释器 3.8 -创建虚拟环境 # 前端项目vue # 云服务器上要装的软件 -mysql -redis -python3.8 -nginx:代理静态资源 -git:拉取代码 -uwsgi:运行django
4 安装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
5 云服务器安装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 Tl-5uKq&Z+tK >: mysql -uroot -p ftJd&i3>roih 6)修改密码 >: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; >: ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bxf12345?';
6 云服务器安装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
7 云服务器源码安装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
8 安装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
9 安装虚拟环境
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
10 安装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 进程名
11 路飞前端部署
# 编译成静态资源了 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
12 路飞后端部署
12.1 git拉取最新代码-安装依赖
# 1确认好wsgi.py 中得配置文件是不是用的prod.py #2 导出项目所有的依赖,当前虚拟环境的依赖,就是当前项目的依赖 pip freeze > requirements.txt #3 拉取项目 git clone git仓库中http地址 #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
12.2 配置数据库
# 创建数据库用户,和数据库,再迁移表 1)管理员连接数据库 >: mysql -uroot -p 2)创建数据库 >: create database luffy default charset=utf8; 3)设置权限账号密码:账号密码要与项目中配置的一致 >: grant all privileges on luffy.* to 'bxf'@'%' identified by 'Bxf12345?'; >: grant all privileges on luffy.* to 'bxf'@'localhost' identified by 'Bxf12345?'; >: flush privileges; 4)退出mysql >: quit;
12.3 迁移数据库
# manage.py --->dev.py # manage_pro.py --->prod.py python manage_pro.py makemigrations python manage_pro.py migrate # 表中没数据,加入点测试数据 # 把之前本地测试库中得数据导入 -本地的导出成sql -在navicate上右键---》导出成sql -导入到远端中取 -右键导入即可
# 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/</chdir> <module>luffyapi.wsgi</module> <processes>2</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 luffyapi.wsgi; uwsgi_param UWSGI_CHDIR /home/luffy/; } } } # 重启nginx nginx -s reload
13 路飞后台管理样式处理
uwsgi 只转发动态请求,静态资源它不管
1)编辑线上配置文件 >: vim /home/luffy/luffyapi/settings/prod.py 2)修改static配置,新增STATIC_ROOT、STATICFILES_DIRS STATIC_URL = '/static/' STATIC_ROOT = '/home/luffy/luffyapi/static' STATICFILES_DIRS = (os.path.join(BASE_DIR, "../static"),) 3)退出编辑 >: esc >: :wq 4)项目目录下没有 static 文件夹需要新建 >: mkdir /home/luffy/static 5)完成静态文件迁移 >: python /home/luffy/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/; } location /static { alias /home/luffy/luffyapi/static; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现