forked from lolcat/4get
		
	generate 4get config from env variables
This commit is contained in:
		| @@ -2,14 +2,14 @@ FROM alpine:latest | |||||||
| WORKDIR /var/www/html/4get | WORKDIR /var/www/html/4get | ||||||
|  |  | ||||||
| RUN apk update && apk upgrade | RUN apk update && apk upgrade | ||||||
| RUN apk add   apache2-ssl php82-fileinfo php82-openssl php82-iconv php82-common php82-dom php82-curl curl php82-pecl-apcu php82-apache2 imagemagick php82-pecl-imagick | RUN apk add php apache2-ssl php82-fileinfo php82-openssl php82-iconv php82-common php82-dom php82-curl curl php82-pecl-apcu php82-apache2 imagemagick php82-pecl-imagick php-mbstring | ||||||
|  |  | ||||||
| COPY ./apache/httpd.conf /etc/apache2/httpd.conf | COPY ./apache/httpd.conf /etc/apache2/httpd.conf | ||||||
|  | COPY ./apache/conf.d/ssl.conf /etc/apache2/conf.d/ssl.conf | ||||||
| COPY . . | COPY . . | ||||||
|  |  | ||||||
| RUN chmod 777 /var/www/html/4get/icons | RUN chmod 777 /var/www/html/4get/icons | ||||||
|  |  | ||||||
| VOLUME ["/etc/4get/certs"] |  | ||||||
| EXPOSE 80 | EXPOSE 80 | ||||||
| EXPOSE 443 | EXPOSE 443 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								apache/conf.d/ssl.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								apache/conf.d/ssl.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | LoadModule ssl_module modules/mod_ssl.so | ||||||
|  | LoadModule socache_shmcb_module modules/mod_socache_shmcb.so | ||||||
|  |  | ||||||
|  | SSLRandomSeed startup file:/dev/urandom 512 | ||||||
|  | SSLRandomSeed connect builtin | ||||||
|  |  | ||||||
|  | Listen 443 | ||||||
|  |  | ||||||
|  | SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH | ||||||
|  | SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH | ||||||
|  | SSLHonorCipherOrder on | ||||||
|  |  | ||||||
|  | SSLProtocol all -SSLv3 | ||||||
|  | SSLProxyProtocol all -SSLv3 | ||||||
|  |  | ||||||
|  | SSLPassPhraseDialog  builtin | ||||||
|  |  | ||||||
|  | SSLSessionCache        "shmcb:/var/cache/mod_ssl/scache(512000)" | ||||||
|  | SSLSessionCacheTimeout  300 | ||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | # example docker-compose.yaml | ||||||
| version: "3.7" | version: "3.7" | ||||||
|  |  | ||||||
| services: | services: | ||||||
| @@ -5,8 +6,8 @@ services: | |||||||
|     image: luuul/4get:latest |     image: luuul/4get:latest | ||||||
|     restart: always |     restart: always | ||||||
|     environment: |     environment: | ||||||
|       - FOURGET_SERVER_NAME=beak.chat |       - FOURGET_VERSION=6 | ||||||
|       - FOURGET_SERVER_ADMIN_EMAIL="you@example.com" |       - FOURGET_SERVER_NAME=4get.ca | ||||||
|  |  | ||||||
|     ports: |     ports: | ||||||
|       - "80:80" |       - "80:80" | ||||||
| @@ -15,3 +16,4 @@ services: | |||||||
|     volumes: |     volumes: | ||||||
|       - /etc/letsencrypt/live/domain.tld:/etc/4get/certs |       - /etc/letsencrypt/live/domain.tld:/etc/4get/certs | ||||||
|       - ./banners:/var/www/html/4get/banner |       - ./banners:/var/www/html/4get/banner | ||||||
|  |       - ./captcha:/var/www/html/4get/data/captcha | ||||||
|   | |||||||
| @@ -14,6 +14,10 @@ if [ ! -f /etc/4get/certs/cert.pem ] || [ ! -f /etc/4get/certs/chain.pem ] || [ | |||||||
|         mv /etc/apache2/httpd.conf_temp /etc/apache2/httpd.conf |         mv /etc/apache2/httpd.conf_temp /etc/apache2/httpd.conf | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | php82 ./docker/gen_config.php | ||||||
|  |  | ||||||
|  |  | ||||||
| echo "4get is running" | echo "4get is running" | ||||||
| exec httpd -DFOREGROUND | exec httpd -DFOREGROUND | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										74
									
								
								docker/gen_config.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								docker/gen_config.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | |||||||
|  |  <?php | ||||||
|  |  | ||||||
|  | include "/var/www/html/4get/data/config.php"; | ||||||
|  |  | ||||||
|  | $refl = new ReflectionClass('config'); | ||||||
|  | $config = ($refl->getConstants()); | ||||||
|  |  | ||||||
|  | $env = getenv(); | ||||||
|  | $fourget_env = array_filter($env, function($v, $k) { | ||||||
|  |         return str_starts_with($k, "FOURGET"); | ||||||
|  | }, ARRAY_FILTER_USE_BOTH); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | foreach($fourget_env as $key => $val)  { | ||||||
|  |         $target_key = preg_replace('/^FOURGET_/', '', $key); | ||||||
|  |         $config[$target_key] = $val; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | function type_to_string($n) { | ||||||
|  |         $type = gettype($n); | ||||||
|  |         if ($type === "NULL") { | ||||||
|  |                 return "null"; | ||||||
|  |         } | ||||||
|  |         if ($type === "boolean") { | ||||||
|  |                 return $n ? 'true' : 'false'; | ||||||
|  |         } | ||||||
|  |         if ($type === "string") { | ||||||
|  |                 return "\"$n\""; | ||||||
|  |         } | ||||||
|  |         if ($type === "array") { | ||||||
|  |                 return json_encode($n); | ||||||
|  |         } | ||||||
|  |         return $n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | function detect_captcha_dirs() { | ||||||
|  |         $captcha_dir = "/var/www/html/4get/data/captcha/"; | ||||||
|  |         $categories = (array_map(function ($n) { | ||||||
|  |                 return explode("/", $n)[7]; | ||||||
|  |         }, glob($captcha_dir . "*"))); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         $result = array_map(function($category) { | ||||||
|  |                 return [$category, count(glob("/var/www/html/4get/data/captcha/" . $category . "/*" ))]; | ||||||
|  |         }, $categories); | ||||||
|  |  | ||||||
|  |         return $result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | $special_keys = ["CAPTCHA_DATASET"]; | ||||||
|  |  | ||||||
|  | $output = "<?php\n // This file was generated by docker/gen_config.php\n"; | ||||||
|  |  | ||||||
|  | $output = $output . "class config {\n"; | ||||||
|  | foreach(($config) as $key => $val){ | ||||||
|  |         if(!in_array($key, $special_keys)) { | ||||||
|  | $output = $output . "\tconst " . $key . " = " . type_to_string($val) . ";\n"; | ||||||
|  | continue; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if($key === "CAPTCHA_DATASET") { | ||||||
|  |         $output = $output . "\tconst " . $key . " = " . type_to_string(detect_captcha_dirs()) . ";\n"; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | $output = $output . "}\n"; | ||||||
|  | $output = $output . "?>"; | ||||||
|  |  | ||||||
|  | file_put_contents("./data/config.php", $output); | ||||||
|  | ?> | ||||||
		Reference in New Issue
	
	Block a user