mirror of https://github.com/Box-boi/vubuntu.git
vububtu: Implement Self-Backup Feature With The Help Of Rclone!
- Add The New Changes While Building The `Dockerfile.heroku` Instead Of Using A fork of `vital987/vubuntu`. I'm Lazy To rebuild and upload to docker lol. People Not Deploying On Heroku Will Have To Rebuild The Image As Per `Dockerfile.heroku`. Heroku Is Simply More Fun lol. 1- Add Some Additional Packages 2- A Backup Of The Current State Of The VPS, Would Be Taken, And Saved To The CLoud(Which Could Be G-Drive, Onedrive, or any service that supports rclone). 3- This Backup Would Essentially Run Every 30min and Keep The App-Data(and Some Additional Folders) in Sync Always. This Is done by taking a backup of `.cache`, `.vscode`, `documents`, `downloads`, `.bashrc`, `.ssh`, `.config` etc; And Uploading Them to the cloud every 30min. 4- Users Are Free To Choose Which Folders Would be backed-up, However, a default config would be provided, that would backup all possible data.
This commit is contained in:
parent
93331185ea
commit
c59dd698ed
|
|
@ -20,6 +20,12 @@ ENV VNC_PASS="samplepass" \
|
||||||
NGROK_AUTH_TOKEN="placeholder" \
|
NGROK_AUTH_TOKEN="placeholder" \
|
||||||
#Brave Shared Memory Usage (Set it to 0 to disable the use of /dev/shm for Brave Browser, helpful for Heroku)
|
#Brave Shared Memory Usage (Set it to 0 to disable the use of /dev/shm for Brave Browser, helpful for Heroku)
|
||||||
BRAVE_USE_SHM=1 \
|
BRAVE_USE_SHM=1 \
|
||||||
|
#Self Backup: Enable Backup Of App Data And App Cache Using Rclone, disabled by default
|
||||||
|
SELF_BACKUP=0 \
|
||||||
|
#Rclone Config Link: rclone.conf : pasted to gist.github.com [Raw Links Only][Secret Gist Only]
|
||||||
|
RCLONE_CONFIG_LINK="placeholder" \
|
||||||
|
#Backup Script Link: Backup Script Which Specifies Which Folders Are To Be Synced By Rclone.
|
||||||
|
BACKUP_SCRIPT_LINK="https://gist.githubusercontent.com/Box-boi/dda8fe9a1be8c21b5666fd317a9d40cc/raw/rclone-backup-script.sh" \
|
||||||
#Locale
|
#Locale
|
||||||
LANG=en_US.UTF-8 \
|
LANG=en_US.UTF-8 \
|
||||||
LANGUAGE=en_US.UTF-8 \
|
LANGUAGE=en_US.UTF-8 \
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,18 @@
|
||||||
FROM vital987/vubuntu:latest
|
FROM vital987/vubuntu:latest
|
||||||
|
|
||||||
|
RUN curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip && \
|
||||||
|
unzip rclone-current-linux-amd64.zip -d /tmp && \
|
||||||
|
cp /tmp/rclone-*-linux-amd64/rclone /usr/bin/ && \
|
||||||
|
chown root:root /usr/bin/rclone && \
|
||||||
|
chmod 755 /usr/bin/rclone && \
|
||||||
|
rm -rf rclone* /tmp/*
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get --no-install-recommends install -y \
|
||||||
|
aria2 neofetch rar unrar rename openssh-client tmate sshpass rsync restic && \
|
||||||
|
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive \
|
ENV DEBIAN_FRONTEND=noninteractive \
|
||||||
#VNC Server Password
|
#VNC Server Password
|
||||||
VNC_PASS="samplepass" \
|
VNC_PASS="samplepass" \
|
||||||
|
|
@ -13,8 +26,18 @@ ENV DEBIAN_FRONTEND=noninteractive \
|
||||||
PORT=80 \
|
PORT=80 \
|
||||||
#Disable Shared Memory for Brave
|
#Disable Shared Memory for Brave
|
||||||
BRAVE_USE_SHM=0 \
|
BRAVE_USE_SHM=0 \
|
||||||
|
#Self Backup: Enable Backup Of App Data And App Cache Using Rclone, disabled by default
|
||||||
|
SELF_BACKUP=0 \
|
||||||
|
#Rclone Config Link: rclone.conf : pasted to gist.github.com [Raw Links Only][Secret Gist Only]
|
||||||
|
RCLONE_CONFIG_LINK="placeholder" \
|
||||||
|
#Backup Script Link: Backup Script Which Specifies Which Folders Are To Be Synced By Rclone.
|
||||||
|
BACKUP_SCRIPT_LINK="https://gist.githubusercontent.com/Box-boi/dda8fe9a1be8c21b5666fd317a9d40cc/raw/rclone-backup-script.sh" \
|
||||||
#Locale
|
#Locale
|
||||||
LANG=en_US.UTF-8 \
|
LANG=en_US.UTF-8 \
|
||||||
LANGUAGE=en_US.UTF-8 \
|
LANGUAGE=en_US.UTF-8 \
|
||||||
LC_ALL=C.UTF-8 \
|
LC_ALL=C.UTF-8 \
|
||||||
TZ="Asia/Kolkata"
|
TZ="Asia/Kolkata"
|
||||||
|
|
||||||
|
#Include The New Changes: self-backup.py and 6-selfbackup.conf
|
||||||
|
COPY . /app/.vubuntu
|
||||||
|
|
||||||
|
|
|
||||||
12
README.md
12
README.md
|
|
@ -1,6 +1,6 @@
|
||||||
# VNC + Ubuntu = Vubuntu ¯\\_\(ツ\)\_\/¯
|
# VNC + Ubuntu = Vubuntu ¯\\_\(ツ\)\_\/¯
|
||||||
|
|
||||||
[](https://ubuntu.com) [](https://github.com/vital987) [](https://github.com/vital987) [](https://hub.docker.com/r/vital987/vubuntu) []()<br>[](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/) [](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/tree/minimal) [](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/tree/purevnc) [](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/tree/purevnc-minimal)
|
[[](https://ubuntu.com) [](https://github.com/vital987) [](https://github.com/vital987) [](https://hub.docker.com/r/vital987/vubuntu) []()<br>[](https://heroku.com/deploy?template=https://github.com/Box-boi/vubuntu/) [](https://heroku.com/deploy?template=https://github.com/Box-boi/vubuntu/tree/minimal) [](https://heroku.com/deploy?template=https://github.com/Box-boi/vubuntu/tree/purevnc) [](https://heroku.com/deploy?template=https://github.com/Box-boi/vubuntu/tree/purevnc-minimal)
|
||||||
|
|
||||||
|
|
||||||
## **Table of Contents :**
|
## **Table of Contents :**
|
||||||
|
|
@ -61,8 +61,11 @@
|
||||||
| PORT | NoVNC HTTP Port |
|
| PORT | NoVNC HTTP Port |
|
||||||
| NGROK_AUTH_TOKEN | Ngrok Token |
|
| NGROK_AUTH_TOKEN | Ngrok Token |
|
||||||
| NGROK_REGION | Ngrok Server Region (Only PureVNC) |
|
| NGROK_REGION | Ngrok Server Region (Only PureVNC) |
|
||||||
| NO_SLEEP | Prevent Heroku app from sleeping, disabled by default |
|
| SELF_BACKUP | Enable Backup Of App Data And App Cache Using Rclone, disabled by default |
|
||||||
|
| RCLONE_CONFIG_LINK | Your `rclone.conf` Pasted To gist.github.com[Raw Link Only]. To Generate rclone.conf, visit rclone.org/drive. [Required If SELF_BACKUP=1]. |
|
||||||
|
| BACKUP_SCRIPT_LINK | Backup Script Which Specifies Which Folders Are To Be Synced By Rclone. Default Value Is Provided, And Performs A Complete Backup |
|
||||||
| APP_NAME | Name of Heroku app |
|
| APP_NAME | Name of Heroku app |
|
||||||
|
| NO_SLEEP | Prevent Heroku app from sleeping, disabled by default |
|
||||||
| BRAVE_USE_SHM | Usage of /dev/shm for Brave |
|
| BRAVE_USE_SHM | Usage of /dev/shm for Brave |
|
||||||
|
|
||||||
## **Installation :**
|
## **Installation :**
|
||||||
|
|
@ -83,6 +86,11 @@
|
||||||
vital987/vubuntu:latest
|
vital987/vubuntu:latest
|
||||||
* noVNC Web-UI will be accessible on port **8080**
|
* noVNC Web-UI will be accessible on port **8080**
|
||||||
|
|
||||||
|
## **Some More Info About Self Backup Feature And Rclone Feature :**
|
||||||
|
* 1- A Backup Of The Current State Of The VPS, Would Be Taken, And Saved To The CLoud(Which Could Be G-Drive, Onedrive, or any service that supports rclone).
|
||||||
|
* 2- This Backup Would Essentially Run Every 30min and Keep The App-Data(and Some Additional Folders) in Sync Always. This Is done by taking a backup of `.cache`, `.vscode`, `documents`, `downloads`, `.bashrc`, `.ssh`, `.config` etc; And Uploading Them to the cloud every 30min.
|
||||||
|
* 3- Users Are Free To Choose Which Folders Would be backed-up, However, a default config would be provided, that would backup all possible data.
|
||||||
|
|
||||||
## **Warnings :**
|
## **Warnings :**
|
||||||
* [ ! ] **VNC_TITLE & VNC_PASS values should be without spaces.**
|
* [ ! ] **VNC_TITLE & VNC_PASS values should be without spaces.**
|
||||||
* [ ! ] **The whole project runs as a root user and non-sandboxed chromium in a docker container.**
|
* [ ! ] **The whole project runs as a root user and non-sandboxed chromium in a docker container.**
|
||||||
|
|
|
||||||
30
app.json
30
app.json
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "Vubuntu",
|
"name": "Vubuntu",
|
||||||
"description": "Fully fledged Ubuntu NoVNC, refer readme for more info.",
|
"description": "Fully fledged Ubuntu NoVNC, refer readme for more info.",
|
||||||
"repository": "https://github.com/vital987/vubuntu.git",
|
"repository": "https://github.com/Box-boi/vubuntu.git",
|
||||||
"logo": "https://raw.githubusercontent.com/vital987/vubuntu/master/assets/icons/64x64.png",
|
"logo": "https://raw.githubusercontent.com/vital987/vubuntu/master/assets/icons/64x64.png",
|
||||||
"keywords": ["docker","ubuntu", "vscode", "novnc", "firefox", "brave", "fluxbox", "linux", "remote", "ssh", "vnc", "vubuntu"],
|
"keywords": ["docker","ubuntu", "vscode", "novnc", "firefox", "brave", "fluxbox", "linux", "remote", "ssh", "vnc", "vubuntu", "rclone", "auto-backup"],
|
||||||
"stack": "container",
|
"stack": "container",
|
||||||
"env": {
|
"env": {
|
||||||
"VNC_TITLE" : {
|
"VNC_TITLE" : {
|
||||||
|
|
@ -17,18 +17,32 @@
|
||||||
},
|
},
|
||||||
"VNC_RESOLUTION" : {
|
"VNC_RESOLUTION" : {
|
||||||
"description": "VNC Server Resolution in WxH, 720p is preferrable.",
|
"description": "VNC Server Resolution in WxH, 720p is preferrable.",
|
||||||
"value" : "1280x720",
|
"value" : "1280x720",
|
||||||
"required" : true
|
"required" : true
|
||||||
},
|
},
|
||||||
|
"SELF_BACKUP" : {
|
||||||
|
"description": "Enable Backup Of App Data And App Cache Using Rclone, 1=on, 0=off",
|
||||||
|
"value" : "0",
|
||||||
|
"required" : true
|
||||||
|
},
|
||||||
|
"RCLONE_CONFIG_LINK" : {
|
||||||
|
"description": "Your `rclone.conf` Pasted To gist.github.com[Raw Link Only][Secret Gist Only]. To Generate rclone.conf, visit rclone.org/drive. [Required If SELF_BACKUP=1].",
|
||||||
|
"required" : false
|
||||||
|
},
|
||||||
|
"BACKUP_SCRIPT_LINK" : {
|
||||||
|
"description": "Backup Script Which Specifies Which Folders Are To Be Synced By Rclone.",
|
||||||
|
"value" : "https://gist.githubusercontent.com/Box-boi/dda8fe9a1be8c21b5666fd317a9d40cc/raw/rclone-backup-script.sh",
|
||||||
|
"required" : true
|
||||||
|
},
|
||||||
"NO_SLEEP" : {
|
"NO_SLEEP" : {
|
||||||
"description": "Prevent app from sleeping, 1=on, 0=off",
|
"description": "Prevent app from sleeping, 1=on, 0=off",
|
||||||
"value" : "0",
|
"value" : "1",
|
||||||
"required" : true
|
"required" : true
|
||||||
},
|
},
|
||||||
"APP_NAME" : {
|
"APP_NAME" : {
|
||||||
"description": "Name of the app, same as mentioned above.",
|
"description": "Name of the app, same as mentioned above.",
|
||||||
"value" : "",
|
"value" : "",
|
||||||
"required" : true
|
"required" : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
[program:self-backup]
|
||||||
|
command=python3 /app/.vubuntu/assets/scripts/self-backup.py
|
||||||
|
exitcodes=0
|
||||||
|
startsecs=0
|
||||||
|
stderr_logfile=/app/.vubuntu/assets/logs/selfbackup.err.log
|
||||||
|
priority=6
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# Script to sync App-Data To Cloud every 30 minutes Using rclone, it also prevents app from sleeping.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
from time import sleep
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
logging.basicConfig(filename="/app/.vubuntu/assets/logs/self-backup.py.log", format='%(asctime)s %(message)s', filemode='w')
|
||||||
|
logger = logging.getLogger()
|
||||||
|
logger.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
if os.getenv("SELF_BACKUP") == "1":
|
||||||
|
if "RCLONE_CONFIG_LINK" not in os.environ:
|
||||||
|
print("[!]RCLONE_CONFIG_LINK unset, terminating...")
|
||||||
|
logger.error("[!]RCLONE_CONFIG_LINK unset, terminating...")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
backup_script_link = os.getenv("BACKUP_SCRIPT_LINK")
|
||||||
|
rclone_config_link = os.getenv("RCLONE_CONFIG_LINK")
|
||||||
|
|
||||||
|
#Create ~/.config/rclone if not present already
|
||||||
|
createdir = 'mkdir -p ~/.config/rclone'
|
||||||
|
True if os.path.isdir("/.config/rclone") else os.system(createdir)
|
||||||
|
|
||||||
|
#Download rclone.conf if not downloaded already
|
||||||
|
download_rclone_conf = 'aria2c --max-tries=0 --retry-wait=5 -o rclone.conf ' + rclone_config_link + ' -d ~/.config/rclone'
|
||||||
|
True if os.path.isfile("/.config/rclone/rclone.conf") else os.system(download_rclone_conf)
|
||||||
|
|
||||||
|
#Clean Duplicate Downloads: If Self Deploying on your personal computer/server, The Above two commands would result in multiple copies of rclone.conf, as depending on server, home(~), might not be the same as root(/)
|
||||||
|
#In Case Of heroku home(~) and root(/) is same. Thus The Statemenet Above checks for /.conf instead of ~/.conf as python doesnt allow "~" in os.path.isfile()
|
||||||
|
#Thus, Clean Up The Residual Copies Of rclone.conf. (files with prefix .1, .2, .3 etc)
|
||||||
|
os.system("rm -rf ~/.config/rclone/rclone.conf.*")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
logger.info(f"Starting Sync Using Rclone")
|
||||||
|
argument = 'curl -s ' + backup_script_link + ' | bash'
|
||||||
|
os.system(argument)
|
||||||
|
except:
|
||||||
|
logger.warning("Sync failed, retrying...")
|
||||||
|
try:
|
||||||
|
logger.info(f"Retrying Sync Using Rclone")
|
||||||
|
argument = 'curl -s ' + backup_script_link + ' | bash'
|
||||||
|
os.system(argument)
|
||||||
|
except:
|
||||||
|
logger.error("Cannot Sync App-Date, Make Sure rclone.conf is filled properly! Terminating...")
|
||||||
|
sleep(25*60)
|
||||||
|
else:
|
||||||
|
print("SELF_BACKUP mode disabled, terminating...")
|
||||||
|
logger.info("SELF_BACKUP mode disabled, terminating...")
|
||||||
Loading…
Reference in New Issue