通过WSL在阿里云上部署Django项目MySQL

embedded/2025/2/22 16:04:45/

前端用Vue,后端用Django, nginx,Mysql

参照:

通过WSL在阿里云上部署Vue项目_阿里云 wsl-CSDN博客

阿里云重登录

采用Ubuntu系统,

apt update
#检查是否已经安装
mysql --version  #检查是否已经安装mysql
systemctl status mysql  #检查mysql的运行状态 systemd命名。
apt install mysql-server #安装mysql

Mysql-server

在云服务器管理控制台,选择安全组,单击安全组,入方向,手工创建端口,Mysql默认使用3306端口。

#进入mysql命令行
sudo mysql#mysql命令行,输入修改root密码.必须以;结尾。ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'Mysql@1234';#设定密码后退出
exit;
#linux下重新进入mysql。
mysql -uroot -p  #输入上面的密码可以进入。
#进入mysql不是必须项
exit; #退出mysql命令行。
#对mysql进行安全设定
sudo mysql_secure_installation
#需要按照屏幕提示进行设置。
#创建数据库 mysql命令
create database MyDjango;
#显示数据库
show databases;

 Python, Django 安装 

python3 --version
pip --version#如有必要安装 python 和 pip(阿里云的ubuntu不需要)
sudo apt install python3
sudo apt install python-pip### 安装Django和相关包
pip list
pip install --upgrade pip #可以不运行。
pip install django

安装Django相关网络和数据库依赖:

sudo apt install libmysqlclient-devpip install mysqlclient #这个命令报错。用下面的命令代替
#取代pip install mysqlclient报错的命令
sudo apt install python3-mysqldb #安装过后,在pip list 里显示mysqlclient安装完成。pip install django-cors-headers
pip install uwsgi#安装过后可以同过 pip list 查询

部署Django

调整本机文档的settings.py文件,dubug 调整为 False。

使用filezilla将含有manage.py的MyDjango的目录上传到阿里云的 /home目录下。

阿里云的目录下执行 linux命令。

#数据迁移
python3 manage.py migrate
#创建超级用户
python3 manage.py createsuperuuser
#收集需要的静态资源写入/static 文件夹
python3 manage.py collectstatic

Django部署在uWSGI服务器

Django部署在uWSGI服务器可以通过配置文件完成。在MyDjango项目目录下创建配置文件uwsgi.ini. 打开文件写入内容。


vim /home/MyDjango/MyDjango/uwsgi.ini #编辑文件
cat uwsgi.ini #查看文件#启动uwsgi服务器uwsgi --ini uwsgi.ini
# 这个命令并不会提出到命令行。

创建uwsgi.ini 文件所在目录

soccket=:8080 用于uWSGI服务器和Nginx服务器的通信连接。

uWSGI和Nginx通信连接通过8080端口实现,在Nginx定义配置文件django.conf

touch /etc/nginx/conf.d/django.conf
vim /etc/nginx/conf.d/django.conf

启动uWSGI, 重启nginx。

uwsgi --ini /home/MyDjango/MyDjango/uwsgi.ini --daemonize /var/log/uwsgi/mydjango.log

--daemonize (以守护进程模式运行uWSGI,日志保存在后面的文件里,没有目录的话需要新建)

systemctl restart nginx

Vue在打包时没有更改服务器地址,造成前端无法连接后端。修改.vue的访问的网址,127.0.0.1改为47.120.66.77

重新生成 dist文件。 npm run build (覆盖掉原来的dist文件)。用filezilla,删除home下的dist,更新为新的dist文件夹。

systemctl restart nginx

到此大功告成。

 

运行程序报错:

两个问题,问题一,后端无法登录, 显示502错误。 问题二,前端无法访问后端。

问题一:报错显示 47.120.66.77:8000 显示502错误 Bad Gateway.

第一步, 502 错误的意义

同时检查 5173接口和80接口正常显示。其他接口如5174 显示服务器拒绝访问。

结论:如此8000接口,服务器是准备好接受访问的。项目没有运行,没有为端口的请求准备数据。

第二步,Django项目显示端口被占用。

Django项目并没有被启动。用django的 runserver 命令启动项目。报错显示8000端口已经被使用。

用 systemctl stop nginx 后,项目可以运行 使用8000端口。

分析结论,Nginx和项目都需要运行。暂时不会使用其他端口运行Django,下一步更改Django.conf文件中的监听端口。

第三步,更改django.conf 文件, uwsgi.ini文件接口

改后文件,端口号对调一下。

结果: systemctl restart nginx 之后结果,8080显示502 bad gateway. 8000显示拒绝访问.

第四步,端口调整后,启动 Django项目

python3 /home/MyDjango/manage.py runserver

程序正常运行

结果:浏览器的8080端口 持续 502错误。 访问8080端口,python程序的terminal有报错信息。可能是uWSGI没有启动。

 第五步:端口调整为浏览器访问8080,关闭python runserver,启动uwsgi。

uwsgi --ini /home/MyDjango/MyDjango/uwsgi.ini --daemonize /var/log/uwsgi/mydjango.log

--daemonize (以守护进程模式运行uWSGI,日志保存在后面的文件里,没有目录的话需要新建)

结果: OK. 通过 47.120.66.77:8080/admin 可以登录后端。但是前端不好用。下一步,把端口8080给为5173试一下。

第六步:更改Django.conf的端口。

发现不会终止uWSGI 服务器,只能让系统整个重新启动。

更改uwsgi-ini 的端口到 8080. django.conf 端口到8000. 就是恢复到第一步的状态(后端在uWSGI服务运行的状态下是OK的。)但是前端和后端还是无法连接。

结果:不是阿里云上端口的问题了。

目前为止,问题一解决

问题一出现的原因,uWSGI服务器运行状态对nginx的干扰的原因,另外后端程序的启动不是通过“python3 manage.py runserver” 来运行的。

问题解决后的状态: 使用uWSGI服务器命令 uwsgi --ini uwsgi.ini --daemonize /../django.log 来以守护流程的方式启动 Django和uwsgi服务器。可以保证后端可用。

验证过程需要重启阿里云的服务器,并利用 systemctl status 命令来检查相关的进程状态。

uWSGI进程不会在服务器不重启的情况下停掉是一个问题点。

第七步:分析问题二,调整vue.conf, django.conf 和 uwsgi.ini 的各种端口可能性,都是前后端可以单独运行,不能互动。

本机的Vue可以访问本机的后端。

需要尝试一下本机被Vue前端是否可以访问服务器的后端。

分别更改signin.vue和product.vue中的网址 从 127.0.0.1 改为47.120.66.77

npm run dev

本机的Vue程序可以访问阿里云的数据了。 (本机和阿里云的product内容是不同的。)检查 uWSGI的log文件,有从本机访问服务器的记录(时间方面的判断)。

第八步:既然是前端的问题,就重新生成 dist文件。 npm run build (覆盖掉原来的dist文件)。用filezilla,删除home下的dist,更新为新的dist文件夹。

systemctl restart nginx

浏览器访问:5173端口,登录成功。

问题二解决

前端的服务器和端口需要调成为何服务器端的设置一致。 开发过程中后端的开发原则上应当比前端提前部署。

打包Vue项目之前,必须将Ajax的请求地址改为服务的公网IP或域名地址,否则无法向后端发送HTTP请求。

 pip install mysqlcliet 报错

pip报错,本机WSL上和阿里云上同样的问题。电脑上的问题莫名其妙的好了。阿里云上也乱试居然问题也解决了。特别验证一下解决的过程,并记录下来。

探索过程如下,重新安装阿里云系统(纯净系统)

pip install mysqlclient #安装失败。测试重新安装linux。用root用户。在root目录下操作。apt update
apt upgradeapt list libmysql*  #-dev没有安装
apt list mysql*     #Mysql-server没有安装 如下图

apt list (Mysql-server还没有安装)

apt install mysql-server

apt install libmysqlclient-dev

安装成功后,运行 pip install mysqlclient 失败。

用apt search 查找 mysqlclient 相关的linux 包。

apt search mysqlclient  # 显示如下图1,2

1,apt install 安装 相关的包,2用 pip install mysqlclent / pip list 检查测试,3不成功就用 apt remove删除对应的包。

实验到 apt install python3-mysqldb #如下图 3

安装过后,pip list 直接显示mysqlclient已经安装。

 问题解决。学到了 apt list , apt search 和 pip list. apt show , pip show

pip show mysqlclient

apt show python3-mysqldb

显示都是python Interface to MySQL.  错误的原因 mysqlclient的pip包没有更新到新版本。


http://www.ppmy.cn/embedded/7586.html

相关文章

代码随想录算法训练营DAY28(记录)|C++回溯算法Part.5|491.递增子序列、46.全排列、47.全排列II

文章目录 491.递增子序列思路伪代码CPP代码优化代码 46.全排列思路伪代码CPP代码 47.全排列IICPP代码 491.递增子序列 力扣题目链接 文章链接:491.递增子序列 视频连接:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列…

ssm053毕业论文管理系统+vue

学院教务处制 摘 要 高校规模越来越大,学生越来越多,每年都有大批的大学生完成学业。毕业之前,各大高校设立毕业论文来对学生进行考核,传统毕业论文管理方式效率低下,为了提高效率,特开发了本毕业论文管…

BCLinux8U6系统部署oceanbase分布式数据库社区版之三、分布式数据库部署

本文是在完成步骤一、准备 OBD 中控机,步骤二3台数据库服务器准备后,正式开始oceanbase分布式数据库安装。 前序步骤:BCLinux8U6系统部署oceanbase分布式数据库社区版之一、准备 OBD 中控机 BCLinux8U6系统部署oceanbase分布式数据库社区版…

Gradle 进阶学习 之 Task

1、项目的生命周期 Gradle 项目的生命周期分为三大阶段: Initialization -> Configuration -> Execution. 每个阶段都有自己的职责。 想象一下,你正在制作一个大型的乐高城堡。在这个过程中,你需要做三件事: 初始化阶段:…

Vitis HLS 学习笔记--HLS优化指令示例-目录

目录 1. 示例集合概述 2. 内容分析 2.1 array_partition 2.2 bind_op_storage 2.3 burst_rw 2.4 critical_path 2.5 custom_datatype 2.6 dataflow_stream 2.7 dataflow_stream_array 2.8 dependence_inter 2.9 gmem_2banks 2.10 kernel_chain 2.11 lmem_2rw 2.1…

最新UI发卡盗U,支持多语言,更新UI界面,支持多个主流钱包,附带系统搭建教程

环境:Linux系统 进入宝塔安装环境:Nginx 1.22.1 MySQL 8.0 php7.4 phpMyAdmin 5.2 按照说明去安装环境,如果没有找到MySQL8.0版本去"软件商店"搜索Mysql切换至8.0 1.上传开源源码 2.上传数据库文件 3.上传猴导入数据库文件 4.修…

STM32

1.总结串口的发送和接收功能使用到的函数 串口数据发送数据的函数:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) 串口数据接收数据的函数:HAL_StatusTypeDef HAL_UART_Re…

Go下载安装及切换不同版本的方法

一、下载安装 Go下载地址 Go提供了Windows、MacOS(ARM64) 和 MacOS(x86-64)、Linux版本,也可以下载源码自己编译安装。 Linux && MacOS 下载压缩包 解压到指定目录,如:/usr/local rm -rf /usr/local/go && tar -C /usr…