From 0c98334d1ce6c65d3a47a4cf719f4a669bdec389 Mon Sep 17 00:00:00 2001 From: Artur Gurgul Date: Fri, 1 Aug 2025 20:11:48 +0200 Subject: [PATCH] save --- lib/make.rb | 8 ++++++ recipes/{ => forgejo}/forgejo.yml | 0 recipes/nginx/default.erb | 5 ++++ recipes/nginx/generate.rb | 37 +++++++++++++++++++++++++++ recipes/nginx/proxy.erb | 29 +++++++++++++++++++++ recipes/nginx/static.erb | 31 ++++++++++++++++++++++ recipes/{ruby.yml => ruby/debian.yml} | 0 recipes/ruby/macos.yml | 22 ++++++++++++++++ recipes/webdav/nginx.erb | 19 ++++++++++++++ 9 files changed, 151 insertions(+) rename recipes/{ => forgejo}/forgejo.yml (100%) create mode 100644 recipes/nginx/default.erb create mode 100644 recipes/nginx/generate.rb create mode 100644 recipes/nginx/proxy.erb create mode 100644 recipes/nginx/static.erb rename recipes/{ruby.yml => ruby/debian.yml} (100%) create mode 100644 recipes/ruby/macos.yml create mode 100644 recipes/webdav/nginx.erb diff --git a/lib/make.rb b/lib/make.rb index edbf753..be1d190 100644 --- a/lib/make.rb +++ b/lib/make.rb @@ -36,7 +36,15 @@ module Make @name = options.name @use_cache = options.use_cache || false + #System.detect_os + # rbenv: brew install rbenv && rbenv install 3.0.0 + # asdf: asdf install ruby 3.0.0 + makefile_path = "#{ENV["DAT_ROOT"]}/recipes/#{@name}.yml" + unless File.file?(makefile_path) + makefile_path = "#{ENV["DAT_ROOT"]}/recipes/#{@name}/#{System.detect_os}.yml" + end + puts "recipe at: #{makefile_path}" makefile = YAML.load_file(makefile_path) diff --git a/recipes/forgejo.yml b/recipes/forgejo/forgejo.yml similarity index 100% rename from recipes/forgejo.yml rename to recipes/forgejo/forgejo.yml diff --git a/recipes/nginx/default.erb b/recipes/nginx/default.erb new file mode 100644 index 0000000..30377bd --- /dev/null +++ b/recipes/nginx/default.erb @@ -0,0 +1,5 @@ +server { + listen 80; + listen [::]:80; + return 301 https://$host$request_uri; +} \ No newline at end of file diff --git a/recipes/nginx/generate.rb b/recipes/nginx/generate.rb new file mode 100644 index 0000000..6f51fd4 --- /dev/null +++ b/recipes/nginx/generate.rb @@ -0,0 +1,37 @@ +require 'erb' + + +class NGINXProxy + class << self + attr_accessor :domain, :port, :service + + def domain(value = nil) + @domain = value unless value.nil? + @domain + end + + def port(value = nil) + @port = value unless value.nil? + @port + end + + def service(value = nil) + @service = value unless value.nil? + @service + end + + def generate + template = File.read("proxy.erb") + template = ERB.new(template) + template.result(binding) + end + end +end + +class ExampleProxy < NGINXProxy + domain "gurgul.org" + service "forgejo" + port 3000 +end + +puts ExampleProxy.generate \ No newline at end of file diff --git a/recipes/nginx/proxy.erb b/recipes/nginx/proxy.erb new file mode 100644 index 0000000..81c813b --- /dev/null +++ b/recipes/nginx/proxy.erb @@ -0,0 +1,29 @@ +server { + root /home/<%= service %>/; + + index index.html index.htm; + server_name <%= domain %>; + listen [::]:443 ssl ipv6only=on; + listen 443 ssl; + + location / { + proxy_pass http://localhost:<%= port %>; + 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_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_cache_bypass $http_upgrade; + + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + ssl_certificate /etc/letsencrypt/live/<%= domain %>/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/<%= domain %>/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; +} \ No newline at end of file diff --git a/recipes/nginx/static.erb b/recipes/nginx/static.erb new file mode 100644 index 0000000..ddfd435 --- /dev/null +++ b/recipes/nginx/static.erb @@ -0,0 +1,31 @@ +server { + listen 443 ssl; + server_name ~^(?[^.]+)\.gurgul\.pro$; + + ssl_certificate /etc/letsencrypt/live/gurgul.pro/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/gurgul.pro/privkey.pem; + + root /home/$username/website; + index index.html index.htm index.php; + + location / { + try_files $uri $uri/ =404; + } + + ## Optional: handle PHP (if using PHP) + #location ~ \.php$ { + # include snippets/fastcgi-php.conf; + # fastcgi_pass unix:/run/php/php8.1-fpm.sock; # adjust PHP version as needed + #} + + location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ { + expires 7d; + access_log off; + } +} + +server { + listen 80; + server_name ~^(?[^.]+)\.gurgul\.pro$; + return 301 https://$host$request_uri; +} \ No newline at end of file diff --git a/recipes/ruby.yml b/recipes/ruby/debian.yml similarity index 100% rename from recipes/ruby.yml rename to recipes/ruby/debian.yml diff --git a/recipes/ruby/macos.yml b/recipes/ruby/macos.yml new file mode 100644 index 0000000..f55ec6e --- /dev/null +++ b/recipes/ruby/macos.yml @@ -0,0 +1,22 @@ +packages: + - openssl + - readline + - libyaml + - libffi + - autoconf + - automake + - libtool + - pkg-config + +repository: + url: https://github.com/ruby/ruby.git + branch: v3_0_0 + +steps: + - autoconf + - ./configure --prefix=$PREFIX +# --with-openssl-dir=$(brew --prefix openssl) +# --with-readline-dir=$(brew --prefix readline) +# --with-yaml-dir=$(brew --prefix libyaml) + - make -j$(sysctl -n hw.ncpu) + - make install \ No newline at end of file diff --git a/recipes/webdav/nginx.erb b/recipes/webdav/nginx.erb new file mode 100644 index 0000000..9ca357f --- /dev/null +++ b/recipes/webdav/nginx.erb @@ -0,0 +1,19 @@ +server { + listen 443 ssl; + server_name drive.gurgul.pro; + + ssl_certificate /etc/letsencrypt/live/gurgul.pro/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/gurgul.pro/privkey.pem; + + + location / { + proxy_pass http://unix:/run/webdav.sock:/; + proxy_http_version 1.1; + 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_pass_request_headers on; + client_max_body_size 2G; + } +} \ No newline at end of file