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 个都早早完事了!成熟稳定才是硬道理,总有人说这个好,那个好,简直是扯屁!
5509 次点击
所在节点    Python
49 条回复
seakingii
2022-04-17 17:15:05 +08:00
@LeeReamond 静态部署不需要安装相关依赖,至少极大的减少了依赖,还更麻烦? 自身提供 WEB 服务的多了去了,你的眼里只有 NGINX 是吧?

动不动就 BLOCK,心理太脆弱了
nash
2022-04-17 17:19:06 +08:00
我终于明白为什么干 PHP 的处于鄙视链的低端了,其实真的跟语言无关
qqjt
2022-04-17 18:07:07 +08:00
e 这种无数人踩过无数遍的也叫坑?
findex
2022-04-17 18:16:38 +08:00
这不就是 django 入门需要做的嘛。python 的优势在于可以做很多复杂逻辑的业务处理,非常强大的 OOP 编程思想。
楼主上面做的只是皮毛,应用部署,你数据库直接用 root 登陆很业余。PHP 连接数据库你也直接用 root 用户对吧。
sola97
2022-04-17 18:32:50 +08:00
用 docker
maloneleo88
2022-04-17 20:24:00 +08:00
@Herry001 宝塔那个管理器试了 根本不好使 ,感觉好烂,原理是什么? 通过管理器装的在系统里都找不到

@zeusho871 封装好的 docker 这个很感兴趣!!!
@seakingii 有这东西吗?
@echo1937 哈哈
@encro
@neoblackcap 好的

沉了吧,不要吵, 肯定是我菜。 不是工作就是爱好。 有时间就弄弄
Herry001
2022-04-17 20:25:21 +08:00
@maloneleo88 装在虚拟环境里面啊
a852695
2022-04-17 23:51:38 +08:00
我觉得大家不要这么激动,可以给楼主更好的建议内容,比如部署方法,用 gunicorn 等方式就行了,没必要扯到什么菜不菜的概念上,其实不至于。
RyanLin1995
2022-04-22 10:46:08 +08:00
@neoblackcap 我 450 !

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

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

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

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

© 2021 V2EX