so you've decided to start self-hosting
some stuff at home you've been moving
services out of the public cloud and
slowly moving them into your self-hosted
private cloud
and while doing all of this you've been
searching for a productivity platform
one that you can use to collaborate with
others and one that you can use to share
some files
[Music]
hey welcome back so i'm techno tim and
today we're going to talk about
self-hosting a productivity platform
with nexcloud as a quick reminder i
stream every tuesday thursday and
saturday so if you want to continue the
conversation about self-hosting some
services there
we can so let's talk about self-hosting
nexcloud
so what is nexcloud well nexcloud is a
productivity platform that you can
self-host
it puts you in control of your data and
how you want them to be shared
you can share and collaborate documents
send and receive email
manage your calendar and even do some
video chatting if you'd like
and it's able to do all of this while
keeping that data on your network
in your control and in theory this
platform could be used to replace
many of the services that you use in the
public cloud things like google drive
google docs hangouts slack or any other
chat client
and even something like dropbox and
while some of these features are
core to the product the others come in
the form of a third-party integration
using their app store and while this
might seem pretty complicated to set up
we're going to walk through setting it
up and we'll get you going here in a
couple of minutes
now my choice for installing and
managing services is docker and
kubernetes and i get that capability
from something called rancher if you're
not familiar with rancher
rancher is an easy way to get docker and
then kubernetes i have a step-by-step
tutorial
that walks through setting up docker
rancher and kubernetes
in just a couple of minutes and after
that you'll have a platform not only for
nexcloud
but for all of your docker and
kubernetes needs and so
with that out of the way let's get
started well the first thing you might
need is rancher
well i just talked about how to set that
up but if you decide to go with plain
old docker we'll walk through that too
so then we're going to need a docker
image i typically choose linux server.io
for all of my docker images
they build and maintain most of my
favorite ones and if we go into
documentation
and we go under next cloud we should see
our docker image here
under usage we'll see the docker
commands here and later we'll map this
to a rancher config
but if we go under docker cli we'll see
the commands here to spin it up with
plain old docker here we'll see docker
run
where we're going to run it as a daemon
next we'll use the name flag which will
set the name of our container when it
spins up then we'll send an environment
variable of puid
and pgid now these map to the user that
has daca privileges
and it helps with permissions and we'll
talk about how to get that here in a
second
next we're going to pass an environment
variable of tz and
that's your time zone then we're going
to use p to publish or
expose some ports and you can see here
that they expose port 443 or
ssl next we're going to map a volume to
our config and on the left side that's a
path to the data we're going to persist
and on the right is a path within the
container and the same goes with the
next volume we're going to mount
which is data on the left will be the
path we're going to persist
and on the right is going to be the path
within the container and this will help
us persist both our config
and our data in the next flag restart
unless stop
is going to restart the container if it
crashes this will help make sure that
our container is always up
unless we stop it and the last argument
is linux server
next cloud and this is the docker org
image name that we're going to use
now take note you don't see a tag here
at the end this then assumes we're going
to use the latest tag
if you don't want to pin the latest
you'll need to look in docker hub to see
what the version is you want to pin to
after that add it to the end so now back
in our rancher server
let's create a workload so let's click
on deploy first we're going to name our
workload
let's name it next cloud next we'll set
the docker image and this is going to be
the docker org
the image name so let's use linux server
next cloud
and just to illustrate what i meant
about latest if you don't specify a tag
it's actually passing in latest as the
tag but we don't need to use that
next let's add our port so let's click
add port and for port mapping we'll have
to map our https port
now here i've named it https and we're
going to publish the container
port of 443 to the host port of 9700
this is because we don't want to use 443
on our host because it's already taken
next we'll add a few environment
variables the two environment variables
we need are puid
and pgid they suggest the value of a
thousand but this may not be the id
of your user or the group so in order to
define that let's
ssh into this node and find our id first
we'll ssh into our node
once we're in we'll just type id and you
can see here in the output
my uid is 1001 and my g id
is 1001 so let's put that in the form
next we'll need to map some volumes so
let's click add volume
and here since i only have one node i'm
going to choose buy mount a directory
from the node if you're using more than
one node or you have a different storage
strategy you'll want to choose that
option there but i'm going to mount the
file system directly from the node so
i'll choose that
so the two values we know right now are
the volume name which i'm naming config
and then the mount point which is slash
config which is slash config
within that container the one we don't
have yet is the python node so in order
to get that let's ssh back into our
server
let's create a folder and let's add it
here so here i'm going to make a
directory called nextcloud
and then let's cd in here and let's
create two folders one called config
and one called data and if we do an ls
we should see the output
so these are the folders that are going
to house both our data and our config
and you'll want to remember the path on
node so that we can use it so the path
on node for me for config is slash home
techno tim next cloud slash config and
let's add our data volume now so again
add volume
bind mount a directory from a node and
here we're going to use volume name of
data
the path on node is slash home slash
techno tim slash
next cloud slash data and then the path
within the container
is slash data so after that there's one
more thing we might want to change
and that's our scaling policy if we're
using a single node and host port we'll
need to choose a different option
so in scaling an upgrade policy we'll
want to change this to
kill all pods then start new and you can
choose this option if you're not using a
single node
but i think this is our only option if
we are using a single node in host port
because two pods can't occupy the same
port and then we'll launch
and we can see here it's spinning up
it's creating our container
and we can see it's up and running so
let's go into the logs
if we look in the logs it looks like it
spun up okay it created a self-signed
certificate for us to use
and it ran a lot of startup scripts so
now it's ready to use
let's go check out nexcloud so once we
go to the ip address and the port we
specified
we'll get a self-signed certificate
error now this is normal
because it's a self-signed certificate
so we can advance here and now we can
see our next cloud installation so the
first thing we'll need to do is create
an account
for obvious reasons you should choose a
secure username and password here
next you might notice the warning about
using sqlite and it tells you that you
should only use this for minimal
installations now for home use this is
totally fine but if you plan on using
this in a small business or a home with
lots of users
you might want to choose a different
storage option and so if we drop down in
storage and database
we have the option to change out our
database the default is using sqlite
data and that's mapped to our
container's volume but we have the
option to switch to mysql and mariadb
as well as postgresql but for our
installation
we're going to choose sqlite and use the
container storage the next option you
see is to install some recommended apps
and i'm going to choose yes here but we
can install them later if we like and
after that we can click finish setup so
this is now creating our account
configuring our database as well as
installing the recommended applications
and these are ones recommended by
nexcloud and
once in you'll be greeted with the
dashboard we can see the new next cloud
hub
some marketing information about
nexcloud and here's our dashboard so
we'll start out with recommended files
talking mentions important mail and
upcoming events
we can choose the customizer dashboard
here we can choose to include additional
widgets
and we can choose to change our
background in the recommended files
we'll see files that they've uploaded
but we'll visit that here in a second
and if we want we can go into settings
and we can install some more
applications
so here we'll see all of the recommended
applications that were installed
along with some that come with next
cloud we can see which ones are disabled
we can see different app bundles we can
see some of the featured applications
some customizations dashboard apps
files games you name it if we wanted to
download a new app we would just click
download and enable
it will pull down this new application
and then enable it so
we install this analytics application
and it looks like it's for our dashboard
so let's go back to our dashboard
and if we go back to customize we should
see this reports option
and it's blank now but it will generate
some data soon so going into our files
we actually have a file browser
here as well as a previewer here too we
can preview a pdf or any of the file
types that we upload
now we can create or upload files here
and this is how i use it as a dropbox
replacement so if you want to use this
for collaboration you can you can share
out these files or
edit these files remotely but if you
want to use it more as a dropbox
replacement
here's how i do it so first i'll create
a folder
i'll call this public and in this public
folder
i'm going to add a file and let's upload
this image now we can preview the image
from here
but we want to share this and so what i
typically do is create a share link to
this whole entire folder
now you can create a share link directly
from this file or you can create one
from the folder
and if you click public share and copy
the link we'll see that when
going to that link we can get to that
file and because this is a public link
anyone can get to it now you might have
noticed that it's going to copy the url
from your server
and this is a private ip so at some
point you'll want to make your server
public
so that it's accessible through the
internet but before you do
let's do a couple of things first we'll
want to go into settings then we'll want
to change a few things in security now
i highly recommend using a secure
password here now you should have
already
set one up but just in case make a
secure password here
after ensuring you have a secure
password let's turn on two-factor
authentication
so we'll go into administration security
and then we'll go under two-factor
authentication
so we'll want to turn this on we'll want
to make sure that this is turned on for
admins
then we'll save this then we'll want to
go back into apps
then we'll go under security then we'll
want to search for totp
and this is a two-factor totp provider
let's download and enable
then we'll go back into security for our
user here we'll turn on the totp
authenticator app let's enable it and
now we can scan this barcode
so here you'll want to use the google
authenticator or something like authy
and scan this barcode
then we'll enter a password then we'll
verify and now we're verified so let's
sign back out
and let's sign back in now we'll be
greeted with the two factor auth prompt
now we'll enter a code and now we can
get in okay so now we're ready to host
this publicly
and that's a really big topic but i've
already solved this in another video
in a previous video i showed you how to
set up traffic in metal lb
to self-host all your services securely
this will help you set up an ssl
certificate
as well as dynamic dns and after you get
that installed and set up
you can switch over this workload to use
the metal lb
and traffic load balancer that will
enable you to host this service securely
and after that you'll have a securely
self-hosted collaboration platform
where you could share files collaborate
chat
and even set up email and calendar
events and the app store has more and
more apps every day
which gives you more and more
capabilities within nexcloud
and so the next time you go to share a
large file with a friend
maybe your ftp server isn't the greatest
choice and so
what do you think about nexcloud what do
you think spinning up your own
self-hosted collaboration site what do
you think about using this to replace
something like dropbox
is it scary self-hosting some of your
services in the cloud
if so let me know in the comments
section below and while you're down
there
don't forget to give this video a thumbs
up and consider subscribing if you
haven't already and if you have more
questions you can always join my live
stream
i stream every tuesday thursday and
saturday so if you have a question about
this video or
any of my other videos hop in my stream
and i'd love to have you
so thanks so much for watching and until
next time
stream on my friends don't look at my
lipstick when i drink because it doesn't
really show up that well
isn't that crazy it totally can
so weird and the lipstick is like so
precise
like do i have lipstick on my teeth
do i have lipstick on my teeth anyone
isn't that so crazy
how precise it is oh anyways okay