当前位置:   article > 正文

AI项目环境搭建go+supervisor+openresty_newman go lib

newman go lib

 

API上线需要注意:

前台API 后台cms的API上线之前都需要编译release!!!!!!!!!!

 AI线上机器

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线上证书

  • beta、prew、prod证书一致

2.带宽问题(多大带宽:单机2M)

3.nginx路由问题

  • 前端cache

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

xx做镜像到xx

除了/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 -a

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/275192
推荐阅读
相关标签
  

闽ICP备14008679号