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

3 篇文章 0 订阅
1 篇文章 0 订阅

前端用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-dev

pip 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 upgrade

apt 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包没有更新到新版本。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值