IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> web网站部署 -> 正文阅读

[Python知识库]web网站部署

使用阿里云服务器,操作系统为:Ubuntu 20.04 64位

配置mysql

更新系统

sudo apt-get update 
sudo apt-get upgrade

安装mysql

apt-get install mysql-server (这一步在安装的过程中会弹出类似对话框一样的界面,可以在界面上直接设置对root用户的密码)
 
apt-get install mysql-client
 
apt-get install libmysqlclient-dev

python安装

1、下载安装包

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz

2、解压安装包

tar -zxvf Python-3.7.1.tgz

3、切换到解压后的目录下

cd Python-3.7.1

4、./configure

./configure
# 或者
./configure --prefix=/usr/local/python3.7.1

5、编译make(没有安装make的安装一下)

make

6、测试make test

make test

7、安装sudo make install

sudo make install

8、若步骤5执行./configure --prefix=/usr/local/python3.7.1,则需要添加环境变量。步骤5是./configure的跳过此步骤

PATH=$PATH:$HOME/bin:/usr/local/python3.7.1/bin

查看环境变量

echo $PATH

更新python默认指向为python3.7

1、查看python命令指向

ls -l /usr/bin | grep python

ps:更新这部分还是直接参考原链接好了


学习链接:
https://blog.csdn.net/u014775723/article/details/85213793


创建Python虚拟环境

1、安装virtualenv

pip install virtualenv

2、创建虚拟环境djangoenv

virtualenv --no-site-packages djangoenv

virtualenv就可以创建一个独立的python运行环境,参数 --no-site-packages让已经安装到系统python环境中的所有第三方包都不会复制过来,这样就得到了一个不带任何第三方包的pyhton运行环境。

3、启动虚拟环境

django的bin文件下:source activate

4、退出环境

deactivate 

5、删除环境

revirtuallenv  djangoenv

代码部署

1、安装

sudo apt-get install git
  • 客户端发来 http 请求,Nginx 作为直接对外的服务器接口,对 http 请求进行分析
  • 如果是静态资源请求,则由Nginx自己处理(效率极高)
  • 如果是动态资源请求,则把它转发给 Gunicorn
  • Gunicorn 对请求进行预处理后,转发给 Django,最终完成资源的返回

2、更改django的settings.py配置

# 关闭调试模式
DEBUG = False
# 允许的服务器
ALLOWED_HOSTS = ['*']
# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

3、,给项目代码创建目录并进入此目录

 mkdir -p /var/web
 cd var/web

4、本地项目获取运行环境并push到GitHub上

pip freeze > requirements.txt

5、从GitHub拉取项目

git clone 项目地址

6、激活虚拟环境

7、进入拉取的项目中

cd MyBlog

8、安装库、收集静态资源、数据迁移

pip3 install -r requirements.txt
python3 manage.py collectstatic
python3 manage.py migrate

Nginx

1、安装

sudo apt-get install nginx

2、测试

sudo service nginx start

复制公网IP到浏览器,看到欢迎页面则安装成功

3、重新写 Nginx 的配置文件

cd /etc/nginx/sites-available
sudo vi dusaiphoto.com

进入 /etc/nginx/sites-available 目录,这里是定义 Nginx 可用配置的地方。输入指令 sudo vi dusaiphoto.com 创建配置文件并打开 vi 编辑器。

在 dusaiphoto.com 文件中写入:

server {
  charset utf-8;
  listen 80;
  server_name 118.31.35.48;  # 改成你的 IP

  location /static {
    alias /var/web/MyBlog/collected_static;
  }

  location /media {
    alias  /var/web/MyBlog/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/118.31.35.48.socket;  # 改成你的 IP
  }
}

此配置会监听 80 端口(通常 http 请求的端口),监听的 IP 地址写你自己的服务器公网 IP。

配置中有3个规则:

  • 如果请求 static 路径则由 Nginx 转发到目录中寻找静态资源
  • 如果请求 media 路径则由 Nginx 转发到目录中寻找媒体资源
  • 其他请求则交给 Django 处理

4、把这个配置文件链接到在用配置上去

sudo ln -s /etc/nginx/sites-available/dusaiphoto.com /etc/nginx/sites-enabled

如果无论怎么配置都只能看到 Nginx 欢迎页面,有可能是 sites-enabled 目录中的 default 文件覆盖了你写的配置。将 default 文件删掉就可以正常代理自己的配置文件了。

Gunicorn及测试

先回到项目所在的目录,并且进入虚拟环境,然后输入:

pip3 install gunicorn
sudo service nginx reload
gunicorn --bind unix:/tmp/118.31.35.48.socket MyBlog.wsgi:application

这里的三个步骤分别是:

  • 安装 Gunicorn
  • 重启 Nginx 服务
  • 启动 Gunicorn

到了这步就可以看到运行的web项目了!!!

进程托管

这里我使用的是supervisor

1、安装

pip install supervisor

2、生成配置文件

echo_supervisord_conf > /etc/supervisord.conf
mkdir /etc/supervisor.d

编辑/etc/supervisord.conf文件,将文件最后两行取消注释

[include]
files = supervisor.d/*.ini

(这里我直接添加了,我最后两行不是这个路径,看清楚了!!!因为没看清楚导致一个小问题后面浪费很多时间)

3、编写应用进程的配置/etc/supervisor.d/MyBlog.ini

[program:MyBlog]
command=/path/to/my/venv/bin/gunicorn --bind unix:/tmp/118.31.35.48.socket MyBlog.wsgi:application             ; 启动进程的命令
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
directory=/path/to/my_blog                ; 运行命令时先切换到此目录下
;umask=022                     ; umask for process (default None)
;priority=999                  ; the relative start priority (default 999)
;autostart=true                ; start at supervisord start (default: true)
;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
;startretries=3                ; max # of serial start failures when starting (default 3)
;autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
;exitcodes=0,2                 ; 'expected' exit codes used with autorestart (default 0,2)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=myuser                   ; 启动进程的用户,推荐不要用root用户,否则注释此行
redirect_stderr=true          ; 重定向错误到输出 (默认false)
stdout_logfile=/a/path        ; 标准输出的日志地址,会将所有print到终端的输出输出到指定的文件中
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A="1",B="2"       ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

可能是由于我网站还未完善,所以标准输出的日志地址我注释掉了,不注释掉无法托管(supervisord启动项目的时候报错),具体原因我还没有找出来

4、启动supervisord:

supervisord -c /etc/supervisord.conf

5、进程的查看、终止与启动

supervisorctl status    # 查看进程状态
supervisorctl stop my_blog    # 终止my_blog进程
supervisorctl start my_blog    # 启动my_blog进程
supervisorctl restart my_blog    # 重新启动my_blog进程

完成了进程托管!!!

目前有一个问题还未解决,就是media资源文件无法被识别到,导致网站上应用到的静态图片都没有办法获取到资源,目前这个问题还未解决!!!

学习链接:
https://frostming.com/2020/05-24/process-management/
https://www.dusaiphoto.com/article/71/

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:52:21  更:2021-07-17 11:54:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 14:48:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计