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

AI项目环境搭建go+supervisor+openresty相关推荐

  1. 美多后台管理和项目环境搭建

    美多后台管理 Django框架已经提供了一个Admin管理后台,但是Admin的本身的页面可修改的页面布局效果比较少,无法满足公司定制页面需求,这时候就需要独立开发一套后台管理系统,满足公司对后台数据 ...

  2. linux基本项目环境搭建

    文章目录 linux基本项目环境搭建 java环境搭建 获取java源码包 解压 配置环境变量 使配置文件生效 验证 nginx安装 下载(java也可用此方法下载) 解压 配置(configure) ...

  3. 企业实战(2) 项目环境搭建之Tomcat部署

    前言: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说, ...

  4. Vue项目实战之人力资源平台系统(一)框架介绍及项目环境搭建

    前言 目录 前言 一.vue-element-admin简介 二.项目环境搭建 2.1 nodejs环境 2.2 git版本控制 2.3 vscode编辑器 三.拉取vue-element-admin ...

  5. 云服务器部署项目环境搭建

    云服务器部署项目环境搭建 这里以阿里云为例: 一.安装JavaJDK 指令: yum -y install java-1.8.0-openjdk* 二.下载部署TomCat 去TomCat官网下载:T ...

  6. django项目环境搭建

    项目环境搭建 在github上创建项目 官网: https://github.com/ 点击new 新建项目 公钥绑定 使用 git clone 项目到本地 一.在码云平台创建项目 版本控制的种类: ...

  7. 代驾APP_第一章_项目环境搭建_第一节

    代驾APP_第一章_项目环境搭建 文章目录 代驾APP_第一章_项目环境搭建 1-1 创建根项目 一.创建SpringBoot项目 二.覆盖pom.xml文件 1-2 创建根项目 一.创建公共模块 二 ...

  8. 代驾APP_第一章_项目环境搭建_第二节

    代驾APP_第一章_项目环境搭建_第二节 文章目录 代驾APP_第一章_项目环境搭建_第二节 1-11 创建bff-driver服务 一.创建项目 二.配置pom.xml文件 三.编写YML配置文件 ...

  9. vue项目ide(vue项目环境搭建)

    一.先介绍一下我接下来要做的项目 项目:ide可视化工具 技术应用: Vue2.0(js框架):Vue.js - 渐进式 JavaScript 框架 | Vue.js ElementUi(饿了吗ui框 ...

最新文章

  1. Centos6 64位系统安装VNCServer
  2. python是基于什么语言开发-python是哪个国家的人开发的语言
  3. macOS下加载动态库dylib报code signature invalid错误的解决办法
  4. 基于linux使用mysql二进制包安装mysql
  5. 16款新品发布,数据揭秘小米MIX荣归背后逻辑
  6. Python中的sort()方法使用基础
  7. php RabbitMQ使用
  8. 扩展控件--NumberTextBox
  9. DM8168芯片级资源
  10. CSS样式之内容居中方法
  11. 一般处理程序页ashx 序列化 Json数组
  12. signature=d522a0024e7d20dbfee94b566a5dfed5,End-to-end (e2e) application packet flow visibility
  13. php 获取 年月日时分秒_JS获取年月日时分秒的方法分析
  14. [数论] 快速傅里叶变换FFT
  15. 史上最强三千六百道脑筋急转弯(5)
  16. mysql里面的打钩框是什么东西_jquery 如何对checkbox打勾,取消打勾,打勾判断呢?...
  17. ELK学习遇到的问题3--ERROR pipeline/output.go:100 Failed to connect to backoff(elasticsearch..
  18. Cocoapods:podspec与使用过程中遇到的问题
  19. 如何压缩ppt文件大小?
  20. Html 层级 透明度 背景图片

热门文章

  1. win10 caffe安装,mnist训练,测试
  2. 上海 -》 张家界 旅行 计划10.1
  3. 日志收集之--将Kafka数据导入elasticsearch
  4. AndroidUI和交互整理集合
  5. 《一切都是最好的安排》之感想
  6. 矩阵方程的计算求解(Matlab实现)
  7. 参加口碑最好的广州传智播客Java就业培训班吧
  8. H5案例分享:jquery.qrcode.js生成简易二维码
  9. xml 硕正报表_硕正控件学习记录
  10. 安卓APP自动更新实现