diff --git a/examples/http.js b/examples/http.js
index bed7cb9b2..fae4c1de5 100644
--- a/examples/http.js
+++ b/examples/http.js
@@ -1,27 +1,34 @@
;(function(){
var cluster = require('cluster');
if(cluster.isMaster){
- return cluster.fork() && cluster.on('exit', function(){ cluster.fork(); require('../lib/crashed'); });
+ return cluster.fork() && cluster.on('exit',function(){ cluster.fork(); require('../lib/crashed') });
}
- var fs = require('fs');
- var config = {
- port: process.env.OPENSHIFT_NODEJS_PORT || process.env.VCAP_APP_PORT || process.env.PORT || process.argv[2] || 8765,
- peers: process.env.PEERS && process.env.PEERS.split(',') || []
+ var fs = require('fs'), env = process.env;
+ var GUN = require('../'); // require('gun');
+ var opt = {
+ port: env.PORT || process.argv[2] || 8765,
+ peers: env.PEERS && env.PEERS.split(',') || []
};
- var Gun = require('../'); // require('gun')
- if(process.env.HTTPS_KEY){
- config.key = fs.readFileSync(process.env.HTTPS_KEY);
- config.cert = fs.readFileSync(process.env.HTTPS_CERT);
- config.server = require('https').createServer(config, Gun.serve(__dirname));
+ if(fs.existsSync((opt.home = require('os').homedir())+'/cert.pem')){
+ env.HTTPS_KEY = env.HTTPS_KEY || opt.home+'/key.pem';
+ env.HTTPS_CERT = env.HTTPS_CERT || opt.home+'/cert.pem';
+ }
+ if(env.HTTPS_KEY){
+ opt.port = 443;
+ opt.key = fs.readFileSync(env.HTTPS_KEY);
+ opt.cert = fs.readFileSync(env.HTTPS_CERT);
+ opt.server = require('https').createServer(opt, GUN.serve(__dirname));
+ require('http').createServer(function(req, res){
+ res.writeHead(301, {"Location": "https://"+req.headers['host']+req.url });
+ res.end();
+ }).listen(80);
} else {
- config.server = require('http').createServer(Gun.serve(__dirname));
+ opt.server = require('http').createServer(GUN.serve(__dirname));
}
- var gun = Gun({web: config.server.listen(config.port), peers: config.peers});
-
- console.log('Relay peer started on port ' + config.port + ' with /gun');
-
+ var gun = GUN({web: opt.server.listen(opt.port), peers: opt.peers});
+ console.log('Relay peer started on port ' + opt.port + ' with /gun');
module.exports = gun;
}());
\ No newline at end of file
diff --git a/examples/https.sh b/examples/https.sh
new file mode 100644
index 000000000..29677875f
--- /dev/null
+++ b/examples/https.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+cd ~
+git clone https://github.com/acmesh-official/acme.sh.git
+cd ~/acme.sh
+./acme.sh --install -m $EMAIL
+
+bash ~/acme.sh/acme.sh --issue -d $DOMAIN -w $WEB
+bash ~/acme.sh/acme.sh --install-cert -d $DOMAIN --key-file ~/key.pem --fullchain-file ~/cert.pem --reloadcmd "service relay force-reload"
\ No newline at end of file
diff --git a/examples/install.sh b/examples/install.sh
index 79cb2b771..4ec20dd7c 100644
--- a/examples/install.sh
+++ b/examples/install.sh
@@ -3,6 +3,7 @@
# README
# This will install nodejs and npm on your system,
# should work on most places other than Windows.
+# For it to run on boot as a server, a recent OS is needed.
# Set any environment variables before you run this,
# like `export RAD=false` to disable storage, or
# pass file paths of `HTTPS_CERT` & `HTTPS_KEY`, etc.
@@ -10,26 +11,43 @@
# If you are on Windows, http://nodejs.org/download/ has
# an installer that will automatically do it for you.
# curl -o- https://raw.githubusercontent.com/amark/gun/master/examples/install.sh | bash
+# wget -O - https://raw.githubusercontent.com/amark/gun/master/examples/install.sh | bash
#debian/ubuntu
-su -
+cd ~
apt-get install sudo -y
sudo apt-get update -y
-sudo apt-get install curl git git-core screen -y
+sudo apt-get install curl git git-core systemd -y
+sudo apt-get install systemctl -y
#fedora/openSUSE
sudo yum check-update -y
-sudo yum install curl git git-core screen -y
+sudo yum install curl git git-core systemd -y
+sudo yum install systemctl -y
+
+#screen -S install # You can safely CTRL+A+D to escape without stopping the process. `screen -R install` to resume. Stop all with `killall screen`. Note: May need to `sudo apt-get install screen`
# install nodejs
-git clone http://github.com/isaacs/nave.git
-sudo ./nave/nave.sh usemain stable
-# If you just want nodejs and npm but not gun, stop here.
+git clone https://github.com/isaacs/nave.git
+./nave/nave.sh usemain stable
-npm install gun
-cd ./node_modules/gun
+# If you just want nodejs and npm but not gun, stop here.
+#npm install gun@latest
+#cd ./node_modules/gun
+mkdir node_modules
+git clone https://github.com/amark/gun.git
+cd gun
+git checkout .
+git pull
+git checkout master
+git checkout $VERSION
+git pull
npm install .
-# to start the gun examples:
-screen -S relay
-sudo npm start 80 # change `80` to `443` for https or `8765` for development purposes.
-# You can now safely CTRL+A+D to escape without stopping the peer. To stop `killall screen` or `killall node`.
+cp ./examples/relay.service /lib/systemd/system/relay.service
+echo $PWD >> /lib/systemd/system/relay.service
+echo "fs.file-max = 999999" >> /etc/sysctl.conf
+ulimit -u unlimited
+sysctl -p /etc/sysctl.conf
+systemctl daemon-reload
+systemctl enable relay
+systemctl restart relay
\ No newline at end of file
diff --git a/examples/relay.service b/examples/relay.service
new file mode 100644
index 000000000..43d2f5698
--- /dev/null
+++ b/examples/relay.service
@@ -0,0 +1,19 @@
+[Unit]
+Description=GUN relay
+Documentation=https://gun.eco
+After=network.target
+
+[Install]
+WantedBy=multi-user.target
+
+[Service]
+Environment=PATH=/usr/bin:/usr/local/bin
+LimitNOFILE=infinity
+LimitNPROC=infinity
+LimitCORE=infinity
+StartLimitBurst=999999
+StartLimitIntervalSec=999999
+Restart=always
+ExecStart=node examples/http.js 80
+# Environment=NODE_ENV=production
+WorkingDirectory=
\ No newline at end of file
diff --git a/examples/stats.html b/examples/stats.html
index fa8552408..171478fe4 100644
--- a/examples/stats.html
+++ b/examples/stats.html
@@ -112,6 +112,31 @@
// tbd later
return chart;
}
+ ;(function(){
+ if('https' != (''+location).slice(0,5) && "localhost" != location.hostname){
+ $('body').append("");
+ if(/^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/.test(location.hostname)){
+ $('#https').text("Link this IP address to a Domain by adding an `A Record` to your DNS settings that point to `"+ location.hostname +"` (we recommend the `name/host` be any subdomain you want, like `relay`, but if you want the root domain itself to directly point here use `*`). Then come back here on the domain & click this button to generate HTTPS certificates.");
+ return;
+ }
+ $('body').append("");
+ $('#https').on('click', function(){
+ $(this).text("look at console.log for errors, if none, try https");
+ var gun = GUN(location.origin + '/gun');
+ if(!$('#email').val()){
+ $(this).text("email necessary for certs! Type it in & click here again.");
+ return;
+ }
+ setTimeout(function(){
+ gun._.opt.mesh.say({dam: 'service', try: 'https', email: $('#email').val(), domain: location.hostname});
+ setTimeout(function(){
+ if(gun._.opt.mesh.near){ return }
+ $('#https').text("It might have worked! try HTTPS!");
+ }, 9000);
+ }, 999);
+ });
+ }
+ }());
/*
Notes to Self about Debugging:
1. Read Disks can spike up to 1min, I suspect other operations are blocking it from resolving as fast as it otherwise would.
@@ -123,5 +148,6 @@
7. Watch out for get/put loops times, maybe indicating (5) issues?
*/
+