This repository contains everything you need to start self-hosting a core set of privacy-preserving services that I have found helpful, all run via a common Docker Compose configuration using Let's Encrypt for SSL certificates.
443/tcp
, 18080/tcp
, and 18089/tcp
exposed/forwarded to the hostNOTE: If you do not want to run one of the services above simply comment out or delete the relevant service section from docker-compose.yml
.
This repo relies on Docker Compose to configure and run all of the above services, leveraging Traefik to automatically expose each service, request and maintain Let's Encrypt certificates for SSL, and handle all proxying.
You will need to clone this repository to the host you want running these services first:
git clone https://github.com/sethsimmons/self-hosted-services.git
cd self-hosted-services
Once cloned, set the necessary passwords and desired sub-domains in the .env
file (PLEASE DO NOT COPY THE FOLLOWING CONFIG, CHANGE THE PASSWORDS AND HOSTNAMES APPROPRIATELY IN YOUR LOCAL .env
FILE):
# Nextcloud Variables
NEXTCLOUD_HOSTNAME=nextcloud.mydomain.com
NEXTCLOUD_ADMIN_USER=
NEXTCLOUD_ADMIN_PASSWORD=
POSTGRES_PASSWORD=
# Wallabag Variables
WALLABAG_HOSTNAME=wallabag.mydomain.com
WALLABAG_DB_ROOT_PASS=
WALLABAG_DB_PASS=
WALLABAG_URL=https://wallabag.mydomain.com
# Teddit Variables
TEDDIT_HOSTNAME=teddit.mydomain.com
# Nitter Variables
NITTER_HOSTNAME=nitter.mydomain.com
# Traefik Variables
TRAEFIK_HOSTNAME=traefik.mydomain.com
# Heimdall Variables
DASHBOARD_HOSTNAME=dashboard.mydomain.com
DASHBOARD_TZ=America/New York
# Let's Encrypt Variables
LE_EMAIL_ADDRESS=myemail@pm.me
Note that all hostnames used must already have DNS entries configured with your domain provider in order for certificate generation to function properly.
Edit the Nitter configuration file:
hostname
, replaceTwitter
, and replaceYouTube
values with the relevant hostnamesStart-up the services with Docker Compose:
docker-compose up -d
Currently only Monero, Nitter, and Teddit get default Tor support, but I will likely expand that in the future. To list Onion services, simply run:
docker exec -ti tor onions
Each service included has a rudimentary health-check configured to allow docker-autoheal to restart any services that may fail.
Automatic updates are provided by the Watchtower container that watches and updates base images of services when available.
If you find yourself in need of viewing logs for a given service, simply run the following to tail all logs:
docker-compose logs --follow
To view the logs of a single service, run:
docker-compose logs --follow <service_name>
i.e.:
docker-compose logs --follow monerod
As this simply helps you get these services running, using each service is outside of the scope of this project. However, below are some links for getting started with each:
If you decide to run this and use these services, please don't forget to donate to those people making these services a reality!
Services for self-employed and small businesses Are you a businessman or woman who has decided you would like to settle in Switzerland to take advantage of one of the world's most favorable business c
Introduction There is this broad-reaching debate that has been going on for months about remoting, Web services, Enterprise Services, DCOM and so forth. In short, it is a debate about the best technol
开始 一旦 sso 被激活,所有已存在的用户将会收到一封邮件去连接他们的 sentry 账号(这个将会在 sso 配置好后自动发送) 新用户将会通过 sso 创建一个默认角色为member的默认账号。 步骤 为 Sentry 开启 Github SSO,需要在 Github 和 Sentry 上配置。 Github 配置 创建一个新 Github App : Create Github App:
A hosted service name must be between 1 and 63 longs, and composite of letters, number, hyphens, and hyphens cannot be the first or last letter A storage name must be 3 and 63 character in length U
gitlab self-hosted server 使用 gitlab 官网提供的 Omnibus packages 安装方式比较简单: ubuntu 安装方式 1. Install and configure the necessary dependencies sudo apt-get update sudo apt-get install -y curl openssh-server ca-
故事背景如下,我有一个UITextField的子类MyTextField,创建了MyTextField的实例tf。我希望tf对应的键盘显示done按钮。代码如下: 1 @interface MyTextField : UITextField 2 @end 3 4 MyTextField* tf = [[MyTextField alloc] initWithFrame:someframe]
About host in IIS, you should be care of not to create a self-host project (Library) which not contains .svc file. Of course, you can add it manually, too. So, just to create a WCF service project, af
参考资料 调试器工作原理(一):基础篇 描述了在linux os 下可以 用 ptrace系统调用 跟踪程序的pc 和 指令 调试器工作原理(二):断点 描述了 在 X86架构,linux os 下 用 int 3 替换 目标程序 pc 地址的第一个字节 int 3 执行时 , 硬件会产生中断,系统处理之后,发送信号给debuger debuger会覆盖int 3,然后接受用户的命令,打印堆栈
File and Image Management Using Moxie Manager MoxieManager is a premium TinyMCE plugin and server system that enables users to insert files located externally to the editor (e.g. on their client deskt
Self-hosted Docker Server Templates Announcement Thank you, everyone for your interest in my project! What started as a learning opportunity/something to build for my friends got a lot more popular th
最常用的BIF之一,返回调用进程的pid。 语法 (Syntax) self() 参数 (Parameters) 没有 返回值 (Return Value) 返回调用进程的pid。 例如 (For example) -module(helloworld). -export([start/0]). start() -> io:fwrite("~p~n",[self()]). 输出 (
在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数。例如,定义一个 Person 类: 那么,self 到底扮演着什么样的角色呢?本节就对 self 参数做详细的介绍。 事实上,Python 只是规定,无论是构造方法还是实例方法,最少要包含一个参数,并没有规定该参数的具体名称。之所以将其命名为 self,只是程序员之间约定俗成的一种习
问题内容: 在子类中重写方法时,我经常这样做: 我的问题是:super(type(self),self)是否有捷径? 问题答案: 不要那样做:如果仅可以将其用作第一个参数,那么就不必将它放在第一位。您必须在此处传递实际的类,而不是如果该类已被子类化的表达式可能会更改的表达式。 super的第一个参数必须是包含当前方法定义的类,因为您要告诉super在基础列表中从哪里开始搜索。 Python 3知道
主要内容:语法,示例SQL SELF JOIN 用于将一个表和自身连接,就好像存在两个表一样。为了区分两个表,在 SQL 语句中需要至少重命名一个表。 自连接通常用于将表的某个字段与该表的同一字段的其它值进行比较。 语法 SELF JOIN 的基本语法如下: 您看,SQL 并没有 SELF JOIN 关键字,而是使用 WHERE 子句来达到自连接的目的。 示例 自连接的语法比较简单,但是结果往往不是那么容易理解,让我