路飞项目上线

项目上线

image

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
下图代表成功启动

image

查看默认密码并登录

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

image

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

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文件夹,后面配置的目录必须一样。我踩到坑了。
posted @ 2023-03-14 22:15  李阿鸡  阅读(22)  评论(0编辑  收藏  举报
Title