Przeglądaj źródła

chore: docker development env

0xJacky 2 lat temu
rodzic
commit
8b809005fd

+ 2 - 2
.air.toml

@@ -7,13 +7,13 @@ tmp_dir = "tmp"
 
 [build]
 # Just plain old shell command. You could use `make` as well.
-cmd = "go build -ldflags=\"-X 'github.com/0xJacky/Nginx-UI/server/settings.buildTime=$(date +%s)'\" -o ./tmp/main ."
+cmd = "CGO_ENABLED=1 go build -ldflags=\"-X 'github.com/0xJacky/Nginx-UI/server/settings.buildTime=$(date +%s)'\" -o ./tmp/main ."
 # Binary file yields from `cmd`.
 bin = "tmp/main"
 # Customize binary.
 full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
 # Watch these filename extensions.
-include_ext = ["go", "tpl", "tmpl", "html", "conf"]
+include_ext = ["go", "tpl", "tmpl", "html", "conf", "ini", "toml"]
 # Ignore these filename extensions or directories.
 exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules", "upload"]
 # Watch these directories if you specified.

+ 27 - 0
dev.Dockerfile

@@ -0,0 +1,27 @@
+FROM --platform=linux/amd64 ubuntu:latest
+
+WORKDIR /app
+EXPOSE 80 443
+
+COPY resources/development/sources.list /etc/apt/sources.list
+
+RUN set -x \
+# create nginx user/group first, to be consistent throughout docker variants
+    && addgroup --system --gid 101 nginx \
+    && adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid 101 nginx \
+    && apt update && apt install -y wget nginx gcc curl
+
+RUN wget https://go.dev/dl/go1.20.linux-amd64.tar.gz && \
+    rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz && rm -f go1.20.linux-amd64.tar.gz
+
+ENV PATH="${PATH}:/usr/local/go/bin"
+
+RUN go install github.com/cosmtrek/air@latest
+
+COPY resources/development/entrypoint.sh /entrypoint.sh
+
+RUN chmod a+x /entrypoint.sh  \
+    && rm -f /etc/nginx/conf.d/default.conf  \
+    && rm -f /usr/etc/nginx/conf.d/default.conf
+
+CMD ["/entrypoint.sh"]

+ 1 - 1
resources/demo/app.ini

@@ -1,6 +1,6 @@
 [server]
 HttpPort = 9000
-RunMode = debug
+RunMode = release
 JwtSecret = 2E1CE615-BB15-44F5-B5BE-6B5DA3581D0F
 Email = test@jackyu.cn
 HTTPChallengePort = 9180

+ 13 - 0
resources/development/entrypoint.sh

@@ -0,0 +1,13 @@
+#!/bin/bash
+
+if [ "$(ls -A /etc/nginx)" = "" ]; then
+    echo "Initialing Nginx config dir"
+    cp -rp /usr/etc/nginx/* /etc/nginx/
+    echo "Initialed Nginx config dir"
+fi
+
+echo "export PATH=$PATH:/usr/local/go/bin:$(go env GOPATH)/bin" >> ~/.profile
+source ~/.profile
+
+nginx
+cd /app && air

+ 25 - 0
resources/development/nginx/fastcgi_params

@@ -0,0 +1,25 @@
+
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  REQUEST_SCHEME     $scheme;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;

+ 99 - 0
resources/development/nginx/mime.types

@@ -0,0 +1,99 @@
+
+types {
+    text/html                                        html htm shtml;
+    text/css                                         css;
+    text/xml                                         xml;
+    image/gif                                        gif;
+    image/jpeg                                       jpeg jpg;
+    application/javascript                           js;
+    application/atom+xml                             atom;
+    application/rss+xml                              rss;
+
+    text/mathml                                      mml;
+    text/plain                                       txt;
+    text/vnd.sun.j2me.app-descriptor                 jad;
+    text/vnd.wap.wml                                 wml;
+    text/x-component                                 htc;
+
+    image/avif                                       avif;
+    image/png                                        png;
+    image/svg+xml                                    svg svgz;
+    image/tiff                                       tif tiff;
+    image/vnd.wap.wbmp                               wbmp;
+    image/webp                                       webp;
+    image/x-icon                                     ico;
+    image/x-jng                                      jng;
+    image/x-ms-bmp                                   bmp;
+
+    font/woff                                        woff;
+    font/woff2                                       woff2;
+
+    application/java-archive                         jar war ear;
+    application/json                                 json;
+    application/mac-binhex40                         hqx;
+    application/msword                               doc;
+    application/pdf                                  pdf;
+    application/postscript                           ps eps ai;
+    application/rtf                                  rtf;
+    application/vnd.apple.mpegurl                    m3u8;
+    application/vnd.google-earth.kml+xml             kml;
+    application/vnd.google-earth.kmz                 kmz;
+    application/vnd.ms-excel                         xls;
+    application/vnd.ms-fontobject                    eot;
+    application/vnd.ms-powerpoint                    ppt;
+    application/vnd.oasis.opendocument.graphics      odg;
+    application/vnd.oasis.opendocument.presentation  odp;
+    application/vnd.oasis.opendocument.spreadsheet   ods;
+    application/vnd.oasis.opendocument.text          odt;
+    application/vnd.openxmlformats-officedocument.presentationml.presentation
+                                                     pptx;
+    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+                                                     xlsx;
+    application/vnd.openxmlformats-officedocument.wordprocessingml.document
+                                                     docx;
+    application/vnd.wap.wmlc                         wmlc;
+    application/wasm                                 wasm;
+    application/x-7z-compressed                      7z;
+    application/x-cocoa                              cco;
+    application/x-java-archive-diff                  jardiff;
+    application/x-java-jnlp-file                     jnlp;
+    application/x-makeself                           run;
+    application/x-perl                               pl pm;
+    application/x-pilot                              prc pdb;
+    application/x-rar-compressed                     rar;
+    application/x-redhat-package-manager             rpm;
+    application/x-sea                                sea;
+    application/x-shockwave-flash                    swf;
+    application/x-stuffit                            sit;
+    application/x-tcl                                tcl tk;
+    application/x-x509-ca-cert                       der pem crt;
+    application/x-xpinstall                          xpi;
+    application/xhtml+xml                            xhtml;
+    application/xspf+xml                             xspf;
+    application/zip                                  zip;
+
+    application/octet-stream                         bin exe dll;
+    application/octet-stream                         deb;
+    application/octet-stream                         dmg;
+    application/octet-stream                         iso img;
+    application/octet-stream                         msi msp msm;
+
+    audio/midi                                       mid midi kar;
+    audio/mpeg                                       mp3;
+    audio/ogg                                        ogg;
+    audio/x-m4a                                      m4a;
+    audio/x-realaudio                                ra;
+
+    video/3gpp                                       3gpp 3gp;
+    video/mp2t                                       ts;
+    video/mp4                                        mp4;
+    video/mpeg                                       mpeg mpg;
+    video/quicktime                                  mov;
+    video/webm                                       webm;
+    video/x-flv                                      flv;
+    video/x-m4v                                      m4v;
+    video/x-mng                                      mng;
+    video/x-ms-asf                                   asx asf;
+    video/x-ms-wmv                                   wmv;
+    video/x-msvideo                                  avi;
+}

+ 1 - 0
resources/development/nginx/modules

@@ -0,0 +1 @@
+/usr/lib/nginx/modules

+ 32 - 0
resources/development/nginx/nginx.conf

@@ -0,0 +1,32 @@
+
+user  nginx;
+worker_processes  auto;
+
+error_log  /var/log/nginx/error.log notice;
+pid        /var/run/nginx.pid;
+
+
+events {
+    worker_connections  1024;
+}
+
+
+http {
+    include       /etc/nginx/mime.types;
+    default_type  application/octet-stream;
+
+    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+                      '$status $body_bytes_sent "$http_referer" '
+                      '"$http_user_agent" "$http_x_forwarded_for"';
+
+    access_log  /var/log/nginx/access.log  main;
+
+    sendfile        on;
+    #tcp_nopush     on;
+
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+    include /etc/nginx/sites-enabled/*;
+}

+ 17 - 0
resources/development/nginx/scgi_params

@@ -0,0 +1,17 @@
+
+scgi_param  REQUEST_METHOD     $request_method;
+scgi_param  REQUEST_URI        $request_uri;
+scgi_param  QUERY_STRING       $query_string;
+scgi_param  CONTENT_TYPE       $content_type;
+
+scgi_param  DOCUMENT_URI       $document_uri;
+scgi_param  DOCUMENT_ROOT      $document_root;
+scgi_param  SCGI               1;
+scgi_param  SERVER_PROTOCOL    $server_protocol;
+scgi_param  REQUEST_SCHEME     $scheme;
+scgi_param  HTTPS              $https if_not_empty;
+
+scgi_param  REMOTE_ADDR        $remote_addr;
+scgi_param  REMOTE_PORT        $remote_port;
+scgi_param  SERVER_PORT        $server_port;
+scgi_param  SERVER_NAME        $server_name;

+ 28 - 0
resources/development/nginx/sites-available/amstourship.jackyu.cn

@@ -0,0 +1,28 @@
+server {
+    listen 80;
+    listen [::]:80;
+    server_name amstourship.jackyu.cn t.jackyu.cn;
+    root /var/www/amstourship;
+    index index.html;
+    location /.well-known/acme-challenge {
+        proxy_set_header Host $host;
+        proxy_set_header X-Real_IP $remote_addr;
+        proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
+        proxy_pass http://127.0.0.1:5002;
+    }
+}
+server {
+    listen 443 ssl http2;
+    listen [::]:443 ssl http2;
+    server_name amstourship.jackyu.cn t.jackyu.cn;
+    ssl_certificate /etc/nginx/ssl/amstourship.jackyu.cn_t.jackyu.cn/fullchain.cer;
+    ssl_certificate_key /etc/nginx/ssl/amstourship.jackyu.cn_t.jackyu.cn/private.key;
+    root /var/www/amstourship;
+    index index.html;
+    location /.well-known/acme-challenge {
+        proxy_set_header Host $host;
+        proxy_set_header X-Real_IP $remote_addr;
+        proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
+        proxy_pass http://127.0.0.1:5002;
+    }
+}

+ 84 - 0
resources/development/nginx/sites-available/homework.jackyu.cn

@@ -0,0 +1,84 @@
+server {
+	listen	80;
+	listen	[::]:80;
+
+	server_name	homework.jackyu.cn;
+  	# rewrite ^(.*)$  https://$host$1 permanent;
+  	return 307 https://$server_name$request_uri;
+}
+
+server {
+	listen	443 ssl http2;
+	listen	[::]:443 ssl http2;
+
+	server_name	homework.jackyu.cn;
+
+	ssl_certificate	/etc/nginx/ssl/jackyu.cn/alpha/jackyu.cn_server_cert.pem;
+  	ssl_certificate_key	/etc/nginx/ssl/jackyu.cn/alpha/jackyu.cn_key.pem;
+
+	root	/var/www/homework/frontend;
+
+	# Add index.php to the list if you are using PHP
+	index	index.html;
+
+	location / {
+		# First attempt to serve request as file, then
+		# as directory, then fall back to displaying a 404.
+                index index.html;
+		try_files $uri $uri/ /index.html;
+	}
+    
+    location /student {
+      index manage.html;
+      try_files $uri $uri/ /student.html;
+	}
+    
+    location /teacher {
+      index manage.html;
+      try_files $uri $uri/ /teacher.html;
+	}
+    
+    location /admin {
+      index admin.html;
+      try_files $uri $uri/ /admin.html;
+	}
+            
+    location ^~/upload/ {
+		alias /var/www/homework/api/upload/;
+	}
+	include			error_json;
+	location /api/	 {
+    	proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection upgrade;
+    
+		proxy_pass         http://127.0.0.1:9008/;
+		proxy_redirect     off;
+
+		proxy_set_header   Host                 $host;
+		proxy_set_header   X-Real-IP            $remote_addr;
+		proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
+		proxy_set_header   X-Forwarded-Proto    $scheme;
+        client_max_body_size 1000m;
+	}
+    
+    location /zigbee-pi	 {
+    	alias /var/www/zigbee-pi/frontend/;
+    	index index.html;
+	}
+    
+    location /zigbee-pi/api/	 {
+    	proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection upgrade;
+    
+		proxy_pass         http://127.0.0.1:9200/;
+		proxy_redirect     off;
+
+		proxy_set_header   Host                 $host;
+		proxy_set_header   X-Real-IP            $remote_addr;
+		proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
+		proxy_set_header   X-Forwarded-Proto    $scheme;
+        client_max_body_size 1000m;
+	}
+}

+ 27 - 0
resources/development/nginx/sites-available/nginx.jackyu.cn

@@ -0,0 +1,27 @@
+map $http_upgrade $connection_upgrade {
+    default upgrade;
+    '' close;
+}
+server {
+    listen 80;
+    listen [::]:80;
+    server_name nginx.jackyu.cn;
+    rewrite ^(.*)$ https://$host$1 permanent;
+}
+server {
+    listen 443 ssl http2;
+    listen [::]:443 ssl http2;
+    server_name nginx.jackyu.cn;
+    ssl_certificate /etc/nginx/ssl/jackyu.cn/alpha/jackyu.cn_server_cert.pem;
+    ssl_certificate_key /etc/nginx/ssl/jackyu.cn/alpha/jackyu.cn_key.pem;
+    location / {
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection $connection_upgrade;
+        proxy_pass http://127.0.0.1:9000/;
+    }
+}

+ 26 - 0
resources/development/nginx/sites-available/qi.jackyu.cn

@@ -0,0 +1,26 @@
+server {
+	listen	80;
+	listen	[::]:80;
+	server_name	qi.jackyu.cn;
+	rewrite ^(.*)$  https://$host$1 permanent;
+
+}
+
+server {
+	server_name	qi.jackyu.cn;
+	ssl_certificate	/etc/nginx/ssl/jackyu.cn/alpha/jackyu.cn_server_cert.pem;
+	ssl_certificate_key	/etc/nginx/ssl/jackyu.cn/alpha/jackyu.cn_key.pem;
+	listen	443 ssl;
+	listen	[::]:443 ssl;
+
+	location / {
+		proxy_pass         http://127.0.0.1:5001/;
+		proxy_redirect     off;
+		proxy_set_header   Host                 $host;
+		proxy_set_header   X-Real-IP            $remote_addr;
+		proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
+		proxy_set_header   X-Forwarded-Proto    $scheme;
+	}
+
+}
+

+ 1 - 0
resources/development/nginx/sites-enabled/amstourship.jackyu.cn

@@ -0,0 +1 @@
+/etc/nginx/sites-available/amstourship.jackyu.cn

+ 64 - 0
resources/development/nginx/ssl/amstourship.jackyu.cn/fullchain.cer

@@ -0,0 +1,64 @@
+-----BEGIN CERTIFICATE-----
+MIIFhjCCBG6gAwIBAgITAP/nxy+CumZyaQpnT/Ii3HgcgTANBgkqhkiG9w0BAQsF
+ADBDMQswCQYDVQQGEwJVUzESMBAGA1UEChMJZ29vZCBndXlzMSAwHgYDVQQDExdD
+QSBpbnRlcm1lZGlhdGUgKFJTQSkgQTAeFw0yMzAyMTUwMDUxMDhaFw0yMzA1MTYw
+MDUxMDdaMCAxHjAcBgNVBAMTFWFtc3RvdXJzaGlwLmphY2t5dS5jbjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8xJTQQiLnb9BPViM8eihPlkJD472vV
+g6u5W6NpmGkvqOmKFcC3IY8D77ATa5IlKeVtgomWAtzQDbQ3+Q8p5gqhotQjLzpp
+xjfK+B9zsrILqDGFpw1n8WKGf/QG6/EsOdecO0ntuhwG80OpsQIDMwjchszC4BPc
+vheCAsRV8pflzEqEqbOzeKcPHa6hDO2Bs70k2zP5SuqTl+GjNzeLKaFpJa5F+rrk
++o4uO8pQOvEGaYW/0i9cN3YKmzfp2yuJY63OsbQ8idSXWTCuSayJhnAjYjgkgcRz
+PWiTNsaQgnPATiZqN81hxq63ISb+kLieq+yMkNAO7xVuItOPDIgawRsCAwEAAaOC
+ApQwggKQMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
+BQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU2rpC6XfeKM4RRGOOIsXp5MxO
+7yEwKwYDVR0jBCQwIoAgYjWGqKXC1CgUyRtbS1bZxpMqaNdKnoY33nyaZdVEQ/Iw
+cQYIKwYBBQUHAQEEZTBjMCIGCCsGAQUFBzABhhZodHRwOi8vMTI3LjAuMC4xOjQw
+MDIvMD0GCCsGAQUFBzAChjFodHRwOi8vMTI3LjAuMC4xOjQwMDEvYWlhL2lzc3Vl
+ci82NjA1NDQwNDk4MzY5NzQxMCAGA1UdEQQZMBeCFWFtc3RvdXJzaGlwLmphY2t5
+dS5jbjAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8vZXhhbXBsZS5jb20vY3JsMEAG
+A1UdIAQ5MDcwCAYGZ4EMAQIBMCsGAyoDBDAkMCIGCCsGAQUFBwIBFhZodHRwOi8v
+ZXhhbXBsZS5jb20vY3BzMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYAOJiMlNA1
+mMOTLd/pI7q68npCDrlsQeFaqAwasPwEvQMAAAGGUsSzKQAABAMARzBFAiEAslVV
+aGQEFOseeWMIcWStkdY5fpgfc/mU8MNr2l2GjRQCIHu/O4lsj4LBupnVN8jwDBZn
+fta/KSsrQ7LvC0SfE5NJAHUAe90gTyc4KkZpHv2pgeSOS224Md6/21UmWIxRF9mX
+veIAAAGGUsSzKgAABAMARjBEAiAOOoRiMeKGRpQckOp04laE6GxN+h+FKeKRCwZ8
+wrWm3QIgCUFPPuJswg1VumJIsLKGdFPgCG8gJM4jVVFdbO/1+5YwDQYJKoZIhvcN
+AQELBQADggEBAEwax/yM6yfUW/ctPvMeiGh4bSaO9xWbQbKrOw5/+K+upqgXUSh0
+Qo0WzcrLZzT9ecp3K6KTbph58IrPGxWmPZo92W9sm2tAR3NIOtSwjCyfeBou0TCO
+yBeHwiJv2JbEZndUAqaz2cd2PfpPbNOWTS9ag6nWRDPPW42VoSYU0EFwzvGfFswA
+vww+gC4kzHjsZuR7T/0qsnvJ/1IHH8KDfzki0TnZ9PAhUvPFBAgxwDElLqUFkSmA
+hc5BJfFrGInnKe1s+DL5oL6oc9RmDdlLV8v0Ita39GlaOs3rdvt611qON9S1Ea6z
+lkGadI0bxxv5GlN+UhNRxyTKseyAsBdzY64=
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIFZzCCA0+gAwIBAgIQHPTBy0utaJ82mHJs9V3u8zANBgkqhkiG9w0BAQsFADA5
+MQswCQYDVQQGEwJVUzESMBAGA1UEChMJZ29vZCBndXlzMRYwFAYDVQQDEw1DQSBy
+b290IChSU0EpMB4XDTIwMDEwMTEyMDAwMFoXDTQwMDEwMTEyMDAwMFowQzELMAkG
+A1UEBhMCVVMxEjAQBgNVBAoTCWdvb2QgZ3V5czEgMB4GA1UEAxMXQ0EgaW50ZXJt
+ZWRpYXRlIChSU0EpIEEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk
+f1rlGJeno27J8UAltWo8PopRsTP93Il6+L+SScaOUQsM+TCbTO5EJ4xC+d3Unp8v
+iZRLAB1/lGhHh/Uifzov2ux2sa9J4kxlfCxVaaCx6maOs9KnfGUug2hcUCh1oUVv
+zD9X9VkWdBdR+kKJvYqWJlU/EJxEa5ERjFp591LQBpR7ksZrsbLvXeywqVS3ek8s
+d7w+ZqpYOfo6DNLl5aEJlk6F6CiSjmT352n8dnsOEIEL+bOusLhP5F8pED85geU5
+rijc38fZ+gfZAVVenz7kqBh7ld6qT5inIM4uQa7oCuFX2dZ0jqm5TFBBtQp9dkFv
+WFz9kEb/CVJr1IsTdp1PAgMBAAGjggFfMIIBWzAOBgNVHQ8BAf8EBAMCAYYwHQYD
+VR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYBAf8CAQAw
+KQYDVR0OBCIEIGI1hqilwtQoFMkbW0tW2caTKmjXSp6GN958mmXVREPyMCsGA1Ud
+IwQkMCKAINmvCHaWHo5MD5lKL52otAsr/TsCX5Hwfy5euQ6zIAWEMFgGCCsGAQUF
+BwEBBEwwSjAjBggrBgEFBQcwAYYXaHR0cDovL2V4YW1wbGUuY29tL29jc3AwIwYI
+KwYBBQUHMAKGF2h0dHA6Ly9leGFtcGxlLmNvbS9yb290MCcGA1UdHwQgMB4wHKAa
+oBiGFmh0dHA6Ly9leGFtcGxlLmNvbS9jcmwwOwYDVR0gBDQwMjAEBgIqAzAqBgIt
+BjAkMCIGCCsGAQUFBwIBFhZodHRwOi8vZXhhbXBsZS5jb20vY3BzMA0GCSqGSIb3
+DQEBCwUAA4ICAQCTLNQlCzHynESAvtPRV1FPaOQhx01RofwS/0Zg3IH5oXxSC98C
+n2L0xHN1gCaJai9XutrFtMCjeBmese48QoPa8MxrB1UpmZ1AuFOQAfHWJZbYPp0V
+PxgY34W9Onb+JPnKTbL9ofKUV0aX67eJ5KKFD1G2z+y9Lz1oA3yJpGzqOY/JCWYz
+q46ik0bmgcGfol6F/T5hoE8pZk8Wr+nNUpSuOSNp7c/g2/pKDRWK8trTrG3owtaJ
+LbQc+W4e97AtTg6DGvR5gftar/+4g2o0xhKSnep+s/bf5NFXVDCTvCmemrbR8Hr7
+NLDKXWuGMoMKIxhyPX6ttpU2Um3rQ1rCQbJ5yWIREZvbdaeK8HSRE3GYE71Z3n/0
+0Kmtg2BKGkrJzcqUSG4o+9mdSjhJ65J76ri5tVQby7Ai7W2KlNjpdI6GYtejUAlf
+vZz5N0e2X36XLPZ8tz04Ix9KLHXMEuA7w/aOglH1Lei+PPp7kBjvXAL66soqCTqu
+49yNbPPGIjGO453+jNzxhbeimh6a5/Fwd4SjsdSBe8AwIGGZTzLiIzCNM5OmcoUf
+Tl5RrVXau4DvX5KvfwOLusl/uJH+7oETJlbi8+fNn2ioYfHg5/Tu3zKZw/Y+6wSA
+LsOIJrFmJEgIBUnWp/B1ZC6TeIokmw5FeJsY1UnFDWsPVcax2T/tg6BZ5Q==
+-----END CERTIFICATE-----

+ 27 - 0
resources/development/nginx/ssl/amstourship.jackyu.cn/private.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEoAIBAAKCAQEAzzElNBCIudv0E9WIzx6KE+WQkPjva9WDq7lbo2mYaS+o6YoV
+wLchjwPvsBNrkiUp5W2CiZYC3NANtDf5DynmCqGi1CMvOmnGN8r4H3OysguoMYWn
+DWfxYoZ/9Abr8Sw515w7Se26HAbzQ6mxAgMzCNyGzMLgE9y+F4ICxFXyl+XMSoSp
+s7N4pw8drqEM7YGzvSTbM/lK6pOX4aM3N4spoWklrkX6uuT6ji47ylA68QZphb/S
+L1w3dgqbN+nbK4ljrc6xtDyJ1JdZMK5JrImGcCNiOCSBxHM9aJM2xpCCc8BOJmo3
+zWHGrrchJv6QuJ6r7IyQ0A7vFW4i048MiBrBGwIDAQABAoIBAFjb3/PLX4gugCh9
+fRYvJ9LOssiqKqyZvsXIUjfsUrRR/2Rhl2C2acsXShW+znS4QZam98QgNQwUorv3
+AXbyZjmLBvVqPZgUwzEseGusyCe5/iF3C6UhPhIeUwQKb+hYKlqBI6BaN2ZLyMrt
+HQAa9SlIwvtQXJ/IHTKhzKP9pHRmETVQCBtJBEl/rxXAZ+Uq+qQde8PJ/UYMTu3f
+Q+r2Rr+pfITJcHBBvB8w03u0hsCpLyN5tJzSKjAUF86lHYEEUh/KM6PrMerYHvsF
+h60VrusUF/jzankkeQFJKsmY043aI3aYjx9+ghj6DOXLhAX52ubB4etsALYpbpTn
+CF6dySkCgYEA66OCWsFl9UrhkAPT+LuKzCs7li+LMCjGjMhXAj0DxVUceG6ZT32H
+rDsEpSPHeL72vAaZIxcnroAJBkz39vYfr49hHUo//GFELiJTlP5S0joZeJvDYhF2
+D1NKzDvLvJq/HkkJor5DGMfTXYbSS8w3tAxacs6o59I1pseOxK333gUCgYEA4Rhf
+73IYw2A44OSBVuy1PxH1zam1AELpUKDHNo1gT9CJhFLiPYuL4Y6jdQl3PVgD23fW
+uTxyu9rC7a/s6HFTx3tIGvUBFKsTLTagHvmZBnx9SKTT//PZELPoObKesNHy3cIS
+NcUoHnRtbvoTIfZXGBOFiByKjz6JrRKNpO4zLJ8Cf1wLgt/wq+MlXPbkh+ihWZZn
+TN9dswEc7HIRz+sP6mkq1fQ1P63NWzHr2+SmFUUVU0wfR7JtWRLQ8LWFW1cczUPG
+viiy2Eu9suRShFOvBKsaBtkV/zxPlc5mutEMiokh6YXrAdiQeaU0aVwfTgZNv3SV
+Xr95+oCTnGGJkjtBuZECgYAXy4vYtCcKAFIC9CT4G23NjQh/BUGtFWW0sEpe6fMU
+fOcMpfZkqyvOXFXLOYTxZyyBNtnsGwfF9ApHNiHFMLW6kL2+m8fRd4Q/c1bZ72jN
+1rsnwsTmedCog1w5PTipWIhkCPAD3yOulIA9CxKatH/ge6/SA7JiEipbsWpn1QZz
+4QKBgCqLsJMIcgZJcJUqor/ta45CppMfM3FXvWyX6tnTK/WyHUHQPN+wfGVB9lNa
+KEHYbF3CfAy2F/RS+aQn8WLCXaurZWsH9spUOPCugj8xtYQ5GFDNrWK9fJclsXFl
+YH0dpcI88pAaKl0ymrjyVp0kFUiaf5JQFKit5UGwGZTtWyvC
+-----END RSA PRIVATE KEY-----

+ 64 - 0
resources/development/nginx/ssl/amstourship.jackyu.cn_t.jackyu.cn/fullchain.cer

@@ -0,0 +1,64 @@
+-----BEGIN CERTIFICATE-----
+MIIFkzCCBHugAwIBAgITAP9BpIHmYRZFpLiNFNwEvnS6lTANBgkqhkiG9w0BAQsF
+ADBDMQswCQYDVQQGEwJVUzESMBAGA1UEChMJZ29vZCBndXlzMSAwHgYDVQQDExdD
+QSBpbnRlcm1lZGlhdGUgKFJTQSkgQTAeFw0yMzAyMTUwMzM5NDhaFw0yMzA1MTYw
+MzM5NDdaMCAxHjAcBgNVBAMTFWFtc3RvdXJzaGlwLmphY2t5dS5jbjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAM31HTeIJ6CcbK1Y1MKb1Pylt2/mXvt8
+M4quWNJjJWWelaRCpe/BD/mBCM9RsQUnf5F8m5OW6QAesoM/QiewTAjf06o5WHfX
+SinH9yMKqXMny4nUBI7U5jJEXbiV82HBsuieU5YldeBCMilefjIG3UNfwNqcA40E
+Miq9xZAGQx9lmabno0iyQlltFyYb1l+4CX0SBm5ygBOyyhb4tReZEB1Sn54n5gtZ
+bK4ZvYgPvKg4wHT6f9A+D4GqE1kZPuGqAKkvAmt8whlEUfXL2zlfNOFfuReQNujs
+FrwnJgSVHa0UPhQEB3zowMjmBSqGZnJap9zXS0W8Eu+D5EWFKUVuRy0CAwEAAaOC
+AqEwggKdMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
+BQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUxKOLPUnFetKJF7xySU+hY/32
+3FwwKwYDVR0jBCQwIoAgYjWGqKXC1CgUyRtbS1bZxpMqaNdKnoY33nyaZdVEQ/Iw
+cQYIKwYBBQUHAQEEZTBjMCIGCCsGAQUFBzABhhZodHRwOi8vMTI3LjAuMC4xOjQw
+MDIvMD0GCCsGAQUFBzAChjFodHRwOi8vMTI3LjAuMC4xOjQwMDEvYWlhL2lzc3Vl
+ci82NjA1NDQwNDk4MzY5NzQxMC0GA1UdEQQmMCSCFWFtc3RvdXJzaGlwLmphY2t5
+dS5jboILdC5qYWNreXUuY24wJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL2V4YW1w
+bGUuY29tL2NybDBABgNVHSAEOTA3MAgGBmeBDAECATArBgMqAwQwJDAiBggrBgEF
+BQcCARYWaHR0cDovL2V4YW1wbGUuY29tL2NwczCCAQMGCisGAQQB1nkCBAIEgfQE
+gfEA7wB2AFLU6MpxhMjJJFwzEHovC5eeKDMFhyNCIngxCrNdv03eAAABhlNfHncA
+AAQDAEcwRQIhAL84cecGwG4bYGHcCxGVwaLPgISazBGaIcOP/11sY78gAiAA+1/3
+XSk0hPTv5zWYwqJIcI0ajGOeiIfaLwpFxnW+DwB1ADiYjJTQNZjDky3f6SO6uvJ6
+Qg65bEHhWqgMGrD8BL0DAAABhlNfHncAAAQDAEYwRAIgS3rH0/r0zBshQN9LwmWv
+JadxbPEJtQuWjhyH/5gln4cCICZlS/B2qYkOZJzQQkjRgnfHrmUc1vRHFNBEGuRR
+HGX2MA0GCSqGSIb3DQEBCwUAA4IBAQBLP7i7PPn3mUtmsYoguW07lQa8abjsHirs
+r5TgfOpWLVFQ8ASWuIu/OTLdKrbfTXseZibLKlPU+Zoz+HF8V3lnCmgXbnlQo/ex
++uEDPkLYyXuWe96nssiVgtUAmkSWQOEwhIz0xtWNgskgRVt2c4CihYbqBB3uXLL1
+TubIFHAizRKcQ/JUDfSnieN4R5tX1MIw/TnUmNxj3KMtF1OHsqGo9Pt2z8oRWGf5
+kx2HtgFyIigkTIlUB5TFmlv5HLAtE4H3cc2NSYZ397WXhil2mTqPTBLRXQJwzQ7C
+5tenpmzazqPOOu23QJaA94a7UeQtowcEDkSMoCe/G31leeEUbRjt
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIFZzCCA0+gAwIBAgIQHPTBy0utaJ82mHJs9V3u8zANBgkqhkiG9w0BAQsFADA5
+MQswCQYDVQQGEwJVUzESMBAGA1UEChMJZ29vZCBndXlzMRYwFAYDVQQDEw1DQSBy
+b290IChSU0EpMB4XDTIwMDEwMTEyMDAwMFoXDTQwMDEwMTEyMDAwMFowQzELMAkG
+A1UEBhMCVVMxEjAQBgNVBAoTCWdvb2QgZ3V5czEgMB4GA1UEAxMXQ0EgaW50ZXJt
+ZWRpYXRlIChSU0EpIEEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk
+f1rlGJeno27J8UAltWo8PopRsTP93Il6+L+SScaOUQsM+TCbTO5EJ4xC+d3Unp8v
+iZRLAB1/lGhHh/Uifzov2ux2sa9J4kxlfCxVaaCx6maOs9KnfGUug2hcUCh1oUVv
+zD9X9VkWdBdR+kKJvYqWJlU/EJxEa5ERjFp591LQBpR7ksZrsbLvXeywqVS3ek8s
+d7w+ZqpYOfo6DNLl5aEJlk6F6CiSjmT352n8dnsOEIEL+bOusLhP5F8pED85geU5
+rijc38fZ+gfZAVVenz7kqBh7ld6qT5inIM4uQa7oCuFX2dZ0jqm5TFBBtQp9dkFv
+WFz9kEb/CVJr1IsTdp1PAgMBAAGjggFfMIIBWzAOBgNVHQ8BAf8EBAMCAYYwHQYD
+VR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYBAf8CAQAw
+KQYDVR0OBCIEIGI1hqilwtQoFMkbW0tW2caTKmjXSp6GN958mmXVREPyMCsGA1Ud
+IwQkMCKAINmvCHaWHo5MD5lKL52otAsr/TsCX5Hwfy5euQ6zIAWEMFgGCCsGAQUF
+BwEBBEwwSjAjBggrBgEFBQcwAYYXaHR0cDovL2V4YW1wbGUuY29tL29jc3AwIwYI
+KwYBBQUHMAKGF2h0dHA6Ly9leGFtcGxlLmNvbS9yb290MCcGA1UdHwQgMB4wHKAa
+oBiGFmh0dHA6Ly9leGFtcGxlLmNvbS9jcmwwOwYDVR0gBDQwMjAEBgIqAzAqBgIt
+BjAkMCIGCCsGAQUFBwIBFhZodHRwOi8vZXhhbXBsZS5jb20vY3BzMA0GCSqGSIb3
+DQEBCwUAA4ICAQCTLNQlCzHynESAvtPRV1FPaOQhx01RofwS/0Zg3IH5oXxSC98C
+n2L0xHN1gCaJai9XutrFtMCjeBmese48QoPa8MxrB1UpmZ1AuFOQAfHWJZbYPp0V
+PxgY34W9Onb+JPnKTbL9ofKUV0aX67eJ5KKFD1G2z+y9Lz1oA3yJpGzqOY/JCWYz
+q46ik0bmgcGfol6F/T5hoE8pZk8Wr+nNUpSuOSNp7c/g2/pKDRWK8trTrG3owtaJ
+LbQc+W4e97AtTg6DGvR5gftar/+4g2o0xhKSnep+s/bf5NFXVDCTvCmemrbR8Hr7
+NLDKXWuGMoMKIxhyPX6ttpU2Um3rQ1rCQbJ5yWIREZvbdaeK8HSRE3GYE71Z3n/0
+0Kmtg2BKGkrJzcqUSG4o+9mdSjhJ65J76ri5tVQby7Ai7W2KlNjpdI6GYtejUAlf
+vZz5N0e2X36XLPZ8tz04Ix9KLHXMEuA7w/aOglH1Lei+PPp7kBjvXAL66soqCTqu
+49yNbPPGIjGO453+jNzxhbeimh6a5/Fwd4SjsdSBe8AwIGGZTzLiIzCNM5OmcoUf
+Tl5RrVXau4DvX5KvfwOLusl/uJH+7oETJlbi8+fNn2ioYfHg5/Tu3zKZw/Y+6wSA
+LsOIJrFmJEgIBUnWp/B1ZC6TeIokmw5FeJsY1UnFDWsPVcax2T/tg6BZ5Q==
+-----END CERTIFICATE-----

+ 27 - 0
resources/development/nginx/ssl/amstourship.jackyu.cn_t.jackyu.cn/private.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAzfUdN4gnoJxsrVjUwpvU/KW3b+Ze+3wziq5Y0mMlZZ6VpEKl
+78EP+YEIz1GxBSd/kXybk5bpAB6ygz9CJ7BMCN/TqjlYd9dKKcf3IwqpcyfLidQE
+jtTmMkRduJXzYcGy6J5TliV14EIyKV5+MgbdQ1/A2pwDjQQyKr3FkAZDH2WZpuej
+SLJCWW0XJhvWX7gJfRIGbnKAE7LKFvi1F5kQHVKfnifmC1lsrhm9iA+8qDjAdPp/
+0D4PgaoTWRk+4aoAqS8Ca3zCGURR9cvbOV804V+5F5A26OwWvCcmBJUdrRQ+FAQH
+fOjAyOYFKoZmclqn3NdLRbwS74PkRYUpRW5HLQIDAQABAoIBAGCuuRlxfBDEfave
+cHouxwwXCwanoVzzEAsBD0csLckHaf3jH5xuB/67WRRhp/Tgdt0oHqxpAlYBExHT
+p02UUA02bVmSc/pGAVWdvmEfxy38t2qrMbyPKsTcHRbipY71a/QRJvHsAerViFCt
+QBZh7IqNL64v4ObY2mgAD/ctSWM56gqkFR70X7HpMKQ9Z8Q9iT5IKeFdVtfOcdSq
+1HuAiz4p8v8IOzLHTKruY5OTYM9uyr02FtPoWsoZSyzSjaC8BpO+wnFlVsDXDBNv
+/Kgqyetj6Iqo6cInj8dExpdnCZXqO5j4FXgHABLgjgiIJV+L3F0KY1PbO9NejMEh
+TvKgZiECgYEA6aIGaUtdoPXWY1o4sEjHy8rwQnBs25JPx+4+HOC5wHrsn03yTmXC
+cjKapIySQhasekQZGQk++H4cRyToqR0izIfkqEmOLfec2kKy7FgcSXzs2PKH66om
+4mvYSWVQj0r3SwYyG6UHJJCeY8i+RCLMkEXSkNPvhEQXg7zCI2oMpSUCgYEA4azO
+yfHvUKnJbGW+r3ujbszn7IlsobVTL0Rf4nHLSuKrW0v/OFg9lsjsm6IJyWV1H5KO
+NNNVzpubAESvPujAwiYfSeFLjK67hbEVSaVLp+5ubsGKf+0BDPKh3+yVJ6abHmFo
+lqzqUlZhZteMp8BN+n3fwR/W5RJFAju9o3F972kCgYBq3IlCMA6rSMa+us2jFCcO
+t8wdF38zD0EemYIfg0pzF8aTNvvVkAXYZf0FtqZPRD+vzOYN5YS/9C7K+77PW1xH
+YQDdWIeHzvIXgtqD7+lAU7uhn4075Z/TgLB1IbovUIK79iGFM36I4v0PdwpP7/rR
+Ip6lT8sGHH8E6pmByUfvYQKBgQDhG1r6HZY1w+bjdWoL6SxQ7Zu6Wio9830SfQWX
+/yJlhEyhOOFP9tUYfztk0vEoL0fxQmMPVm8VNCoczmZwPgNoplY3f7+4iOMMrGMr
+nvIkhLUrTWs1x9dwbuYBUyBE+O9qEogdJEZn8zodN41aF3yxDLYREg1tWhfz7ltv
+mVmhYQKBgBFtHgvmlw/fA5P4dfn/xnOFYwz2v+f5dxcD9DXP9Hu53m7mVPTEUC1t
+2SiBaaUMqTiOflW8Aq9qHHvOPNoO1GrGt4oUbhrAzKwxmkiCUyspYTRBOWHbLjW0
+07Mu40Y8I0WqEVenAGIsHfrsXzvdzat0bijsAt+P1LMliRjK7qhh
+-----END RSA PRIVATE KEY-----

+ 17 - 0
resources/development/nginx/uwsgi_params

@@ -0,0 +1,17 @@
+
+uwsgi_param  QUERY_STRING       $query_string;
+uwsgi_param  REQUEST_METHOD     $request_method;
+uwsgi_param  CONTENT_TYPE       $content_type;
+uwsgi_param  CONTENT_LENGTH     $content_length;
+
+uwsgi_param  REQUEST_URI        $request_uri;
+uwsgi_param  PATH_INFO          $document_uri;
+uwsgi_param  DOCUMENT_ROOT      $document_root;
+uwsgi_param  SERVER_PROTOCOL    $server_protocol;
+uwsgi_param  REQUEST_SCHEME     $scheme;
+uwsgi_param  HTTPS              $https if_not_empty;
+
+uwsgi_param  REMOTE_ADDR        $remote_addr;
+uwsgi_param  REMOTE_PORT        $remote_port;
+uwsgi_param  SERVER_PORT        $server_port;
+uwsgi_param  SERVER_NAME        $server_name;

+ 9 - 0
resources/development/sources.list

@@ -0,0 +1,9 @@
+# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
+deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
+deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
+deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
+deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse