title: 一卡通v5系统安装部署手册 date: 2016-06-22 11:27:47 tags:

文件修改控制

修改日期版本修改内容修改人
2015-10-06v1.0建立夏凯祥
2016-06-22v1.1增加服务器环境配置要求等内容汤成
2016-10-28v1.2增加服务器 ulimit 配置要求汤成

部署环境

  • 系统拓扑图 网络拓扑图

  • 数据库

    数据库包括一卡通核心交易数据库(Oracle 11g)和缓存服务数据库(Redis)。交易数据库安装配置有专门DBA负责;缓存数据库由实施工程师负责安装配置,缓存服务器要求 4核CPU,16G 以上内存,500G 硬盘,一块千兆网卡。

    Redis 缓存服务安装采用 yum 从软件中心安装。

  • 应用服务器

    应用服务器提供一卡通服务门户、一卡通管理平台业务功能。一般需要部署两台服务器作为应用集群。服务器要求 4核CPU,8G 内存,200G硬盘,一块千兆网卡。操作系统为 CentOS 7OracleLinux 7 64 位。

  • API 服务器

    API 服务器提供一卡通平台业务服务API,提供给包括设备前置、第三方应用前置、支付宝微信等充值服务前置接入的 API 服务。至少部署两台服务器作为应用集群,现场需要根据实际负载情况考虑增加 API 服务器数量。服务器要求 4核CPU,8G 内存,200G硬盘,一块千兆网卡。操作系统为 CentOS 7OracleLinux 7 64 位。

  • nginx 代理服务器

    nginx 代理服务器提供了对应用服务、API服务的反向代理服务。从安全性的要求,需要提供一卡通外网访问地址,并且服务器需要启用 HTTPS 安全访问方式。推荐使用学校申请的 HTTPS 安全证书,如果环境不具备可以选择自行颁发不受信证书。

    服务器要求 2核CPU,4G 内存,200G硬盘,两块千兆网卡。操作系统为 CentOS 7OracleLinux 7 64 位。nginx 服务使用 yum 从软件中心安装。

    nginx 服务必须提供容错和负载功能,有两种部署方案:

    • CDN 域名解析
    • LVS + Keepalived 容错服务
  • 前置服务 前置服务包括消费前置、门禁前置、微信支付宝充值服务前置、圈存前置等等。前置服务需要根据现场使用情况进行配置,无特殊要求下,前置服务器配置:2核CPU,4G 内存,200G硬盘,一块千兆网卡,操作系统为 CentOS 7OracleLinux 7 64 位。

    消费前置- 消费前置可以部署两台实现容错。消费网关可以配置连接两台消费前置,网关会自动判断请求正常的消费前置。

服务器要求

所有的服务器必须按照下面要求进行配置。

  • 字符集

    要求所有服务器必须采用 UTF-8 字符集。

  • SELinux

    服务器需要关闭 SELinux 。修改 /etc/selinux/config 文件, 将SELINUX=enforcing改为SELINUX=disabled,然后重启服务器。 注意:需要仔细检查是否拼写正确,否则服务器将无法启动。

  • 系统参数 ulimit

    需要调整服务器 ulimit 限制参数, 可以修改 /etc/security/limits.conf 增加以下几行:

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

修改完成后需要重新登录服务器,然后通过 ulimit -a 命令检查配置,正确的配置如下, 只要注意检查 open files 和 max user processes 参数值即可。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62620
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 131072
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

安装说明

Redis 服务安装配置

redis 服务可以通过 yum 快捷安装:

$ yum install -y redis
$ systemctl enable redis.service
$ vi /etc/redis.conf # 修改 redis 配置
$ systemctl start redis.service
$ systemctl status redis.service # 检查服务状态
 redis.service - SYSV: Starts and stops the redis daemon.
   Loaded: loaded (/etc/rc.d/init.d/redis)
   Active: active (running) since  2016-06-22 14:31:02 CST; 15s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 31203 ExecStop=/etc/rc.d/init.d/redis stop (code=exited, status=0/SUCCESS)
  Process: 31205 ExecStart=/etc/rc.d/init.d/redis start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/redis.service
           ├─30562 /usr/bin/redis-server 127.0.0.1:6379
           └─31059 /usr/bin/redis-server 172.28.201.101:6379
$ redis-cli ping  # 验证服务是否正常,正常情况下会响应 PONG
PONG

redis 配置内容如下:

bind: host_ip  # host_ip 是服务器一卡通专网 IP
maxmemory: 4G  # 最大内存 4G

应用服务/API 服务安装配置

应用服务/API服务(以下简称服务)都是采用 Java 平台部署,需要先安装 JDK 7 环境和 Tomcat 7 应用服务器。安装过程请使用 root 用户进行操作。

JDK 7 可以通过 Oracle 官方网站下载,安装过程如下:

$ tar xvfz jdk-7u79-linux-x64.tar.gz -C /usr/local
$ mv /usr/local/jdk1.7.0_79 /usr/local/jdk7

打开配置文件:vim ~/.bash_profile ,在尾部添加下面内容,然后重新登录

export JAVA_HOME=/usr/java/jdk7
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export JAVA_ENV=-Dfile.encoding=UTF-8

为了简化配置,我们提供了标准配置好的 Tomcat 包,请通这里下载。下载后安装步骤如下:

$ tar xvfz apache-tomcat7-config.tar.gz -C /opt/tomcat

Tomcat 数据库连接配置需要通过加密配置,加密串可以通过密码管理服务或者请技术支持提供加密串。当获取加密配合后修改 conf/context.xml 文件。

启动、停止 Tomcat 服务方式如下:

$ cd /opt/tomcat/bin
$ ./startup.sh # 启动服务
$ ./shutdown.sh # 停止服务

nginx 代理服务器安装配置

nginx 代理服务安装步骤如下:

$ yum install -y nginx
$ systemctl enable nginx.service
$ vi /etc/nginx/nginx.conf
$ systemctl start nginx.service
$ systemctl status nginx.service
 nginx.service - Nginx Web Server
   Loaded: loaded (/etc/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since  2016-05-02 23:19:37 CST; 1 months 20 days ago
     Docs: http://nginx.org
 Main PID: 2607 (nginx)
   CGroup: /system.slice/nginx.service
           ├─2607 nginx: master process /usr/local/sbin/nginx
           └─2610 nginx: worker process

nginx.conf 配置模板如下,需要根据现场情况自行修改配置:

#user  nobody;
worker_processes  auto;

events {
    use epoll;
    worker_connections  1024;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    proxy_headers_hash_max_size 51200;
    proxy_headers_hash_bucket_size 6400;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $request_time "$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  65;

    gzip  on;

    upstream epay_balance {
      # 每个server表示一个服务地址
      ip_hash;
      server app1:8080;
      server app2:8080;
      keepalive 20;
    }

    upstream epayapi_balance {
      # 每个server表示一个服务地址
      server api1:8080 fail_timeout=30s;
      server api2:8080 fail_timeout=30s;
      keepalive 20;
    }

    # HTTPS server
    server {
        listen       8443 ssl;
        # 如果用户提供域名,请使用域名访问
        server_name  localhost;

        ssl_certificate      /etc/nginx/conf/server.crt;
        ssl_certificate_key  /etc/nginx/conf/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location = / {
          rewrite ^ /epay/ permanent;
        }
        rewrite ^/epayapi/services/api/(.*)$ /epay/api/$1 break;
        
        location /epay {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $http_x_forwarded_for;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://epay_balance;
            proxy_next_upstream;
            proxy_redirect http:// https://;
            proxy_connect_timeout 25s;
        }

        location /epayapi {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $http_x_forwarded_for;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://epayapi_balance;
            proxy_next_upstream;
            proxy_redirect http:// https://;
            proxy_connect_timeout 25s;
        }
    }
    match server_ok {
        status 200;
    }
}

数据库初始化

按照文件名顺序执行数据库初始化脚本

  • 0.create_tablespace.sql
  • 1.create_user.sql
  • 2.create_table_ecard.sql
  • 3.create_table_epay.sql
  • 4.create_view_ecard.sql
  • 5.create_procedure_epay.sql
  • 6.create_procedure_ecard.sql
  • 7.initdata_ecard.sql
  • 8.initdata_epay.sql
  • 9.update.sql

发布epay和epayapi

  • 发布epayapi

在服务器上安装好tomcat,上传epayapi的发布包,并解压生成epayapi文件夹。

正常启动后,打开浏览器输入http://ip:port/epayapi/services/common/getsystemversion(ip为部署服务器的ip,端口port为默认8080的端口)会返回主机名+"-version"字样。

  • 发布epay

epay的发布和epayapi差不多。首先上传epay的发布包到tomcat/webapps并解压。生成epay文件目录。 同样根据实际情况修改tomcatepay/conf下的 context.xml 文件配置。