Skip to content

Commit eae070c

Browse files
authored
Refactor: paperless-ngx (Breaking Change Inside) (#9223)
1 parent c1f12b4 commit eae070c

File tree

2 files changed

+46
-62
lines changed

2 files changed

+46
-62
lines changed

ct/paperless-ngx.sh

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,37 @@ function update_script() {
2727
msg_error "No ${APP} Installation Found!"
2828
exit
2929
fi
30+
31+
# Check for old data structure and prompt migration
32+
if [[ -f /opt/paperless/paperless.conf ]]; then
33+
local OLD_DIRS=()
34+
[[ -d /opt/paperless/consume ]] && OLD_DIRS+=("consume")
35+
[[ -d /opt/paperless/data ]] && OLD_DIRS+=("data")
36+
[[ -d /opt/paperless/media ]] && OLD_DIRS+=("media")
37+
38+
if [[ ${#OLD_DIRS[@]} -gt 0 ]]; then
39+
msg_error "Old data structure detected in /opt/paperless/"
40+
msg_custom "📂" "Found directories: ${OLD_DIRS[*]}"
41+
echo -e ""
42+
msg_custom "🔄" "Migration required to new data structure (/opt/paperless_data/)"
43+
msg_custom "📖" "Please follow the migration guide:"
44+
echo -e "${TAB}${GATEWAY}${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/9223${CL}"
45+
echo -e ""
46+
msg_custom "⚠️" "Update aborted. Please migrate your data first."
47+
exit 1
48+
fi
49+
fi
50+
3051
if check_for_gh_release "paperless" "paperless-ngx/paperless-ngx"; then
3152
msg_info "Stopping all Paperless-ngx Services"
3253
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
3354
msg_ok "Stopped all Paperless-ngx Services"
3455

3556
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
3657

37-
msg_info "Backing up user data and configuration"
58+
msg_info "Backing up configuration"
3859
local BACKUP_DIR="/opt/paperless_backup_$$"
3960
mkdir -p "$BACKUP_DIR"
40-
for dir in /opt/paperless/*/; do
41-
dir_name=$(basename "$dir")
42-
if [[ ! "$dir_name" =~ ^(docker|docs|scripts|src|static)$ ]]; then
43-
cp -r "/opt/paperless/$dir_name" "$BACKUP_DIR/" 2>/dev/null || true
44-
fi
45-
done
4661
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
4762
msg_ok "Backup completed to $BACKUP_DIR"
4863

@@ -83,16 +98,9 @@ function update_script() {
8398
rm -rf /opt/paperless/venv
8499
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
85100

86-
msg_info "Backing up user data and configuration"
101+
msg_info "Backing up configuration"
87102
local BACKUP_DIR="/opt/paperless_backup_$$"
88103
mkdir -p "$BACKUP_DIR"
89-
90-
for dir in /opt/paperless/*/; do
91-
dir_name=$(basename "$dir")
92-
if [[ ! "$dir_name" =~ ^(docker|docs|scripts|src|static)$ ]]; then
93-
cp -r "/opt/paperless/$dir_name" "$BACKUP_DIR/" 2>/dev/null || true
94-
fi
95-
done
96104
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
97105
msg_ok "Backup completed to $BACKUP_DIR"
98106

@@ -121,16 +129,9 @@ function update_script() {
121129
done
122130

123131
$STD systemctl daemon-reload
124-
msg_info "Backing up user data and configuration"
132+
msg_info "Backing up configuration"
125133
BACKUP_DIR="/opt/paperless_backup_$$"
126134
mkdir -p "$BACKUP_DIR"
127-
128-
for dir in /opt/paperless/*/; do
129-
dir_name=$(basename "$dir")
130-
if [[ ! "$dir_name" =~ ^(docker|docs|scripts|src|static)$ ]]; then
131-
cp -r "/opt/paperless/$dir_name" "$BACKUP_DIR/" 2>/dev/null || true
132-
fi
133-
done
134135
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
135136
msg_ok "Backup completed to $BACKUP_DIR"
136137

install/paperless-ngx-install.sh

Lines changed: 22 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -44,46 +44,36 @@ $STD apt install -y \
4444
msg_ok "Installed Dependencies"
4545

4646
PG_VERSION="16" setup_postgresql
47+
PG_DB_NAME="paperlessdb" PG_DB_USER="paperless" setup_postgresql_db
4748
PYTHON_VERSION="3.13" setup_uv
4849
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
4950

50-
msg_info "Setting up PostgreSQL database"
51-
DB_NAME=paperlessdb
52-
DB_USER=paperless
53-
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
54-
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
55-
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
56-
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
57-
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
58-
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
59-
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
60-
{
61-
echo "Paperless-ngx-Credentials"
62-
echo "Paperless-ngx Database Name: $DB_NAME"
63-
echo "Paperless-ngx Database User: $DB_USER"
64-
echo "Paperless-ngx Database Password: $DB_PASS"
65-
echo "Paperless-ngx Secret Key: $SECRET_KEY\n"
66-
echo "Paperless-ngx WebUI User: admin"
67-
echo "Paperless-ngx WebUI Password: $DB_PASS"
68-
} >>~/paperless-ngx.creds
69-
msg_ok "Setup PostgreSQL database"
70-
7151
msg_info "Setup Paperless-ngx"
7252
cd /opt/paperless
53+
rm -rf /opt/paperless/docker
7354
$STD uv sync --all-extras
7455
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
75-
mkdir -p {consume,data,media,static}
56+
mkdir -p /opt/paperless_data/{consume,data,media,trash}
57+
mkdir -p /opt/paperless/static
58+
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
59+
{
60+
echo ""
61+
echo "Paperless-ngx Secret Key: $SECRET_KEY"
62+
echo "Paperless-ngx WebUI User: admin"
63+
echo "Paperless-ngx WebUI Password: $PG_DB_PASS"
64+
} >>~/paperless-ngx.creds
7665
sed -i \
7766
-e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' \
78-
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
79-
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
80-
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
67+
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless_data/consume|" \
68+
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless_data/data|" \
69+
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless_data/media|" \
70+
-e "s|#PAPERLESS_EMPTY_TRASH_DIR=|PAPERLESS_EMPTY_TRASH_DIR=/opt/paperless_data/trash|" \
8171
-e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \
8272
-e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \
8373
-e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \
84-
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" \
85-
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" \
86-
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" \
74+
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$PG_DB_NAME|" \
75+
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$PG_DB_USER|" \
76+
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$PG_DB_PASS|" \
8777
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
8878
/opt/paperless/paperless.conf
8979
cd /opt/paperless/src
@@ -97,7 +87,7 @@ msg_info "Setting up admin Paperless-ngx User & Password"
9787
cat <<EOF | uv run -- python /opt/paperless/src/manage.py shell
9888
from django.contrib.auth import get_user_model
9989
UserModel = get_user_model()
100-
user = UserModel.objects.create_user('admin', password='$DB_PASS')
90+
user = UserModel.objects.create_user('admin', password='$PG_DB_PASS')
10191
user.is_superuser = True
10292
user.is_staff = True
10393
user.save()
@@ -108,8 +98,8 @@ msg_info "Installing Natural Language Toolkit (Patience)"
10898
cd /opt/paperless
10999
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data snowball_data
110100
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data stopwords
111-
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt_tab || \
112-
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt
101+
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt_tab ||
102+
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt
113103
for policy_file in /etc/ImageMagick-6/policy.xml /etc/ImageMagick-7/policy.xml; do
114104
if [[ -f "$policy_file" ]]; then
115105
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' "$policy_file"
@@ -186,11 +176,4 @@ fi
186176

187177
motd_ssh
188178
customize
189-
190-
msg_info "Cleaning up"
191-
rm -rf /opt/paperless/docker
192-
rm -rf /tmp/ghostscript*
193-
$STD apt -y autoremove
194-
$STD apt -y autoclean
195-
$STD apt -y clean
196-
msg_ok "Cleaned"
179+
cleanup_lxc

0 commit comments

Comments
 (0)