CallerBackend

CallerBackend is a backend for CallerInfo, based on python-eve and mongodb

Stars
16

mongodb python-eve leancloud

ubuntu 16.04 64 bit

apt-get update
apt-get upgrade -y
apt-get install -y sudo curl wget zip unzip vim virtualenv apache2-utils

mongodb

https://docs.mongodb.com/manual/administration/install-on-linux/

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org

systemctl start mongod
systemctl enable mongod

python-eve

python-eve /opt/eve

mkdir -p /opt/eve && cd /opt/eve
virtualenv -p python3 venv
source venv/bin/activate
pip install eve
deactivate

eve app http://python-eve.org/quickstart.html

cd /opt/eve

vi app.py
from eve import Eve
from flask import current_app as app


test = {
    'allow_unknown': True,
    'resource_methods': ['GET', 'POST']
}

config = {
    'MONGO_HOST': 'localhost',
    'MONGO_PORT': 27017,
    'MONGO_DBNAME': 'test',
    'URL_PREFIX': 'api',
    'API_VERSION': 'v1',
    'DEBUG': False,
    'DOMAIN': {'test': test}
}


app = Eve(settings=config)
app.run()

HMAC-SHA1 , /opt/eve

/opt/eve/venv/bin/python app.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

systemd

vi /etc/systemd/system/eve.service
[Service]
ExecStart=/opt/eve/venv/bin/python /opt/eve/app.py
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=eve
User=nobody
Group=nogroup
#Environment=
[Install]
WantedBy=multi-user.target

eve

systemctl start eve
systemctl enable eve

journalctl -u eve

adminMongo web

nodejs https://nodejs.org/en/download/package-manager/

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

adminMongo, https://github.com/mrvautin/adminMongo

mkdir -p /opt/adminMongo && cd /opt/adminMongo
npm i [email protected]

config/app.json

mkdir -p /opt/adminMongo/config
vi /opt/adminMongo/config/app.json
{
    "app": {
        "host": "127.0.0.1",
        "port": 18080,
        "password": "admin",
        "locale": "en",
        "context": "mongo",
        "monitoring": true
    }
}

adminMongo

/usr/bin/node /opt/adminMongo/app.js
adminMongo listening on host: http://127.0.0.1:18080/mongo

systemd

vi /etc/systemd/system/admin-mongo.service
[Service]
ExecStart=/usr/bin/node /opt/adminMongo/app.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=admin-mongo
User=nobody
Group=nogroup
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
chown -R nobody:nogroup /opt/adminMongo
systemctl start admin-mongo
systemctl enable admin-mongo

journalctl -u admin-mongo

mongo-express web

https://github.com/mongo-express/mongo-express

mkdir -p /opt/mongo-express && cd /opt/mongo-express
npm install mongo-express
vi /opt/mongo-express/node_modules/mongo-express/config.default.js
  mongo = {
    db: 'test',
    host:     'localhost',
    password: '',
    port:     27017,
    ssl:      false,
    url:      'mongodb://localhost:27017',
    username: '',
  };
    //baseUrl: process.env.ME_CONFIG_SITE_BASEURL || '/',
    baseUrl: '/express/',
  //useBasicAuth: process.env.ME_CONFIG_BASICAUTH_USERNAME !== '',
  useBasicAuth: false,

  basicAuth: {
    username: process.env.ME_CONFIG_BASICAUTH_USERNAME || '',
    password: process.env.ME_CONFIG_BASICAUTH_PASSWORD || '',
  },

mongo-express

/usr/bin/node /opt/mongo-express/node_modules/mongo-express/app.js
No custom config.js found, loading config.default.js
Welcome to mongo-express
------------------------


Mongo Express server listening at http://localhost:8081
Database connected
Connecting to test...
Database test connected

systemd

vi /etc/systemd/system/mongo-express.service
[Service]
ExecStart=/usr/bin/node /opt/mongo-express/node_modules/mongo-express/app.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=mongo-express
User=nobody
Group=nogroup
#Environment=
[Install]
WantedBy=multi-user.target
chown -R nobody:nogroup /opt/mongo-express
systemctl start mongo-express
systemctl enable mongo-express

journalctl -u mongo-express

nginx https

apt install nginx-extras
vi /etc/nginx/sites-available/backend

backend.example.org

server {
    listen       80;
    listen       443 ssl http2;
    server_name  backend.example.org;
    
    ssl_certificate le/certs/backend.example.org/fullchain.pem;
    ssl_certificate_key le/certs/backend.example.org/privkey.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    charset utf-8;
    access_log  /var/log/nginx/$host.access.log;
    client_max_body_size 20M;
    root   /var/www/;
    index  index.html index.htm;
    if ($ssl_protocol = "") {
        return 301 https://$http_host$request_uri;
    }
    location / {
        try_files $uri $uri/ =404;
    }
    location /express {
        auth_basic "Authentication required";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://localhost:8081;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location /api/v1/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://localhost:5000/api/v1/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }
    location /mongo {
        auth_basic "Authentication required";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://localhost:18080/mongo;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
cd /etc/nginx/sites-enabled/
ln -s ../sites-available/backend

.htpasswd http basic auth web HTTPS

cd /etc/nginx/
htpasswd  -c .htpasswd YOUR_HTTP_USER

nginx -t

nginx

systemctl start nginx
systemctl enable nginx

https://backend.example.org/api/v1 eve api

https://backend.example.org/mongo adminMongo web

https://backend.example.org/express mongo-express web

eve api xml postman

HMAC-SHA1 , Android okhttp hmac post

phone-number/src/main/java/org/xdty/phone/number/net/cloud/CloudHandler.java#L95


api app.py#L15 accounts collection

{
    "userid": "6Yd5MtkpdSZcJrtEtk",
    "secret_key": "7dBvS2Ow3RSIr9gdAmLDCRD8EI1dbMecGTOJ"
}

python-eve http://python-eve.org/quickstart.html

200m cpu