Compare commits

...

5 Commits

109 changed files with 975 additions and 175 deletions

BIN
assets/images/1-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

BIN
assets/images/1-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

BIN
assets/images/2-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

BIN
assets/images/2-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

BIN
assets/images/3-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

BIN
assets/images/3-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

BIN
assets/images/4-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

BIN
assets/images/4-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

BIN
assets/images/5-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

BIN
assets/images/5-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

BIN
assets/images/6-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

BIN
assets/images/6-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

BIN
assets/images/7-en.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
assets/images/7-ru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

View File

@ -1,33 +1,37 @@
.td-navbar {
background: $dark;
min-height: 5rem;
.navbar-brand__name {
display: none;
}
.nav-link {
font-weight: 600;
}
@import "docsy_overrides";
.sp-footer h2,
.sp-footer h3,
.sp-footer a.nav-link {
padding: 0.3rem 1rem !important;
}
.sp-footer a.nav-link:hover {
background-color: #61616144;
transition: background-color 0.2s ease-in-out;
border-radius: .3rem;
}
.sp-footer a.nav-link span {
width: 2rem;
display: inline-flex;
align-items: center;
border-radius: .1rem;
padding: .5rem;
}
@media (min-width: 768px) {
.td-sidebar {
padding-top: 5rem;
}
.td-404 main, .td-main main {
padding-top: 6.5rem;
}
.td-sidebar-toc {
padding-top: 2.75rem;
}
.sp-footer span i {
margin: auto;
}
.rounded-img {
border-radius: 1rem;
}
.card-title {
font-weight: 600;
}
.sp-button-shadow {
box-shadow: 0px -0.5rem 0px 0px rgba(0, 0, 0, 0.1) inset;
}
@ -35,7 +39,6 @@
.sp-button-big-padding {
padding-bottom: 1rem;
padding-top: 0.8rem;
font-weight: 600;
}
.sp-feature-title {
@ -47,18 +50,25 @@
font-weight: 600;
padding: 0.3rem 0;
color: $navbar-dark-color;
&:hover {
color: $navbar-dark-hover-color;
}
&:active {
color: $navbar-dark-active-color;
}
&:disabled {
color: $navbar-dark-disabled-color;
}
span {
width: 2rem;
display: inline-flex;
align-items: center;
border-radius: .1rem;
padding: .5rem;
}
}
span i {
margin: auto;
}
}
@ -71,7 +81,7 @@
}
.sp-service-card {
background: #FFFFFF;
background: white;
box-shadow: 0 8px 8px rgba(0, 0, 0, 0.25);
border-radius: 10px;
border: none;
@ -81,10 +91,6 @@
margin-top: 6rem;
}
.tab-content .tab-pane {
max-width: 100% !important;
}
.sp-supperted-by-img {
max-height: 5rem;
margin: 1rem;
@ -98,9 +104,28 @@
}
.sp-supported-by-card {
background: #FFFFFF;
box-shadow: 0 8px 8px rgba(0, 0, 0, 0.25);
background: white;
box-shadow: $shadow;
border-radius: 10px;
border: none;
margin-top: 1rem;
}
body {
background-color: $bg-color;
}
a.nav-link.sp-coming-soon {
pointer-events: none;
cursor: default;
color: $gray;
&::after {
content: "Coming soon!";
display: inline-block;
background-color: $gray;
color: $dark;
margin-left: .5rem;
padding: .1rem .5rem;
border-radius: .1rem;
}
}

View File

@ -6,7 +6,11 @@ Add styles or override variables from the theme here.
$primary: #7EB07F;
$secondary: #F2C94C;
$gray: #616161;
$dark: #30312C;
$bg-color: whitesmoke;
$shadow: 0 8px 8px rgba(0, 0, 0, 0.25);
$td-enable-google-fonts: false;
$google_font_name: "Montserrat";

View File

@ -0,0 +1,195 @@
.td-navbar {
background: $dark;
min-height: 5rem;
.navbar-brand__name {
display: none;
}
.nav-link {
color: $secondary !important;
font-weight: 600;
border-radius: 5px;
&:hover {
background-color: #61616144;
transition: background-color 0.2s ease-in-out;
}
&.nav-link.active {
background-color: #616161;
}
}
.td-navbar-nav-scroll {
height: unset !important;
margin-top: unset !important;
.nav-link {
padding: .5rem 1.5rem;
}
.navbar-nav {
padding-bottom: 0 !important;
}
}
}
.td-breadcrumbs__single {
visibility: hidden;
}
.td-sidebar-nav .td-sidebar-link__page,
ul.ul-2>.td-sidebar-nav__section-title a {
color: $gray !important;
font-weight: 400;
&:hover {
color: $blue !important;
}
}
ul.ul-2 {
padding: 0;
&>.td-sidebar-nav__section-title a:hover {
color: $primary !important;
background-color: #7EB07F11;
transition: background-color 0.2s ease-in-out;
transition: color 0.2s ease-in-out;
}
}
ul.ul-0 li a.tree-root,
h5.taxonomy-title {
display: none !important;
}
.nav-item {
margin-right: .5rem !important;
}
.td-sidebar-nav-active-item {
color: $primary !important;
font-weight: 600;
}
.td-sidebar-nav a.active {
color: $primary !important;
background-color: #7EB07F22;
}
.td-sidebar-link {
&.td-sidebar-link__section, &.td-sidebar-link__page {
border-radius: .3rem;
padding: .3rem .8rem !important;
margin: .1rem !important;
&:hover {
color: $primary !important;
background-color: #7EB07F11;
transition: background-color 0.2s ease-in-out;
transition: color 0.2s ease-in-out;
}
}
}
.td-toc {
ul {
margin-top: 1rem;
}
li {
display: block;
padding-bottom: .5rem;
}
a {
display: inline !important;
}
}
.tab-content {
.tab-pane {
border: 1px solid rgba(0, 0, 0, 0.125) !important;
border-radius: 0px .25rem .25rem .25rem;
max-width: 100% !important;
}
ul li, ol li {
margin-bottom: unset !important;
}
div {
transition: none;
}
}
.nav-tabs {
border: none !important;
a:not(.active).nav-link:hover {
background-color: #0d6efd11;
}
}
.nav-item {
margin-right: .5rem !important;
}
.dropdown-menu {
right: 0;
left: unset;
padding: 0px;
box-shadow: $shadow;
}
.dropdown-item {
padding: 0.5rem 1.5rem;
border-radius: 0.25rem;
}
li:has(input[type="checkbox"]) {
list-style-type: none;
}
.btn,
.text-secondary {
font-weight: 600;
}
.tab-content {
.tab-pane {
border: none !important;
box-shadow: $shadow;
}
div {
transition: none;
}
}
.nav-tabs {
border: none !important;
.nav-item {
.nav-link {
border: none !important;
box-shadow: $shadow;
margin-bottom: -4px;
}
.nav-link.active {
border-color: transparent transparent white transparent !important;
}
}
a:not(.active).nav-link:hover {
background-color: #0d6efd11;
}
}
.tab-body {
background-color: white;
border: none !important;
position: relative;
z-index: 1;
h3:before {
content: none;
}
}
@media (min-width: 768px) {
.td-sidebar {
padding-top: 5rem;
}
.td-404 main, .td-main main {
padding-top: 6.5rem;
}
.td-sidebar-toc {
padding-top: 2.75rem;
}
}

View File

@ -16,22 +16,6 @@ enableGitInfo = true
# Comment out to enable taxonomies in Docsy
# disableKinds = ["taxonomy", "taxonomyTerm"]
# You can add your own taxonomies
[taxonomies]
tag = "tags"
category = "categories"
[params.taxonomy]
# set taxonomyCloud = [] to hide taxonomy clouds
taxonomyCloud = ["tags", "categories"]
# If used, must have same length as taxonomyCloud
taxonomyCloudTitle = ["Tag Cloud", "Categories"]
# set taxonomyPageHeader = [] to hide taxonomies on the page headers
taxonomyPageHeader = ["tags", "categories"]
# Highlighting config
pygmentsCodeFences = true
pygmentsUseClasses = false

View File

@ -10,11 +10,13 @@ linkTitle = "SelfPrivacy"
<div class="container rounded">
<div id="screenshotsCarouselControls" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#screenshotsCarouselControls" data-slide-to="0"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="0" class="active"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="1"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="2" class="active"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="2"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="3"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="4"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="5"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="6"></li>
</ol>
<div class="carousel-inner rounded">
<div class="carousel-item">
@ -27,10 +29,16 @@ linkTitle = "SelfPrivacy"
<img class="d-block w-100" src="/images/screenshots/3-en.png" alt="Third slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/4-en.png" alt="Third slide">
<img class="d-block w-100" src="/images/screenshots/4-en.png" alt="Fourth slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/5-en.png" alt="Third slide">
<img class="d-block w-100" src="/images/screenshots/5-en.png" alt="Fifth slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/6-en.png" alt="Sixth slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/7-en.png" alt="Seventh slide">
</div>
</div>
<a class="carousel-control-prev" href="#screenshotsCarouselControls" role="button" data-slide="prev">
@ -47,7 +55,7 @@ linkTitle = "SelfPrivacy"
<div class="col-xs-12 col-md-8 my-auto">
<div class="container my-4">
<h1>
SelfPrivacy app allows you to set up self-hosted services and manage them.
SelfPrivacy app allows you to set up self-hosted services and manage them
</h1>
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding" href="{{< relref "/download" >}}">
Download
@ -57,9 +65,9 @@ linkTitle = "SelfPrivacy"
</div>
{{< /blocks/section >}}
{{< blocks/section color="100" type="section" >}}
<section class="container-fluid">
<div class="row w-100">
<h2 class="mx-auto text-center">Your personal services</h2>
<h2 class="mx-auto text-center font-weight-bolder">Your personal services</h2>
</div>
<div class="row w-100 mt-5 mb-3">
@ -129,9 +137,9 @@ linkTitle = "SelfPrivacy"
{{< /landing-service >}}
</div>
</div>
{{< /blocks/section >}}
</section>
{{< blocks/section color="100" type="section" >}}
<section class="container-fluid">
<div class="row w-100">
<h2 class="mx-auto text-center">Advantages</h2>
</div>
@ -174,12 +182,10 @@ linkTitle = "SelfPrivacy"
{{< landing-feature datactrl "Data control">}}
<p class="card-text">Why do corporations need your data? To make you buy more and vote as they want. With SelfPrivacy, only you have your data.</p>
{{< /landing-feature >}}
{{< /blocks/section >}}
</section>
{{< blocks/section color="100" type="section" >}}
<section class="container-fluid">
<div class="row w-100">
<h2 class="mx-auto text-center">Supported by</h2>
</div>
@ -194,5 +200,4 @@ linkTitle = "SelfPrivacy"
</a>
</div>
</div>
{{< /blocks/section >}}
</section>

View File

@ -0,0 +1,57 @@
---
title: "Version 0.10.0 Release"
linkTitle: "0.10.0"
date: 2024-01-19
description: >
Migration to the new NixOS version
---
## Changelog
### Features
- **Server installation**: New NixOS version is used during server setup ([#415](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/415))
- It is also possible to set a root SSH key during server setup. This feature can be activated in developer settings.
- **DNS management**: DNS records creation dynamically gets desired records from the server now ([#424](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/424), resolves [#265](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/265))
- **UI**: Add the button to copy password on the new user creation screen ([#409](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/409), resolves [#299](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/299))
- **UI**: Add animation to the recovery key screen ([#410](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/410), resolves [#164](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/164))
- **Backups**: Bucket name now includes the date of creation ([#403](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/403), resolves [#263](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/263))
- **UI**: Snapshots List page now shows the button to open the Jobs sheet ([#396](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/396), resolves [#290](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/290))
- **Server installation**: Implement better domain ownership check during installation ([#394](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/394), resolves [#389](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/389))
- **UI**: Implement flexible precision formatting for prices ([#387](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/387))
### Bug Fixes
- **UI**: Domain name no longer overflows the screen ([#422](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/422), resolves [#408](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/408))
- **UI**: Fix overflow of the filled buttons
- **Hetzner**: Filter away ARM architecture from available servers ([#404](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/404), resolves [#402](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/402))
- **UI**: Add refresh indicator on the 'Devices' screen ([#398](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/398), resolves [#258](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/258) and [#163](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/163))
- **GraphQL API**: Force DateTime to UTC when timezone naive ([#386](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/386), resolves [#385](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/385))
### Other
- Updated the copyright year ([#417](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/417))
- Happy new year!
- Upgrade to Flutter 3.16.1
- Rename the Recovery flow button to prevent user confusion ([#399](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/399), resolves [#346](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/346))
- **GraphQL API**: Remove and replace deprecated mutations ([#423](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/423), resolves [#418](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/418))
### Translation contributions
* French
* smtg (12)
* Spanish
* NaiJi ✨ (35)
* German
* Marvin F (23)
* User 1234 (30)
* Hebrew
* Yaron (578)
* Russian
* def (4)
* NaiJi ✨ (9)
* Inex Code (10)

View File

@ -160,3 +160,26 @@ This release is made possible with the support of [NlNet foundation](https://nln
* Mithras (28)
* Ortibexon (403)
## Patch 0.9.1
### Bug Fixes
- Fix volume resizing on Digital Ocean ([#368](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/368), resolves [#367](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/367))
- Disable the storage card while volume information is being fetched ([#369](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/369), resolves [#317](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/317))
### Features
- Add copy-to-clipboard for email on user page ([#329](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/329), resolves [#287](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/287))
- Add support for ECDSA SSH keys ([#362](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/362), resolves [#319](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/319))
- Implement confirmation modal for the volume resize ([#372](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/372), resolves [#308](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/308))
### Other changes
- Move service descriptions above login info for service cards ([#342](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/342), resolves [#341](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/341))
- Add measure units to 'Extending volume' page ([#344](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/344), resolves [#301](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/301))
- Make users to be ordered properly on users page ([#343](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/343), resolves [#340](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/340))
- Move service card name to its icon row ([#352](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/352), resolves [#350](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/350))
- Reorganize placeholders for empty pages ([#359](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/359), resolves [#348](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/348))
- Remove redundant zone id cache for Cloudflare ([#371](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/371))

View File

@ -21,6 +21,6 @@ We want digital independence and privacy for our data.
## What do we need it for?
Our [team]({{< ref "team.md" >}} consists of programmers and system administrators. We are from different countries and many of us have never met in person. Perhaps we are romantics. Don Quixotes of the free Internet. It is important for us not only to do the work, but to know the result - the contribution to a positive change in people's attitudes to privacy and independence.
Our [team]({{< ref "team.md" >}}) consists of programmers and system administrators. We are from different countries and many of us have never met in person. Perhaps we are romantics. Don Quixotes of the free Internet. It is important for us not only to do the work, but to know the result - the contribution to a positive change in people's attitudes to privacy and independence.
We hope to find stable financial support in the form of free software development funds in the near future, so as not to burden the project founder's budget.

View File

@ -13,9 +13,9 @@ Tasks in **bold** are sponsored, for example, by NlNet. Tasks in *italic* are in
## SP Nix flake format
- [ ] ***Restructure the NixOS configuration to use Nix flakes and migrate to newer NixOS version*** ([nixos-config#38](https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config/issues/38))
- [ ] *Migrate to NixOS 23.05*
- [ ] *Package the SelfPrivacy API into a flake* ([selfprivacy-api#63](https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api/issues/63))
- [x] **Restructure the NixOS configuration to use Nix flakes and migrate to newer NixOS version** ([nixos-config#38](https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config/issues/38))
- [x] Migrate to NixOS 23.05
- [x] Package the SelfPrivacy API into a flake ([selfprivacy-api#63](https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api/issues/63))
- [ ] ***Develop the manifest format for packaging services to work with SelfPrivacy*** ([nixos-config#40](https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config/issues/40))
- [ ] **Move existing services to SP Modules**
- [ ] Email server ([nixos-config#41](https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config/issues/41))
@ -119,5 +119,5 @@ While cloud server providers offer APIs that allow us to perform almost fully au
## Publishing
- [ ] Publish on Google Play
- [x] Publish on Google Play
- [ ] Publish on Apple App Store

View File

@ -17,7 +17,7 @@ International team of independent professionals:
- **ilchub** - DevOps, Backend developer
- **kherel** - Flutter developer
- **nikolai** - QA Engineer
- and a lot of cool cotributors and volonteers
- and a lot of cool contributors and volunteers
## We get help
- [Roscomsvoboda](https://roskomsvoboda.org/). Speech in Russian [youtube](https://www.youtube.com/watch?v=mdeUTUPeJjA).

View File

@ -11,13 +11,13 @@ description: >
When your service is broken but it worked yesterday you have two options:
* Spend some time reading logs and debugging what went wrong. Meanwhile the service is unusable and maybe some data is irreversibly lost.
* Rewind the service to the working state and then debug at a more relaxed pace. Hopefully it was just solar flare or a glitch in the Matrix.
* Spend some time reading logs and debugging what went wrong. Meanwhile the service is unusable and maybe some data is irreversibly lost;
* Restore the service to a working state and then debug at a more relaxed pace. Hopefully it was just a solar flare or a glitch in the Matrix.
This second, nerve-saving option is enabled by backing up regularly, and even better, automatically.
As an extra benefit, backing up makes it easy to transfer a service from one machine to another with minimal hassle.
This is useful for datacenters on fire, if your server provider gets bought out by another corporation or if shareholders decide that it is finally time to make more profit.
Having a backup simplifies the process of transferring a service between machines, ensuring minimal inconvenience.
This is useful if your datacenter is on fire, if your server provider gets bought out by another corporation, or when shareholders decide that it is finally time to make more profit.
This document covers the basic terms and usage of SelfPrivacy backup subsystem.
@ -25,45 +25,45 @@ This document covers the basic terms and usage of SelfPrivacy backup subsystem.
SelfPrivacy does not make backups of the whole machine.
Instead, it saves the states of each service.
The state of files used by a service, taken at a certain time, is called a Snapshot.
In the interface, you can see a snapshot as having an id, a service it backs up, and a date of creation.
The state of the files used by a service, taken at a certain time, is called a Snapshot.
In the interface, you can see that a snapshot has an ID, a service it backs up, and a date of creation.
## When backups occur?
A snapshot is created in 3 cases:
* By user's manual command to back up a service
* Automatically at certain intervals if Automatic Backups are enabled
* As a precaution before an inplace restore of a service
* By user's manual command to back up a service;
* Automatically at specified intervals if Automatic Backups are enabled;
* As a precaution before an inplace restore of a service.
## How the data is stored?
The service's files are stored at the cloud of user's choosing.
At the moment we support Backblaze but more are to be added.
The service's files are stored at the cloud of the user's choice.
We currently support Backblaze, with more to come.
All of the service data is encrypted with a local secret which the cloud never receives.
Under the hood, we use Restic for transfers of encrypted data.
All of the service data is encrypted with a local secret that the cloud never receives.
Under the hood, we use Restic to transfer encrypted data.
Cloud storage providers, such as Backblaze, have an option to prevent immediate deletion of data.
Clouds like Backblaze have an option to disallow immediate removal of data.
SelfPrivacy app uses this option so that in case when the server is hacked the data cannot be erased.
## Listing snapshots
There are 2 factors to keep in mind when looking at the list:
* For the sake of performance, the list is cached. If some snapshots are missing which you think should be there, invalidate the cache so it reloads.
* If you remove some snapshots, they will disappear from the list, but for some limited time they are still restorable with the help of the cloud.
* For the sake of performance, the list is cached. If some snapshots are missing which you think should be there, invalidate the cache so it reloads;
* If you delete some snapshots, they will be removed from the list, but for some limited time they are still restorable with the help of the cloud.
## Restoring a snapshot
When you restore a snapshot, the service is stopped, and all of its files are restored to the state when the snapshot was taken.
There are 2 ways to do it.
Restoring a snapshot involves stopping the service and reverting all files to their state at the snapshot's creation. This process can be accomplished in two distinct ways.
The safest one, the default one, is to download the snapshot in its entirety, verify that data is not damaged, and replace the service files with the files from the snapshot.
This has a downside that you need to have extra space to store the snapshot.
However, this method requires additional storage space for the snapshot.
A somewhat riskier way is to overwrite the service files directly, without intermediate storage. This needs less space, but if the transfer goes wrong, you end up with a broken service.
To somewhat mitigate this, a pre-restore snapshot is made just before the restoration.
A somewhat riskier way is to overwrite the service files directly, without intermediate storage. It requires less space, but if the transfer goes wrong, you end up with a broken service.
To help reduce the impact, a snapshot is taken just before restoring.
The app does check that we have enough space before attempting a restore.
@ -73,23 +73,22 @@ Forgetting makes the snapshot inaccessible from the server, but deletion itself
## Automatic Backup
If you set up an automatic backup period, all of the services will be backed up regularly according to the period.
If you set up an automatic backup period, all of the services will be backed up according to the set period.
Note that backups are independent per service. If you have services A and B backed up automatically every day in the morning, and then you back up service B manually at noon, then service A's next backup will be in the morning as usual, but B's backups will occur at noons.
If set to zero, autobackups will be disabled.
If it is disabled, automatic backups will not be performed.
## Restoring after someone has deleted all the snapshots
* Go to your Backblaze/other cloud interface directly.
* Rewind the bucket's state to prior the deletion event.
* Open SelfPrivacy app
* Invalidate snapshot cache
* List the snapshots
* Restore from snapshots as usual
* Go to your Backblaze/other cloud interface directly;
* Rewind the bucket to its previous state before the deletion event;
* Open SelfPrivacy app;
* Update the snapshot list;
* Restore from snapshots as usual.
## Troubleshooting backups
* If you suspect that the snapshot list is inaccurate, try discarding the cache
* If an inplace restore failed, make sure that your cloud is accessible and your contract is active, then try to either restore a snapshot you tried to restore, or a pre-restore snapshot generated automatically
* If you do not have enough space on the disk for a safe restore, try restoring inplace
* If you suspect that the list of snapshots is incorrect, try updating the snapshot list;
* If an inplace restore has failed, make sure that your cloud is accessible and your contract is active. Then try to restore either a snapshot that you tried to restore or a pre-restore snapshot that was automatically generated;
* If you do not have enough space on the disk for a safe restore, try restoring inplace.

View File

@ -7,9 +7,6 @@ description: >
You can help with translations and programming
---
# How can you help the project?
## Help us translate
We use our own [weblate instance](https://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/) to collaborate.
@ -47,6 +44,6 @@ If you want to improve [our site](https://selfprivacy.org):
- [Main Site + Documentation](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org)
# For any help, please contact our chats:
## For any help, please contact our chats:
- [Telegram: @selfprivacy_dev](https://t.me/selfprivacy_dev)
- [Matrix: @dev:selfprivacy.org](https/matrix.to/#/%23dev:selfprivacy.org)

View File

@ -7,8 +7,6 @@ description: >
Frequently asked questions about our project.
---
# General questions
## What are self-host services and what are their advantages?
When we use centralised services, such as popular social networks, we trust the admins of the resource that stores our correspondence, our photos and even the most important secrets said in a chat with close people. We allow our interests and music preferences to be analysed, receive targeted advertising based on them, and most likely participate in unnamed audience analysis programs and all sorts of surveillance.

View File

@ -1,6 +1,4 @@
---
categories: ["Tutorials"]
tags: []
title: "Getting Started"
linkTitle: "Getting Started"
weight: 1

View File

@ -0,0 +1,243 @@
---
title: "How to change the DNS provider to deSEC"
linkTitle: "Changing DNS provider to deSEC"
weight: 2
date: 2023-10-21
description: >
For those who want to change their DNS provider after server installation.
---
We recommend using [deSEC](https://desec.io/) instead of [CloudFlare](https://cloudflare.com/). DeSEC is dedicated to privacy.
If you have first tied your domain to CloudFlare and now you want to change providers, this article is for you.
Attention, the process is quite complicated, and if you feel that something goes wrong, you can feel free to write us in the chat.
During this process, your services will be temporarily unavailable. Also, write down the IP address of your server, as you will not be able to access it by domain name.
## Transferring the nameserver
A nameserver is a server that translates your domain (letters) into a server IP address (numbers).
1. Register with [deSEC](https://desec.io/).
2. On [the "domains" page](https://desec.io/domains), click on the “plus” button.
{{< imgproc desec1 Fill "626x287" />}}
3. Enter your domain.
4. Copy "nameservers".
{{< imgproc desec2 Fill "626x287" />}}
Now go to the website of the domain registrar from whom you purchased the domain.
The actions will be similar for all providers, we will show using [Porkbun](https://porkbun.com/) as an example.
1. Go to your domain control panel.
2. Find there the “Authoritative nameservers” parameter.
{{< imgproc namechip1 Fill "626x287" />}}
3. Replace the current addresses with those that we copied from deSEC in the instructions earlier.
4. Save the changes.
{{< imgproc namechip3 Fill "626x287" />}}
---
## Getting the deSEC token
1. Log in [here](https://desec.io/login).
2. Go to the [Domains page](https://desec.io/domains).
3. Go to the **Token management** tab.
4. Click on the round "plus" button in the upper right corner.
{{< imgproc desec-tokenmanagment Fill "626x287" />}}
5. "**Generate New Token**" dialogue must be displayed. Enter any **Token name** you wish. Advanced settings are not required, so do not touch anything there.
6. Click on **Save**.
7. Make sure you save the token's "**secret value**" as it will only be displayed once.
{{< imgproc dncsec-copy Fill "626x287" />}}
8. Now you can safely **close** the dialogue.
---
## Migrating records
Log into both [CloudFlare](https://cloudflare.com/) and [deSEC](https://desec.io/).
### On the deSEC website
Follow [the link](https://desec.io/) in the “Domain Management” panel, click on your domain.
{{< imgproc howtodesec1 Fill "600x350" />}}
Now you can add new entries to it using the “Plus” button.
{{< imgproc howtodesec2 Fill "600x350" />}}
### On the CloudFlare website
Follow [this link](https://cloudflare.com/) and go to the settings of your domain, which is located under the "Websites" section.
Select your domain.
{{< imgproc howcloudflare2 Fill "363x442" />}}
Now go to "DNS", then "Records".
{{< imgproc howcloudflare Fill "363x442" />}}
### First record: api
Based on the example in the screenshot, transfer the parameters of your "api" record (look at the "Name" column) according to their colors.
{{< imgproc replace1 Fill "1544x755" />}}
On the left side of the screenshot is deSEC, and on the right side is Cloudflare. You need to sequentially transfer each parameter of this record.
### Second record: root
Create a new record of type "A", in the "IPv4 address" field, enter your server address, which you have already entered in the "Content" field of the previous record.
**You don't need to transfer all the records!** You have created two records, and the third one has already been created for you.
{{< imgproc replace2 Fill "1250x830" />}}
---
## Connecting to the server
To perform the following actions, you will need to connect to the server via SSH with administrator privileges. Basic understanding of the command line is recommended ;)
You can find instructions on how to connect [here](/docs/how-to-guides/root_ssh/).
After connecting to the server, enter the following command:
```
nano /etc/nixos/userdata.json
```
You are in a terminal text editor called "nano".
You are editing the file `/etc/nixos/userdata.json`, and you can use the arrow keys to navigate.
Find the following lines in the file:
```
"dns": {
"provider": "CLOUDFLARE",
"useStagingACME": false
},
```
Replace:
```"provider": "CLOUDFLARE",```
with
```"provider": "DESEC",```
Now press CTRL+X, and then key Y.
Then edit another file:
```
nano /etc/selfprivacy/secrets.json
```
Find the following:
```
"dns": {
"apiKey": "SECRET-HERE"
},
```
Remove your old token from CloudFlare and paste the copied token from deSEC.
(If CTRL+V doesn't work, try SHIFT+CTRL+V)
```"apiKey": "Your deSEC token",```
It should now look like this:
```
"dns": {
"apiKey": "Your deSEC token"
},
```
Press CTRL+X, then Y to save the file.
If the file has been saved and you have successfully exited the text editor, enter the command:
```
systemctl start sp-nixos-rebuild.service
```
It will start the rebuild of your system with new options. You may close the console now.
---
## Reconfiguring the application
You will have to reset the application config to work properly. **Don't forget to create a recovery key and save it in a safe place (password manager).**
How to reset the application:
Go to Application Settings.
{{< imgproc app1 Fill "590x1221" />}}
Press "Reset application config".
{{< imgproc app2 Fill "585x700" />}}
Now go to the "Setup Wizard" section where you configured your server when you first launched the application.
{{< imgproc app3 Fill "590x1221" />}}
Tap "I already have a SelfPrivacy server!".
(In the old version it might be called "Connect to an existing server").
{{< imgproc app4 Fill "590x1221" />}}
Next, follow the instructions in the app and enter the recovery key or code from another device where the SelfPrivacy app is installed.
After installation, you will see some problems with Domain and DNS. The application will offer you to fix them. Accept the fixes.
{{< imgproc app5 Fill "590x1221" />}}
{{< imgproc app6 Fill "590x500" />}}
**Congratulations! You have successfully changed your domain provider. We recommend you to check that all services are working correctly.**

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -5,7 +5,6 @@ weight: 2
date: 2023-03-14
description: >
Manual cleanup might be required if you need more space on system volume.
categories: ["How-To Guides"]
---
@ -108,10 +107,13 @@ This is because Nginx will get confused by the missing log files, and they will
## Deleting old system
{{% alert color="warning" %}}
{{% alert title="Possible data loss" color="warning" %}}
This operation can only be performed once during the lifetime of your server.
**If you have installed SelfPrivacy on your own hardware, this may lead to some data loss.**
{{% /alert %}}
If you have installed SelfPrivacy on your own hardware, this may lead to some data loss.
{{% alert title="This section is only applicable for Release 0.9 and below" color="secondary" %}}
Since version 0.10, `/old-root` folder gets removed during NixOS boot.
{{% /alert %}}
When you install SelfPrivacy on a server, the existing system gets replaced by NixOS. But the old system is still there

View File

@ -5,7 +5,6 @@ weight: 1
date: 2023-03-14
description: >
If you need to manually perform some tasks, you can get root access via SSH.
categories: ["How-To Guides"]
---
To access your server's root shell you will have to generate your SSH key and add it to your server's authorized keys.
@ -41,7 +40,7 @@ To access your server's root shell you will have to generate your SSH key and ad
4. Open the Command Prompt. You can do this by pressing **Win+R**, typing `cmd` and pressing **Enter**.
5. Run the following command, replacing `user_name` with your Windows username:
```ps1
ssh-keygen -t ed25519 -f C:\Users\user_name\.ssh\id_ed25519.pub
ssh-keygen -t ed25519 -f C:\Users\user_name\.ssh\id_ed25519
```
You will be asked to enter a passphrase. You can leave it empty, but it is recommended to use a passphrase.
If you do not want to use a passphrase, press **Enter**.
@ -103,4 +102,4 @@ To access your server's root shell you will have to generate your SSH key and ad
3. Enter the passphrase you entered when generating the SSH key, if you used one.
Be careful when using the root shell. If you do not know what you are doing, you can break your server or leak your data.
Responsibility for the consequences of your actions lies with you. Respect the privacy of other users.
Responsibility for the consequences of your actions lies with you. Respect the privacy of other users.

View File

@ -5,11 +5,11 @@ description: >
Decentralized Social Network Server
---
Any centralized social network will have to take care of moderation, censorship,
implementing rules, reading your correspondence as it grows.
Another thing is your own social network, which can only belong to you,
your family or your team. Only a decentralized network can provide maximum privacy.
That's why we offer you to become part of the Fediverse decentralized network.
Any centralized social network will have to take care of moderation, censorship,
implementing rules, reading your correspondence as it grows.
Another thing is your own social network, which can only belong to you,
your family or your team. Only a decentralized network can provide maximum privacy.
That's why we offer you to become part of the Fediverse decentralized network.
At SelfPrivacy we use [Pleroma](https://pleroma.social/).
@ -24,4 +24,15 @@ At SelfPrivacy we use [Pleroma](https://pleroma.social/).
## Features of Pleroma
- A social network of any scale: from a personal server with a single account to a massive thematic site;
- Your social network, your rules. You are the censor, moderator and administrator.
- Your social network, your rules. You are the censor, moderator and administrator.
## Getting admin rights
Right now you can get admin rights only by using the command line.
1. Connect to your server via SSH as a `root` user. Use [this guide](/docs/how-to-guides/root_ssh/) if you need help.
2. Run the following command, replacing `<username>` with the username you want to make an admin:
```
sudo -u pleroma env RELEASE_COOKIE=/var/lib/pleroma/.cookie pleroma_ctl user set <username> --admin
```
3. Done! Now the user `<username>` has admin rights.

View File

@ -26,6 +26,9 @@ title: Downloads
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding" href="https://f-droid.org/en/packages/pro.kherel.selfprivacy/" rel="noopener noreferrer" target="_blank">
F-Droid
</a>
<a class="btn btn-link w-100" href="https://fdroid.selfprivacy.org/" rel="noopener noreferrer" target="_blank">
Our F-Droid repository
</a>
</div>
<div class="col-md-4">
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding" href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" rel="noopener noreferrer" target="_blank">
@ -33,15 +36,10 @@ title: Downloads
</a>
</div>
<div class="col-md-4">
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding disabled" href="https://play.google.com/store/apps/details?id=org.selfprivacy.app" rel="noopener noreferrer" target="_blank">
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding" href="https://play.google.com/store/apps/details?id=org.selfprivacy.app" rel="noopener noreferrer" target="_blank">
Google Play
</a>
</div>
<div class="col-md-12">
<a class="btn btn-link w-100" href="https://fdroid.selfprivacy.org/" rel="noopener noreferrer" target="_blank">
Our F-Droid repository
</a>
</div>
</div>
@ -65,7 +63,7 @@ title: Downloads
<div class="row w-100">
<div class="col-md-4">
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding" href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" rel="noopener noreferrer" target="_blank">
<a class="btn btn-lg btn-primary mb-4 mt-4 btn-block sp-button-shadow sp-button-big-padding disabled" href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" rel="noopener noreferrer" target="_blank">
Windows
</a>
</div>

View File

@ -10,28 +10,37 @@ linkTitle = "SelfPrivacy"
<div class="container rounded">
<div id="screenshotsCarouselControls" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#screenshotsCarouselControls" data-slide-to="0"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="0" class="active"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="1"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="2" class="active"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="2"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="3"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="4"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="5"></li>
<li data-target="#screenshotsCarouselControls" data-slide-to="6"></li>
</ol>
<div class="carousel-inner rounded">
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/1-en.png" alt="First slide">
<img class="d-block w-100" src="/images/screenshots/1-ru.png" alt="Первый слайд">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/2-en.png" alt="Second slide">
<img class="d-block w-100" src="/images/screenshots/2-ru.png" alt="Второй слайд">
</div>
<div class="carousel-item active">
<img class="d-block w-100" src="/images/screenshots/3-en.png" alt="Third slide">
<img class="d-block w-100" src="/images/screenshots/3-ru.png" alt="Третий слайд">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/4-en.png" alt="Third slide">
<img class="d-block w-100" src="/images/screenshots/4-ru.png" alt="Четвёртый слайд">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/5-en.png" alt="Third slide">
<img class="d-block w-100" src="/images/screenshots/5-ru.png" alt="Пятый слайд">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/6-ru.png" alt="Шестой слайд">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="/images/screenshots/7-ru.png" alt="Седьмой слайд">
</div>
</div>
<a class="carousel-control-prev" href="#screenshotsCarouselControls" role="button"
data-slide="prev">
@ -60,7 +69,7 @@ linkTitle = "SelfPrivacy"
</div>
{{< /blocks/section>}}
{{< blocks/section color="100" type="section">}}
<section class="container-fluid">
<div class="row w-100">
<h2 class="mx-auto text-center">Ваши личные сервисы</h2>
</div>
@ -140,9 +149,9 @@ linkTitle = "SelfPrivacy"
{{< /landing-service>}}
</div>
</div>
{{< /blocks/section>}}
</section>
{{< blocks/section color="100" type="section">}}
<section class="container-fluid">
<div class="row w-100">
<h2 class="mx-auto text-center">Преимущества</h2>
</div>
@ -185,12 +194,10 @@ linkTitle = "SelfPrivacy"
{{< landing-feature datactrl "Контроль данных">}}
<p class="card-text">Почему корпорациям так нужны ваши данные? Чтобы больше покупали, чтобы Вы голосовали, как им нужно. В SelfPrivacy ваши данные остаются только у вас.</p>
{{< /landing-feature>}}
{{< /blocks/section>}}
</section>
{{< blocks/section color="100" type="section" >}}
<section class="container-fluid">
<div class="row w-100">
<h2 class="mx-auto text-center">Нас поддерживают</h2>
</div>
@ -205,5 +212,4 @@ linkTitle = "SelfPrivacy"
</a>
</div>
</div>
{{< /blocks/section >}}
</section>

View File

@ -1,6 +1,6 @@
---
title: "SelfPrivacy Blog"
linkTitle: "Blog"
title: "Блог SelfPrivacy"
linkTitle: "Блог"
menu:
main:
weight: 30
@ -10,4 +10,3 @@ menu:
This is the **blog** section. It has two categories: News and Releases.
Files in these directories will be listed in reverse chronological order.

View File

@ -86,7 +86,6 @@ SelfPrivacy не создает резервных копий всей маши
* Откатите состояние ведра до состояния, предшествовавшего удалению;
* Откройте приложение SelfPrivacy;
* Обновите список копий;
* Откройте снимки;
* Восстановите моментальный снимок обычным способом.
## Устранение неполадок при резервном копировании

View File

@ -1,6 +1,4 @@
---
categories: ["Tutorials"]
tags: []
title: "Начало работы"
linkTitle: "Начало работы"
weight: 1

View File

@ -0,0 +1,246 @@
---
title: "Как сменить dns провайдера на deSEC"
linkTitle: "Смена провайдера на deSEC"
weight: 2
date: 2023-10-21
description: >
Для тех кто хочет сменить своего dns провайдера уже после установки сервера.
---
Мы рекомендуем использовать [deSEC](https://desec.io/) вместо [CloudFlare](https://cloudflare.com/). DeSEC нацелен на приватность.
Если вы сначала привязали ваш домен к CloudFlare и теперь хотите сменить провайдера, эта статья для вас.
Внимание, процесс довольно сложен, и если вы чувствуете, что что-то идет не так, можете смело писать нам в чат.
## Переносим сервер имен (nameserver)
Сервер имен — это сервер, который переводит ваш домен (буквы) в IP-адрес сервера (цифры).
1. Регистрируемся в [deSEC](https://desec.io/).
2. На [странице "domains"](https://desec.io/domains) нажимаем на кнопку "плюс".
{{< imgproc desec1 Fill "626x287" />}}
3. Вводим свой домен.
4. Копируем "nameservers".
{{< imgproc desec2 Fill "626x287" />}}
Теперь переходим на сайт провайдера, у которого вы покупали домен.
Действия будут схожи для всех провайдеров, мы будем показывать на примере [Porkbun](https://porkbun.com/).
1. Переходим в панель управления вашим доменом.
2. Находим там параметр "Authoritative nameservers".
{{< imgproc namechip1 Fill "626x287" />}}
3. Заменяем текущие адреса на те, что мы скопировали из deSEC в инструкции ранее.
4. Сохраняем изменения.
{{< imgproc namechip3 Fill "626x287" />}}
---
## Получаем токен deSEC
1. Авторизуемся в [deSEC](https://desec.io/login)
2. Переходим на страницу [Domains](https://desec.io/domains)
3. Переходим на вкладку **Token management**.
4. Нажимаем на большую кнопку с "плюсом" в правом верхнем углу страницы.
{{< imgproc desec-tokenmanagment Fill "626x287" />}}
5. Должен появиться диалог "**Generate New Token**". Вводим любое имя токена в **Token name**.
*Advanced settings* необязательны, так что ничего там не трогаем.
6. Кликаем **Save**.
7. Обязательно сохраняем "**secret value**" ключ токена, потому что он отображается исключительно один раз.
{{< imgproc dncsec-copy Fill "626x287" />}}
---
## Подключение к серверу
Изменение записи домена может занимать до двух дней, так что рекомендуем вам подождать обновление записей, перед следующими действиями. Иначе ваши сервисы временно перестанут быть доступны.
Понять, что запись обновилась, вы сможете через приложение, либо перейдя по ссылке на один из ваших сервисов (вы увидите ошибку подключения).
Но помните, вы не сможете больше обращаться к вашему серверу по домену, вам нужно будет знать IP-адрес сервера. Его можно узнать, к примеру, в панели хостер провайдера.
Для следующих действий вам нужно будет подключиться по ssh к серверу с правами администратора. Минимальное понимание работы командной строки приветствуется ;)
Инструкцию по подключению вы сможете [прочитать тут](/docs/how-to-guides/root_ssh/).
После подключения к серверу вводим:
```
nano /etc/nixos/userdata.json
```
Вы оказались в терминальном текcтовом редакторе под названием "nano".
Вы редактируете файл ```/etc/nixos/userdata.json```, и можете использовать стрелочки для перемещения.
Находим в файле такие строчки:
```
"dns": {
"provider": "CLOUDFLARE",
"useStagingACME": false
},
```
Заменяем:
```"provider": "CLOUDFLARE",```
на
```"provider": "DESEC",```
Теперь нажимаем CTRL+X, после клавишу Y.
Теперь отредактируем другой файл:
```
nano /etc/selfprivacy/secrets.json
```
Находим в файле такие строчки:
```
"dns": {
"apiKey": "SECRET-HERE"
},
```
Убираем ваш старый токен от CloudFlare и вставляем скопированный токен от deSEC.
(Если CTRL+V не работает, попробуйте SHIFT+CTRL+V)
```"apiKey": "Сюда ваш токен",```
Должно получиться так:
```
"dns": {
"apiKey": "Ваш токен от deSEC"
},
```
Теперь нажимаем CTRL+X, после клавишу Y.
Если файл сохранился и вы успешно вышли из текстового редактора, вводим команду:
```
systemctl start sp-nixos-rebuild.service
```
Она начнёт пересборку вашей системы с новыми параметрами.
После выполнения команды можно смело закрывать консоль.
---
## Перенос записей
Входим сразу в [CloudFlare](https://cloudflare.com/) и в [deSEC](https://desec.io/).
#### В интерфейсе deSEC
По [ссылке](https://desec.io/), в панели "Domain Managment" нажмите на ваш домен.
{{< imgproc howtodesec1 Fill "600x350" />}}
Теперь вы можете добавлять к нему новые записи, с помощью кнопки "Плюс".
{{< imgproc howtodesec2 Fill "600x350" />}}
##### В интерфейсе CloudFlare
По [ссылке](https://cloudflare.com/), переходим в настройки вашего домена, который находится в разделе "Websites".
Выбираем ваш домен.
{{< imgproc howcloudflare2 Fill "363x442" />}}
Теперь переходим в "DNS", далее "Records".
{{< imgproc howcloudflare Fill "363x442" />}}
#### Первая запись: api
Ориентируясь на пример со скриншота переносим ваши параметры "api" (смотрите на столбик "Name") записи в соответствии с их цветами.
{{< imgproc replace1 Fill "1544x755" />}}
На скриншоте слева — deSEC, а справа Сloudflare. Вам нужно последовательно перенести каждый параметр данной записи.
#### Вторая запись: корневая
Создаём новую запись типа "А", в "IPv4 address" пишем ваш адрес сервера, вы уже писали его в поле "Content" предыдущей записи.
**Все записи переносить не надо!** Вы создали две записи, а третья уже была создана за вас. Давайте проверим, что у нас получилось.
{{< imgproc replace2 Fill "1250x830" />}}
---
## Перенастраиваем приложение
Для правильной работы вам придется сбросить конфиг приложения. **Не забудьте создать ключ восстановления и сохранить его в безопасном месте (менеджере паролей).**.
Как сбросить приложение:
Переходим в "Настройки приложения".
{{< imgproc app1 Fill "590x1221" />}}
Нажимаем "Сбросить конфиг приложения".
{{< imgproc app2 Fill "585x700" />}}
Теперь переходим в раздел "Мастер установки", где вы настраивали свой сервер, когда в первый раз запускали приложение.
{{< imgproc app3 Fill "590x1221" />}}
Нажимаем "Подключиться к существующему серверу SelfPrivacy".
(В старых версиях приложения кнопка может называться "Подключиться к уже существующему серверу").
{{< imgproc app4 Fill "590x1221" />}}
Далее следуем указаниям в приложении и вводим ключ восстановления или код с другого устройства, где установлено приложение SelfPrivacy.
После установки вы увидите некоторые проблемы с Доменом и DNS. Приложение предложит вам исправить их. Соглашаемся.
{{< imgproc app5 Fill "590x1221" />}}
{{< imgproc app6 Fill "590x500" />}}
**Поздравляем! Вы успешно сменили доменного провайдера. Рекомендуем вам проверить, что все сервисы работают корректно.**

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -5,7 +5,6 @@ weight: 2
date: 2023-04-21
description: >
Ручная очистка может потребоваться, если вам нужно больше свободного места на системном разделе.
categories: ["How-To Guides"]
---
@ -105,10 +104,13 @@ rm /var/log/nginx/* && systemctl reload nginx
## Удаление старой системы
{{% alert color="warning" %}}
{{% alert title="Возможна потеря данных" color="warning" %}}
Эта операция может быть выполнена только один раз за все время существования вашего сервера.
Если вы установили SelfPrivacy на собственное оборудование, это может привести к потере данных.
{{% /alert %}}
Если вы установили SelfPrivacy на собственное оборудование, это может привести к некоторой потере данных.
{{% alert title="Этот раздел актуален только для версии 0.9 и ниже" color="secondary" %}}
Папка /old-root удаляется во время загрузки NixOS начиная с версии 0.10.
{{% /alert %}}
Когда вы устанавливаете SelfPrivacy на сервер, существующая система заменяется на NixOS. Но старая система все еще существует и занимает место на диске, поэтому вы можете откатиться к ней, если захотите.

View File

@ -5,7 +5,6 @@ weight: 1
date: 2023-04-22
description: >
Если вам нужно вручную выполнить административные задачи, понадобится root-доступ через SSH.
categories: ["How-To Guides"]
---
Чтобы получить доступ к корневой оболочке вашего сервера, вам необходимо сгенерировать SSH-ключ и добавить его в список авторизованных ключей вашего сервера.
@ -42,7 +41,7 @@ categories: ["How-To Guides"]
4. Откройте Командную строку. Это можно сделать, нажав **Win+R**, введя `cmd` и нажав **Enter**.
5. Выполните следующую команду, заменив `user_name` на ваше имя пользователя Windows:
```ps1
ssh-keygen -t ed25519 -f C:\Users\user_name\.ssh\id_ed25519.pub
ssh-keygen -t ed25519 -f C:\Users\user_name\.ssh\id_ed25519
```
Вам будет предложено ввести кодовую фразу. Вы можете оставить ее пустой, но рекомендуется использовать кодовую фразу.
@ -67,7 +66,7 @@ categories: ["How-To Guides"]
ssh-keygen -t ed25519 -f /data/data/com.termux/files/usr/etc/ssh/ssh_host_ed25519_key
```
Вам будет предложено ввести кодовую фразу. Вы можете оставить ее пустой, но рекомендуется использовать кодовую фразу.
Если вы не хотите использовать кодовую фразу, нажмите **Enter**.
3. Выведите открытый ключ в терминал и скопируйте его:
```bash

View File

@ -7,11 +7,11 @@ description: >
Как организован проект и как он работает.
---
Да, вы можете использовать kubernetes. Но зачем, если неизменяемость обеспечивается NixOS?
Да, вы можете использовать kubernetes. Но зачем, если неизменяемость обеспечивается благодаря NixOS?
**Мобильное приложение:** [Flutter](https://flutter.dev/)/[Dart](https://dart.dev/) выбрали из-за скорости и плавности работы UI, а также очень соблазнительна их кроссплатформенность.
**Пользовательское приложение:** [Flutter](https://flutter.dev/)/[Dart](https://dart.dev/) выбрали из-за скорости и плавности работы UI, а также очень соблазнительна их кроссплатформенность.
**Бэкенд**: [NixOS](https://nixos.org/) + [Python](https://www.python.org/). NixOS выбран из-за воспроизводимости, Python из-за универсальности и популярности.
**Серверная сторона (backend)**: [NixOS](https://nixos.org/) + [Python](https://www.python.org/). NixOS выбран из-за воспроизводимости, Python из-за универсальности и популярности.
# Сервис-провайдеры
**Нам не платит ни один сервис-провайдер!** Мы никак с ними не аффилированы. Выбирали исключительно из профессиональных соображений. Но не исключаем партнерство в будущем.
@ -23,18 +23,25 @@ SelfPrivacy поддерживает два хостинг провайдера:
Оба были выбранны из-за низкой цены и приемлемого уровня сервиса, качественного REST API.
Hetzer не был замечен в проблемах с приватностью и сбором данных.
Кандидаты:
- Свой личный железный сервер. **Сейчас наш основной приоритет**;
- Сервис-провайдер, который предоставит API для разворачивания железного сервера. Вне [FVEY](https://en.wikipedia.org/wiki/Five_Eyes);
- OVH
- Scaleway
Еще есть бесплатный [Oracle Cloud](https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm), но там где вы не платите, обычно вы и есть товар.
Ещё есть бесплатный [Oracle Cloud](https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm), но там где вы не платите, обычно вы и есть товар.
### DNS
[Cloudlare](https://cloudflare.com) надежность, бесплатность. Вероятно, собирает данные, иначе сложно объяснить зачем бесплатно проксировать чужой трафик. В нашем случае используем только как DNS-сервер и ничего не проксируем. В будущем заменим на self-hosted DNS, как только решим проблему надежности.
### Backup repository
[Backblaze](https://www.backblaze.com/) бесплатно и в разы дешевле AWS. Не замечен в сборе данных. [Публикует](https://www.backblaze.com/blog/open-source-data-storage-server/) в open source наработки железа, на котором работает. Также [делится](https://www.backblaze.com/b2/hard-drive-test-data.html) очень полезной статистикой по отказам дисков, на основе которых можно выбрать себе наиболее надежный и проверенный. В будущем, возможно, заменим на self-hosted решение или p2p. Сейчас это не основной приоритет, так как данные шифруются, а сервис-провайдер видит только IP-адрес Вашего сервера (а не домашний).
На выбор [Cloudlare](https://cloudflare.com), [deSEC](https://desec.io/) или [DigitalOcean DNS](https://www.digitalocean.com/).
[deSEC](https://desec.io/) — более приватный вариант, рекомендуется по умолчанию.
[Cloudlare](https://cloudflare.com) вероятно, собирает данные в режиме проксирования трафика, иначе сложно объяснить, зачем предоставлять серсис бесплатно. **В нашем случае мы ничего не проксируем, а используем его только как DNS-сервер.**
### Резервные копии
Используем — [Backblaze](https://www.backblaze.com/)
Первые 20GB бесплатны и в разы дешевле AWS. [Backblaze](https://www.backblaze.com/) [публикует](https://www.backblaze.com/blog/open-source-data-storage-server/) в open source наработки железа, на котором работает. Также [делится](https://www.backblaze.com/b2/hard-drive-test-data.html) очень полезной статистикой по отказам дисков, на основе которых можно выбрать себе наиболее надёжный и проверенный.
В будущем, возможно, заменим на self-hosted решение или p2p. **Сейчас это не основной приоритет, так как данные шифруются, а сервис-провайдер видит только IP-адрес вашего сервера, а не устройства с приложением.**

View File

@ -55,6 +55,9 @@ other = "Google Play"
[footer_download_apk]
other = "APK file"
[footer_download_ios]
other = "App Store"
[footer_download_desktop]
other = "For your computer"

View File

@ -55,6 +55,9 @@ other = "Google Play"
[footer_download_apk]
other = "APK файл"
[footer_download_ios]
other = "App Store"
[footer_download_desktop]
other = "Для компьютера"

View File

@ -34,7 +34,6 @@
<ul class="list-unstyled">
<li><a href="https://git.selfprivacy.org/SelfPrivacy" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_source_code" }}</a></li>
<li><a href="https://weblate.selfprivacy.org/" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_translate" }}</a></li>
<li><a href="https://wiki.selfprivacy.org/" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_dev_wiki" }}</a></li>
<li><a href="https://fdroid.selfprivacy.org/" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_test_nightly" }}</a></li>
<li><a href="https://matrix.to/#/#dev:selfprivacy.org" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_matrix_contributor_chat" }}</a></li>
<li><a href="https://t.me/selfprivacy_dev" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_telegram_contributor_chat" }}</a></li>
@ -45,16 +44,17 @@
<h2 class="text-secondary">{{ T "footer_download" }}</h2>
<h3 class="text-secondary">{{ T "footer_download_phone" }}</h3>
<ul class="list-unstyled">
<li><a href="https://fdroid.selfprivacy.org/" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_download_fdroid" }}</a></li>
<li><a href="https://play.google.com/store/apps/details?id=org.selfprivacy.app" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_download_google_play" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_download_apk" }}</a></li>
<li><a href="https://f-droid.org/en/packages/pro.kherel.selfprivacy/" class="nav-link" rel="noopener noreferrer" target="_blank"><span><i class="fa-brands fa-android"></i></span> {{ T "footer_download_fdroid" }}</a></li>
<li><a href="https://play.google.com/store/apps/details?id=org.selfprivacy.app" class="nav-link" rel="noopener noreferrer" target="_blank"><span><i class="fa-solid fa-play"></i></span> {{ T "footer_download_google_play" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link" rel="noopener noreferrer" target="_blank"><span><i class="fa-solid fa-file"></i></span> {{ T "footer_download_apk" }}</a></li>
<li><a href="#" class="nav-link sp-coming-soon" rel="noopener noreferrer" target="_blank"><span><i class="fa-brands fa-apple"></i></span> {{ T "footer_download_ios" }}</a></li>
</ul>
<h3 class="text-secondary">{{ T "footer_download_desktop" }}</h3>
<ul class="list-unstyled">
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_download_windows" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_download_linux" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link" rel="noopener noreferrer" target="_blank">{{ T "footer_download_macos" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link" rel="noopener noreferrer" target="_blank"><span><i class="fa-brands fa-linux"></i></span> {{ T "footer_download_linux" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link sp-coming-soon" rel="noopener noreferrer" target="_blank"><span><i class="fa-brands fa-windows"></i></span> {{ T "footer_download_windows" }}</a></li>
<li><a href="https://git.selfprivacy.org/kherel/selfprivacy.org.app/releases/latest" class="nav-link sp-coming-soon" rel="noopener noreferrer" target="_blank"><span><i class="fa-brands fa-apple"></i></span> {{ T "footer_download_macos" }}</a></li>
</ul>
</div>
</div>
</div>

View File

@ -11,13 +11,13 @@
</div>
{{ if $illustration }}
<div class="col-md-4 col-xs-12 my-auto">
<img class="card-img-top rounded-img" src="{{ $illustration.RelPermalink }}">
<img class="card-img-top rounded-img" src="{{ $illustration.RelPermalink }}" alt="">
</div>
{{ end }}
{{ else }}
{{ if $illustration }}
<div class="col-md-4 col-xs-12 my-auto">
<img class="card-img-top rounded-img" src="{{ $illustration.RelPermalink }}">
<img class="card-img-top rounded-img" src="{{ $illustration.RelPermalink }}" alt="">
</div>
{{ end }}
<div class="col-md-8 col-xs-12 my-auto px-5">

View File

@ -1,7 +1,7 @@
{{ $illustration := .Get 0 }}
{{ $title := .Get 1 }}
<div class="card sp-service-card h-100">
<img class="card-img-top rounded-img sp-service-icon" src="{{ $illustration }}" alt="{{ $title }}">
<img class="card-img-top rounded-img sp-service-icon" src="{{ $illustration }}" alt="">
<div class="card-body">
<h4 class="card-title">{{ $title }}</h4>
{{ .Inner }}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 741 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 743 KiB

Some files were not shown because too many files have changed in this diff Show More