Phase 0 Complete

This commit is contained in:
TySP-Dev
2025-08-06 15:52:26 -10:00
parent 2a414e62cf
commit 099a5c8f18
19 changed files with 179 additions and 103 deletions
-31
View File
@@ -1,31 +0,0 @@
# Base image
FROM python:3.11-slim
# Environment vars
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PRODUCTION=true
# Working directory
WORKDIR /app
# Install system dependencies
RUN apt-get update && \
apt-get install -y git && \
rm -rf /var/lib/apt/lists/*
# Copy dependency file
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy entire app
COPY . .
# Ensure uploads folder exists
RUN mkdir -p uploads
# Expose the port Flask uses
EXPOSE 5000
# Start the app
CMD ["python", "app.py"]
+6 -1
View File
@@ -6,6 +6,11 @@
### Phase 0
- [x] Remove docker files (Dropping official docker support)
<<<<<<< HEAD
- [x] Update README.md to be current.
=======
>>>>>>> 2a414e62cf21b47eb5976535fe1499e02d561f4c
- [x] Add roadmap.md to repo
@@ -15,7 +20,7 @@
- [x] Create /paccrypt_algos/ folder
- [ ] Builder better start, stop and restart scripts both prod and dev (Universal)
- [x] Builder better start, stop and restart scripts both prod and dev (Linux Only)
- [ ] Add a button in the admin panel to switch to and from prod and dev modes - **Saving for UI Revamp**
+5 -5
View File
@@ -31,14 +31,14 @@ app.secret_key = os.getenv("FLASK_SECRET", os.urandom(24))
CORS(app, origins=["https://pdf.unnaturalll.dev"])
# ===== Constants =====
ADMIN_CRED_FILE = 'admin_creds.json'
ADMIN_KEY_FILE = 'admin_key.key'
ADMIN_LOG_FILE = 'admin_logs.enc'
SETTINGS_FILE = 'settings.json'
ADMIN_CRED_FILE = 'application_data/admin_creds.json'
ADMIN_KEY_FILE = 'application_data/admin_key.key'
ADMIN_LOG_FILE = 'application_data/admin_logs.enc'
SETTINGS_FILE = 'application_data/settings.json'
ALPHABET = list('abcdefghijklmnopqrstuvwxyz')
DEFAULT_SETTINGS = {
"upload_folder": "uploads",
"upload_folder": "pacshare",
"max_file_age_days": 14,
"max_file_size_bytes": 25 * 1024 * 1024 * 1024 # 25GB
}
@@ -0,0 +1,46 @@
import os
import subprocess
import signal
import time
import sys
import psutil
APP_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../app.py"))
DEBUG = True
def log(msg):
if DEBUG:
print(msg)
def start_dev():
env = os.environ.copy()
env["PRODUCTION"] = "false"
return subprocess.Popen(
["python3", APP_PATH],
env=env,
preexec_fn=os.setsid,
stdout=sys.stdout,
stderr=sys.stderr
)
def stop_by_port(port=5000):
for proc in psutil.process_iter(["pid", "name"]):
try:
for conn in proc.connections(kind="inet"):
if conn.laddr.port == port:
log(f"[*] Killing process {proc.pid} using port {port}")
os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
return
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
log(f"[!] No process found using port {port}")
def main():
log("[*] Restarting PacCrypt in DEVELOPMENT mode...")
stop_by_port()
time.sleep(1)
start_dev()
if __name__ == "__main__":
main()
@@ -0,0 +1,40 @@
import os
import subprocess
import signal
import time
import sys
import psutil
APP_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../app.py"))
def start_prod():
env = os.environ.copy()
env["PRODUCTION"] = "true"
return subprocess.Popen(
["python3", APP_PATH],
env=env,
preexec_fn=os.setsid,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
def stop_by_port(port=5000):
for proc in psutil.process_iter(["pid", "name"]):
try:
for conn in proc.connections(kind="inet"):
if conn.laddr.port == port:
print(f"[*] Killing process {proc.pid} using port {port}")
os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
return
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
print(f"[!] No process found using port {port}")
def main():
print("[*] Restarting PacCrypt in PRODUCTION mode with Waitress...")
stop_by_port()
time.sleep(1)
start_prod()
if __name__ == "__main__":
main()
@@ -0,0 +1,30 @@
import os
import subprocess
import time
import sys
APP_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../app.py"))
DEBUG = True
def log(msg):
if DEBUG:
print(msg)
def start_dev():
env = os.environ.copy()
env["PRODUCTION"] = "false"
return subprocess.Popen(
["python3", APP_PATH],
env=env,
preexec_fn=os.setsid,
stdout=sys.stdout,
stderr=sys.stderr
)
def main():
log("[*] Starting PacCrypt in DEVELOPMENT mode...")
start_dev()
if __name__ == "__main__":
main()
@@ -0,0 +1,24 @@
import os
import subprocess
import time
import sys
APP_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../app.py"))
def start_prod():
env = os.environ.copy()
env["PRODUCTION"] = "true"
return subprocess.Popen(
["python3", APP_PATH],
env=env,
preexec_fn=os.setsid,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
def main():
print("[*] Starting PacCrypt in PRODUCTION mode with Waitress...")
start_prod()
if __name__ == "__main__":
main()
+27
View File
@@ -0,0 +1,27 @@
import psutil
import os
import signal
DEBUG = True
def log(msg):
if DEBUG:
print(msg)
def stop_by_port(port=5000):
for proc in psutil.process_iter(["pid", "name"]):
try:
for conn in proc.connections(kind="inet"):
if conn.laddr.port == port:
log(f"[*] Killing process {proc.pid} using port {port}")
os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
return
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
log(f"[!] No process found using port {port}")
def main():
stop_by_port()
if __name__ == "__main__":
main()
@@ -8,4 +8,4 @@ werkzeug==3.0.1
psutil>=5.9.0,<6.0.0
# nginx - Only needed for Nginx integration, not installed via pip
# Run pip install -r requirements.txt
# Run pip install -r application_data/requirements.txt
-22
View File
@@ -1,22 +0,0 @@
version: "3.8"
services:
paccrypt:
build: .
container_name: paccrypt
ports:
- "5001:5000"
environment:
- PYTHONDONTWRITEBYTECODE=1
- PYTHONUNBUFFERED=1
- PRODUCTION=true
volumes:
- /mnt/stor4tb/uploads:/app/uploads
restart: unless-stopped
networks:
- shared_internal
networks:
shared_internal:
external: true
-7
View File
@@ -1,7 +0,0 @@
@echo off
timeout /t 2 /nobreak
taskkill /F /PID 15428
set PRODUCTION=true
start "" "python" "app.py"
-17
View File
@@ -1,17 +0,0 @@
#!/bin/bash
sleep 2
# Save current process PID
PID=$1
# Gracefully stop the current server
kill "$PID"
# Wait until it exits
while kill -0 "$PID" 2>/dev/null; do
sleep 0.5
done
# Restart with the same interpreter and script
export PRODUCTION=true
exec "$2" "$3"
-1
View File
@@ -1 +0,0 @@
{"upload_folder": "uploads", "max_file_age_days": 14, "max_file_size_bytes": 26843545600}
-5
View File
@@ -1,5 +0,0 @@
@echo off
echo Starting PacCrypt in DEVELOPMENT mode...
set PRODUCTION=false
python app.py
pause
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
echo "Starting PacCrypt in DEVELOPMENT mode..."
export PRODUCTION=false
python3 app.py
-5
View File
@@ -1,5 +0,0 @@
@echo off
echo Starting PacCrypt in PRODUCTION mode...
set PRODUCTION=true
python app.py
pause
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
echo "Starting PacCrypt in PRODUCTION mode..."
export PRODUCTION=true
python3 app.py
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB