Compare commits
	
		
			2 Commits
		
	
	
		
			f34200901e
			...
			6e99404134
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6e99404134 | ||
| 
						 | 
					7b033454b3 | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,8 @@ settings.json
 | 
			
		||||
db.sqlite3
 | 
			
		||||
dummyusers.json
 | 
			
		||||
*.prof
 | 
			
		||||
 | 
			
		||||
statictest.txt
 | 
			
		||||
./test.sh
 | 
			
		||||
 | 
			
		||||
# IDE
 | 
			
		||||
.vscode
 | 
			
		||||
 
 | 
			
		||||
@@ -23,9 +23,10 @@ with open(BASE_DIR + "/settings.json", "r") as userfile:
 | 
			
		||||
    CALIBRE_DIR = os.path.abspath(usersettings["CALIBRE_DIR"])
 | 
			
		||||
    SECRET_KEY = usersettings["SECRET_KEY"]
 | 
			
		||||
    ALLOWED_HOSTS = usersettings["ALLOWED_HOSTS"]
 | 
			
		||||
    INTERNAL_IPS = usersettings["INTERNAL_IPS"]
 | 
			
		||||
    DEBUG = usersettings["DEBUG"]
 | 
			
		||||
 | 
			
		||||
DOCKER = os.environ.get('AM_DOCKER_INSTANCE', False)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 | 
			
		||||
 | 
			
		||||
@@ -64,38 +65,41 @@ STATIC_ROOT = BASE_DIR + "/static/"
 | 
			
		||||
#########################################################################
 | 
			
		||||
# LOGGING
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# logfile = usersettings["LOGFOLDER"] + "django.log"
 | 
			
		||||
# LOGGING = {
 | 
			
		||||
#     "version": 1,
 | 
			
		||||
#     "disable_existing_loggers": False,
 | 
			
		||||
#     "root": {"level": "INFO", "handlers": ["file"]},
 | 
			
		||||
#     "handlers": {
 | 
			
		||||
#         "file": {
 | 
			
		||||
#             "level": "INFO",
 | 
			
		||||
#             "class": "logging.FileHandler",
 | 
			
		||||
#             "filename": logfile,
 | 
			
		||||
#             "formatter": "app",
 | 
			
		||||
# TODO: think about the issue for a bit. no write access to file on first run
 | 
			
		||||
# but startscript doesn't run to give access if it can't start django
 | 
			
		||||
# if not DOCKER: 
 | 
			
		||||
#     logfile = "/app//data//django.log"
 | 
			
		||||
#     if not os.path.isfile(logfile):
 | 
			
		||||
#         os.mknod(logfile)
 | 
			
		||||
#     LOGGING = {
 | 
			
		||||
#         "version": 1,
 | 
			
		||||
#         "disable_existing_loggers": False,
 | 
			
		||||
#         "root": {"level": "INFO", "handlers": ["file"]},
 | 
			
		||||
#         "handlers": {
 | 
			
		||||
#             "file": {
 | 
			
		||||
#                 "level": "INFO",
 | 
			
		||||
#                 "class": "logging.FileHandler",
 | 
			
		||||
#                 "filename": logfile,
 | 
			
		||||
#                 "formatter": "app",
 | 
			
		||||
#             },
 | 
			
		||||
#         },
 | 
			
		||||
#     },
 | 
			
		||||
#     "loggers": {
 | 
			
		||||
#         "django": {
 | 
			
		||||
#             "handlers": ["file"],
 | 
			
		||||
#             "level": "INFO",
 | 
			
		||||
#             "propagate": True
 | 
			
		||||
#         "loggers": {
 | 
			
		||||
#             "django": {
 | 
			
		||||
#                 "handlers": ["file"],
 | 
			
		||||
#                 "level": "INFO",
 | 
			
		||||
#                 "propagate": True
 | 
			
		||||
#             },
 | 
			
		||||
#         },
 | 
			
		||||
#     },
 | 
			
		||||
#     "formatters": {
 | 
			
		||||
#         "app": {
 | 
			
		||||
#             "format": (
 | 
			
		||||
#                 u"%(asctime)s [%(levelname)-8s] "
 | 
			
		||||
#                 "(%(module)s.%(funcName)s) %(message)s"
 | 
			
		||||
#             ),
 | 
			
		||||
#             "datefmt": "%Y-%m-%d %H:%M:%S",
 | 
			
		||||
#         "formatters": {
 | 
			
		||||
#             "app": {
 | 
			
		||||
#                 "format": (
 | 
			
		||||
#                     u"%(asctime)s [%(levelname)-8s] "
 | 
			
		||||
#                     "(%(module)s.%(funcName)s) %(message)s"
 | 
			
		||||
#                 ),
 | 
			
		||||
#                 "datefmt": "%Y-%m-%d %H:%M:%S",
 | 
			
		||||
#             },
 | 
			
		||||
#         },
 | 
			
		||||
#     },
 | 
			
		||||
# }
 | 
			
		||||
#     }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##                                                                    ##
 | 
			
		||||
@@ -190,19 +194,23 @@ WSGI_APPLICATION = 'CalibreWebCompanion.wsgi.application'
 | 
			
		||||
##                    DATBASE                                         ##
 | 
			
		||||
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
 | 
			
		||||
 | 
			
		||||
if usersettings["ISDOCKER"]:
 | 
			
		||||
    defaultdb_path = "/usr/src/app/data/"
 | 
			
		||||
 | 
			
		||||
if DOCKER:
 | 
			
		||||
    djangodb_path = "/app/CalibreWebCompanion"
 | 
			
		||||
    calibredb_path = "/app/content/"
 | 
			
		||||
    
 | 
			
		||||
else:
 | 
			
		||||
    defaultdb_path = BASE_DIR
 | 
			
		||||
    djangodb_path = BASE_DIR
 | 
			
		||||
    calibredb_path = CALIBRE_DIR
 | 
			
		||||
 | 
			
		||||
DATABASES = {
 | 
			
		||||
    'default': {
 | 
			
		||||
        'ENGINE': 'django.db.backends.sqlite3',
 | 
			
		||||
        'NAME': os.path.join(defaultdb_path, 'db.sqlite3'),
 | 
			
		||||
        'NAME': os.path.join(djangodb_path, 'db.sqlite3'),
 | 
			
		||||
    },
 | 
			
		||||
    'calibre': {
 | 
			
		||||
        'ENGINE': 'django.db.backends.sqlite3',
 | 
			
		||||
        'NAME': os.path.join(CALIBRE_DIR, 'metadata.db'),
 | 
			
		||||
        'NAME': os.path.join(calibredb_path, 'metadata.db'),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
<div class="col s12 m7">
 | 
			
		||||
  <div class="card z-depth-0 horizontal">
 | 
			
		||||
    <div class="card-image">
 | 
			
		||||
      <a style="padding-top:15%" href=" /download/{{download}}"><img src=" /download/{{imgpath}}"
 | 
			
		||||
      <a style="padding-top:15%" href=" /content/{{download}}"><img src=" /content/{{imgpath}}"
 | 
			
		||||
          alt="download" srcset=""></a>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card-stacked">
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,13 @@
 | 
			
		||||
{
 | 
			
		||||
    "CALIBRE_DIR": "/usr/src/app/calibredir",
 | 
			
		||||
    "CALIBRE_DIR": "/app/content",
 | 
			
		||||
    "LOGFOLDER" : "/usr/src/app/data/logs/",
 | 
			
		||||
    "SECRET_KEY": "u(8^+rb%rz5hsx4v^^y(ul7g(4n7a8!db@s*9(m5cs*2_ppy8+",
 | 
			
		||||
    "ALLOWED_HOSTS": [
 | 
			
		||||
        "127.0.0.1"
 | 
			
		||||
        "*"
 | 
			
		||||
    ],
 | 
			
		||||
    "INTERNAL_IPS": [
 | 
			
		||||
        "127.0.0.1"
 | 
			
		||||
        "127.0.0.1", "localhost"
 | 
			
		||||
    ],
 | 
			
		||||
    "DEBUG" : true,
 | 
			
		||||
    "LOGFOLDER" : "/usr/src/app/data/logs/",
 | 
			
		||||
    "ISDOCKER" : true
 | 
			
		||||
 | 
			
		||||
    "DEBUG" : false
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -2,23 +2,22 @@
 | 
			
		||||
## pull official base image
 | 
			
		||||
FROM nginx/unit:1.22.0-python3.9
 | 
			
		||||
EXPOSE 80
 | 
			
		||||
 | 
			
		||||
ENV AM_DOCKER_INSTANCE Yes
 | 
			
		||||
## set work directory
 | 
			
		||||
WORKDIR /usr/src/app
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
## install dependencies
 | 
			
		||||
COPY ./requirements.txt .
 | 
			
		||||
RUN pip install -r requirements.txt
 | 
			
		||||
 | 
			
		||||
## copy project
 | 
			
		||||
COPY ./CalibreWebCompanion ./CalibreWebCompanion
 | 
			
		||||
COPY ./deployment/entrypoints/* /docker-entrypoint.d/
 | 
			
		||||
 | 
			
		||||
# perms
 | 
			
		||||
RUN chown -R unit:unit /usr/src/app 
 | 
			
		||||
RUN chown -R unit:unit /app 
 | 
			
		||||
COPY ./deployment/entrypoints/* /docker-entrypoint.d/
 | 
			
		||||
RUN chmod +x /docker-entrypoint.d/start.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# docker run --publish 80:80 \
 | 
			
		||||
# -v '/home/MassiveAtoms/Desktop/logs:/usr/src/app/data' \
 | 
			
		||||
# -v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre Library/:/usr/src/app/calibredir' \
 | 
			
		||||
# -v '/home/MassiveAtoms/Desktop/logs:/app/data' \
 | 
			
		||||
# -v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre Library/:/app/calibredir' \
 | 
			
		||||
# --name cw calibreweb:1.0
 | 
			
		||||
 
 | 
			
		||||
@@ -6,14 +6,30 @@
 | 
			
		||||
    },
 | 
			
		||||
    "routes": [
 | 
			
		||||
        {
 | 
			
		||||
            "match": {"uri": "/static/*"},
 | 
			
		||||
            "action": {"share": "/usr/src/app/CalibreWebCompanion/static"}
 | 
			
		||||
            "match": {
 | 
			
		||||
                "uri": [
 | 
			
		||||
                    "/content/*",
 | 
			
		||||
                    "!~\\.db"
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "action": {
 | 
			
		||||
                "share": "/app/"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "match": {"uri": "/download/*"},
 | 
			
		||||
            "action": {"share": "/usr/src/app/calibredir"}
 | 
			
		||||
            "match": {
 | 
			
		||||
                "uri": "/static/*"
 | 
			
		||||
            },
 | 
			
		||||
            "action": {
 | 
			
		||||
                "share": "/app/CalibreWebCompanion/"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "match": {
 | 
			
		||||
                "uri": [
 | 
			
		||||
                    "!~\\.db", "*"
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "action": {
 | 
			
		||||
                "pass": "applications/django"
 | 
			
		||||
            }
 | 
			
		||||
@@ -22,12 +38,16 @@
 | 
			
		||||
    "applications": {
 | 
			
		||||
        "django": {
 | 
			
		||||
            "type": "python 3",
 | 
			
		||||
            "path": "/usr/src/app/CalibreWebCompanion/",
 | 
			
		||||
            "path": "/app/CalibreWebCompanion/",
 | 
			
		||||
            "module": "CalibreWebCompanion.wsgi",
 | 
			
		||||
            "environment": {
 | 
			
		||||
                "DJANGO_SETTINGS_MODULE": "CalibreWebCompanion.settings",
 | 
			
		||||
                "DB_ENGINE": "django.db.backends.sqlite3"
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "processes" : {
 | 
			
		||||
                "max": 25,
 | 
			
		||||
                "spare": 1,
 | 
			
		||||
                "idle_timeout": 20
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,22 @@
 | 
			
		||||
path=/usr/src/app/CalibreWebCompanion
 | 
			
		||||
chown -R unit:unit /usr/src/app
 | 
			
		||||
CAL_DIR="/app/content/"
 | 
			
		||||
DATA_DIR="/app/data/"
 | 
			
		||||
CWC_PATH="/app/CalibreWebCompanion"
 | 
			
		||||
if [ ! -d "$CAL_DIR" ]; then
 | 
			
		||||
  echo "Calibre Library not mounted at the correct location."
 | 
			
		||||
  echo "Mount it at /app/content/"
 | 
			
		||||
  echo "Exiting..."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
python "${path}/manage.py" makemigrations
 | 
			
		||||
python "${path}/manage.py" migrate
 | 
			
		||||
if [ ! -d "$DATA_DIR" ]; then
 | 
			
		||||
  echo "A data directory not mounted at the correct location, exiting"
 | 
			
		||||
  echo "This is used to store the database and logs"
 | 
			
		||||
  echo "mount something at /app/data/"
 | 
			
		||||
  echo "exiting"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cp -R -u -p "/app/CalibreWebCompanion/db.sqlite3" "/app/data/"
 | 
			
		||||
ls -l /app
 | 
			
		||||
python "${CWC_PATH}/manage.py" makemigrations
 | 
			
		||||
python "${CWC_PATH}/manage.py" migrate
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,12 @@
 | 
			
		||||
Here's an example of step 5
 | 
			
		||||
```
 | 
			
		||||
docker run --publish 80:80 \
 | 
			
		||||
-v '/home/MassiveAtoms/Desktop/logs:/usr/src/app/data' \
 | 
			
		||||
-v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre\ Library/:/usr/src/app/calibredir' \
 | 
			
		||||
-v '/home/MassiveAtoms/Desktop/logs:/app/data' \
 | 
			
		||||
-v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre\ Library/:/app/calibredir' \
 | 
			
		||||
--name cw calibreweb:1.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
your Calibre path/volume/whatever needs to be mounted at `/usr/src/app/calibredir`, and you need to mount a volume for the db and logs at `/usr/src/app/data`
 | 
			
		||||
your Calibre path/volume/whatever needs to be mounted at `/app/calibredir`, and you need to mount a volume for the db and logs at `/app/data`
 | 
			
		||||
 | 
			
		||||
Issues with it at the moment:
 | 
			
		||||
1. we still need to do something to create a random secret key. Atm, this would still 
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								test.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								test.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
docker build --tag calibreweb:1.0  . -f ./deployment/Dockerfile
 | 
			
		||||
docker stop cw
 | 
			
		||||
docker rm cw
 | 
			
		||||
docker run --publish 80:80 \
 | 
			
		||||
-v '/home/MassiveAtoms/Desktop/logs:/app/data' \
 | 
			
		||||
-v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre Library/:/app/content' \
 | 
			
		||||
--name cw calibreweb:1.0
 | 
			
		||||
sleep 8
 | 
			
		||||
echo "download/test"
 | 
			
		||||
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1/download/statictest.txt
 | 
			
		||||
echo " "
 | 
			
		||||
echo "/test"
 | 
			
		||||
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1/statictest.txt
 | 
			
		||||
echo " "
 | 
			
		||||
echo "/static/test"
 | 
			
		||||
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1/static/statictest.txt
 | 
			
		||||
echo " "
 | 
			
		||||
		Reference in New Issue
	
	Block a user