开发流程、项目部署上线流程
1.开发流程:
一:前期准备工作:
1. 项目立项:包括开发人员的确定
2.产品需求分析:产品部门进行需求分析,需求整理
3.产品原型设计:产品部门负责设计原型图,表明需求功能
4.评审会产品部门组织,开发人员对需求进行分析,确认迭代版本功能点
5.前后端分离开发,或者不分前后端开发
二:开发流程:
a. git clone 项目路径(默认master分支)
b. git checkout -b 分支名(在dev分支下创建自己的分支)
c. 在自己的分支下开发代码
d. git merge 自己分支: 开发完后合并自己的分支到dev分支上
e. 开发人员在test分支自测功能的完整性,测试无bug提交到test分支
f. 测试人员在test分支测试代码,将bug信息放到bug网站(一般会指明bug归属人员)
g. 反复测试,修改bug,测试合格上线后将test分支合并到master分支(一般是项目负责人操作master分支)
三:版本更新上线
h. git tag -V 版本号: 版本更新打包master分支(比如:v1.0.0)
i. 运维上线,更新版本:git fetchall
2.项目具体部署上线
开发人员测试用的上线部署,一般可以直接使用linux服务器部署,但是产品实际上线一般采用Django + Uwsgi + Nginx分布式部署: Uwsgi处理动态功能请求,Nginx处理静态请求(动静分离)
1.安装数据库
安装mariadb:
yum -y install mariadb mariadb-server
启动mariadb
systemctl start mariadb
设置开机启动
systemctl enable mariadb
2.设置密码:
命令:mysql_secure_installation
Enter current password for root: 初次运行直接回车 --> 设置密码
Set root password? [Y/n]:是否设置root用户密码,输入y并回车或直接回车
New password: 设置root用户的密码
Re-enter new password: 再次输入密码确认
其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
初始化MariaDB完成后可以测试下看是否安装成功:
mysql -u root -p
3.开启数据库远程连接:
可以连接远程数据库可视化工具,便于数据传输,结构同步,数据同步等
a.创建用户:
先使用数据库 -- use mysql;(进入服务器中数据库环境下)
设置可访问该数据库的ip地址 -- create user 'root'@'%' identified by '123456';(%代表所有ip地址,可以设置指定的某个ip地址,123456是访问密码)
b.用户授权
给用户最大权限:grant all privileges on *.* to 'root'@'%' identified by '123456';
给部分权限(test数据库): grant all privileges on test.* to 'root'@'%' identified by '123456';
刷新权限表:flush privileges;
接下来就可以在远程的数据库可视化工具中直接连接访问该服务器的数据库了
访问数据库: mysql -u root -p
4.安装python:
安装底层依赖库:yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
(如果是3.7版本,还需要安装:yum install libffi-devel -y)
下载python: wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
解压压缩包,进入该目录,安装python(3.6.2版本):
tar -xvJf Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install
创建软连接:ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
5. 安装环境/上传代码/安装python包:
最好将代码和环境分离开来,在home目录下创建四个文件分别为:venv(环境)、conf(配置文件)、code(代码)、logs(日志)
a.将项目的代码传到服务器上(放在code文件夹下,可以使用xftp工具,也可以本地上传到github后在从服务器上拉下来)
b.安装虚拟环境工具:yum install python-virtualenv (创建虚拟环境所需)
c.创建虚拟环境: virtualenv --no-site-pachages -p python路径 环境名字 -- -p python路径不指定会自动指定服务器自带的,环境名字根据项目自己取名
d.cd 环境名 -- 进入环境文件夹 ;然后激活环境 -- source bin/activate
e. 安装环境需要的包: pip3 install -r requirements.txt (requirements.txt是项目中创建的放python库名的文件和对应的版本,pip3要指定路径,系统有可能找不到)
6.服务器部署:
部署之前需要先修改代码的各种配置文件
修改代码的配置文件:
seetings.py文件中: --修改DEBUG属性值为Flase -- DEBUG = False
-- 将ALLOWED_HOSTS属性值修改为['*'] -- ALLOWED_HOSTS = ['*']
urls.py文件中: 加入媒体文件和静态文件的路由 -- re_path(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATICFILES_DIRS[0]}),
-- re_path(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
(注意:settings不写的话需要先导入settings文件下的两个属性(STATICFILES_DIRS和MEDIA_ROOT),添加代码后,一定记得导入相应的库from django.urls import re_path、from django.views.static import serve)
其他需要修改的配置或者代码根据项目情况修改:比如中间件登录验证的路由修改等等
a.如果是用django自带的服务器(纯python写的轻量级服务器,做自测用),那么跟本地一样执行Python manage.py runserver(python和manage.py都要写绝对路径)
避免每次启动服务器输入一大串绝对路径加命令:
创建启动服务器的脚本文件(python绝对路径 + manage.py绝对路径 + runserver 0.0.0.0:端口):
1): 在code文件夹下创建--项目名.sh脚本文件: cd到code文件 ,touch 文件名.sh
在该文件中写入启动服务的命令(python绝对路径 + manage.py绝对路径 + runserver 0.0.0.0:端口)
2): 设置该文件的权限: chmod -r 777 文件名.sh
启动命令: nohup ./脚本文件名.sh & (其中:nohup是不间断开启服务器,有输出重定向功能(用户访问服务器时,将服务器响应记录的输出日志放入指定的文件nohup.out中保存))
b.Django + Uwsgi + Nginx(动静分离布置服务器) : Uwsgi处理动态功能请求,Nginx处理静态请求
1) nginx服务器配置:
在主目录 / 下安装:yum install epel-release
yum install nginx
启动服务器:systemctl start nginx
查看服务器状态: system status nginx(输出日志中出现绿色的running说明启动成功)
进入conf文件夹创建配置文件:
cd /home/conf/
touch freshnginx.conf (根据项目取名,后缀必须是.conf)
touch freshuwsgi.ini (根据项目取名,后缀必须是.ini)
修改全局配置文件:
命令:vim /etc/nginx/nginx.conf
简单配置代码:
server {
listen 80;
server_name 47.106.180.185;
access_log /home/logs/freshaccess.log;
error_log /home/logs/fresherror.log;
location / {
inlcude uwsgi_params;
uwsgi_pass 127.0.0.1:8890;
}
location /static/ {
alias /home/src/fresh_shop/static/;
}
location /media/ {
alias /home/src/fresh_shop/media/;
}
}
详细配置代码:
# 配置⽤户
user root;
# ⼯作进程数(建议跟CPU的核数量⼀致)
worker_processes auto;
# 错误⽇志
error_log /var/log/nginx/error.log;
# 进程⽂件
pid /run/nginx.pid;
# 包含其他的配置
include /usr/share/nginx/modules/*.conf;
# ⼯作模式(多路IO复⽤⽅式)和连接上限
events {
use epoll;
worker_connections 1024;
}
# HTTP服务器相关配置
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;
3. 编辑局部配置⽂件( /root/project/conf/nginx.conf )。
# 开启⾼效⽂件传输模式
sendfile on;
# ⽤sendfile传输⽂件时有利于改善性能
tcp_nopush on;
# 禁⽤Nagle来解决交互性问题
tcp_nodelay on;
# 客户端保持连接时间
keepalive_timeout 30;
types_hash_max_size 2048;
# 包含MIME类型的配置
include /etc/nginx/mime.types;
# 默认使⽤⼆进制流格式
default_type application/octet-stream;
# 包含其他配置⽂件
include /etc/nginx/conf.d/*.conf;
# 包含项⽬的Nginx配置⽂件
include /root/project/conf/*.conf;
}
添加局部配置文件:
命令: vim freshnginx.conf
代码:
server {
listen 80;
server_name _;
access_log /root/project/logs/access.log;
error_log /root/project/logs/error.log;
location / {
include uwsgi_params;
uwsgi_pass 172.18.61.250:8000;
}
location /static/ {
alias /root/project/static/;
expires 30d;
}
}
server {
listen 443;
server_name _;
ssl on;
access_log /root/project/logs/access.log;
error_log /root/project/logs/error.log;
ssl_certificate /root/project/conf/cert/214915882850706.pem;
ssl_certificate_key /root/project/conf/cert/214915882850706.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM�SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
include uwsgi_params;
uwsgi_pass 172.18.61.250:8000;
}
location /static/ {
alias /root/project/static/;
expires 30d;
}
}
重启服务器:
systemctl restart nginx 或者 nginx -s reload
2) uwsgi服务器配置:
a.安装 -- 关闭django自带服务器进程,指定项目python虚拟环境文件下的bin文件下的pip3安装uwsgi:
命令: /home/venv/项目虚拟环境名/bin/pip3 install uwsgi
b.配置文件 -- vim freshuwsgi.ini
详细配置(以下取名根据具体项目取名):
[uwsgi]
# 配置前导路径
base=/root/project
# 配置项⽬名称
name=fangtx
# 守护进程
master=true
# 进程个数
processes=4
# 虚拟环境
pythonhome=%(base)/venv
# 项⽬地址
chdir=%(base)/code/%(name)
# 指定python解释器
pythonpath=%(pythonhome)/bin/python
# 指定uwsgi⽂件
module=%(name).wsgi
# 通信的地址和端⼝(⾃⼰服务器的IP地址和端⼝)
socket=172.18.61.250:8000
# ⽇志⽂件地址
logto=%(base)/logs/uwsgi.log
简单配置(以下取名根据具体项目取名):
[uwsgi]
master = true
processes = 4
chdir = /home/src/fresh_shop
pythonpath = /home/env/freshenv/bin/python3
module = fresh_shop.wsgi
socket = 127.0.0.1:8890 (本地,即该服务器所在电脑,云服务器用该地址或者云ip都可以)
logto = /home/logs/freshuwsgi.log
3) 整体启动项目服务器(修改代码后要重启nginx:命令 -- nginx -s reload):
/home/env/freshenv/bin/uwsgi --ini /home/conf/freshuwsgi.ini
查看用户请求时的输出日志:
tail -f freshuwsgi.log -- 输出指定文件的最后一行信息
网友评论