路飞项目上线
项目上线
1.购买阿里云服务器
2.下载ssh客户端
xshell
finalshell
http://www.hostbuf.com/t/988.html
使用finalshell链接远程服务器
3.配置服务器,下载依赖
1. yum update -y
2. yum -y groupinstall "Development tools" # 开发用的工具含有git
3. yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
4.云服务器安装mysql
切换到家路径
cd ~
下载mysql 5.7
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
安装mysql
# 按顺序执行
1. yum -y install mysql57-community-release-el7-10.noarch.rpm
2. yum install mysql-community-server --nogpgcheck -y
启动mysql服务
systemctl start mysqld.service
# 查看启动状态
systemctl status mysqld.service
下图代表成功启动
查看默认密码并登录
grep "password" /var/log/mysqld.log
# 登录
mysql -uroot -p
修改mysql用户名密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
eg:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lqz12345?';
5.云服务器安装redis
退出mysql
前往用户根目录
cd ~
下载redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
可以去
http://download.redis.io/releases/ 查看版本后加在后缀上
解压安装包
tar -xf redis-5.0.5.tar.gz
# 解压后删除安装包
rm -rf redis-5.0.5.tar.gz
进入目标文件
cd redis-5.0.5
编译环境
make
cd src/ 进入src
在src路径下会有可执行文件:redis-server redis-cli
复制环境到指定路径完成安装
cp -r ~/redis-5.0.5 /usr/local/redis
切换到 redis目录下
cd /usr/local/redis
修改redis.conf配置文件
vim /usr/local/redis/redis.conf
按 i 或 a进入编辑
# 修改内容
daemonize yes
完成配置修改
esc
:wq # 保存退出
:q # 不保存退出
建立软连接
# 因为/usr/local/redis/src没有加到环境变量
"因为usr/bin/ 在环境变量里,后面直接敲redis就能找到使用"
1. ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server
2. ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli
切换到 cd /usr/bin 目录下
输入 ls -al |grep redis
# 过滤查看redis相关文件是否已成功建立软链接
后台运行redis
因为bin目录里没有 redis.conf 文件需要回到redis目录去运行 redis.conf
cd /usr/local/redis
redis-server ./redis.conf & # 在当前目录下redis.conf运行redis.server
查看服务是否已经运行
ps aux |grep redis # 过滤查看进程
打开redis
# 进入redis客户端 测试环境
redis-cli # 也可以回到家目录输入
关闭redis服务 (一般不用)
shutdown # 在redis-cli 里运行
6 安装python3.8
linux与mac系统服务是用python和python2写的,这两个系统自带了python2
阿里云的centos自动安装了python3.6
也就说我们自己的云服务器有了python2与python3.6
yum install python 可以快速安装但是不能指定版本与安装目录。
使用源码安装
下载依赖
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
https://registry.npmmirror.com/-/binary/python/ # 该网站可以查看到更多版本下载地址
解压安装包
tar -xf Python-3.8.6.tgz
进入目标文件
cd Python-3.8.6
配置安装路径
# 把python3.8.6 编译安装到/usr/local/python38路径下
./configure --prefix=/usr/local/python38
编译并安装
make && make install
建立软连接
python3.8 pip3.8 在家目录没办法找到
# 把/usr/local/python38/bin加入到环境变量
ln -s /usr/local/python38/bin/python3.8 /usr/bin/python3.8
ln -s /usr/local/python38/bin/pip3.8 /usr/bin/pip3.8
命令对应
2.x python
3.6 python3 pip3
3.8 python3.8 pip3.8
删除安装包与文件
rm -rf Python-3.8.6/
rm -rf Python-3.8.6.tar.xz
7.安装uwsgi
django flask项目上线需要使用uwsgi部署,性能高。 是一个符合wsgi协议的web服务器
切换到python38的bin路径
cd /usr/local/python38/bin
安装uwsgi
pip3.8 install uwsgi
建立软连接
ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi
8, 安装虚拟环境
安装依赖
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
建立虚拟环境软连接
ln -s /usr/local/python38/bin/virtualenv /usr/bin/virtualenv
切换到 /usr/bin
ls -al |grep virtual # 查看软链接
配置虚拟环境:填入下方内容
切换到家路径
cd ~
# 进入下面文件 ls -al可以查看到该文件
vim ~/.bash_profile
"添加内容"
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.8
source /usr/local/python38/bin/virtualenvwrapper.sh
退出编辑状态并保存
esc
:wq
更新配置文件内容
source ~/.bash_profile
虚拟环境默认根目录:~/.virtualenvs
创建虚拟环境
mkvirtualenv -p python3.8 luffy
下载django
pip install django==3.2.2 # 这是装在虚拟环境里的哦
退出虚拟环境
deactivate
进入/切换虚拟环境
workon 环境名
删除虚拟环境
rmvirtualenv 虚拟环境名称
也可以到目录下删除虚拟环境文件夹
rm -rf luffy/
9,安装nginx
运行在服务器上,监听某个端口向这个服务器发送http请求就会被nginx转发http请求,代理静态文件(访问页面就会返回),可以做负载均衡
前往用户根目录
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
建立软连接
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
10,路飞前端部署
把vue的项目ajax远程链接的地址改成服务器的地址
settings.js
export default { BASE_URL:'http://106.14.240.163:8080/api/v1'
}
编译前端
在pycharm里执行
npm run build
把编译后在该项目目录生成的dist 文件 压缩成zip文件
在云服务器上安装上传下载的软件
yum install -y lrzsz
输入rz 选择上传就行
解压文件
# 先下载软件
yum install unzip -y
unzip dist.zip
修改nginx配置文件,实现代理路飞前端
来到nginx安装目录的conf路径下
cd /usr/local/nginx/
cd conf/
修改文件名做个备份
mv nginx.conf nginx.conf.bak
在写一个
vim nginx.conf
把下面内容复制进去wq退出自动创建文件
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; # 访问80端口就会取这个路径下拿下面设置的文件
index index.html; # html文件名称
try_files $uri $uri/ /index.html; # Vue写的项目就得加,解决单页面应用刷新404问题
}
}
}
"记得删除注释"
复制dist文件内容到 /home/html内
cp dist -r /home/html
"注意查看是把dist里的内容考到html里,不是吧dist拷到里面"
重启nginx
nginx -s reload
11,路飞后端部署
修改项目prod文件,从dev里先拷过去
Debug模式 False
ALLOWED_HOSTS =['*']
数据库地址 # 127.0.0.1 就不用改
redis地址 # 127.0.0.1 就不用改
# 后台基URL
BACKEND_URL = 'http://106.14.240.163:8080' # 改成线上ip
# 前台基URL
LUFFY_URL = 'http://106.14.240.163'
复制原来的manage.py 在项目根目录重命名manage_pro.py
# 在线上使用这个来迁移数据库
修改里面的数据
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod') # prod线上配置文件
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/liuqingzheng/luffy_api.git
配置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;
退出mysql
安装项目依赖,迁移数据库
进入项目
cd /home/project/luffy_api
进入虚拟环境
workon luffy
下载依赖
pip install -r requirements.txt
"如果出现装不上的情况下去把装不上的模块 注释掉先装别的在一个一个解决"
vim requirements.txt # 注释掉装不上的模块
解决mysqlclient装不上的问题
yum install mysql-devel -y
yum install python-devel -y
yum install python3-devel mysql-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
录入数据
# 用Navicat链接线上库
从线下的库 转储 sql文件
在线上库运行sql
"""工作的时候严禁这样操作,
偷偷说一句:我刚刚把我的线上空库给运行到线下库里了,瑟瑟发抖"""
使用uwsgi启动django
个人经验,先用wsgiref运行起来没问题的话(uwsgi可能是你自己代码有问题跑不起来),再用uwsgi跑
直接运行 看会不会报错
python manage_pro.py runserver 0.0.0.0:8888
但是可能会访问不到要去 阿里云的安全组里 开启端口
上线使用uwsgi
写一个uwsgi的配置文件(后缀名ini,xml)
ini 用K:V形式配置, xml用标签形式配置
我们使用xml
# 写在项目目录下
vim luffyapi.xml
复制下列内容
<uwsgi>
<socket>127.0.0.1:8888</socket> <!-- 内部端口,uwsgi运行在8888端口上 -->
<chdir>/home/project/luffy-api/</chdir> <!-- 项目路径 -->
<module>luffy_api.wsgi</module> <!-- 运行项目luffy_api的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请求的转发
到nginx目录下
cd /usr/local/nginx/conf/
# 进入
vim nginx.conf
server {
listen 8080;
server_name 127.0.0.1;
charset utf-8;
location / { # 访问8080的/根路径会被转发到uwsgi的127.0.0.1:8888
include uwsgi_params;
uwsgi_pass 127.0.0.1:8888;
uwsgi_param UWSGI_SCRIPT luffy_api.wsgi; # wsgi.py 所在目录名.wsgi
uwsgi_param UWSGI_CHDIR /home/project/luffy_api/; # 项目路径
}
}
重启nginx
nginx -s reload
路飞后台样式管理
访问http://106.14.240.163:8080/admin 发现什么样式都没有
因为uwsgi 为了提高性能只负责处理动态请求,静态资源不管,上线后,uwsgi为了提高性能,只处理动态请求【动静分离】
uwsgi访问静态资源,需要使用nginx代理
wgisref 既能访问静态资源,又能访问动态 是因为是测试阶段
第一步:收集静态资源
创建文件夹
mkdir /home/project/luffyapi/luffyapi/static
修改prod文件
在小路飞目录下
cd settings/
vim prod.py
# 添加下面内容
STATIC_URL = '/static/'
STATIC_ROOT = '/home/project/luffyapi/luffyapi/static'
# STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
执行这个命令,就会把静态文件收集到STATIC_ROOT对应的文件夹下
退到项目根路径
python manage_pro.py collectstatic
修改nginx 配置文件
到nginx目录下
cd /usr/local/nginx/conf/
# 进入
vim nginx.conf
添加内容
# 放在8080端口下面
location /static {
alias /home/project/luffyapi/luffyapi/static;
}
#完整版
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;
}
}
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/;
}
location /static {
alias /home/project/luffyapi/luffyapi/static;
}
}
}
重启nginx
nginx -s reload
注意
創建的static文件夹,后面配置的目录必须一样。我踩到坑了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)