Luffy项目:9、项目上线架构图,阿里云服务器购买,云服务器依赖安装,前后端部署,代理静态资源

Luffy项目

一、上线架构图

介绍:

项目通过测试后上线,将项目部署在服务器上,通常会选择部署在云服务器上

  • 云服务器:
    • 百度云、阿里云...

二、阿里云服务器购买

1、购买流程图

2、远程连接aliyun服务器

方式一:

  • 直接在阿里云服务器上进行连接
    • 1、点击控制台
    • 2、点击实例
    • 3、选择需要连接的服务器,点击远程连接
    • 4、输入密码连接

方式二:

三、云服务器配置项目依赖

1、通用依赖

# 如果不是首次使用不建议加 -y
    yum update -y

# 装了一堆开发用的工具,git
    yum -y groupinstall "Development tools"  
    
# 安装一些依赖
    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

2、安装mysql

1)前往用户根目录
>: cd ~  # 回到你家路径  /root

2)下载mysql 5.7 版本
>: 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
    # Lr*FYoZ0Wtjl

>: mysql -uroot -p

6)修改密码
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; # 输入需要修改的密码
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'Xiaoxiaoxxxx.';

3、安装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 将no 修改为yes
	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

4、安装python3.8(源码安装)

注意事项:

  • 关于版本问题:

    • linux和Mac系统服务中有部分是基于python2版本编写的,所以系统中自带python2

    • 阿里云的centos默认安装了python3.6

    • 我们装的是python3.8版本

  • 关于安装:

    • yum可以安装,但是不能指定安装位置和版本
    • 此次使用源码安装
# 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

5、安装uwsgi

  • 介绍:
    • uwsgi是符合wsgi协议的web服务器,使用c写的性能高,上线要使用uwsgi
    • django或flask项目上线,需要使用uwsgi部署,性能高,符合wsig协议的web服务器
    • 使用uwsgi运行django,不再使用测试阶段的wsgiref来运行django
# 安装步骤
1)在真实环境下安装
pip3.8 install uwsgi

#安装到了python38的安装路径的bin路径下了
2)建立软连接
ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi

6、安装虚拟环境


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

7、安装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

四、Luffy项目前端部署

# 1、修改settings.js文件中的IP地址(修改为服务器地址)
    settings.js
    export default {
        BASE_URL:'http://101.132.17.160:8080/api/v1'
    }
    
# 2、编译前端Vue文件--->编译后会在项目目录下产生一个dist的文件夹
	npm run build
    
# 3、压缩dist文件,上传到云服务器
    - 在云服务器上安装上传下载的软件
        yum install -y lrzsz
        rz  选择上传就行

    -解压 zip  
        yum install unzip -y
        unzip dist.zip
        
# 4、修改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问题
            }
        }
    } 

    
# 5、把dist下的所有内容,cp到 /home/html   # 注意路径
	cp -r dist /home/html

# 6、重启ngixn
	nginx -s reload  

# 7、http://101.132.17.160/  前端页面 

五、Luffy项目后端部署

1、提交本地代码到云服务器

  • 注意事项:
    • 关闭Debug模式
    • ALLOWED_HOSTS 地址配置
    • 配置文件中前、后端地址修改
    • myslq数据库地址、redis缓存数据库地址
# 1、新建一个manage_pro.py,在线上使用这个来迁移数据库
	 # 拷贝原来的manage.py配置,修改配置文件为setting/prod
   	def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod')

# 2、wsgi.py文件修改配置
	os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.prod')
    
# 3、生成项目依赖
	pip freeze >requirements.txt
    
# 4、将项目提交到git

# 5、云服务器创建project文件(用于存储后端项目代码)
    mkdir /home/project
    cd /home/project
    # 将项目文件冲git中下载到云服务
    git clone https://gitee.com/liuqingzheng/luffy_api.git

2、配置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?';
>: flush privileges;

4)退出mysql
>: quit;
  
    
# 使用本地Navicate连接(将本地表数据拷贝到云服务器,真实项目不能这样操作!!)

3、安装项目依赖、迁移数据库

# 1、进入luffy项目虚拟环境
	workeron luffy

# 2、安装依赖
	pip install -r requirements.txt
    
# 3、如果mysqlclient装不上,先把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
    
# 4、虚拟环境安装uwsgi
	pip install uwsgi
    
# 5、迁移数据库
    python manage_pro.py makemigrations
    python manage_pro.py migrate
    
'''
注意事项:
    -官方推荐:提交
    -我推荐:如果多人开发,不提交	
'''

4、使用uwsgi启动django

# 1、运行django(个人经验,先用wsgiref运行起来,再用uwsgi跑)
    -原来测试阶段,使用wsgiref运行
   		 python manage_pro.py runserver 0.0.0.0:8080
        -跑起来,访问测试一下,你们可能访问不到
            -原因是:安全组开启 8080端口
            -最后期:只留22,3306,6379,80,8080(保证安全)
    -上线使用uwsgi

# 2、uwsgi步骤
	- 来到luffy项目文件下
		cd /home/project/luffy_api/
	- 写一个uwsgi的配置文件(ini或xml)此次用xml
		vim luffyapi.xml	
	- 将下列内容写入---》保存退出wq
        <uwsgi>    
            <socket>127.0.0.1:8888</socket> <!-- 内部端口,自定义 --> 
            <chdir>/home/project/luffy_api/</chdir> <!-- 项目路径 -->            
            <module>luffy_api.wsgi</module>  <!-- luffyapi为wsgi.py所在目录名--> 
            <processes>4</processes> <!-- 进程数 -->     
            <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
        </uwsgi>

# 3、使用uwsgi启动django
    uwsgi -x ./luffyapi.xml
    ps aux |grep uwsgi  # 看到有四个进程说明没问题
    
# 4、现在访问8888,没有响应
    -uWSGI:配置文件是socket,说明它只能监听 uwsgi协议,浏览器发出去的是http协议,它不能响应
    -只能http请求发送到nginx上,使用nginx把http请求,转发到uwsgi,nginx支持把http协议转成uwsgi
    
# 5、修改nginx配置文件,完成对http请求的转发
    cd ~
    cd /usr/local/nginx/conf/
    vim nginx.conf
 
# 6、添加下列内容---》保存---推出
    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/;
        }
}
    
     
 
# 7、重启nginx ---》 访问前端---》内容出现
	nginx -s reload

六、Nginx代理静态资源

为什么没有样式:

  • wgisref 既能访问静态资源,又能访问动态(测试阶段)
  • 上线后,uwsgi为了提高性能,只处理动态请求【动静分离】
  • 静态资源,需要使用nginx代理

1、代理方法

# 1、创建文件夹 
	mkdir /home/project/luffy_api/luffy_api/static
    
# 2、修改项目配置文件(pord.py)
	- 添加以下内容
    STATIC_URL = '/static/'
    STATIC_ROOT = '/home/project/luffy_api/luffy_api/static' 
 
# 3、收集静态资源(把静态文件收集到STATIC_ROOT对应的文件夹下)
    python manage_prod.py collectstatic
    
# 4、修改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 /home/html;
                index index.html; 
                try_files $uri $uri/ /index.html;
            }
        }
        server {
            listen 8000;
            server_name  127.0.0.1;
            charset utf-8;
            location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8808; 
                uwsgi_param UWSGI_SCRIPT luffyapi.wsgi; 
                uwsgi_param UWSGI_CHDIR /home/project/luffyapi/; 
            }
            location /static {
                alias /home/project/luff_yapi/luffy_api/static;
            }
        }
    }
    
	
# 5、重启Nginx
	nginx -s reload
    
# 6、能够正常访问

# 以后使用
    python manag_pro.py runserver  0.0.0.0:8888 运行不了了
posted @ 2023-03-15 17:20  kangshong  阅读(42)  评论(0编辑  收藏  举报