上线
1 云服务器购买
# 1 咱们项目要上线
- 1 有台服务器:安装软件:mysql;运行django。。。
- 2 公网ip:互联网用户都可以访问
- 3 域名:备案,互联网用户都可以访问,输入地址,而不是ip
# 2 购买云服务器
-这台服务器--》不在咱们这---》在他们的机房中--》他们帮咱们运行着
- 腾讯,阿里,华为
- 咱们:阿里云
# 3 购买流程
1 打开网站:https://ecs.console.aliyun.com/home
2 选择购买
# 4 远程链接
-finalshell:下载后一路下一步安装
-powershell,git bash
-远程链接:
-可以用户名密码链接:咱们用的
-免密链接:生成ssh的公钥和私钥--》咱们生成了--》git
-把公钥配置在服务器上,以后链接就不需要密码了
2 上线架构图
2.1 Nginx是什么
- Nginx 是一个高性能的HTTP和反向代理web服务器
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。
2.2 Nginx的反向代理
![image-20240522172027277](https://img2023.cnblogs.com/blog/3331555/202405/3331555-20240522172033612-781326436.png)
-
正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器)
-
反向代理: 那什么是反向代理呢。比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)
3 服务器安装git
# 方式一:
yum install git -y
# 方式二:装git 和一些其它软件(开发会用到的)
yum -y groupinstall "Development tools"
# 装一些 依赖:# 执行下面这条(后续咱么需要装其他软件,需要有些依赖,装依赖)
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel -y
git -V
git version
4 安装mysql
4.1 安装5.7
# mysql 5.7
#1 前往用户根目录
# pwd 查看我在哪个目录下
# cd 切换到某个路径下
cd ~ # 回到家路径
#2 下载mysql57
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# ls 查看当前目录下的文件和文件夹
#3 安装mysql57
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum install mysql-community-server --nogpgcheck -y
#4 启动mysql57并查看启动状态
systemctl start mysqld # 启动mysql服务
systemctl status mysqld # 查看mysql状态
#5 查看默认密码并登录(第一次安装,root密码是随机的)
# 去/var/log/mysqld.log 中过滤出包含 password 的多行
grep "password" /var/log/mysqld.log # 7n5hchTomp++
mysql -uroot -p
#6 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lqz12345?';
grant all privileges on *.* to 'root'@'%' identified by 'Lqz12345?';
如果还连不上,就是mysql 3306的安全组没开---》防火墙端口没开
# 7 远程连接:win---》navicate--》
连接成功
4.2 安装8.0
### 1 官方yum源
https://dev.mysql.com/downloads/repo/yum/
### 2 下载对应版本mysql源到本地,如果系统是centos7,这里选择el7版本
# no architecture的缩写,说明这个包可以在各个不同的cpu上使用
我们选择 mysql80-community-release-el7-7.noarch.rpm
### 3 或者直接来到:https://repo.mysql.com/
找到相应版本下载,我们下载
mysql80-community-release-el7-7.noarch.rpm
### 4 下载rpm包
wget https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm
### 5 安装rpm包
yum install mysql80-community-release-el7-7.noarch.rpm -y
### 6 开始安装
yum install mysql-community-server --nogpgcheck -y # 会自动把客户端装上
### 7 启动,查看状态
systemctl start mysqld
systemctl status mysqld
### 8 查看默认密码并登录
grep "password" /var/log/mysqld.log # H:l=9tZ+e,Ne
### 9 修改密码
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '18961983238Td@';
### 10 查看mysql版本
mysql -V
quit;#退出
######## 后面上线项目时应该做的## 现在直接做了
#1 创建luffy库
create database luffy default charset=utf8;
#2 查看用户
SELECT User, Host FROM mysql.user;
#3 创建用户
CREATE USER 'luffy'@'localhost' IDENTIFIED BY 'Luffy123?';
CREATE USER 'luffy'@'%' IDENTIFIED BY 'Luffy123?';
GRANT ALL PRIVILEGES ON luffy.* TO 'luffy'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON luffy.* TO 'luffy'@'%' WITH GRANT OPTION;
#### 使用navicat 使用luffy用户链接###
如果链接不上,就是安全组没开
![image-20240522185316634](https://img2023.cnblogs.com/blog/3331555/202405/3331555-20240522185325691-1595871699.png)
5 安装redis
# 1 官方提供的:https://redis.io/downloads/
redis-7.2.4.tar.gz # 源码包--》c代码--》不能运行--》编译---》可执行文件--》才能运行
redis-stack-server-7.2.0-v8.rhel7.x86_64.tar.gz # 编译过后的可执行文件,解压即用
5.1 直接安装包(redis-stack-server)
# 1 下载源码包,在当前平台,编译---》就能在当前平台运行了
wget https://packages.redis.io/redis-stack/redis-stack-server-7.2.0-v8.rhel7.x86_64.tar.gz
# 2 解压
tar -xzvf redis-stack-server-7.2.0-v8.rhel7.x86_64.tar.gz
cd redis-stack-server-7.2.0-v8
# 3 进入到 redis bin 目录--》redis-server
# 4 运行redis
redis-server 配置文件
# 5 把软件包赋值到 /usr/local 加入环境变量
cp -r redis-stack-server-7.2.0-v8 /usr/local/redis7.2
# /usr/local/redis7.2/bin 有 redis-server 和 redis-cli
# 6 制作软链接---》在任意路径下敲redis-server都能把服务运行
# 因为/usr/bin/ 在环境变量
ln -s /usr/local/redis7.2/bin/redis-server /usr/bin/redis-server
ln -s /usr/local/redis7.2/bin/redis-cli /usr/bin/redis-cli
# 7 在任意路径启动
redis-server 可以启动了
redis-cli 可以链接了
# 8 查看redis 是否启动
#查看是否创建软连接成功
ll /usr/bin |grep redis
# 9 查看redis 是否启动
ps aux |grep redis
# 10 启动redis服务,后台运行
redis-server &
#10 关闭redis服务
redis-cli shutdown
![image-20240522191932597](https://img2023.cnblogs.com/blog/3331555/202405/3331555-20240522191935892-887046514.png)
5.2 源码编译安装(redis-7.2.4.tar.gz)
#1 下载7.2.4.tar.gz
wget https://github.com/redis/redis/archive/refs/tags/7.2.4.tar.gz
#2 解压安装包
tar -xf 7.2.4.tar.gz
#3 进入目标文件
mv redis-7.2.4 redis7
cd redis7
#4 编译环境 gcc 在src路径下把源码编译出 redis-cli reidis-server
make #编译,项目目录下执行
#5 在 src目录下就会多出 可执行文件
redis-server
redis-cli
#6 复制环境到指定路径完成安装
cp -r ~/redis7 /usr/local/redis
#7 配置redis可以后台启动:修改下方内容
mv /usr/local/redis/redis.conf /usr/local/redis/redis.conf.bak
vim /usr/local/redis/redis.conf
daemonize yes
# 完成配置修改
>: esc
>: :wq
#8 建立软连接
# /usr/local/redis/src/不在环境变量,在任意路径下敲 redis-server找不到的
# 如果建立软连接----》/usr/bin/新建了一个redis-server指向了/usr/local/redis/src/
# 而/usr/bin/ 是在环境变量的,所有以后任意路径敲redis-server都能找到
ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server7
ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli7
## 查看软连接情况
ll /usr/bin/ |grep redis
#8 后台运行redis
cd /usr/local/redis
redis-server7 ./redis.conf # 在后台运行
# redis-server7 /usr/local/redis/redis.conf
# 等同于
redis-server7 ./redis.conf &
#9 测试redis环境
redis-cli7
#10 关闭redis服务
redis-cli shutdown
6 安装python
# 1 所有linux和mac--》都会自带python2
-他们系统上有很多系统服务 使用python2写的---》必须要有解释器环境
# 2 cento 7.9 默认
-python pip ---》python2.7
-python3 pip3 ---》python3.6.8
# 3 自己装3.10---》python3.10--->pip3.10
6.1 安装openssl
#1 安装依赖包 openssl
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel perl-Test-Simple -y
#2 cd
#3 下载
wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate
# 4 解压
tar -zxvf openssl-1.1.1w.tar.gz
# 5 进入
cd openssl-1.1.1w/
# 6 配置
./config shared --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
# 7 安装
make && make install
#8 查看之前老的
# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
# 9 备份系统自带的openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
# 10 软连接,放到环境变量
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
#11 配置
sudo echo "/usr/local/lib64/" >> /etc/ld.so.conf
sudo ldconfig
# 12
openssl version
# OpenSSL 1.1.1w 11 Sep 2023
6.2 安装python3.10
# 1 下载python3
## 官方
wget https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz
# 镜像站
# https://registry.npmmirror.com/binary.html?path=python/
wget https://registry.npmmirror.com/-/binary/python/3.10.14/Python-3.10.14.tgz
# 2 解压并进入
tar xf Python-3.10.14.tgz
cd Python-3.10.14
#3 编译安装python配置ssl
./configure prefix=/usr/local/python310 -C --with-openssl=/usr/local/openssl --with-openssl-rpath=auto
make && make install
# 4 建立软链接
ln -s /usr/local/python310/bin/python3 /usr/bin/python3.10
ln -s /usr/local/python310/bin/pip3 /usr/bin/pip3.10
# 5 以后,机器有三个python解释器环境
-python pip ---》python2.7
-python3 pip3 ---》python3.6.8
-python3.10 pip3.10 ---》3.10.14
![image-20240522195922626](https://img2023.cnblogs.com/blog/3331555/202405/3331555-20240522195929170-757255691.png)
7 虚拟环境
### 虚拟环境:pip3.10 去安装---》python3.10上
#1 安装依赖
pip3.10 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3.10 install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple
# 2 建立虚拟环境软连接
ln -s /usr/local/python310/bin/virtualenv /usr/bin/virtualenv
#全都删除压缩包
rm -rf *
#3 配置虚拟环境:填入下方内容
# ~/ 表示用户家路径:root用户,就是在/root/.bash_profile
>: vi ~/.bash_profile
# 按 i
# 光标上下控制,粘贴上下面内容
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.10
source /usr/local/python310/bin/virtualenvwrapper.sh
# 按 esc
# 输入 :wq 敲回车
#4 更新配置文件内容
source ~/.bash_profile
# 虚拟环境默认根目录:
ls -al
# /root/.virtualenvs
#5 创建虚拟环境
mkvirtualenv -p python3.10 luffy
#6 退出虚拟环境
deactivate
# 7 使用环境
cd .virtualenvs/
workon
workon luffy
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate
tar -zxvf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
./config --prefix=/usr/local/openssl
make && make install
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
8 nginx部署前端
# 1 nginx 软件
-web反向代理服务器--》运行在服务器上--》监听端口【默认80】---》nginx启动了,访问服务器的80端口---》http请求--》就被nginx接到了---》后续干啥,需要改ngixn的配置文件【配置文件很重要】
-能够干
1 请求转发
2 负载均衡
3 静态文件代理
# 2 部署前端【就是一堆静态文件】,需要使用nginx
9 nginx 安装
#1 前往用户根目录
cd ~
#2 下载nginx1.13.7
# 官网http://nginx.org
wget http://nginx.org/download/nginx-1.26.0.tar.gz
#3 解压安装包
tar -xf nginx-1.26.0.tar.gz
# 4 进入目标文件
cd nginx-1.26.0
#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 测试Nginx环境,服务器运行nginx,本地访问服务器ip
# 启动nginx服务
nginx
# 启动nginx服务,监听80端口----》公网ip 80 端口就能看到页面了
#9 静态文件放的路径
/usr/local/nginx/html
# 10 查看进程
ps aux | grep nginx
#11 关闭和启动
关闭:nginx -s stop
重新加载配置:nginx -s reload
启动:nginx
10 部署前端
# 1 前端是用vue写的---》最终要编译成---》html,css,js静态资源
# 2 把编译后的放到服务器上某个位置
# 3 使用ngixn代理即可
-修改nginx配置文件
# 4 前端ajax请求的地址改一下(没有域名就用地址)
// const BASE_URL = 'http://8.133.192.155:8000/api/v1/'
const BASE_URL = 'http://www.dingtao.site:8000/api/v1/'
# 5 编译vue---》项目根路径下生成一个dist文件夹--》编译过后的
npm run build
# 6 上线只用 dist文件夹下的资源,压缩,放在桌
# 7 把dist.zip 传到服务器上去
# 8 服务器安装
yum install lrzsz -y # 上传下载文件的
yum install unzip -y # 解压zip的
# 9 上传 打开本地
rz
# 10 解压
unzip dist.zip
# 11 移动并重命名
mv ./dist /html
# 12 修改nginx配置--》配置nginx 静态代理--->nginx 默认会去/usr/local/nginx/html拿静态文件
cd /usr/local/nginx/conf # nginx.conf 配置文件
mv nginx.conf nginx.conf.bak
vi nginx.conf
# 按 i 粘贴下面代码
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 /html;
index index.html;
try_files $uri $uri/ /index.html;
}
}
}
# 按 esc :wq 回车
#13 重启nginx
nginx -s reload
10.1 域名解析
# 阿里云
-域名解析 到我们服务器地址即可
10.2配置安全组
![image-20240523122650776](https://img2023.cnblogs.com/blog/3331555/202405/3331555-20240523122701828-393172396.png)
11 安装uwsgi
# 1 我们部署django
-不用 python manage.py runserver 运行---》使用wsgiref,性能低
-使用 uwsgi web服务器部署---》只能部署python的web项目:flask,django
# 2 安装步骤
1)在真实环境下安装(退出虚拟环境)
pip3.10 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
# 会有个uwsgi的可执行文件,但是不在环境变量,所以需要加软连接
#安装到了python38的安装路径的bin路径下了
2)建立软连接
ln -s /usr/local/python310/bin/uwsgi /usr/bin/uwsgi
12 部署后端
# 1 修改配置文件 pro.py 前端和后端的基地址,都是云服务器地址
BACKEND_URL = 'http://1.94.143.1:8000/'
BACKEND_URL2 = 'http://1.94.143.1:8000'
# 前台基URL
LUFFY_URL = 'http://1.94.143.1'
# 2 修改项目中wsgi.py,asgi.py 用uwsgi运行wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.pro')
# 3 导出项目依赖
pip3 freeze > requirements.txt
#4 推到远端
git add.
git commit -m ‘上线了’
git push origin master
#创建个文件夹
cd /home/
ls
mkdir project
cd project/
# 5 服务器上拉取下来: /home/project/luffy_api
git clone https://gitee.com/ding_tao1/luffy-project.git
# 到项目目录里
cd luffy-project
# 6 在虚拟环境中安装依赖
workon luffy
pip install -r requirements.txt # 报错
# 把requirements.txt 的mysql-client先注释掉,把别的先装上
# 单独装mysql-client
# 查看虚拟环境中模块
pip list
# 7 单独装mysqlclient
yum install python3-devel -y
yum install mysql-devel --nogpgcheck -y
pip install mysqlclient
# 8 在虚拟环境中,也要装uwsgi
pip install uwsgi
# 9 创建luffy库,用户,授权--》做过了
# 10 迁移文件,把表迁移到数据库中 ---》manage的配置文件必须是线上配置文件
python manage.py makemigrations
python manage.py migrate
# 11 使用uwsgi运行django,uwsgi配置文件 :项目根路径下新建:vi luffy.xml
<uwsgi>
<socket>127.0.0.1:8888</socket>
<chdir>/home/project/luffy-project/</chdir>
<module>luffy.wsgi</module>
<processes>4</processes>
<daemonize>uwsgi.log</daemonize>
</uwsgi>
#查看
cat luffy.xml
# 12 使用uwsgi运行(使用uwsgi运行django--》等同于之前的python manage.py runserver )
uwsgi -x luffy.xml
# 查看uwsgi进程
ps aux |grep uwsgi
# 关闭uwsgi
pkill -9 uwsgi
# 13 配置nginx 转发--新增一个server
#到nginx路径
cd /usr/local/nginx/conf/
vi nginx.conf
#请求转发
server {
listen 8000;
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.wsgi;
uwsgi_param UWSGI_CHDIR /home/project/luffy-project/;
}
}
# 14 重启nginx
nginx -s reload
# 5 访问:测试--->数据能回来,表示通了 # 表中没数据 样式没有
http://127.0.0.1:8000/api/v1/home/banner/
# 6 表中数据--》admin中录入---》直接把sql导入
-到出原来测试的sql
-导入到线上库
# 7 访问 www.liuqingzheng.top 正常操作即可
-如果有问题:按日志排查
1 nginx 日志:/usr/local/nginx/logs
2 uwsgi 日志:/home/project/luffy-project/uwsg.log
3 项目日志 :/home/project/luffy-project/logs/luffy.log
12.2 后台管理样式
# 1 如果使用uwsgi部署项目,它只能代理动态请求
-动态请求:有路由的路径
-静态文件:static下的,都不会返回,静态交给ngix--》nginx处理静态资源性能最高
-因为uwsgi为了提高性能,不处理静态资源
-下面地址就是:
http://www.liuqingzheng.top:8000/static/admin/simpleui-x/elementui/theme-chalk/index.css
# 2 把项目中所有静态资源统一收集到一个文件夹下
-simpleui
-drf
# 3 在配置文件中加入:
# pro.py中加入 把静态资源收集到这个文件夹下
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 4 创建文件夹
#在settings目录下
mkdir /home/project/luffy-project/luffy/static/
# 5 执行收集命令(manage 的配置文件一定是pro)
#项目根路径下 luffy-project
python manage.py collectstatic
# 6 修改nginx配置
location /static {
alias /home/project/luffy_api/luffy_api/static;
}
# 7 整个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;
charset utf-8;
location / {
root /html/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
}
server {
listen 8000;
server_name 127.0.0.1;
charset utf-8;
#t
location /static {
alias /home/project/luffy-project/luffy/static;
}
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-poject/;
}
}
}
tail -f error.log
#8 重启nginx
#9 django 必须要运行
# 访问
http://www.liuqingzheng.top:8000/admin/login/?next=/admin/
13 安全组
# 1 开启的端口
-80
-8000
-3306
补充
# 1 使用token做登录认证
-修改密码后,之前签发的token要失效
-密码修改时间---》认证类中--》把token的签发时间和这个时间
# 2 找回密码 和 修改密码---》要用一个吗?
-找回密码:
-手机短信找回
-邮箱找回:输入邮箱--》发个邮件--》地址--》访问地址--》来到了咱们改密码页面
# 333@qq.com-->isdangerous 加密---》asdfasdf
http://127.0.0.1:8000/change_password?token=asdfasdf
-修改密码:
当前登录用户修改
# 3 USE_TZ = False