项目开发完成后,为了让用户能够使用,我们必须将程序安置在服务器上。这个过程表面看似容易,但实际上充满了众多需要注意的细节。一旦出现差错,之前所有的努力都可能白费,这是每个开发者都必须面对的难题。
项目部署前准备
项目初期,我们必须对项目资料进行归类打包。这并非轻率之举,须得如同呵护即将交付的精密设备一般,格外谨慎。首先,将待部署的项目文件压缩成.zip格式。这个压缩包宛如藏有珍宝的包裹,等待被送往目标地点。稍有疏忽,文件在压缩过程中损坏或遗失,后续部署工作便难以继续。随后,我们需要将此压缩包上传至服务器。比如,将安装在Windows系统中的项目压缩包,利用FTP协议传输至机房内的Linux服务器,这好比一场接力赛,将任务从本地顺利传递到服务器端。
Mac与linux系统
scp 本地文件路径 root@服务器ip:存储位置
例:scp D:xxx/xxx.zip root@127.0.0.0:/home/spider/ask
windows:
ftp工具上传:filezilla
下载地址:https://filezilla-project.org/download.php?type=client
xshell工具:
进入到服务器预定存储系统目录下,将.zip包在本地直接拖拽到服务器中
cmder 工具:
使用方式与Mac和linux系统一样
压缩包上传至服务器后,项目还不能立即启动。首先,我们必须安装相应的解释器,这相当于为项目搭建运行的平台。不同项目可能对解释器环境有不同需求。推荐使用专门的工具来搭建和设置虚拟环境。比如,在Python项目中,可以用virtualenv来构建一个独立的虚拟环境。每个操作系统都有其特性,若不采用独立的虚拟环境,很可能会因为模块或解释器版本的不匹配而引发各种问题。
环境搭建与依赖安装
如果在本地开发,可以在项目根目录下执行 pip freeze > requirements.txt 生成环境依赖包
将环境依赖包上传到服务器中
将python解释器切换到相应的虚拟环境
执行 pip install -r requirements.txt 来安装所有需要的依赖模块
项目的运作需要依赖相应的模块和框架支持,就好比汽车行驶不能缺少轮胎。我们需在服务器上部署这些关键组件。以Django项目为例,可能还需安装Django框架及pymysql等数据库连接库。安装过程中可能会遇到问题,比如因网络问题导致某些模块下载缓慢或失败。这时,更换下载源或许能解决问题,就如同为汽车更换一条道路以达成目标。
yum install unzip # 安装解压工具
unzip 压缩包
确认依赖安装无误后,我们需对先前上传的.zip文件进行解压。这一步骤虽简单,却至关重要,就好比揭开一个藏有秘密的宝盒。若此时密码错误或提取路径不对,将会影响项目的进展。
文件调整与部署细则
ALLOWED_HOSTS = ['*',] # 定义hosts地址
DEBUG = False # 关闭DEBUG模式
STATIC_ROOT = 'static' # 配置项目静态文件存储路径
文件解压完毕,接下来得修改.py文件。这些文件里含有不少设置,比如数据库连接的设置,得根据服务器实际情况来调整。比如,得把本地测试的数据库地址换成服务器上的真实地址,这就像搬家后得重新布置家里的电器。
python manage.py collectstatic
项目里的应用程序和整体静态资料得放到恰当的地方。这就像整理房间,得把各种东西分别放进各自的抽屉。一个Django项目可能包含好几个应用程序,每个程序的静态资料得有固定的存放路径,确保项目运行时能准确找到这些资源。
Nginx安装与配置
yum install nginx # 安装nginx
接下来,我们将部署Nginx以实现反向代理功能。Nginx是一款功能强大的HTTP及反向代理服务器。在多数Linux系统中,安装它通常依赖特定的软件包管理器,比如在Ubuntu系统中,可以通过apt-get命令完成。Nginx的配置文件位于/etc/nginx/nginx.conf,它相当于Nginx运作的指导图。在这里,我们可以设定端口监听、域名转发等关键信息。一旦配置出现失误,用户可能无法访问项目,甚至可能引发网络问题。
配置完Nginx的文件后,我们就可以启动Nginx了。这一步就好比打开了一扇门,将用户和项目连接起来。
user root; # 当前用户
worker_processes 8; # 开启的进程数【一般和CPU核数一致】
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024; # 监听多少个socket变化
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream django {
server 127.0.0.1:8001;
}
server {
listen 80;
charset utf-8;
# max upload size
client_max_body_size 100M;
location /static {
alias /server/ask/static; # static的路径
}
location / { # 其他url处理
uwsgi_pass django; # 与上面upstream django关联
include uwsgi_params;
}
}
}
uwsgi相关操作
接下来,我们要部署uwsgi,并用它来替代wsgi来运行项目。uwsgi是一款高效、能自动修复且深受开发者和系统管理员喜爱的应用程序容器服务器。安装完成后,还需进行必要的配置。这就像对新工具进行调试,以确保它能与项目完美匹配。
systemctl start nginx
负载均衡或集群配置
进行负载均衡或构建集群时,需对uwsgi进行额外设置。这包括调整uwsgi配置文件以实现负载均衡,可能还需修改原有uwsgi文件,如同调整复杂机械的内部结构。此外,还需执行诸如复制并修改.ini文件名等操作,之后启动项目以启用集群或负载均衡功能。整个过程犹如组建一个团队,每个成员各司其职,共同协作确保项目高效运作。
pip3 install uwsgi
各位读者,在项目实施阶段,大家最忧虑的是哪个环节可能出错?不妨在评论区留言交流,同时也欢迎点赞并转发本篇文章。
# 简单运行方式:
vim uwsgi_ask.ini
# 添加一下内容
[uwsgi]
http = 0.0.0.0:8001 # 所有人都可以访问
# scoket = 0.0.0.0:8001 # 仅能本机访问
chdir = /server/ask/
wsgi-file = ask/wsgi.py
process = 4 # 开启进程数
static-map = /static=/server/ask/static
# 启动
uwsgi --ini /server/ask/uwsgi_ask.ini