Skip to content

Commit

Permalink
test install
Browse files Browse the repository at this point in the history
  • Loading branch information
amark committed Apr 25, 2023
1 parent 9433e5c commit b79e5bb
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 27 deletions.
37 changes: 22 additions & 15 deletions examples/http.js
Original file line number Diff line number Diff line change
@@ -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;
}());
7 changes: 7 additions & 0 deletions examples/https.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

cd ~
git clone https://github.com/acmesh-official/acme.sh.git
bash ~/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"
41 changes: 29 additions & 12 deletions examples/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -12,24 +13,40 @@
# curl -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 curl 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 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`.
service relay stop >> /dev/null
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
service relay start
19 changes: 19 additions & 0 deletions examples/relay.service
Original file line number Diff line number Diff line change
@@ -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=
22 changes: 22 additions & 0 deletions examples/stats.html
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,27 @@
// tbd later
return chart;
}
;(function(){
if('https' != (''+location).slice(0,5) && "localhost" != location.hostname){
$('body').append("<button id='https'>click here to try generating https certs</button>");
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("<input id='email' placeholder='email'/>");
$('#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});
}, 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.
Expand All @@ -122,5 +143,6 @@
7. Watch out for get/put loops times, maybe indicating (5) issues?
*/
</script>
<script src="../gun.js"></script>
</body>
</html>
54 changes: 54 additions & 0 deletions lib/axe.js
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,60 @@ function start(root){
},1000);
}());

;(function(){
var cmd = {};
mesh.hear['service'] = function(msg, peer){
if(!require('fs').existsSync('/lib/systemd/system/relay.service')){
mesh.say({dam: '!', err: "Not serviced."});
return;
}
try{ (cmd[msg.try]||cmd.any)(msg, peer); }catch(err){ mesh.say({dam: '!', err: "service error: "+err}) }
}
cmd.https = function(msg, peer){ var run, log;
if(!(run = require('child_process').execSync)){ return }
if(!msg.email || !msg.domain){
mesh.say({dam: '!', err: 'Domain/email missing, use `location.hostname`!'});
return;
}
if(require('fs').existsSync(require('os').homedir()+'/cert.pem')){
mesh.say({dam: '!', err: 'Cert already exists.'});
return;
}
var path = require('path').resolve(__dirname, '../examples');
//log = run("bash "+path+"/https.sh", {env: {'EMAIL': msg.email, 'WEB': path, 'DOMAIN': msg.domain}});//, (err, stdout, stderr) => {
require('fs').writeFileSync('../email', msg.email);
log = run("../examples/https.sh", {env: {'EMAIL': msg.email, 'WEB': path, 'DOMAIN': msg.domain}});//, (err, stdout, stderr) => {
//log = JSON.stringify({err, stdout, stderr});
mesh.say({dam: '!', log: ''+log}, peer);
setTimeout(function(){ process.exit() },999);
//});
return;
// log = run('curl https://get.acme.sh | /bin/sh -s email='+msg.email);
// mesh.say({dam: '!', log: ''+log}, peer);
// log = run('~/.acme.sh/acme.sh --issue -d '+msg.domain+' -w '+path);
// mesh.say({dam: '!', log: ''+log}, peer);
// log = run('~/.acme.sh/acme.sh --install-cert -d '+msg.domain+' --key-file ~/key.pem --fullchain-file ~/cert.pem --reloadcmd "service relay force-reload"');
run("bash "+path+"/upgrade.sh", {
env: {
'EMAIL': msg.email,
'WEBROOT': path,
'DOMAIN': msg.domain
}}, (err, stdout, stderr) => {
log = JSON.stringify({err, stdout, stderr});
mesh.say({dam: '!', log: ''+log}, peer);
setTimeout(function(){ process.exit() },999);
});
}
cmd.update = function(msg, peer){ var run, log;
if(!(run = require('child_process').execSync)){ return }
log = run('../examples/install.sh', {env: {VERSION: msg.version||''}});
mesh.say({dam: '!', log: ''+log}, peer);
setTimeout(function(){ process.exit() },999);
}

cmd.any = function(){};
}());

;(function(){ // THIS IS THE MOB MODULE;
//return; // WORK IN PROGRESS, TEST FINALIZED, NEED TO MAKE STABLE.
/*
Expand Down

0 comments on commit b79e5bb

Please sign in to comment.