nginx unit works
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ settings.json
 | 
				
			|||||||
db.sqlite3
 | 
					db.sqlite3
 | 
				
			||||||
dummyusers.json
 | 
					dummyusers.json
 | 
				
			||||||
*.prof
 | 
					*.prof
 | 
				
			||||||
 | 
					statictest.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# IDE
 | 
					# IDE
 | 
				
			||||||
.vscode
 | 
					.vscode
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,9 +23,10 @@ with open(BASE_DIR + "/settings.json", "r") as userfile:
 | 
				
			|||||||
    CALIBRE_DIR = os.path.abspath(usersettings["CALIBRE_DIR"])
 | 
					    CALIBRE_DIR = os.path.abspath(usersettings["CALIBRE_DIR"])
 | 
				
			||||||
    SECRET_KEY = usersettings["SECRET_KEY"]
 | 
					    SECRET_KEY = usersettings["SECRET_KEY"]
 | 
				
			||||||
    ALLOWED_HOSTS = usersettings["ALLOWED_HOSTS"]
 | 
					    ALLOWED_HOSTS = usersettings["ALLOWED_HOSTS"]
 | 
				
			||||||
    INTERNAL_IPS = usersettings["INTERNAL_IPS"]
 | 
					 | 
				
			||||||
    DEBUG = usersettings["DEBUG"]
 | 
					    DEBUG = usersettings["DEBUG"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOCKER = os.environ.get('AM_DOCKER_INSTANCE', False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 | 
					# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,9 +65,12 @@ STATIC_ROOT = BASE_DIR + "/static/"
 | 
				
			|||||||
#########################################################################
 | 
					#########################################################################
 | 
				
			||||||
# LOGGING
 | 
					# LOGGING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
# logfile = usersettings["LOGFOLDER"] + "django.log"
 | 
					# if not DOCKER: 
 | 
				
			||||||
 | 
					#     logfile = "/app//data//django.log"
 | 
				
			||||||
 | 
					#     if not os.path.isfile(logfile):
 | 
				
			||||||
 | 
					#         os.mknod(logfile)
 | 
				
			||||||
#     LOGGING = {
 | 
					#     LOGGING = {
 | 
				
			||||||
#         "version": 1,
 | 
					#         "version": 1,
 | 
				
			||||||
#         "disable_existing_loggers": False,
 | 
					#         "disable_existing_loggers": False,
 | 
				
			||||||
@@ -190,19 +194,23 @@ WSGI_APPLICATION = 'CalibreWebCompanion.wsgi.application'
 | 
				
			|||||||
##                    DATBASE                                         ##
 | 
					##                    DATBASE                                         ##
 | 
				
			||||||
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
 | 
					# 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:
 | 
					else:
 | 
				
			||||||
    defaultdb_path = BASE_DIR
 | 
					    djangodb_path = BASE_DIR
 | 
				
			||||||
 | 
					    calibredb_path = CALIBRE_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DATABASES = {
 | 
					DATABASES = {
 | 
				
			||||||
    'default': {
 | 
					    'default': {
 | 
				
			||||||
        'ENGINE': 'django.db.backends.sqlite3',
 | 
					        'ENGINE': 'django.db.backends.sqlite3',
 | 
				
			||||||
        'NAME': os.path.join(defaultdb_path, 'db.sqlite3'),
 | 
					        'NAME': os.path.join(djangodb_path, 'db.sqlite3'),
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    'calibre': {
 | 
					    'calibre': {
 | 
				
			||||||
        'ENGINE': 'django.db.backends.sqlite3',
 | 
					        '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="col s12 m7">
 | 
				
			||||||
  <div class="card z-depth-0 horizontal">
 | 
					  <div class="card z-depth-0 horizontal">
 | 
				
			||||||
    <div class="card-image">
 | 
					    <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>
 | 
					          alt="download" srcset=""></a>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="card-stacked">
 | 
					    <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+",
 | 
					    "SECRET_KEY": "u(8^+rb%rz5hsx4v^^y(ul7g(4n7a8!db@s*9(m5cs*2_ppy8+",
 | 
				
			||||||
    "ALLOWED_HOSTS": [
 | 
					    "ALLOWED_HOSTS": [
 | 
				
			||||||
        "127.0.0.1"
 | 
					        "*"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "INTERNAL_IPS": [
 | 
					    "INTERNAL_IPS": [
 | 
				
			||||||
        "127.0.0.1"
 | 
					        "127.0.0.1", "localhost"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DEBUG" : true,
 | 
					    "DEBUG" : false
 | 
				
			||||||
    "LOGFOLDER" : "/usr/src/app/data/logs/",
 | 
					 | 
				
			||||||
    "ISDOCKER" : true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2,23 +2,22 @@
 | 
				
			|||||||
## pull official base image
 | 
					## pull official base image
 | 
				
			||||||
FROM nginx/unit:1.22.0-python3.9
 | 
					FROM nginx/unit:1.22.0-python3.9
 | 
				
			||||||
EXPOSE 80
 | 
					EXPOSE 80
 | 
				
			||||||
 | 
					ENV AM_DOCKER_INSTANCE Yes
 | 
				
			||||||
## set work directory
 | 
					## set work directory
 | 
				
			||||||
WORKDIR /usr/src/app
 | 
					WORKDIR /app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## install dependencies
 | 
					## install dependencies
 | 
				
			||||||
COPY ./requirements.txt .
 | 
					COPY ./requirements.txt .
 | 
				
			||||||
RUN pip install -r requirements.txt
 | 
					RUN pip install -r requirements.txt
 | 
				
			||||||
 | 
					 | 
				
			||||||
## copy project
 | 
					## copy project
 | 
				
			||||||
COPY ./CalibreWebCompanion ./CalibreWebCompanion
 | 
					COPY ./CalibreWebCompanion ./CalibreWebCompanion
 | 
				
			||||||
COPY ./deployment/entrypoints/* /docker-entrypoint.d/
 | 
					
 | 
				
			||||||
# perms
 | 
					# 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
 | 
					RUN chmod +x /docker-entrypoint.d/start.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# docker run --publish 80:80 \
 | 
					# docker run --publish 80:80 \
 | 
				
			||||||
# -v '/home/MassiveAtoms/Desktop/logs:/usr/src/app/data' \
 | 
					# -v '/home/MassiveAtoms/Desktop/logs:/app/data' \
 | 
				
			||||||
# -v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre Library/:/usr/src/app/calibredir' \
 | 
					# -v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre Library/:/app/calibredir' \
 | 
				
			||||||
# --name cw calibreweb:1.0
 | 
					# --name cw calibreweb:1.0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,14 +6,30 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "routes": [
 | 
					    "routes": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "match": {"uri": "/static/*"},
 | 
					            "match": {
 | 
				
			||||||
            "action": {"share": "/usr/src/app/CalibreWebCompanion/static"}
 | 
					                "uri": [
 | 
				
			||||||
 | 
					                    "/content/*",
 | 
				
			||||||
 | 
					                    "!~\\.db"
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "action": {
 | 
				
			||||||
 | 
					                "share": "/app/"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "match": {"uri": "/download/*"},
 | 
					            "match": {
 | 
				
			||||||
            "action": {"share": "/usr/src/app/calibredir"}
 | 
					                "uri": "/static/*"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "action": {
 | 
				
			||||||
 | 
					                "share": "/app/CalibreWebCompanion/"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            "match": {
 | 
				
			||||||
 | 
					                "uri": [
 | 
				
			||||||
 | 
					                    "!~\\.db", "*"
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "action": {
 | 
					            "action": {
 | 
				
			||||||
                "pass": "applications/django"
 | 
					                "pass": "applications/django"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -22,12 +38,16 @@
 | 
				
			|||||||
    "applications": {
 | 
					    "applications": {
 | 
				
			||||||
        "django": {
 | 
					        "django": {
 | 
				
			||||||
            "type": "python 3",
 | 
					            "type": "python 3",
 | 
				
			||||||
            "path": "/usr/src/app/CalibreWebCompanion/",
 | 
					            "path": "/app/CalibreWebCompanion/",
 | 
				
			||||||
            "module": "CalibreWebCompanion.wsgi",
 | 
					            "module": "CalibreWebCompanion.wsgi",
 | 
				
			||||||
            "environment": {
 | 
					            "environment": {
 | 
				
			||||||
                "DJANGO_SETTINGS_MODULE": "CalibreWebCompanion.settings",
 | 
					                "DJANGO_SETTINGS_MODULE": "CalibreWebCompanion.settings",
 | 
				
			||||||
                "DB_ENGINE": "django.db.backends.sqlite3"
 | 
					                "DB_ENGINE": "django.db.backends.sqlite3"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "processes" : {
 | 
				
			||||||
 | 
					                "max": 25,
 | 
				
			||||||
 | 
					                "spare": 1,
 | 
				
			||||||
 | 
					                "idle_timeout": 20
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,22 @@
 | 
				
			|||||||
path=/usr/src/app/CalibreWebCompanion
 | 
					CAL_DIR="/app/content/"
 | 
				
			||||||
chown -R unit:unit /usr/src/app
 | 
					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
 | 
					if [ ! -d "$DATA_DIR" ]; then
 | 
				
			||||||
python "${path}/manage.py" migrate
 | 
					  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
 | 
					Here's an example of step 5
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
docker run --publish 80:80 \
 | 
					docker run --publish 80:80 \
 | 
				
			||||||
-v '/home/MassiveAtoms/Desktop/logs:/usr/src/app/data' \
 | 
					-v '/home/MassiveAtoms/Desktop/logs:/app/data' \
 | 
				
			||||||
-v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre\ Library/:/usr/src/app/calibredir' \
 | 
					-v '/home/MassiveAtoms/windows/Users/MassiveAtoms/Documents/Calibre\ Library/:/app/calibredir' \
 | 
				
			||||||
--name cw calibreweb:1.0
 | 
					--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:
 | 
					Issues with it at the moment:
 | 
				
			||||||
1. we still need to do something to create a random secret key. Atm, this would still 
 | 
					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