Skip to content

Instantly share code, notes, and snippets.

View seaweedfs_owncloud.md

A quick write-up on SeaweedFS + OwnCloud

This guide aims to take a look at a distributed, scalable SeaweedFS as a backend storage for an OwnCloud server. Why not NextCloud? Because NextCloud's S3 connector is outdated and not maintained, and won't work with SeaweedFS. Both OwnCloud and NextCloud have the same support and the same plugins. The only concern anyone has is some weird split that happened between the two years ago. It's fine.

This was a giant pain in the ass, but eventually I got it working. This is how.

Filesystem/Hardware

All servers start from fresh, clean installs of Ubuntu 18.04.3

This guide will use three seperate boxes (one master/OwnCloud and two slaves). I'm assuming there's spare, unformatted disks attached to the slaves. If not, ignore or change the section on mounting to fit your needs.

View create_heroku_ruby_with_node.sh
heroku create
heroku addons:create heroku-postgresql:hobby-dev
git push heroku master
@gauravtiwari
gauravtiwari / index.js
Created Feb 19, 2017
Counter index initializer
View index.js
// Initialize the counter code when DOM is ready
import './style.sass';
import counter from './counter';
document.addEventListener('DOMContentLoaded', () => {
counter.initialize();
});
View style.sass
$grey: #f2f2f2
.counter-wrapper
max-width: 500px
margin: 100px auto
padding: 10px
border: 1px solid $grey
form
@gauravtiwari
gauravtiwari / counter.js
Created Feb 19, 2017
Counter entry file
View counter.js
// Require or import the counter module
import '../counter';
@gauravtiwari
gauravtiwari / index.js
Created Feb 19, 2017
Initialise counter on DOM ready
View index.js
// Initialize the counter code when DOM is ready
import counter from './counter';
document.addEventListener('DOMContentLoaded', () => {
counter.initialize();
});
@gauravtiwari
gauravtiwari / counter.js
Created Feb 19, 2017
A simple counter example using vanilla JS
View counter.js
// A simple counter example
// The setup will be more complicated in modern apps built using React
const incrementNode = document.getElementById('increment');
const decrementNode = document.getElementById('decrement');
const inputNode = document.getElementById('counter');
const counter = {
initialize() {
incrementNode.addEventListener('click', (event) => {
@gauravtiwari
gauravtiwari / production.js
Last active Feb 19, 2017
Production webpack config
View production.js
// Note: You must restart bin/webpack-watcher for changes to take effect
var webpack = require('webpack')
var merge = require('webpack-merge')
var sharedConfig = require('./shared.js')
module.exports = merge(sharedConfig.config, {
output: { filename: '[name]-[hash].js' },
@gauravtiwari
gauravtiwari / development.js
Created Feb 19, 2017
Development webpack config
View development.js
// Note: You must restart bin/webpack-watcher for changes to take effect
var webpack = require('webpack')
var merge = require('webpack-merge')
var sharedConfig = require('./shared.js')
module.exports = merge(sharedConfig.config, {
devtool: 'sourcemap',
@gauravtiwari
gauravtiwari / shared.js
Last active Feb 22, 2017
Shared webpack config
View shared.js
// Note: You must restart bin/webpack-watcher for changes to take effect
var path = require('path');
var glob = require('glob');
var extname = require('path-complete-extname');
var distPath = process.env.WEBPACK_DIST_PATH;
if (distPath === undefined) {
distPath = 'packs'
}