开一个前后端项目部署的帖子吧,预计后面相关的内容都在这里更新。
2023.12.14
今天在部署Vue和Django的前后端项目时遇到了不少的问题,在这里记录一下,防止忘记。
1.后端
1.1Django项目的配置
首先上传项目,为项目创建虚拟环境(注意这是py2的语法,但是py3也能用):
virtualenv venv
这个命令会创建一个venv虚拟环境,下面的操作要在该虚拟环境中进行:
source venv/bin/activate
安装依赖,最好在本地机器将所需依赖导出:
pip list --freeze > requirements.txt
或
pip freeze > requirements.txt
注意用在conda中用第二种方式会导出很多绝对路径的包,服务器是无法是别的,建议conda中用第一种。
之后安装uwsgi,然后在项目根目录加一个uwsgi.ini
配置文件,内容类似下面的:
# uwsgi.ini
[uwsgi]
# 指定 Django 项目的目录
chdir=/home/azureuser/BuaaHospital/Back
# 指定 Django 项目的 WSGI 应用模块
module=migrations.wsgi:application
# 指定 uWSGI 运行的 Socket 文件(可以根据需要修改)
socket=127.0.0.1:8624
# 指定进程数
processes=4
# 指定线程数
threads=2
#灵活配置,如果有报错接收到的包太大可以改成更大的值
buffer-size = 32768
#后台运行,指定log的地址
daemonize=/home/azureuser/BuaaHospital/Back/uwsgi.log
然后启动后端:
uwsgi --ini uwsgi.ini
之后我们需要在nginx里面反代一下后端(否则前端请求的时候需要使用服务器ip,可能会暴露你的ip地址):
server {
listen 80;
listen 443 ssl;
listen [::]:443 ssl;
server_name xxxx; # 将此替换为你的域名或 IP 地址
ssl_certificate xxx;
ssl_certificate_key xxx;
location / {
root xxx; #前端Vue项目路径
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
include uwsgi_params;
uwsgi_pass 127.0.0.1:xxx; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT migrations.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR xxx; #后端项目路径
}
}
完成之后,我们就可以使用域名加/api的方式来向后端发送请求了。
2.前端
前端的部署相对简单,但是由于我使用的Vite服务器可能还不够成熟,直接在production
模式下导出时会出现CSS样式丢失的问题,因此我直接使用development
模式进行打包,命令如下:
yarn build --mode development
接下来将打包后的dist目录上传到服务器,将它的地址填在之前的nginx配置中前端的位置即可。(注意修改后端请求的地址,改成域名加/api,尤其注意不要写http://127.0.0.1:xxxx,这个会直接请求你本地机器的端口。。。。)