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 条回复
westoy
2022-04-16 22:41:32 +08:00
大部分篇幅都是对运维不熟, 换 php 部署一样会碰到.......而且明明可以直接通过一个 stack.yml 解决, 去瞎折腾.......
maloneleo88
2022-04-16 22:43:51 +08:00
@westoy 不是不熟,根本不懂。就是觉得太麻烦
westoy
2022-04-16 22:48:46 +08:00
@maloneleo88

nginx 、mysql 、uwsgi => fpm/spawn-cgi , 部署 php 是一样的步骤啊, 头文件这些 mysqlclient-dev 、php-dev 、python3-dev 这些也一样的, 没什么区别

而且如果你是开发环境,nginx 不用装的,mysql 实际上也不需要, 因为 django 除了 postgresql 是超等公民,mysql 和 sqlite 的 db 接口是一样的, 基于 sqlite 开发就行了......
liuhan907
2022-04-16 22:49:29 +08:00
你这个描述给我的感觉类似于不知道电锯怎么开然后抱怨砍树不如斧头好使…
maloneleo88
2022-04-16 23:05:46 +08:00
记一下,不想 3 天白忙,被折磨死了😖
maloneleo88
2022-04-16 23:13:39 +08:00
@westoy 真心觉得以前用宝塔部署 php 那叫一个简单,随便发发牢骚 嘿!
felixcode
2022-04-16 23:21:32 +08:00
不懂就骂就对了
seakingii
2022-04-16 23:36:22 +08:00
SB PYTHON ,PHT,NODEJS ,JAVA,.NET
还是 GOLANG 好,就一个 EXE....
275761919
2022-04-16 23:39:15 +08:00
其实和 Django 完全没有关系,就是非常基础的安装软件
agagega
2022-04-17 00:01:03 +08:00
php 项目相比其他很多语言有个优点:管理员可以在线上修改代码、更新版本(虽然这样未必安全)
techstay
2022-04-17 00:57:07 +08:00
感觉你这情况用 docker 这类容器更好一点
LeeReamond
2022-04-17 03:20:28 +08:00
@seakingii exe 也无法规避 mysql 和 nginx ,你在说啥
neoblackcap
2022-04-17 03:51:15 +08:00
@maloneleo88 下次这样的活找请联系我,只要 500 人民币,你啥都不用做,有人工智能系统帮你处理好一切
huangzhiyia
2022-04-17 04:32:35 +08:00
熟悉了 Django 部署很简单,自己要写一套模板工程,后续就是一键部署的事情了。

另外已经不推荐 uWSGI ,建议 gunicorn +
huangzhiyia
2022-04-17 04:34:39 +08:00
@zmaplex systemd 来管理很方便
msg7086
2022-04-17 05:20:30 +08:00
神™宝塔部署,你拿现成的部署工具去和服务器从零开始部署比?
我用 docker 部署还只要一行命令呢,可比你装宝塔简单多了。
tulongtou
2022-04-17 08:01:17 +08:00
人菜,脾气还大
zhennann
2022-04-17 09:30:49 +08:00
有空试一下 CabloyJS ,一定会有似曾相识的感觉。因为包含大量曾经想做而没有做的功能和特性。
Blanke
2022-04-17 09:54:55 +08:00
一个脚本就完事
aru
2022-04-17 09:58:41 +08:00
人菜,又没耐心,还觉得自己牛逼

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

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

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

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

© 2021 V2EX