Phase 0 Complete
This commit is contained in:
-31
@@ -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
@@ -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**
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -1,7 +0,0 @@
|
||||
|
||||
@echo off
|
||||
timeout /t 2 /nobreak
|
||||
taskkill /F /PID 15428
|
||||
set PRODUCTION=true
|
||||
start "" "python" "app.py"
|
||||
|
||||
-17
@@ -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 +0,0 @@
|
||||
{"upload_folder": "uploads", "max_file_age_days": 14, "max_file_size_bytes": 26843545600}
|
||||
@@ -1,5 +0,0 @@
|
||||
@echo off
|
||||
echo Starting PacCrypt in DEVELOPMENT mode...
|
||||
set PRODUCTION=false
|
||||
python app.py
|
||||
pause
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo "Starting PacCrypt in DEVELOPMENT mode..."
|
||||
export PRODUCTION=false
|
||||
python3 app.py
|
||||
@@ -1,5 +0,0 @@
|
||||
@echo off
|
||||
echo Starting PacCrypt in PRODUCTION mode...
|
||||
set PRODUCTION=true
|
||||
python app.py
|
||||
pause
|
||||
@@ -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 |
Reference in New Issue
Block a user