前言
本文记录了一次在腾讯云服务器部署Web项目的经历,项目前端使用React,后端使用Python的Django框架;
前端通过向后端端口发送请求调用后端API,数据通过json交换,使用Nginx分别部署前端和后端;
文章主要内容分为两部分:环境配置与项目启动,大致内容如下,可以通过的目录查看指定内容;
环境配置
- 1、配置Django环境:依次安装MySQL数据库,Python,创建项目运行虚拟环境,安装uWSGI用来启动Django项目;
- 2、配置React环境:安装Node.js,安装React,安装Nginx;
- 3、安装Git用来推送代码;
项目启动
- 1、使用uWSGI启动Django项目,包括数据库创建与配置,配置uwsgi.ini文件启动Django项目;
- 2、使用Nginx启动前端项目,包含前端React项目打包,和nginx.conf文件配置;
环境配置
1、MySQL数据库
因为Django项目使用Mysql数据库,所以首先需要在Linux系统下安装Mysql服务并启动,然后根据项目配置文件创建数据库与用户;
- 安装Mysql服务器:
-- 安装服务
yum install mariadb-server -y
-- 安装客户端
yum install mariadb -y
- 启动与登录
-- 启动与停止
systemctl start mariadb
systemctl stop mariadb
-- 设置开机启动
systemctl enable mariadb
-- 初始登录
mysql -u root -p
- 数据库创建、用户配置与Django项目数据迁移参考项目启动部分的数据库配置部分;
2、安装Python
要运行Django项目,首先需要安装Python环境,运行Django4.1版本需要Python版本在3.8及以上,具体安装可以参考以下这两篇文章,这里只做简单介绍:
- Django官方文档:如何安装 Django | Django 文档 | Django
- 在Linux安装Python环境:Linux上Python环境配置 - 码农教程
以python3.9为例,在Linux上安装Python环境的大致步骤如下:
- 1、安装下载工具与依赖
-- 安装wget文件下载工具
yum -y install wget
-- 安装gcc:编程语言编译器
yum -y install gcc
-- 安装依赖
yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install openssl openssl-devel
yum -y install ncurses ncurses-devel
yum -y install sqlite sqlite-devel
yum -y install readline readline-devel
yum -y install tk tk-devel
yum -y install gdbm gdbm-devel
yum -y install xz lzma xz-devel
yum -y install libffi-devel
yum -y install mysql-devel
yum -y install python-devel
yum -y install libffi-devel
- 2、下载Python-3.9.5安装包并解压安装
-- 下载Python-3.9.5.tgz
wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
-- 解压安装包
tar -zxvf Python-3.9.5.tgz
-- 在home目录下,创建python3文件夹
mkdir -p /home/python3
-- 进入解压后python3.9.5目录
cd Python-3.9.5
-- 配置安装目录为/home/python3
./configure --prefix=/home/python3
-- 编译&编译安装
make && make install
- 3、配置环境变量
mv /usr/bin/python3 /usr/bin/python3.bak
ln -s /home/python3/bin/python3.9 /usr/bin/python
- 4、设置pip豆瓣源(可选)
-- 设置默认下载源
pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple
-- 或者pip安装包时,添加链接
pip3 install package -i http://pypi.douban.com/simple/ --trusted-host pypi.douba.com
3、创建虚拟环境
使用virtualenv用于创建多个独立的Python环境,用来运行不同的项目
- 1、安装virtualenv
pip3 install virtualenv
- 2、创建虚拟环境
-- 在主目录下创建envs文件夹,在该文件夹下创建不同的环境
mkdir envs
virtualenv /envs/test --python=python3.9
- 3、一些其他操作命令
-- 激活虚拟环境
source /envs/test/bin/activate
workon:列出虚拟环境列表
lsvirtualenv:同上
mkvirtualenv :新建虚拟环境
workon [虚拟环境名称]:切换虚拟环境
rmvirtualenv :删除虚拟环境
deactivate: 离开虚拟环境
4、安装Git
使用Git进行代码管理,便于将本地代码推动至服务器
- 安装Git
pip3 install git
- 国内可以使用Gitee作为代码托管平台,具体使用方法可以参考官方文档:Gitee 帮助中心 | Gitee 产品文档
- 以下为一些Git基础操作命令:
git clone SSH:线上库克隆到仓库
git checkout -b 分支名:新添加分支
git switch 切换分支
git branch 查看分支
-- 代码推送
git status: 查看当前状态
git add --a:添加全部文件到仓库
git add 单个文件:添加单个文件到仓库
git commit -m "":提交推送说明
git push origin master:推送代码到分支
-- 代码下载
git pull origin master:下载分支代码到本地
5、安装React
首先需要安装Node.js, 安装步骤如下:
- 创建并进入到node目录
mkdir /usr/local/node && cd /usr/local/node
- 下载node.js( 以node-v16.17.0为例)
curl -O https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz
- 解压文件
tar -vxf node-v16.17.0-linux-x64.tar.xz
cd node-v16.17.0-linux-x6
- 配置环境变量
ln -s /usr/local/node/node-v16.17.0-linux-x64/bin/npm /usr/local/bin
ln -s /usr/local/node/node-v16.17.0-linux-x64/bin/node /usr/local/bin
- 测试,若正常显示版本号,则安装成功
node -v
npm -v
接下来安装React
- 安装React:
npm install -g create-react-app
npm install react react-dom
- 关于React的简介,项目创建启动等,可以参考官方文档,这里不做过多介绍,快速入门 – React 中文文档
6、安装uwsgi
在Django项目测试与开发中,常用自带的runserver方法启动项目,在项目真正部署时,常用uwsgi启动Django项目,uwsgi安装步骤如下:
- 下载与安装
-- 可以先激活虚拟环境,在虚拟环境下安装
-- 1.安装:
pip3 install uwsgi
-- 2.建立软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
-- 3.查看uwsgi版本
uwsgi --version
7、安装Nginx
在Web项目部署时,使用Nginx接收并处理静态请求,一旦收到动态请求,则转发给uWSGI,再由uWSGI交给Django进行处理
- nginx安装步骤如下:
-- 1、安装
yum install nginx -y
-- 2.查看nginx版本
nginx -v
项目启动
1、使用uwsgi启动后端
- 在项目根目录下创建uwsgi.ini文件,设置uwsgi属性,文件配置参考:
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8080
#http=127.0.0.1:8080
#配置项目路径,项目的所在目录
chdir=/data/Code/my_web/backend
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=my_blog/wsgi.py
# 要是用的WSGI模块
module=log_analysis.wsgi
#配置启动管理主进程
master=True
#配置启动的进程数
processes=2
#配置每个进程的线程数
threads=2
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
#虚拟环境地址
virtualenv=/envs/blog
#新增:设置最大缓冲区为32K
buffer-size=32768
- 使用:
-- 启动uwsgi
uwsgi --ini uwsgi.ini
-- 停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid xxx
-- 重启uwsgi
uwsgi --reload uwsgi.pid xxx
-- 查看进程
ps -ef | grep uwsgi
kill -9 pid
-- 查看日志
tail -20f uwsgi.log
2、使用Nginx启动前端
- 打包前端项目,并将打包后的结果配置在nginx.conf文件中
- 配置/etc/nginx/nginx.conf文件,文件语法参考:nginx.conf配置文件语法详解_nginx.conf nginx.conf.default 区别-CSDN博客
# ginx进程数,建议设置为等于CPU总核心数
worker_processes 2;
events {
# 一个 worker_processe 允许的最大并发连接数量
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# nginx监听端口
listen 80;
# 设置为自己的域名,没有域名修改为本机IP地址
server_name 127.0.0.1;
charset utf-8;
# 设置默认静态文件目录
location / {
# 定义服务器默认网站根目录位置,将打包好React的目录放在这里
root /data/Code/my_web/frontend/build;;
# 定义首页索引文件的名称
index index.html index.htm;
# 页面刷新时根据url地址寻找页面
try_files $uri $uri/ /index.html;
}
location ~ /api/* {
# 设置关联 uwsgi
include uwsgi_params;
# 端口要和uwsgi里配置的一样
uwsgi_pass 127.0.0.1:8080;
client_max_body_size 100m;
proxy_connect_timeout 20;
proxy_send_timeout 20;
proxy_read_timeout 20;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- 使用:
-- 启动nginx
nginx
-- 查看nginx状态
systemctl status nginx
-- 开启nginx服务
systemctl start nginx
-- 关闭nginx服务
systemctl stop nginx
-- 关闭nginx
nginx -s stop
-- 重启nignx
systemctl restart nginx
-- 查看nginx进程
ps -ef | grep nginx