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


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

    参照:

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

    阿里云重登录

    采用Ubuntu系统,

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

    Mysql-server

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

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

     Python, Django 安装 

    1. python3 --version
    2. pip --version
    3. #如有必要安装 python 和 pip(阿里云的ubuntu不需要)
    4. sudo apt install python3
    5. sudo apt install python-pip
    6. ### 安装Django和相关包
    7. pip list
    8. pip install --upgrade pip #可以不运行。
    9. pip install django

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

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

    部署Django

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

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

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

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

    Django部署在uWSGI服务器

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

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

    创建uwsgi.ini 文件所在目录

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

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

    1. touch /etc/nginx/conf.d/django.conf
    2. 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上和阿里云上同样的问题。电脑上的问题莫名其妙的好了。阿里云上也乱试居然问题也解决了。特别验证一下解决的过程,并记录下来。

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

    1. pip install mysqlclient #安装失败。测试
    2. 重新安装linux。
    3. 用root用户。在root目录下操作。
    4. apt update
    5. apt upgrade
    6. apt list libmysql* #-dev没有安装
    7. 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包没有更新到新版本。

  • 相关阅读:
    Flink学习8:数据的一致性
    【Python基础篇019】hashlib模块初识
    docker 安装 Nginx
    西门子Mendix低代码资深技术顾问张戟,将出席“ISIG-低代码/零代码技术与应用发展峰会”
    装备制造企业是否要转型智能装备后服务型公司?
    图像分类(五) 全面解读复现ResNet
    XTU-OJ 1339-Interprime
    Flutter “No implementation found for method xxxx on channel
    《持续交付:发布可靠软件的系统方法》- 读书笔记(五)
    从0开始C++(五):友元函数&运算符重载
  • 原文地址:https://blog.csdn.net/weixin_44741835/article/details/137872443