赞
踩
API上线需要注意:
前台API 后台cms的API上线之前都需要编译release!!!!!!!!!!
Charles抓取mac浏览器的包,需要勾选Charles图标的macOS Proxy
RD开发了部署系统:瓦力部署。
特点:
1.点击按钮,一键部署,不再需要RD先编译打包,配置文件也不再需要RD告知QA修改。 m
2.部署速度很快速,相对于jekins
3.支持golang,php,java等。版本管理支持git,svn。
4.支持golang,php,java。版本管理支持git,svn。
5.支持用户,角色等权限管理。
6.历史上线单等查看。
1.build账号、sudo权限账号申请、FE线上权限申请–Done
sudo adduser xx
sudo passwd xx
sudo su build
sudo visudo
sudo vim /etc/sudoers
sudo su build
sudo -i
1、useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码。
2、adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码,更加友好。
userdel 删除用户,
userdel只能删除用户,并不会删除相关的目录文件。userdel -r 可以删除用户及相关目录
添加用户名,赋sudo的权限
sudo adduser xx
sudo usermod -G sudo xx
2.线上机器列表
线上正式服务器:xx
Host xx-AI02(线上热备机):xx
建立目录
后端: /data/www/aiclassapi
前端:/data/www/aiclassfe
***在root用户下修改所有当前文件及其子文件的所属的组和所在用户
sudo chmod -R build:build aiclassapi
sudo chmod -R build:build aiclassfe
项目日志目录 /data/logs/aiclass/frontlistener(appconf.toml配置的日志目录)
supervisor日志目录/data/logs/supervisor
nginx日志目录/data/logs/nginx
***对整个logs赋777权限(-R 包括下一级的子文件夹,以及子文件夹中的子文件夹,余此类推)
sudo chmod -R 777 logs/
注:项目发布只能用build权限,日志需要有写的权限
3.sudo vim /etc/sudoers 或者sudo visudo 注释 #Defaults ,部署代码之前先要执行此步骤,否则部署不成功。
Jenkins部署线上环境代码,项目目录同2
Jenkins脚本如下
#移动二进制文件aiclass_frontlistener到项目根目录
ssh -i $keyfile_path $ssh_user@$server "sudo \cp -rf ${dst}/build/frontlistener/release/aiclass_frontlistener ${dst}/aiclass_frontlistener"
#重启supervisor
4.手动上传appconf.toml到部署目录(sudo rz),配置好其中的端口号,mysql、redis等环境,mysql需要和后台的一致,DBA配置IP
(TODO:查询连从库,主库连接数500+,目前所有线上没有超过300的)
修改好后,备份到个人目录 sudo cp appconf.toml ~
5.手动拷贝libsigcheck.so文件到 /usr/lib/libsigcheck.so
6.配置supervisor,新建实例配置
关于supervisor可以参考博客 https://blog.csdn.net/xyang81/article/details/51555473
sudo vim /etc/supervisord.d/aiclass_frontlistener.conf
文件内容
[program:aiclass_frontlistener_prod]
command=/data/www/aiclassapi/aiclass_frontlistener #线上二进制文件
directory=/data/www/aiclassapi #线上项目部署目录,go编译出来的二进制文件路径
user=build
autostart=true
autorestart=true
stdout_logfile=/data/logs/supervisor/aiclass_frontlistener_out.log
stderr_logfile=/data/logs/supervisor/aiclass_frontlistener_err.log
7.安装redis mysql
sudo yum install redis
校验是否成功:redis-cli -h xx
***当为默认端口号时不需要输入-p 6379
sudo yum install mysql
校验是否成功:mysql -h xx -P 3309 -uwriteronly -p
8.修改toml配置,log、DB(主库写,从库读)、redis
sudo vim /data/www/aiclassapi/appconf.toml
9.上线后需要先手动启动supervisor,因为Jenkins脚本写的是restart
sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl status
sudo supervisorctl start aiclass_frontlistener_prod
sudo netstat -nap|grep 8088
sudo supervisorctl status
10.nginx配置前后端,线上nginx的默认配置在sudo vim /usr/local/nginx/conf/nginx.conf
需要增加如下配置
#user nobody;
user build;
worker_processes 2;
include /data/ngx.conf/*.conf;
***nginx 的配置很灵活,支持include配置文件,如果域名都配置到nginx.conf. 这个文件就会比较乱, 也影响管理和阅读.所以直接拆分出来,分成不同的配置文件
***前端请求后端接口,如果为http请求,访问80 ,若为https访问443
备份到个人目录 sudo cp -r ngx.conf ~ 含有ng配置,ssl证书
11.php安装
参考博客 https://www.cnblogs.com/gouge/p/7093649.html
此次安装步骤详见个人wiki AI直播课服务器编译安装php7
问题列表:
1.https线上证书
2.带宽问题(多大带宽:单机2M)
3.nginx路由问题
4.nginx反向代理机器
5.Jenkins脚本start stop源码
6.脚本不能拷贝
周知:
1.测试环境为Request URL:https://xx/teacher/login
预览环境修改为 Request URL:https://xx.xx.cn/api/teacher/login
线上环境修改为 Request URL:https://xx.xx.cn/api/teacher/login
需要加/api/
2.线上aiclass库用户数据导入
线上supervisor的conf配置文件在 /etc/supervisord.d
总结:线上服务器重启后
重启supervisor --服务端
sudo supervisord -c /etc/supervisord.conf
supervisord相当于服务端
supervisorctl相当于客户端
sudo supervisorctl status
sudo supervisorctl reload
sudo supervisorctl start
sudo supervisorctl stop
sudo supervisorctl restart
sudo supervisorctl status
sudo netstat -anp | grep 8088
重启nginx
ps -ef|grep nginx
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
查看sudo权限的用户
sudo vim /etc/sudoers
或者sudo visudo
#Defaults requiretty 需要注释掉 否则的话,无法通过shell远程执行一些命令,例如cp会提示
you must have a tty to run sudo
热备机aipro2
除了/data目录,其他环境都
sudo mkdir www/aiclassapi -p
sudo mkdir aiclassfe
sudo chown -R build:build *
sudo mkdir -p logs/aiclass/frontlistener
sudo mkdir supervisor
sudo mkdir nginx
sudo chmod -R 777 logs
sudo rz 上传appconf.toml到/data/www/aiclassapi
sudo mkdir ngx.conf 上传正式环境ng配置
sudo mkdir ssl 上传https证书
sudo cp -r ngx.conf ~
重启ng supervisor
sudo vim /etc/hosts
添加配置127.0.0.1 aiclass.xx.cn
测试
curl aiclass.xx.cn
curl aiclass.xx.cn/api/teacher/login
==============================================================
aiqa测试环境supervisor
Jenkins不好用,手动拉代码
cd /data/www
sudo git clone https://gitee.com/knowboxapi/aiclass.git
sudo git branch websocket/1.0.0 remotes/origin/websocket/1.0.0
sudo git checkout websocket/1.0.0
sudo git pull origin websocket/1.0.0
sudo mv aiclass aiClassApi
sudo chgrp -R build aiClassApi
sudo chown -R build:build aiClassApi
启动supervisor
which supervisord 查找服务
sudo find / -name supervisord.conf 查找配置文件
sudo netstat -anp | grep 8088 先查看端口
sudo /usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf --服务端
客户端--
sudo supervisorctl status
sudo supervisorctl reload
sudo netstat -anp | grep 8088
sudo supervisorctl status
测试
curl 127.0.0.1:8088/student/login
{"code":400,"msg":"参数错误","requestId":"205f1070a6add349","data":{}}xx@xx:/data/www/aiClassApi$
测试环境
nginx重启
sudo /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf -t
sudo /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf -s reload
AI直播课一期守护进程配置
sudo vim /etc/supervisor/supervisor.d/aiclass.conf
1 [program:aiclass_frontlistener_test]
2 command=/data/www/aiclassapi/aiclass_frontlistener
3 directory=/data/www/aiclassapi
4 user=build
5 autostart=true
6 autorestart=true
7 stdout_logfile=/data/logs/supervisor/aiclass_frontlistener_dev_out.log
8 stderr_logfile=/data/logs/supervisor/aiclass_frontlistener_dev_err.log
里面的路径也需要改,文件名称全小写
<repeat step>改完配置需要杀掉supervisors
sudo ps -ef|grep supervisor
sudo kill -9 23855
sudo ps -ef|grep supervisor
sudo /usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf 初次启动supervisor服务
或者sudo /usr/bin/python /usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf
sudo supervisorctl status
===========================================================================
测试环境cms后台supervisor配置(与前端aiclass不在同一个文件配置)
sudo vim /etc/supervisor/supervisor.d/aiclass.conf
[program:aiclass_backcms]
command=/data/www/aiCms/build/backcms/test/aiclass_backcms
directory=/data/www/aiCms/build/backcms/test
user=build
autostart=true
autorestart=true
stdout_logfile=/data/logs/supervisor/aiclass_backcms_dev_out.log
stderr_logfile=/data/logs/supervisor/aiclass_backcms_dev_err.log
======保存后
重复执行<repeat step>就好了
如遇此报错Unlinking stale socket /var/run/supervisor.sock
执行sudo unlink /var/run/supervisor.sock
如果sudo supervisorctl status遇到FATAL BACKOFF错误,注:STARTING为正在启动RUNNING
解决办法:
需要对应进程的端口号,前台API=== aiclass_frontlistener 端口号为8088,后台API=== aiclass_backcms 端口号8360,FE热更新===aiclass_update 端口号为5050, 运营后台===aiclass_backoperation 端口号为8370
注:进程名命名方式,最好与二进制文件保持一致,grep某个进程时是查询的conf文件command下任一文件名
sudo netstat -nap | grep 8088
sudo netstat -nap | grep 8360
sudo netstat -nap | grep 5050
ps -ef|grep oracle 查找oracle进程号
杀掉进程sudo kill -9 13130 13121
杀掉进程后,再启动/停止某个对应的服务
可以先查看进程状态,确认服务没起起来sudo supervisorctl status
sudo supervisorctl start oracle
sudo supervisorctl start aiclass_backcms
sudo supervisorctl start aiclass_frontlistener_test
启动/停止所有服务
sudo supervisorctl status
sudo supervisorctl stop all
sudo supervisorctl start all
测试环境学生、老师端URL
https://xx.xx.cn/dist/student.html#/login
https://xx.xx.cn/dist/teacher.html#/login
cd /tmp/aiclass/crontab
awk '{print $0}' *
awk '{print $0"\n"}' *
curl members.3322.org/dyndns/getip
grep check ~/video.log | sed 's/^.*list: //p' | awk -F',' '{for(i=1;i<=NF;i++){print $i}}' | wc -l
预览环境supervisor文件位置
/etc/supervisor/conf.d
RD FE开发提测规范
1>分支名如果叫A,如果A上线后有BUG,RD要重新发提测邮件,分支名叫hotfix_A
2>A上线后,下次新项目提测项目不能再叫A了,可以叫 B
换项目或者新需求或者修改bug都应该用新分支,避免多个人合代码但本地又有老项目,避免弄错
3>分支名命名规范:项目名+需求版本(三位)
du -h filename
iterm2分屏快捷键
command+D 左右窗口
command+shift+D 上下窗口
command+W 关闭窗口
command+T 新开窗口
============================
由于Jenkins脚本有时候不生效,虽然显示成功,但是二进制文件没有更新(项目根目录下,二进制文件部署时间错误)--原因:Jenkins有2套脚本,使用的NewMan脚本没有对go服务单独配置路径拷贝,因此没生效
查看二进制文件版本号命令
md5sum /data/www/aiclassapi/aiclass_frontlistener
线上nginx用户执行权限配置
vim /usr/local/nginx/conf/nginx.conf
如果nginx配置为build用户,那logs的目录需要为build权限755,或者root权限777 --看项目运行时是什么用户运行的
nginx子进程运行用户为build,主进程为root
若该supervisor起不起来,可以找到此查看进程号,杀掉进程,重新启动
./aiclass_frontlistener
sudo lsof -i:8089
sudo kill -9 30609
sudo lsof -i:8089
sudo supervisorctl status
sudo supervisorctl start aiclass_frontlistener1
或者
ps -ef|grep aiclassapi1|grep -v grep
根据主进程号查找端口
sudo netstat -nap|grep 25072
(supervisor的conf文件下command)
因为/etc/supervisor/supervisor.d/aiclass_frontlistener1.conf下的
command=/data/www/aiclassapi1/aiclass_frontlistener
测试环境
把之前的nginx服务停掉,走openresty路径
sudo /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf -s stop
ps -ef|grep nginx
sudo /usr/local/openresty/bin/openresty -c /usr/local/openresty/nginx/conf/nginx.conf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。