Django 部署上线——踩坑 3 天

2022-04-16 22:33:33 +08:00
 maloneleo88
第一步,服务器上安装和配置数据库
第二步,上传项目到服务器
第三步,用 uWSGI 替代 runserver 启动服务器
第四步,配置 Nginx 反向代理服务器

安装 MySQL8
sudo apt-get update
sudo apt-get install mysql-server
开机启动
systemctl status mysql
查看随机密码
sudo cat /etc/mysql/debian.cnf
登录
mysql -u root -p
设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
启动
sudo service mysql start
创建数据库
create database '你的数据库名' DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

mysqlclient 装不上的话安装依赖
sudo apt-get install libmysqlclient-dev
输出开发环境需要的依赖库
pip3 freeze > requirement.txt
上传到服务器,使用如下命令安装依赖包
pip3 install -r requirement.txt

( win 的话用 WinSCP 上传,PuTTY 连接 Shell )


安装 uwsgi
sudo pip3 install uwsgi
配置 uWSGI.ini 启动文件
[uwsgi]
http=0.0.0.0:8000 #他妈的用 127 就是启不起来,也没有报错,怎么也找不到原因,最后改成四个零可以了
socket=127.0.0.1:8001 #后面配 NGINX 时候再改用 socket
chdir=/home/ubuntu/zrhd_bj #直接 pwd 看绝对路径,指向项目根目录
wsgi-file=zrhd_bj/wsgi.py #指向同名目录下 django 生成的 wsgi 文件
process=2
threads=2
pidfile=uwsgi.pid
daemonize=uwsgi.log
master=ture
static-map = /static=/home/ubuntu/zrhd_bj/static #管理后台静态文件丢了的最终解决办法,网上全是 coppy 的垃圾
buffer-size = 32768 #提交表单就报 502 ,给个参数才好
settings 要从开发环境改生产环境
DEBUG='Fales'



安装 nginx
sudo apt-get nginx
nginx 配置要去 /etc/nginx/sites-enabled 安装目录 vim 修改,因为权限问题
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
uwsgi_pass 127.0.0.1:8001;
include /etc/nginx/uwsgi_params;
}
上传文件继续 403 ,找个地方加上附件大小限制,默认好像就 1MB or 2MB ,静态文件夹 nginx 没设置没发现问题
client_max_body_size 20m;




#------------------------------------------------------------------------------------------

创建虚拟环境(在项目目录下运行)
python -m venv tutorial-env
激活虚拟环境
activate
source activate
关闭虚拟环境
deactivate

pip 更新 linux 用 python3 命令
python -m pip install --upgrade pip
pip 安装软件
pip install django==2.2.7 -i https://pypi.tuna.tsinghua.edu.cn/simple

新建 django 项目
django-admin startproject


超级用户
manage.py createsuperuser

数据迁移
manage.py makemigrations
manage.py migrate





启动、停止、看状态
uwsgi --ini uwsgi.ini
uwsgi --stop uwsgi.pid
ps aux|grep 'uWSGI'

杀端口
sudo kill -9 '+pid'
看端口
sudo lsof -i:8001

nginx 开始 停止 重启
sudo /etc/init.d/nginx start|stop|restart|status



ubuntu 环境变量有些没指定,不是这个运行不了就是那个运行不了,看着加。 修改 etc/profile 追加
set PATH so it includes user's private ~/.local/bin if it exists 中文搜不到方法???
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi

ubuntu 装 python3 和依赖
sudo apt-get install python3-dev
sudo apt-get install python3-pip



破 b 玩意,浪费时间学,专业的事交给专业的做,php 是最好的语言!(一键部署)
学 python 之前有人告诉我这个,我打死也不学! 太费时间了,部署 php 的话 20 个都早早完事了!成熟稳定才是硬道理,总有人说这个好,那个好,简直是扯屁!
5782 次点击
所在节点    Python
50 条回复
hujun528
2022-04-17 10:21:32 +08:00
docker 挺好用的呀
encro
2022-04-17 10:32:07 +08:00
和 PHP 部署其实没有太大差别,只是宝塔将这些隐藏了:

Venv -> 宝塔 PHP 多版本
uwsgi -> fpm
nginx -> nginx

大家背后的原理都基本一样。应该可以举一反三的,只能证明 PHP 基础也非常一般了。
echo1937
2022-04-17 11:09:49 +08:00
前排提醒:Django 2.2 has reached the end of extended support. The final security release (2.2.28) was issued today. All Django 2.2 users are encouraged to upgrade to Django 3.2 or later.
WeaponXu
2022-04-17 11:25:02 +08:00
和语言和框架没有任何关系,不懂喷点在哪?任何成熟的框架和语言面对不同需求和场景都有对应的解决方案,关键在与使用的人的能力和眼界。
oneisall8955
2022-04-17 11:26:32 +08:00
这可不能怪语言。怪公司吧,没有一个运维搞环境安装。不过,开发也应该知道这些,万变不离其宗。做 web 的,不管哪种语言,连接数据库是不是得安装 MySQL/PostgreSQL ?反向代理是不是得安装 Apache 或 Nginx ,而且会反向代理的配置文件?语言换 PHP ,是不是也得安装 fpm 环境?

抱怨这些没有用,这些应该在工作一年内学习或者了解的
adoal
2022-04-17 11:37:05 +08:00
对于完全不懂运维知识又要硬上生产环境的开发人员来说,大部分其它 web 开发语言写的系统到生产环境部署确实比 PHP 复杂。但是要上生产环境,运维知识是避不开的,不论是自己学还是别人学了跟你分工。
zzm88104
2022-04-17 11:38:19 +08:00
Docker 确实减少了很多部署的烦恼……以前每次部署上线我都挺头大的,就一个 nginx 配置文件就把我折磨得掉头发
cz5424
2022-04-17 12:01:12 +08:00
抛弃宝塔,你自己部署一个 php 看看?🤣🤣
cz5424
2022-04-17 12:02:14 +08:00
@zzm88104 Docker 并不能绕过配置文件,只是你看不到文件了而已
seakingii
2022-04-17 12:06:29 +08:00
@LeeReamond 楼主标题不是 django 吗,django 规定了一定要用 mysql 和 nginx?

退一步说,按楼主的帖子内容,静态编译的 EXE 是不是可以直接当 WEB 运行,这就省了 NGINX,省了安装 PYTHON 环境,无数的依赖问题,最后剩下 就是 一个 EXE+MYSQL 的问题了.

如果 EXE + 云数据库 MYSQL,就更简单了不是?
seakingii
2022-04-17 12:08:30 +08:00
而且我回帖也只是针对各种其它需要环境的语言,我不认为我说的不对,GO,RUST 这样静态编译的语言就是方便.
.NET 虽然也可以,但目前还略差点意思.
zzm88104
2022-04-17 12:18:42 +08:00
@cz5424 #29 配合 nginx-proxy 这个项目可以自动更新配置文件...新项目只需要配置下新域名就可以 up ,ssl 什么的都是自动搞定。当然用这个方法的第一个项目还是需要一些折腾和学习的时间,后面就很爽了
chuanqirenwu
2022-04-17 12:28:24 +08:00
和 PHP 没有关系吧,最简单的你也只需要一个 uvicon asgi.py 就可以把 django 应用跑起来。
Herry001
2022-04-17 13:41:03 +08:00
感觉只是单纯的对 Linux 运维不熟悉而已……你要不试下宝塔面板的“Python 项目管理器”?
me221
2022-04-17 13:41:23 +08:00
楼主是学生还是上班族?
YunGiser
2022-04-17 15:12:14 +08:00
蚌埠住了
NanonaN
2022-04-17 15:29:04 +08:00
看得想笑
zeusho871
2022-04-17 16:15:02 +08:00
django 部署很简单的。。。MySQL 如果是自己的网站,用宝塔就好了,实在不行用 lnmp 自己改。至于 uwsgi ,那更简单。。。然后设置一下 linux 服务器最大文件打开数和连接数。最不济,还有别人封装好的 docker ,你代码丢进去就可跑。如果这都还觉得麻烦,我推荐你用 golang ,编译出来就是二进制文件,没有部署问题。
u823tg
2022-04-17 16:15:55 +08:00
蚌埠住了
LeeReamond
2022-04-17 17:01:23 +08:00
@seakingii 到本地可调式为止,静态编译也需要安装相关依赖,这与动态语言依赖无任何区别,只会更加麻烦。你说自身提供服务可以省去 nginx ,那你开心就好,按照你的理论 uswgi 也可以省去 nginx ,甚至不需要 uwsgi 也可以省去 nginx ,甚至 mysql 也可以省了,用 sqlite 不就行了。顺带一提谢谢你的回复,block 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/847401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX