上线路飞项目
目录
上线路飞项目
今日内容详细
1 上线架构图
# 服务器,公网ip地址
-云服务器:阿里云,腾讯云
# 上线架构图
2 阿里云购买
# 购买阿里云服务器
-阿里云官网,点选购买
# ssh客户端
-xshell
-finalshell:http://www.hostbuf.com/t/988.html
-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
3 云服务器安装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
>: systemctl status mysqld.service
5)查看默认密码并登录
>: grep "password" /var/log/mysqld.log
# Hay(:PiB+9NE
# Hay(:PiB+9NE
>: mysql -uroot -p
6)修改密码
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lqz12345?';
4 云服务器安装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
5 云服务器安装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
6 安装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
7 安装虚拟环境
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
8 安装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)建立软连接:终端命令 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
9 路飞前端部署
# 把vue的项目编译成纯粹的静态文件,把ajax远程链接的地址改成服务器的地址
settings.js
export default {
BASE_URL:'http://106.14.120.164: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 # 注意路径
# 重启ngixn
nginx -s reload
#访问 http://106.14.120.164/ 前端页面
10 路飞后端部署
10.0 提交本地代码
# 把配置文件修改
-Debug模式---> False
-ALLOWED_HOSTS---> 改为你自己的公网ip或者*
-点后端地址
-数据库地址
-redis地址
# 新建一个manage_pro.py,在线上使用这个来迁移数据库
# wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod')
# 生成项目依赖
pip freeze >requirements.txt
# 提交到git
git add .
git push origin master
# 我是提交到了dev
# 部署服务器上
mkdir /home/project
cd /home/project
git clone https://gitee.com/liuqingzheng/luffy_api.git
10.1 配置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?';
# 这个要与settings中的数据库密码一致
>: flush privileges;
4)退出mysql
>: quit;
# 本地使用Navicate连接
10.2 安装项目依赖 迁移数据库
####### 在远端,安装项目依赖###########
进入到虚拟环境,进入到项目路径下,执行
workon luffy
# 如果mysqlclient装不上,先把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上######
-官方推荐:提交
-我推荐:如果多人开发,不提交
python manage_pro.py makemigrations
python manage_pro.py migrate
# 录入数据,我们由于是测试,把本地的sql导出,导入到远端
10.3 使用uwsgi启动django
# 运行django(个人经验,先用wsgiref运行起来,再用uwsgi跑)
-原来测试阶段,使用wsgiref运行
-跑起来,访问测试一下,你们可能访问不到
-原因是:安全组开启 8888和8080端口
-最后期:只留22,3306,6379,80,8080
-上线使用uwsgi
# 使用uwsgi步骤
-写一个uwsgi的配置文件(ini,【xml】)
vim luffyapi.xml
<uwsgi>
<socket>127.0.0.1:8888</socket> <!-- 内部端口,自定义 -->
<chdir>/home/project/luffy_api/</chdir> <!-- 项目路径 -->
# 我跟老师不同之处<chdir>/home/project/lufei_api/</chdir> <!-- 项目路径 -->
<module>luffy_api.wsgi</module> <!-- luffyapi为wsgi.py所在目录名-->
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
# 使用uwsgi启动djagno
uwsgi -x ./luffyapi.xml
ps aux |grep uwsgi # 看到有四个进程说明没问题
# 现在访问8888,没有响应
-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/;
# 依旧是路径问题,我的是/home/project/lufei_api/
}
}
# 重启nginx
nginx -s reload
# 访问前端,查看
11 路飞后台管理样式处理
# 后台管理
-访问地址是:http://106.14.120.164:8080/admin
-发现样式没有
# uwsgi为了提高性能,只负责处理动态请求,静态资源不管
-wgisref 既能访问静态资源,又能访问动态 测试阶段
-上线后,uwsgi为了提高性能,只处理动态请求【动静分离】
-静态资源,需要使用nginx代理
# 使用步骤
1 第一步:收集静态资源
-simpleui的静态资源
-drf的静态资源
-前后端混合项目,你项目的静态资源
-
2 创建文件夹
mkdir /home/project/luffy_api/luffy_api/static
3 修改配置文件 cd到luffy_api/settings/ ---> vim prod.py
STATIC_URL = '/static/'
STATIC_ROOT = '/home/project/luffy_api/luffy_api/static'
# 依旧是路径问题,因为我推到git上时路径是lufei_api
# STATIC_ROOT = '/home/project/lufei_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 luffyapi.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /home/project/luffyapi/; # 项目路径
}
# 新增的配置静态文件
location /static {
alias /home/project/luffyapi/luffyapi/static;
# 路径问题 我的是alias /home/project/lufei_api/luffy_api/static;
}
}
}
#6 重启nginx
nginx -s reload
# 访问:80端口是前端 http://106.14.120.164/
# 访问 8080后端 http://106.14.120.164:8080/admin
# 以后使用
python manag_pro.py runserver 0.0.0.0:8888 运行不了了
12 补充 域名
# 域名转发
购买域名---> 备案---> 域名解析配置
# 以后访问域名即可