do some updates
This commit is contained in:
parent
ddf624cdb7
commit
6dcfb1856a
2
.sandstorm/Vagrantfile
vendored
2
.sandstorm/Vagrantfile
vendored
@ -16,7 +16,7 @@ end
|
|||||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||||
# Base on the Sandstorm snapshots of the official Debian 8 (jessie) box.
|
# Base on the Sandstorm snapshots of the official Debian 8 (jessie) box.
|
||||||
config.vm.box = "debian/contrib-stretch64"
|
config.vm.box = "debian/contrib-stretch64"
|
||||||
config.vm.box_version = "9.3.0"
|
config.vm.box_version = ">= 0"
|
||||||
|
|
||||||
if Vagrant.has_plugin?("vagrant-vbguest") then
|
if Vagrant.has_plugin?("vagrant-vbguest") then
|
||||||
# vagrant-vbguest is a Vagrant plugin that upgrades
|
# vagrant-vbguest is a Vagrant plugin that upgrades
|
||||||
|
@ -21,5 +21,5 @@ fi
|
|||||||
|
|
||||||
cd /opt/app
|
cd /opt/app
|
||||||
cp post-receive /var/git/.git/hooks
|
cp post-receive /var/git/.git/hooks
|
||||||
caddy &
|
|
||||||
NODE_ENV=production HOME=/tmp npm start
|
npm start
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -17,11 +17,11 @@ const pkgdef :Spk.PackageDefinition = (
|
|||||||
# This manifest is included in your app package to tell Sandstorm
|
# This manifest is included in your app package to tell Sandstorm
|
||||||
# about your app.
|
# about your app.
|
||||||
|
|
||||||
appTitle = (defaultText = "Hugo"),
|
appTitle = (defaultText = "Hugo (new)"),
|
||||||
|
|
||||||
appVersion = 3, # Increment this for every release.
|
appVersion = 4, # Increment this for every release.
|
||||||
|
|
||||||
appMarketingVersion = (defaultText = "0.20.7-sandstorm3"),
|
appMarketingVersion = (defaultText = "0.68.3-sandstorm3"),
|
||||||
# Human-readable representation of appVersion. Should match the way you
|
# Human-readable representation of appVersion. Should match the way you
|
||||||
# identify versions of your app in documentation and marketing.
|
# identify versions of your app in documentation and marketing.
|
||||||
|
|
||||||
@ -242,6 +242,9 @@ const myCommand :Spk.Manifest.Command = (
|
|||||||
# Note that this defines the *entire* environment seen by your app.
|
# Note that this defines the *entire* environment seen by your app.
|
||||||
(key = "PATH", value = "/usr/local/bin:/usr/bin:/bin"),
|
(key = "PATH", value = "/usr/local/bin:/usr/bin:/bin"),
|
||||||
(key = "SANDSTORM", value = "1"),
|
(key = "SANDSTORM", value = "1"),
|
||||||
|
(key = "HOME", value = "/var"),
|
||||||
|
(key = "NODE_ENV", value = "production"),
|
||||||
|
(key = "NODE_DEBUG", value = "fs"),
|
||||||
# Export SANDSTORM=1 into the environment, so that apps running within Sandstorm
|
# Export SANDSTORM=1 into the environment, so that apps running within Sandstorm
|
||||||
# can detect if $SANDSTORM="1" at runtime, switching UI and/or backend to use
|
# can detect if $SANDSTORM="1" at runtime, switching UI and/or backend to use
|
||||||
# the app's Sandstorm-specific integration code.
|
# the app's Sandstorm-specific integration code.
|
||||||
|
@ -5,35 +5,44 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
export HUGO_VERSION=0.68.3
|
||||||
|
export NODE_VERSION=10
|
||||||
|
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y git
|
apt-get install -y git strace
|
||||||
|
|
||||||
# First, get capnproto from master and install it to
|
# First, get capnproto from master and install it to
|
||||||
# /usr/local/bin. This requires a C++ compiler. We opt for clang
|
# /usr/local/bin. This requires a C++ compiler. We opt for gcc-6
|
||||||
# because that's what Sandstorm is typically compiled with.
|
# because that's what capnproto now requires.
|
||||||
if [ ! -e /usr/local/bin/capnp ] ; then
|
if [ ! -e /usr/local/bin/capnp ] ; then
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -q clang autoconf pkg-config libtool
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -q clang autoconf pkg-config libtool
|
||||||
cd /tmp
|
cd /tmp
|
||||||
if [ ! -e capnproto ]; then git clone https://github.com/sandstorm-io/capnproto; fi
|
if [ ! -e capnproto ]; then git clone https://github.com/capnproto/capnproto; fi
|
||||||
cd capnproto
|
cd capnproto
|
||||||
git checkout f73ac9f6667d7b87c395d23f3753dde63937cf00
|
#git checkout master
|
||||||
|
git checkout master
|
||||||
cd c++
|
cd c++
|
||||||
|
make clean || true
|
||||||
autoreconf -i
|
autoreconf -i
|
||||||
./configure
|
./configure
|
||||||
make -j2
|
make -j2
|
||||||
sudo make install
|
sudo make install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
rm /opt/app/sandstorm-integration/getPublicId || true
|
||||||
|
rm -Rf /opt/app/sandstorm-integration/tmp || true
|
||||||
|
|
||||||
# Second, compile the small C++ program within
|
# Second, compile the small C++ program within
|
||||||
# /opt/app/sandstorm-integration.
|
# /opt/app/sandstorm-integration.
|
||||||
if [ ! -e /opt/app/sandstorm-integration/getPublicId ] ; then
|
if [ ! -e /opt/app/sandstorm-integration/getPublicId ] ; then
|
||||||
pushd /opt/app/sandstorm-integration
|
pushd /opt/app/sandstorm-integration
|
||||||
|
make clean || true
|
||||||
make
|
make
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp /opt/app/sandstorm-integration/bin/getPublicId /usr/local/bin
|
cp /opt/app/sandstorm-integration/bin/getPublicId /usr/local/bin
|
||||||
|
|
||||||
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
|
curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo -E bash -
|
||||||
apt-get install -y nodejs
|
apt-get install -y nodejs
|
||||||
npm install -g yarn
|
npm install -g yarn
|
||||||
|
|
||||||
@ -41,16 +50,6 @@ apt-get install -y python-pip asciidoctor
|
|||||||
pip install pygments
|
pip install pygments
|
||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
wget https://github.com/gohugoio/hugo/releases/download/v0.49.2/hugo_0.49.2_Linux-64bit.deb -O hugo.deb
|
wget https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb -O hugo.deb
|
||||||
dpkg -i hugo.deb
|
dpkg -i hugo.deb
|
||||||
rm hugo.deb
|
rm hugo.deb
|
||||||
# cd /tmp
|
|
||||||
# wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz -O go.tar.gz
|
|
||||||
# tar xfz go.tar.gz
|
|
||||||
# mv go /usr/local
|
|
||||||
# rm go.tar.gz
|
|
||||||
wget "https://caddyserver.com/download/build?os=linux&arch=amd64&features=filemanager%2Chugo" -O /tmp/caddy.tar.gz
|
|
||||||
cd /tmp
|
|
||||||
tar xfz caddy.tar.gz
|
|
||||||
mv caddy /usr/local/bin
|
|
||||||
rm caddy.tar.gz
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
127.0.0.1:8001
|
127.0.0.1:8001 {
|
||||||
|
root /var/git
|
||||||
|
}
|
||||||
errors stderr
|
errors stderr
|
||||||
log stdout
|
log stdout
|
||||||
hugo /var/git {
|
hugo /var/git {
|
||||||
|
@ -44,8 +44,6 @@
|
|||||||
<render-template
|
<render-template
|
||||||
rpcId="gitPush"
|
rpcId="gitPush"
|
||||||
:template="'git remote add origin ' + this.gitUrl + '\ngit push -fu origin master'"/>
|
:template="'git remote add origin ' + this.gitUrl + '\ngit push -fu origin master'"/>
|
||||||
<h2>Admin Interface</h2>
|
|
||||||
<p>Simple site changes can be made directly in the included <a href="/admin/">administrative interface</a>.</p>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -48,7 +48,10 @@ namespace sandstorm {
|
|||||||
request.setId(sessionId);
|
request.setId(sessionId);
|
||||||
auto session = request.send().getContext().castAs<HackSessionContext>();
|
auto session = request.send().getContext().castAs<HackSessionContext>();
|
||||||
|
|
||||||
kj::Promise<void> promise = session.getPublicIdRequest().send().then([](auto result) {
|
kj::Promise<void> promise = session
|
||||||
|
.getPublicIdRequest()
|
||||||
|
.send()
|
||||||
|
.then([](capnp::Response<sandstorm::HackSessionContext::GetPublicIdResults>&& result) {
|
||||||
auto publicId = result.getPublicId();
|
auto publicId = result.getPublicId();
|
||||||
auto hostname = result.getHostname();
|
auto hostname = result.getHostname();
|
||||||
auto autoUrl = result.getAutoUrl();
|
auto autoUrl = result.getAutoUrl();
|
||||||
@ -73,3 +76,4 @@ namespace sandstorm {
|
|||||||
} // namespace sandstorm
|
} // namespace sandstorm
|
||||||
|
|
||||||
KJ_MAIN(sandstorm::GetPublicIdMain)
|
KJ_MAIN(sandstorm::GetPublicIdMain)
|
||||||
|
|
||||||
|
75
sandstorm-integration/getPublicId.zc++
Normal file
75
sandstorm-integration/getPublicId.zc++
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
// Sandstorm - Personal Cloud Sandbox
|
||||||
|
// Copyright (c) 2014 Sandstorm Development Group, Inc. and contributors
|
||||||
|
//
|
||||||
|
|
||||||
|
// Hack around stdlib bug with C++14.
|
||||||
|
#include <initializer_list> // force libstdc++ to include its config
|
||||||
|
#undef _GLIBCXX_HAVE_GETS // correct broken config
|
||||||
|
// End hack.
|
||||||
|
|
||||||
|
#include <kj/main.h>
|
||||||
|
#include <kj/debug.h>
|
||||||
|
#include <kj/async-io.h>
|
||||||
|
#include <kj/async-unix.h>
|
||||||
|
#include <kj/io.h>
|
||||||
|
#include <capnp/rpc-twoparty.h>
|
||||||
|
#include <capnp/rpc.capnp.h>
|
||||||
|
#include <capnp/ez-rpc.h>
|
||||||
|
#include <sandstorm/sandstorm-http-bridge.capnp.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <sandstorm/hack-session.capnp.h>
|
||||||
|
|
||||||
|
namespace sandstorm {
|
||||||
|
|
||||||
|
class GetPublicIdMain {
|
||||||
|
public:
|
||||||
|
GetPublicIdMain(kj::ProcessContext& context): context(context) { }
|
||||||
|
|
||||||
|
kj::MainFunc getMain() {
|
||||||
|
return kj::MainBuilder(context, "GetPublicId version: 0.0.2",
|
||||||
|
"Runs the getPublicId command from hack-session.capnp. "
|
||||||
|
"Outputs the return arguments as separate lines on stdout.")
|
||||||
|
.expectArg("<sessionId>", KJ_BIND_METHOD(*this, setSessionId))
|
||||||
|
.callAfterParsing(KJ_BIND_METHOD(*this, run))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
kj::MainBuilder::Validity setSessionId(kj::StringPtr id) {
|
||||||
|
sessionId = kj::heapString(id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
kj::MainBuilder::Validity run() {
|
||||||
|
capnp::EzRpcClient client("unix:/tmp/sandstorm-api");
|
||||||
|
SandstormHttpBridge::Client restorer = client.getMain<SandstormHttpBridge>();
|
||||||
|
|
||||||
|
auto request = restorer.getSessionContextRequest();
|
||||||
|
request.setId(sessionId);
|
||||||
|
auto session = request.send().getContext().castAs<HackSessionContext>();
|
||||||
|
|
||||||
|
kj::Promise<void> promise = session.getPublicIdRequest().send().then([](auto result) {
|
||||||
|
auto publicId = result.getPublicId();
|
||||||
|
auto hostname = result.getHostname();
|
||||||
|
auto autoUrl = result.getAutoUrl();
|
||||||
|
auto isDemoUser = result.getIsDemoUser();
|
||||||
|
kj::String msg = kj::str(publicId, "\n", hostname, "\n", autoUrl, "\n",
|
||||||
|
isDemoUser ? "true" : "false", "\n");
|
||||||
|
kj::FdOutputStream(STDOUT_FILENO).write(msg.begin(), msg.size());
|
||||||
|
}, [] (auto e) {
|
||||||
|
auto desc = e.getDescription();
|
||||||
|
kj::FdOutputStream(STDOUT_FILENO).write(desc.begin(), desc.size());
|
||||||
|
});
|
||||||
|
|
||||||
|
promise.wait(client.getWaitScope());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
kj::ProcessContext& context;
|
||||||
|
kj::String sessionId;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sandstorm
|
||||||
|
|
||||||
|
KJ_MAIN(sandstorm::GetPublicIdMain)
|
83
sandstorm-integration/getPublicId.zzzc++
Normal file
83
sandstorm-integration/getPublicId.zzzc++
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
// Sandstorm - Personal Cloud Sandbox
|
||||||
|
// Copyright (c) 2014 Sandstorm Development Group, Inc. and contributors
|
||||||
|
//
|
||||||
|
|
||||||
|
// Hack around stdlib bug with C++14.
|
||||||
|
#include <initializer_list> // force libstdc++ to include its config
|
||||||
|
#undef _GLIBCXX_HAVE_GETS // correct broken config
|
||||||
|
// End hack.
|
||||||
|
|
||||||
|
#include <kj/main.h>
|
||||||
|
#include <kj/debug.h>
|
||||||
|
#include <kj/async-io.h>
|
||||||
|
#include <kj/async-unix.h>
|
||||||
|
#include <kj/io.h>
|
||||||
|
#include <capnp/rpc-twoparty.h>
|
||||||
|
#include <capnp/rpc.capnp.h>
|
||||||
|
#include <capnp/ez-rpc.h>
|
||||||
|
#include <sandstorm/sandstorm-http-bridge.capnp.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <sandstorm/hack-session.capnp.h>
|
||||||
|
|
||||||
|
namespace sandstorm {
|
||||||
|
|
||||||
|
class GetPublicIdMain {
|
||||||
|
public:
|
||||||
|
GetPublicIdMain(kj::ProcessContext& context): context(context) { }
|
||||||
|
|
||||||
|
kj::MainFunc getMain() {
|
||||||
|
return kj::MainBuilder(context, "GetPublicId version: 0.0.2",
|
||||||
|
"Runs the getPublicId command from hack-session.capnp. "
|
||||||
|
"Returns the ID and the host name as two lines on stdout.")
|
||||||
|
.expectArg("<sessionId>", KJ_BIND_METHOD(*this, setSessionId))
|
||||||
|
.callAfterParsing(KJ_BIND_METHOD(*this, run))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
kj::MainBuilder::Validity setSessionId(kj::StringPtr id) {
|
||||||
|
sessionId = kj::heapString(id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
kj::MainBuilder::Validity run() {
|
||||||
|
capnp::EzRpcClient client("unix:/tmp/sandstorm-api");
|
||||||
|
SandstormHttpBridge::Client restorer = client.getMain<SandstormHttpBridge>();
|
||||||
|
|
||||||
|
auto request = restorer.getSessionContextRequest();
|
||||||
|
request.setId(sessionId);
|
||||||
|
auto session = request.send().getContext().castAs<HackSessionContext>();
|
||||||
|
|
||||||
|
kj::Promise<void> promise = session.getPublicIdRequest().send().then(
|
||||||
|
[](HackSessionContext::GetPublicIdResults::Reader result) {
|
||||||
|
auto publicId = result.getPublicId();
|
||||||
|
auto hostname = result.getHostname();
|
||||||
|
auto autoUrl = result.getAutoUrl();
|
||||||
|
kj::String msg =
|
||||||
|
kj::str(
|
||||||
|
"Your content has automatically been published at\n",
|
||||||
|
" ", autoUrl, "\n",
|
||||||
|
"You can show this content on a custom domain by adding the following\n"
|
||||||
|
"DNS records:\n"
|
||||||
|
" <host> IN CNAME ", hostname, "\n"
|
||||||
|
" sandstorm-www.<host> IN TXT ", publicId, "\n");
|
||||||
|
kj::FdOutputStream(STDOUT_FILENO).write(msg.begin(), msg.size());
|
||||||
|
}, [] (kj::Exception&& e) {
|
||||||
|
auto desc = e.getDescription();
|
||||||
|
kj::FdOutputStream(STDOUT_FILENO).write(desc.begin(), desc.size());
|
||||||
|
});
|
||||||
|
|
||||||
|
promise.wait(client.getWaitScope());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
kj::ProcessContext& context;
|
||||||
|
kj::String sessionId;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sandstorm
|
||||||
|
|
||||||
|
KJ_MAIN(sandstorm::GetPublicIdMain)
|
||||||
|
|
||||||
|
|
57
server.js
57
server.js
@ -1,9 +1,11 @@
|
|||||||
import Nuxt from "nuxt"
|
import Nuxt from "nuxt"
|
||||||
import logger from "morgan"
|
import logger from "morgan"
|
||||||
|
import fs from 'fs'
|
||||||
const exec = require("child_process").exec
|
const exec = require("child_process").exec
|
||||||
|
const execFile = require("child_process").execFile
|
||||||
import Express from "express"
|
import Express from "express"
|
||||||
import gitBackend from "git-http-backend"
|
import gitBackend from "git-http-backend"
|
||||||
import httpProxy from "http-proxy"
|
//import httpProxy from "http-proxy"
|
||||||
const spawn = require("child_process").spawn
|
const spawn = require("child_process").spawn
|
||||||
|
|
||||||
const app = new Express()
|
const app = new Express()
|
||||||
@ -17,17 +19,49 @@ app.set("port", port)
|
|||||||
|
|
||||||
app.get("/publicId", (req, res) => {
|
app.get("/publicId", (req, res) => {
|
||||||
const sessionId = req.headers["x-sandstorm-session-id"]
|
const sessionId = req.headers["x-sandstorm-session-id"]
|
||||||
exec(`getPublicId ${sessionId}`, (err, rv) => {
|
let allData = ""
|
||||||
if(err)
|
const file = `/var/publicid-${sessionId}`
|
||||||
return res.end(err)
|
|
||||||
const lines = rv.split("\n")
|
const handleResult = () => {
|
||||||
|
const lines = allData.split("\n")
|
||||||
const publicId = lines[0]
|
const publicId = lines[0]
|
||||||
const hostname = lines[1]
|
const hostname = lines[1]
|
||||||
const domain = publicId+"."+hostname
|
const domain = publicId+"."+hostname
|
||||||
const url = lines[2]
|
const url = lines[2]
|
||||||
const isDemo = lines[3] == "true"
|
const isDemo = lines[3] == "true"
|
||||||
res.json({publicId, hostname, domain, url, isDemo})
|
res.json({publicId, hostname, domain, url, isDemo})
|
||||||
})
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
allData = fs.readFileSync(file, 'utf8').toString()
|
||||||
|
} catch (e) {
|
||||||
|
// nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
const lines = allData.split("\n")
|
||||||
|
if (lines.length >= 4) {
|
||||||
|
handleResult()
|
||||||
|
} else {
|
||||||
|
const gpId = spawn('getPublicId', [sessionId])
|
||||||
|
allData = ""
|
||||||
|
|
||||||
|
gpId.stdout.on('data', (data) => {
|
||||||
|
fs.appendFileSync(file, data)
|
||||||
|
allData += data
|
||||||
|
})
|
||||||
|
|
||||||
|
gpId.on('error', (err) => {
|
||||||
|
return res.send(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
gpId.on('close', (code) => {
|
||||||
|
if (code !== 0) {
|
||||||
|
return res.send(code)
|
||||||
|
}
|
||||||
|
|
||||||
|
handleResult()
|
||||||
|
})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
app.use("/git", (req, res) => {
|
app.use("/git", (req, res) => {
|
||||||
@ -41,12 +75,12 @@ app.use("/git", (req, res) => {
|
|||||||
})).pipe(res)
|
})).pipe(res)
|
||||||
})
|
})
|
||||||
|
|
||||||
const proxy = httpProxy.createProxyServer({
|
//const proxy = httpProxy.createProxyServer({
|
||||||
target: "http://127.0.0.1:8001/admin/",
|
// target: "http://127.0.0.1:8001/admin/",
|
||||||
changeOrigin: true
|
// changeOrigin: true
|
||||||
})
|
//})
|
||||||
|
|
||||||
app.use("/admin/", (req, res) => proxy.web(req, res))
|
// app.use("/admin/", (req, res) => proxy.web(req, res))
|
||||||
|
|
||||||
// Import and Set Nuxt.js options
|
// Import and Set Nuxt.js options
|
||||||
let config = require("./nuxt.config.js")
|
let config = require("./nuxt.config.js")
|
||||||
@ -60,6 +94,7 @@ app.use(nuxt.render)
|
|||||||
if (config.dev) {
|
if (config.dev) {
|
||||||
nuxt.build()
|
nuxt.build()
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
|
console.log('whoa')
|
||||||
console.error(error) // eslint-disable-line no-console
|
console.error(error) // eslint-disable-line no-console
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user