Reduced some image 301 round trips
This commit is contained in:
		@@ -10,16 +10,15 @@ RUN chown www-data:www-data . -R
 | 
			
		||||
 | 
			
		||||
RUN pip3 install Flask redis compressinja Celery
 | 
			
		||||
 | 
			
		||||
COPY . /app/
 | 
			
		||||
 | 
			
		||||
ADD [ "https://github.com/tgckpg/BotanJS/releases/download/compressors/closure.jar" \
 | 
			
		||||
    , "https://github.com/tgckpg/BotanJS/releases/download/compressors/yuicompressor.jar" \
 | 
			
		||||
    , "/opt/utils/" ]
 | 
			
		||||
 | 
			
		||||
RUN chmod 644 /opt/utils/*.jar
 | 
			
		||||
 | 
			
		||||
COPY . /app/
 | 
			
		||||
 | 
			
		||||
USER www-data
 | 
			
		||||
 | 
			
		||||
EXPOSE 5000
 | 
			
		||||
ENTRYPOINT ["setup/docker.start"]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,15 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
import configparser
 | 
			
		||||
import configparser, os
 | 
			
		||||
 | 
			
		||||
Config = configparser.ConfigParser( interpolation = configparser.ExtendedInterpolation() )
 | 
			
		||||
Config.read( "settings.ini" )
 | 
			
		||||
 | 
			
		||||
DEBUG = Config[ "Env" ][ "Debug" ]
 | 
			
		||||
DEBUG = os.getenv( "DEBUG" )
 | 
			
		||||
if DEBUG is None:
 | 
			
		||||
	DEBUG = Config[ "Env" ][ "Debug" ]
 | 
			
		||||
else:
 | 
			
		||||
	Config[ "Env" ][ "Debug" ] = DEBUG
 | 
			
		||||
 | 
			
		||||
REDIS_CONN = os.getenv( "REDIS_CONN" )
 | 
			
		||||
if not REDIS_CONN is None:
 | 
			
		||||
	Config[ "Redis" ][ "ConnStr" ] = REDIS_CONN
 | 
			
		||||
 
 | 
			
		||||
@@ -285,7 +285,8 @@ class BotanClassResolver:
 | 
			
		||||
		if cacheFile != None:
 | 
			
		||||
			return cacheFile;
 | 
			
		||||
 | 
			
		||||
		outputCss = ""
 | 
			
		||||
		# The root file
 | 
			
		||||
		outputCss = self.BotanFile( "_this.css" )
 | 
			
		||||
 | 
			
		||||
		for f in self.cleanList( cList ):
 | 
			
		||||
			outputCss += self.BotanFile( f )
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
textarea.v_snippet_input {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,14 @@
 | 
			
		||||
.site_file[data-type="album"] {
 | 
			
		||||
.site-file[data-type="album"] {
 | 
			
		||||
	column-width: 225px;
 | 
			
		||||
	column-gap: 0.75em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.site_file[data-type="album"] > div {
 | 
			
		||||
.site-file[data-type="album"] > div {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	margin-bottom: 0.5em;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.site_file[data-type="album"] > div img {
 | 
			
		||||
.site-file[data-type="album"] > div img {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -64,11 +64,9 @@
 | 
			
		||||
 | 
			
		||||
				Cycle.next( function()
 | 
			
		||||
				{
 | 
			
		||||
					new SiteFile( this.id, this.hash );
 | 
			
		||||
				}.bind({ id: uuid, hash: file.hash }) );
 | 
			
		||||
					new SiteFile( this.id, this.info.hash, this.info );
 | 
			
		||||
				}.bind({ id: uuid, info: file }) );
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			console.log( finfo );
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		var loadFailed = function( obj )
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.inline-code {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
	font-size: 1.12em;
 | 
			
		||||
 | 
			
		||||
	color: black;
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
	/** @type {_AstConf_.SiteFile} */
 | 
			
		||||
	var config = null;
 | 
			
		||||
 | 
			
		||||
	var SiteFile  = function ( id, hash )
 | 
			
		||||
	var SiteFile  = function ( id, hash, nObj )
 | 
			
		||||
	{
 | 
			
		||||
		if( !config ) throw new Error( "config is not defined" );
 | 
			
		||||
		// TODO: Make a trigger for downloading from server
 | 
			
		||||
@@ -38,9 +38,14 @@
 | 
			
		||||
		if( stage.getAttribute( "noauto" ) != null ) return this;
 | 
			
		||||
 | 
			
		||||
		var applyStructure = function( obj )
 | 
			
		||||
		{
 | 
			
		||||
			return _applyStructure( JSON.parse( obj ).file );
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		var _applyStructure = function( obj )
 | 
			
		||||
		{
 | 
			
		||||
			/** @type {_AstJson_.SiteFile} */
 | 
			
		||||
			var finfo = JSON.parse( obj ).file;
 | 
			
		||||
			var finfo = obj;
 | 
			
		||||
 | 
			
		||||
			switch( finfo.type )
 | 
			
		||||
			{
 | 
			
		||||
@@ -50,16 +55,16 @@
 | 
			
		||||
					switch( IDOMElement(stage).getDAttribute('size') )
 | 
			
		||||
					{
 | 
			
		||||
						case "small":
 | 
			
		||||
							node.src = config.path.image.small + hash + '.jpg';
 | 
			
		||||
							node.src = finfo.thumbs.small || ( config.path.image.small + hash + '.jpg' );
 | 
			
		||||
							break;
 | 
			
		||||
						case "medium":
 | 
			
		||||
							node.src = config.path.image.medium + hash + '.jpg';
 | 
			
		||||
							node.src = finfo.thumbs.medium || ( config.path.image.medium + hash + '.jpg' );
 | 
			
		||||
							break;
 | 
			
		||||
						case "original":
 | 
			
		||||
							node.src = config.path.image.original + hash + '.jpg';
 | 
			
		||||
							break;
 | 
			
		||||
						default: // large
 | 
			
		||||
							node.src = config.path.image.large + hash + '.jpg';
 | 
			
		||||
							node.src = finfo.thumbs.large || ( config.path.image.large + hash + '.jpg' );
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					stage.appendChild(Dand.wrapne(
 | 
			
		||||
@@ -134,7 +139,14 @@
 | 
			
		||||
			stage.appendChild( Dand.wrapc( "sf_failed", Dand.textNode( "Error: Failed to get resources info" ) ) );
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		this.loadInfo( applyStructure, loadFailed );
 | 
			
		||||
		if( nObj )
 | 
			
		||||
		{
 | 
			
		||||
			_applyStructure( nObj );
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			this.loadInfo( applyStructure, loadFailed );
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	SiteFile.prototype.loadInfo = function( success, failed )
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@
 | 
			
		||||
 | 
			
		||||
/*{{{ Global Element Styles */
 | 
			
		||||
pre {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
textarea, input, div[contentEditable="true"], select {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
.build-list > a {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
 | 
			
		||||
	display: block;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
.build-status > * .failed { color: darkred; }
 | 
			
		||||
 | 
			
		||||
.build-commit-message {
 | 
			
		||||
    font-family: monospace;
 | 
			
		||||
    font-family: site-mono;
 | 
			
		||||
	padding: 0.2em 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
.site-news { font-family: monospace; }
 | 
			
		||||
.site-news { font-family: site-mono; }
 | 
			
		||||
.site-news > span { display: block; }
 | 
			
		||||
 | 
			
		||||
.rbuilds > a {
 | 
			
		||||
	display: block;
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
}
 | 
			
		||||
.rbuilds > a > span {
 | 
			
		||||
    padding: 0 0.5em;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ body {
 | 
			
		||||
    font-family: custom-sans,Helvetica,Arial,STHeiti,"Microsoft JhengHei","微軟正黑體";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre { font-family: monospace; }
 | 
			
		||||
pre { font-family: site-mono; }
 | 
			
		||||
 | 
			
		||||
::selection {
 | 
			
		||||
	color: white;
 | 
			
		||||
@@ -32,7 +32,7 @@ a {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
textarea {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sup { vertical-align: super; }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
h4 { font-family: custom-sans; }
 | 
			
		||||
h5, h6 { font-family: monospace; }
 | 
			
		||||
h5, h6 { font-family: site-mono; }
 | 
			
		||||
h4 { font-size: 1.5em; }
 | 
			
		||||
h5 { font-size: 1.3em; }
 | 
			
		||||
h6 { font-size: 1.1em; }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ body {
 | 
			
		||||
    font-family: custom-sans,Helvetica,Arial,STHeiti,"Microsoft JhengHei","微軟正黑體";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre { font-family: monospace; }
 | 
			
		||||
pre { font-family: site-mono; }
 | 
			
		||||
 | 
			
		||||
::selection {
 | 
			
		||||
	color: white;
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
 | 
			
		||||
.dbg_lastMsg {
 | 
			
		||||
	float: left;
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-family: site-mono;
 | 
			
		||||
	color: #AAA;
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
 | 
			
		||||
@@ -67,5 +67,5 @@
 | 
			
		||||
	outline: none;
 | 
			
		||||
	border: none;
 | 
			
		||||
 | 
			
		||||
    font-family: monospace;
 | 
			
		||||
    font-family: site-mono;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								botanjs/src/_this.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								botanjs/src/_this.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
@font-face{
 | 
			
		||||
    font-family: site-mono;
 | 
			
		||||
    src: local("Consolas"),
 | 
			
		||||
		local("Bitstream Vera Sans Mono"),
 | 
			
		||||
		local("Courier New"),
 | 
			
		||||
		local("Courier"),
 | 
			
		||||
		local("monospace");
 | 
			
		||||
}
 | 
			
		||||
@@ -19,3 +19,11 @@ _AstJson_.SiteFile.file;
 | 
			
		||||
	_AstJson_.SiteFile.file.type;
 | 
			
		||||
	/** @type {String} */
 | 
			
		||||
	_AstJson_.SiteFile.file.src_location;
 | 
			
		||||
	/** @type {Object} */
 | 
			
		||||
	_AstConf_.SiteFile.thumbes;
 | 
			
		||||
		/** @type {String} */
 | 
			
		||||
		_AstConf_.SiteFile.thumbs.small;
 | 
			
		||||
		/** @type {String} */
 | 
			
		||||
		_AstConf_.SiteFile.thumbs.medium;
 | 
			
		||||
		/** @type {String} */
 | 
			
		||||
		_AstConf_.SiteFile.thumbs.large;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ spec:
 | 
			
		||||
            mountPath: "/app/cache"
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: web
 | 
			
		||||
          image: registry.k8s.astropenguin.net/astrojs:2022.04.05
 | 
			
		||||
          image: registry.k8s.astropenguin.net/astrojs:2022.04.05.03
 | 
			
		||||
          securityContext:
 | 
			
		||||
            runAsGroup: 1001
 | 
			
		||||
            runAsNonRoot: true
 | 
			
		||||
@@ -50,7 +50,7 @@ spec:
 | 
			
		||||
        - name: redis
 | 
			
		||||
          image: redis:6.0.8-alpine
 | 
			
		||||
        - name: compiler
 | 
			
		||||
          image: registry.k8s.astropenguin.net/astrojs:2022.04.05
 | 
			
		||||
          image: registry.k8s.astropenguin.net/astrojs:2022.04.05.03
 | 
			
		||||
          securityContext:
 | 
			
		||||
            runAsGroup: 1001
 | 
			
		||||
            runAsNonRoot: true
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,9 @@ Port = 5000
 | 
			
		||||
[Env]
 | 
			
		||||
Debug = False
 | 
			
		||||
 | 
			
		||||
[Redis]
 | 
			
		||||
ConnStr = redis://:@localhost:6379/9
 | 
			
		||||
 | 
			
		||||
[Paths]
 | 
			
		||||
Runtime = ${SiteRoot}
 | 
			
		||||
Log = ${SiteRoot}/logs
 | 
			
		||||
@@ -13,7 +16,7 @@ Cache = ${SiteRoot}/cache
 | 
			
		||||
[BotanJS]
 | 
			
		||||
SrcDir = ${Paths:Runtime}/botanjs/src
 | 
			
		||||
 | 
			
		||||
CeleryBroker = redis://:@localhost:6379/9
 | 
			
		||||
CeleryBroker = ${Redis:ConnStr}
 | 
			
		||||
 | 
			
		||||
ClosureCompiler = /opt/utils/closure.jar
 | 
			
		||||
YuiCompressor = /opt/utils/yuicompressor.jar
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,13 @@ FROM astrojs/jre-nanoserver-20h2:latest
 | 
			
		||||
 | 
			
		||||
RUN pip3 install Flask redis compressinja celery
 | 
			
		||||
 | 
			
		||||
RUN New-Item -ItemType "Directory" -Path /opt/utils; \
 | 
			
		||||
    New-Item -ItemType "Directory" -Path /app; \
 | 
			
		||||
RUN New-Item -ItemType Directory -Path /opt/utils; \
 | 
			
		||||
    New-Item -ItemType Directory -Path /app/cache -Force; \
 | 
			
		||||
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12; \
 | 
			
		||||
    Invoke-WebRequest -UseBasicParsing -Uri 'https://github.com/tgckpg/BotanJS/releases/download/compressors/closure.jar' -OutFile '/opt/utils/closure.jar' ; \
 | 
			
		||||
    Invoke-WebRequest -UseBasicParsing -Uri 'https://github.com/tgckpg/BotanJS/releases/download/compressors/yuicompressor.jar' -OutFile '/opt/utils/yuicompressor.jar' ;
 | 
			
		||||
 | 
			
		||||
EXPOSE 5000
 | 
			
		||||
COPY . /app
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
EXPOSE 5000
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								windows/base-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								windows/base-compose.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
version: '3.9'
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  python:
 | 
			
		||||
    build: pyrt
 | 
			
		||||
    image: astrojs/pyrt-nanoserver-20h2
 | 
			
		||||
  jre:
 | 
			
		||||
    build: jre 
 | 
			
		||||
    image: astrojs/jre-nanoserver-20h2
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
version: '3.9'
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  python:
 | 
			
		||||
    build: pyrt
 | 
			
		||||
    image: astrojs/pyrt-nanoserver-20h2
 | 
			
		||||
  jre:
 | 
			
		||||
    build: jre 
 | 
			
		||||
    image: astrojs/jre-nanoserver-20h2
 | 
			
		||||
  redis:
 | 
			
		||||
    container_name: astrojsdev_redis
 | 
			
		||||
    build: redis
 | 
			
		||||
@@ -17,23 +11,25 @@ services:
 | 
			
		||||
    build:
 | 
			
		||||
      context: ../
 | 
			
		||||
      dockerfile: windows/app/Dockerfile
 | 
			
		||||
    environment:
 | 
			
		||||
      REDIS_CONN: redis://:@redis:6379/9
 | 
			
		||||
    command: [ "python", "main.py" ] # [ "ping", "127.0.0.1", "-n", "9999" ]
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - redis
 | 
			
		||||
    ports:
 | 
			
		||||
      - 5000:5000
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ../:C:/app
 | 
			
		||||
      - cache:C:/app/cache
 | 
			
		||||
  tasks:
 | 
			
		||||
    container_name: astrojsdev_compiler
 | 
			
		||||
    image: astrojs/app
 | 
			
		||||
    environment:
 | 
			
		||||
      REDIS_CONN: redis://:@redis:6379/9
 | 
			
		||||
    command: [ "celery", "-A", "botanjs.service.jwork", "worker", "-l", "info", "--pool=solo" ]
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - redis
 | 
			
		||||
      - web
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ../:C:/app
 | 
			
		||||
 | 
			
		||||
      - cache:C:/app/cache
 | 
			
		||||
volumes:
 | 
			
		||||
  cache:
 | 
			
		||||
  temp:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user