164 lines
7.3 KiB
Plaintext
164 lines
7.3 KiB
Plaintext
# https://www.reddit.com/r/selfhosted/comments/vpotsn/sheetable_selfhosted_music_sheet_organizer_v10/
|
|
|
|
Create user and group
|
|
---------------------
|
|
Credentials -> Local Users -> Add
|
|
Full Name: sheetable
|
|
Username: sheetabl
|
|
Disable Password: <select>
|
|
Email: <leave blank>
|
|
UID: (note)
|
|
Create New Primary Group: <unselect>
|
|
Primary Group: sheetabl
|
|
Create Home Directory: <uncheck>
|
|
Samba Authentication: <uncheck>
|
|
Save
|
|
|
|
sheetabl UID: 3051
|
|
sheetabl GID: 3050
|
|
|
|
Create datasets
|
|
---------------
|
|
/mnt/SSD1/docker/data/sheetable # set Owner:Group to sheetabl:sheetabl
|
|
/mnt/SSD1/docker/data/sheetable/config # set Owner:Group to sheetabl:sheetabl
|
|
/mnt/SSD1/docker/data/sheetable/pgbackups # set Owner:Group to pguser:pguser
|
|
/mnt/SSD1/docker/data/sheetable/pgdata # set Owner:Group to pguser:pguser
|
|
|
|
Create secrets folder
|
|
---------------------
|
|
mkdir -p /opt/stacks/sheetable/secrets
|
|
|
|
Verifying truenas sheetable container sheets folder
|
|
---------------------------------------------------
|
|
# List sheetable pods to check if they are running and to get pod name. If not, wait for the container to start:
|
|
k3s kubectl get pods -n ix-sheetable
|
|
# If all are ok, the listed containers should resemble the following:
|
|
# NAME READY STATUS RESTARTS AGE
|
|
# sheetable-cnpg-main-1 1/1 Running 0 5d23h
|
|
# sheetable-66df7b74c5-qr9jq 1/1 Running 0 12m
|
|
# Verify that the /app/config folder has a sheets subfolder:
|
|
k3s kubectl exec -n ix-sheetable sheetable-66df7b74c5-qr9jq -c sheetable -it -- ls -al /app/config
|
|
# expected listing:
|
|
# total 2
|
|
# drwxr-xr-x 3 568 568 3 Jul 11 16:33 .
|
|
# drwxr-xr-x 1 root root 3 Sep 21 11:58 ..
|
|
# drwxr-xr-x 4 568 568 4 Jul 11 16:33 sheets
|
|
# If you don't see the sheets folder as per the above, shell into the container and check where the sheets folder is located.
|
|
k3s kubectl exec -n ix-sheetable sheetable-66df7b74c5-qr9jq -c sheetable -it -- sh
|
|
|
|
# Update the APPLICATION_CONFIG_PATH value in the .env file with the correct location if not /app/config
|
|
|
|
Copy folder to docker stacks
|
|
----------------------------
|
|
# In Windows cmd shell in sheetable folder, enter:
|
|
./cp2nas
|
|
# or
|
|
pscp -P 22 -r stacks/*.* root@192.168.2.2:/mnt/SSD1/docker/stacks/sheetable/
|
|
# This should copy sheetable stacks folder to /mnt/SSD1/docker/stacks/sheetable
|
|
|
|
Create secrets
|
|
--------------
|
|
# In Truenas shell:
|
|
cd /mnt/SSD1/docker/stacks/sheetable/secrets
|
|
echo -n 'your_admin_email' > /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_admin_email
|
|
echo -n 'your_admin_password' > /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_admin_password
|
|
echo -n 'your_db_name' > /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_postgresql_database
|
|
echo -n 'your_db_user' > /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_postgresql_username
|
|
openssl rand 36 | base64 -w 0 > /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_postgresql_password
|
|
openssl rand 26 | base64 -w 0 | sed 's/[\$,\#,/,+,=]//g' > /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_api_secret
|
|
# restrict access
|
|
cd /mnt/SSD1/docker/stacks/sheetable
|
|
chown -R sheetabl:sheetabl secrets/
|
|
chmod -R 400 secrets/
|
|
# read existing acl permissions, if any
|
|
getfacl /mnt/SSD1/docker/stacks/sheetable/secrets
|
|
# set acl permissions
|
|
setfacl -m u:postgres:4 /mnt/SSD1/docker/stacks/sheetable/secrets
|
|
setfacl -m u:postgres:4 /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_postgresql_password
|
|
setfacl -m u:postgres:4 /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_postgresql_username
|
|
setfacl -m u:postgres:4 /mnt/SSD1/docker/stacks/sheetable/secrets/sheetable_postgresql_database
|
|
# NB! if you want to remove all acl entries from a folder recursively, use setfacl -b -R <foldername>
|
|
# to list secrets in secrets dir
|
|
cd /mnt/SSD1/docker/stacks/authentik/secrets
|
|
for i in $(ls -1); do echo $i = `cat $i`; done | sort
|
|
|
|
|
|
Backup sheetable database
|
|
--------------------------
|
|
# In truenas shell:
|
|
mkdir /mnt/stpool1/apps/pgadmin/storage/stuurmcp_telkomsa.net/$(date -I)
|
|
chown pgadmin:pgadmin /mnt/stpool1/apps/pgadmin/storage/stuurmcp_telkomsa.net/$(date -I)
|
|
# Using browser, log in to pgAdmin on truenas
|
|
# Connect to servers; refer to "connecting to servers.txt", which also explains how to obtain db passwords
|
|
# To perform plain text backup:
|
|
# Navigate to Servers => sheetable -> Databases -> sheetable
|
|
# Right click on sheetable database and select Backup...
|
|
# Enter the following on the different tabs of dialog box that opened:
|
|
General:
|
|
# Replace ##### with date in YYYY-MM-DD format when backup is being made
|
|
Filename: /#####/sheetable-backup.sql (this maps to: /mnt/stpool1/apps/pgadmin/storage/stuurmcp_telkomsa.net/#####/sheetable-backup.sql on truenas)
|
|
# Or click on folder icon and navigate to the folder that was created above. Enter sheetable-backup.sql in Save As field, then click on Create
|
|
Format: Plain
|
|
Encoding: UTF8
|
|
Role name: sheetable
|
|
Data Options:
|
|
Sections:
|
|
Pre-data: <select>
|
|
Data: <select>
|
|
Post-data: <select>
|
|
Objects:
|
|
Check public to select all objects
|
|
Click Backup
|
|
# After backup, verify presence of backup file:
|
|
ls -al /mnt/stpool1/apps/pgadmin/storage/stuurmcp_telkomsa.net/$(date -I)
|
|
|
|
Migrating database
|
|
------------------
|
|
# In truenas shell
|
|
# copy backup file(s) to sheetable backups folder, replacing $(date -I) with date when backup was made if not today
|
|
cp -vr /mnt/stpool1/apps/pgadmin/storage/stuurmcp_telkomsa.net/$(date -I) /mnt/SSD1/docker/data/sheetable/pgbackups
|
|
jlmkr shell docker
|
|
cd /opt/stacks/sheetable
|
|
docker compose down
|
|
# remove all files/folders from pgdata; if any are already in this folder with data to be retained, move it to another folder before executing next command
|
|
rm -r /mnt/data/sheetable/pgdata/*
|
|
docker compose up -d
|
|
# After successfull startup of sheetable and postgres, stop sheetable from docker cmd line
|
|
docker stop sheetable
|
|
docker exec sheetable_postgresql psql -U sheetable -d postgres -c "DROP DATABASE \"sheetable\";"
|
|
docker exec sheetable_postgresql psql -U sheetable -d postgres -c "CREATE DATABASE \"sheetable\";"
|
|
docker exec sheetable_postgresql psql -U sheetable -d sheetable -f /mnt/backups/$(date -I)/sheetable-backup.sql # replace $(date -I) with the appropriate date
|
|
|
|
Migrating config storage
|
|
------------------------
|
|
# In truenas shell
|
|
# copy config storage to new install data folder
|
|
cp -pr /mnt/stpool1/apps/sheetable/* /mnt/SSD1/docker/data/sheetable/appdata/
|
|
chown -R sheetabl:sheetabl /mnt/SSD1/docker/data/sheetable/appdata/
|
|
docker start sheetable
|
|
|
|
Default admin login
|
|
-------------------
|
|
Email: admin@admin.com
|
|
Password: sheetable
|
|
|
|
Stop truenas sheetable
|
|
-----------------------
|
|
# In truenas shell
|
|
heavyscript app --stop sheetable
|
|
# NB: Do NOT stop sheetable with truenas gui
|
|
|
|
Troubleshooting
|
|
---------------
|
|
# If you get persistent db authentication errors:
|
|
Ensure that the service name (name of the stanza), host name and container name of the postgresql container in the compose.yml file and the DB_HOST value in the .env file are all the same
|
|
# If you cannot login to sheetable with the email and password used on the truenas version:
|
|
Check the /mnt/data/sheetable/config folder to see if there is any *.db file created. If so, it means that sheetable created a default sqlite db instead of using postgres. Make sure that the .sheetable.env file has a DB_DRIVER=postgres line item.
|
|
|
|
If you need to log into db
|
|
--------------------------
|
|
docker exec -it sheetable_postgresql bash
|
|
psql -U sheetable -d sheetable
|
|
|
|
|