capistrano-nuxt2 0.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,176 @@
1
+ ###
2
+ ### HTTP-Config generated with capistrano-nuxt2 at: <%= Time.now.strftime("%Y-%m-%d .. %H:%M .. %Z") %>
3
+ ###
4
+
5
+
6
+ <% if fetch(:nginx_use_ssl) && !fetch(:nginx_also_allow_http, false) %>
7
+ # Redirect HTTP to HTTPS
8
+ server {
9
+ listen 80;
10
+ listen [::]:80;
11
+
12
+ server_name <%= nginx_all_domains_with_www.join(joiner) %>;
13
+ <% if fetch(:nginx_major_domain) %>
14
+ return 301 https://<%= nginx_major_domain %>$request_uri;
15
+ <% else %>
16
+ return 301 https://$host$request_uri;
17
+ <% end %>
18
+ }
19
+ <% end %>
20
+
21
+
22
+ <% if fetch(:nginx_major_domain) %>
23
+ <% if fetch(:nginx_use_ssl) %>
24
+
25
+ <% if fetch(:nginx_also_allow_http, false) %>
26
+ # Redirect HTTP to HTTPS
27
+ server {
28
+ listen 80;
29
+ listen [::]:80;
30
+
31
+ server_name <%= nginx_all_domains_with_www.join(joiner) %>;
32
+ return 301 https://<%= nginx_major_domain %>$request_uri;
33
+ }
34
+ <% end %>
35
+
36
+ # Redirect old domains to major (HTTPS)
37
+ server {
38
+ listen 443 ssl http2;
39
+ listen [::]:443 ssl http2;
40
+
41
+ ssl_certificate <%= fetch(:nginx_other_ssl_cert) %>;
42
+ ssl_certificate_key <%= fetch(:nginx_other_ssl_key) %>;
43
+
44
+ <%= render2go("nginx/https_ssl_options") %>
45
+
46
+ server_name <%= nginx_domains.join(joiner) %>;
47
+ return 301 https://<%= nginx_major_domain %>$request_uri;
48
+ }
49
+ <% else %>
50
+ # Redirect old domains to major (HTTP)
51
+ server {
52
+ listen 80;
53
+ listen [::]:80;
54
+
55
+ server_name <%= nginx_domains.join(joiner) %>;
56
+ return 301 http://<%= nginx_major_domain %>$request_uri;
57
+ }
58
+ <% end %>
59
+ <% end %>
60
+
61
+
62
+
63
+
64
+ <% if fetch(:nginx_also_allow_http, false) && fetch(:nginx_use_ssl, false) %>
65
+ # Main HTTP Server Block
66
+ server {
67
+ listen 80;
68
+ listen [::]:80;
69
+
70
+
71
+ <% if fetch(:nginx_remove_www) %>
72
+ ## Remove "www" from URLs
73
+ if ($host ~* ^www\.(?<domain>.*)) {
74
+ return 301 <%= fetch(:nginx_use_ssl) ? "https" : "http" %>://$domain$request_uri;
75
+ }
76
+ <% end %>
77
+
78
+ <% if fetch(:nginx_major_domain) %>
79
+ server_name <%= fetch(:nginx_major_domain).gsub(/^\*?\./, "") %>;
80
+ <% else %>
81
+ server_name <%= nginx_domains_with_www.join(joiner) %>;
82
+ <% end %>
83
+
84
+
85
+ gzip on;
86
+ gzip_types text/plain application/xml text/css application/javascript;
87
+ gzip_min_length 1000;
88
+
89
+
90
+ <% if fetch(:allow_well_known) %>
91
+ location ~ /.well-known {
92
+ allow all;
93
+ root <%= shared_path %>;
94
+ }
95
+ <% end %>
96
+
97
+ # Logging
98
+ access_log <%= shared_path %>/<%= fetch(:nginx_log_folder) %>/nginx-access.log;
99
+ error_log <%= shared_path %>/<%= fetch(:nginx_log_folder) %>/nginx-error.log;
100
+
101
+ # Static Files
102
+ root <%= shared_path %>/<%= fetch(:nginx_root_folder) %>;
103
+
104
+ # SPA-routing
105
+ location / {
106
+ try_files $uri $uri/ /<%= fetch(:nginx_app_fallback_site, "404.html") %>;
107
+ }
108
+ }
109
+ <% end %>
110
+
111
+
112
+
113
+
114
+ <% if fetch(:nginx_use_ssl) %>
115
+ # Main SSL Server Block
116
+ server {
117
+ listen 443 ssl http2;
118
+ listen [::]:443 ssl http2;
119
+
120
+ ssl_certificate <%= fetch(:nginx_ssl_cert) %>;
121
+ ssl_certificate_key <%= fetch(:nginx_ssl_key) %>;
122
+
123
+ <%= render2go("nginx/https_ssl_options") %>
124
+ <% else %>
125
+ # Main HTTP Server Block
126
+ server {
127
+ listen 80;
128
+ listen [::]:80;
129
+ <% end %>
130
+
131
+ <% if fetch(:nginx_remove_www) %>
132
+ ## Remove "www" from URLs
133
+ if ($host ~* ^www\.(?<domain>.*)) {
134
+ return 301 <%= fetch(:nginx_use_ssl) ? "https" : "http" %>://$domain$request_uri;
135
+ }
136
+ <% end %>
137
+
138
+ <% if fetch(:nginx_major_domain) %>
139
+ server_name <%= fetch(:nginx_major_domain).gsub(/^\*?\./, "") %>;
140
+ <% else %>
141
+ server_name <%= nginx_domains_with_www.join(joiner) %>;
142
+ <% end %>
143
+
144
+
145
+ gzip on;
146
+ gzip_types text/plain application/xml text/css application/javascript;
147
+ gzip_min_length 1000;
148
+
149
+
150
+
151
+ <% if fetch(:allow_well_known) %>
152
+ location ~ /.well-known {
153
+ allow all;
154
+ root <%= shared_path %>;
155
+ }
156
+ <% end %>
157
+
158
+ # Logging
159
+ access_log <%= shared_path %>/<%= fetch(:nginx_log_folder) %>/nginx-access.log;
160
+ error_log <%= shared_path %>/<%= fetch(:nginx_log_folder) %>/nginx-error.log;
161
+
162
+
163
+ # Static Files
164
+
165
+ # root folder: dist | www
166
+ root <%= shared_path %>/<%= fetch(:nginx_root_folder) %>;
167
+
168
+ # index
169
+ # index index.html;
170
+
171
+ # SPA-routing
172
+ location / {
173
+ try_files $uri $uri/ /<%= fetch(:nginx_app_fallback_site, "404.html") %>;
174
+ }
175
+
176
+ }
@@ -0,0 +1,46 @@
1
+ ###
2
+ ### APP HTTP-Config generated with capistrano at: <%= Time.now.strftime("%Y-%m-%d .. %H:%M .. %Z") %>
3
+ ### Application: <%= fetch(:application) %>, Stage: <%= fetch(:stage) %>
4
+ ### Site Name: <%= fetch(:nginx_app_site_name) %>
5
+ ### Listening on Port: <%= fetch(:nginx_upstream_port) %>
6
+ ###
7
+
8
+ server {
9
+ listen <%= fetch(:nginx_upstream_port) %>;
10
+ listen [::]:<%= fetch(:nginx_upstream_port) %>;
11
+
12
+ # Lausche auf jede Domain oder interne IP, da der Proxy davor sitzt
13
+ server_name _; # Oder localhost, oder die interne IP des App-Servers
14
+
15
+ gzip on;
16
+ gzip_proxied any; # Wichtig, wenn hinter einem Proxy
17
+ gzip_types text/plain application/xml text/css application/javascript application/json;
18
+ gzip_min_length 1000;
19
+ gzip_comp_level 6; # Guter Kompromiss
20
+
21
+ # Logging für die App
22
+ # Pfade sind relativ zu shared_path, wie in deinen linked_dirs definiert
23
+ access_log <%= shared_path %>/<%= fetch(:nginx_log_folder) %>/nginx-access.log;
24
+ error_log <%= shared_path %>/<%= fetch(:nginx_log_folder) %>/nginx-error.log;
25
+
26
+
27
+ # .well-known Anfragen könnten auch hier landen, wenn der Proxy sie durchlässt
28
+ # Falls bestimmte .well-known Pfade von der App selbst bedient werden sollen
29
+ <% if fetch(:allow_well_known_app) %>
30
+ location ~ /.well-known {
31
+ allow all;
32
+ root <%= shared_path %>;
33
+ }
34
+ <% end %>
35
+
36
+ # Static Files
37
+ root <%= fetch(:nginx_root_folder) %>;
38
+
39
+
40
+
41
+ # SPA-routing
42
+ location / {
43
+ try_files $uri $uri/ /<%= fetch(:nginx_app_fallback_site, "404.html") %>;
44
+ }
45
+
46
+ }
@@ -0,0 +1,137 @@
1
+ ###
2
+ ### PROXY HTTP-Config generated with capistrano at: <%= Time.now.strftime("%Y-%m-%d .. %H:%M .. %Z") %>
3
+ ### Application: <%= fetch(:application) %>, Stage: <%= fetch(:stage) %>
4
+ ### Site Name: <%= fetch(:nginx_proxy_site_name) %>
5
+ ### Upstream App: <%= fetch(:nginx_upstream_host) %>:<%= fetch(:nginx_upstream_port) %>
6
+ ###
7
+
8
+
9
+ # Upstream for the Internal App Nginx Server
10
+ # This is where your App Nginx (e.g., in a Docker container or on a separate VM) listens.
11
+ upstream app_<%= fetch(:application) %>_<%= fetch(:stage) %>_app_server {
12
+ server <%= fetch(:nginx_upstream_host) %>:<%= fetch(:nginx_upstream_port) %>;
13
+ # If you have multiple app servers, you'd list them here:
14
+ # server 10.0.0.6:4550;
15
+ # server 10.0.0.7:4550;
16
+ }
17
+
18
+
19
+ <% if fetch(:nginx_use_ssl) %>
20
+ # Redirect HTTP to HTTPS
21
+ server {
22
+ listen 80;
23
+ listen [::]:80;
24
+
25
+ server_name <%= nginx_all_domains_with_www.join(joiner) %>;
26
+
27
+ <% if fetch(:allow_well_known_proxy) %>
28
+ # For Certbot ACME Challenge
29
+ location ~ /.well-known {
30
+ allow all;
31
+ root <%= fetch(:nginx_proxy_well_known_root) %>; # Pfad für Certbot auf dem Proxy
32
+ }
33
+ <% end %>
34
+
35
+ location / {
36
+ <% if fetch(:nginx_major_domain) %>
37
+ return 301 https://<%= nginx_major_domain %>$request_uri;
38
+ <% else %>
39
+ return 301 https://$host$request_uri;
40
+ <% end %>
41
+ }
42
+ }
43
+ <% end %>
44
+
45
+
46
+ <% if fetch(:nginx_major_domain) && !nginx_domains.empty? %>
47
+ <% if fetch(:nginx_use_ssl) %>
48
+ # Redirect old domains to major (HTTPS)
49
+ server {
50
+ listen 443 ssl http2;
51
+ listen [::]:443 ssl http2;
52
+
53
+ ssl_certificate <%= fetch(:nginx_other_ssl_cert) %>;
54
+ ssl_certificate_key <%= fetch(:nginx_other_ssl_key) %>;
55
+
56
+ <%= render2go("nginx/https_ssl_options") %> # Dein SSL Options Partial
57
+
58
+ server_name <%= nginx_domains.join(joiner) %>;
59
+ return 301 https://<%= nginx_major_domain %>$request_uri;
60
+ }
61
+ <% else %>
62
+ # Redirect old domains to major (HTTP)
63
+ server {
64
+ listen 80;
65
+ listen [::]:80;
66
+
67
+ server_name <%= nginx_domains.join(joiner) %>;
68
+ return 301 http://<%= nginx_major_domain %>$request_uri;
69
+ }
70
+ <% end %>
71
+ <% end %>
72
+
73
+
74
+ <% if fetch(:nginx_use_ssl) %>
75
+ # Main SSL Server Block for Proxy
76
+ server {
77
+ listen 443 ssl http2;
78
+ listen [::]:443 ssl http2;
79
+
80
+ ssl_certificate <%= fetch(:nginx_ssl_cert) %>;
81
+ ssl_certificate_key <%= fetch(:nginx_ssl_key) %>;
82
+
83
+ <%= render2go("nginx/https_ssl_options") %> # Dein SSL Options Partial
84
+ <% else %>
85
+ # Main HTTP Server Block for Proxy
86
+ server {
87
+ listen 80;
88
+ listen [::]:80;
89
+ <% end %>
90
+
91
+ <% if fetch(:nginx_remove_www) %>
92
+ ## Remove "www" from URLs
93
+ if ($host ~* ^www\.(?<domain>.*)) {
94
+ return 301 <%= fetch(:nginx_use_ssl) ? "https" : "http" %>://$domain$request_uri;
95
+ }
96
+ <% end %>
97
+
98
+ <% if fetch(:nginx_major_domain) %>
99
+ server_name <%= fetch(:nginx_major_domain).gsub(/^\*?\./, "") %>;
100
+ <% else %>
101
+ server_name <%= nginx_domains_with_www.join(joiner) %>;
102
+ <% end %>
103
+
104
+ # Logging für den Proxy
105
+ access_log <%= fetch(:nginx_proxy_log_folder) %>/<%= fetch(:nginx_proxy_site_name) %>-access.log;
106
+ error_log <%= fetch(:nginx_proxy_log_folder) %>/<%= fetch(:nginx_proxy_site_name) %>-error.log;
107
+
108
+ <%# For Certbot ACME Challenge (falls direkt auf Port 443/80 ohne vorherigen Redirect) %>
109
+ <% if fetch(:allow_well_known_proxy) %>
110
+ location ~ /.well-known {
111
+ allow all;
112
+ root <%= fetch(:nginx_proxy_well_known_root) %>; # Pfad für Certbot auf dem Proxy
113
+ }
114
+ <% end %>
115
+
116
+
117
+
118
+ # Proxying to the App Server
119
+ location / {
120
+ proxy_set_header Host $http_host;
121
+ proxy_set_header X-Real-IP $remote_addr;
122
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
123
+ proxy_set_header X-Forwarded-Proto $scheme;
124
+ proxy_connect_timeout 75;
125
+ proxy_send_timeout 3650;
126
+ proxy_read_timeout 3650;
127
+ proxy_buffers 64 512k;
128
+ client_body_buffer_size 512k;
129
+ client_max_body_size 0;
130
+
131
+ # proxy_redirect off;
132
+ # FIX: Ersetze in Location-Header :<%= fetch(:nginx_upstream_port) %> egal auf welchem Host
133
+ proxy_redirect ~^(.+):<%= fetch(:nginx_upstream_port) %>/(.*) $1/$2;
134
+
135
+ proxy_pass http://app_<%= fetch(:application) %>_<%= fetch(:stage) %>_app_server;
136
+ }
137
+ }
@@ -0,0 +1,38 @@
1
+ [Unit]
2
+ Description=Nuxt 3 Nitro SSR Server for <%= fetch(:application) %>_<%= fetch(:stage) %>
3
+ After=network.target
4
+
5
+ [Service]
6
+ Type=simple
7
+ User=<%= fetch(:nuxt3_ssr_user) %>
8
+ Group=<%= fetch(:nuxt3_ssr_user) %>
9
+
10
+ WorkingDirectory=<%= shared_path %>/<%= fetch(:nuxt3_output_folder) %>
11
+
12
+ # Nitro listens on host:port; the nginx proxy passes through to it.
13
+ Environment=NODE_ENV=production
14
+ Environment=NITRO_HOST=<%= fetch(:nuxt3_ssr_host) %>
15
+ Environment=NITRO_PORT=<%= fetch(:nuxt3_ssr_port) %>
16
+ Environment=HOST=<%= fetch(:nuxt3_ssr_host) %>
17
+ Environment=PORT=<%= fetch(:nuxt3_ssr_port) %>
18
+ <%= fetch(:nuxt3_ssr_env, {}).map { |k, v| "Environment=#{k}=#{v}" }.join("\n") %>
19
+
20
+ # nvm-activated node, same bash -lc pattern as the build tasks.
21
+ ExecStart=/bin/bash -lc '<%= nuxt3_nvm_prefix %> && exec node <%= shared_path %>/<%= fetch(:nuxt3_output_folder) %>/server/index.mjs'
22
+
23
+ # PID-File explicit for Monit/supervision (mirrors puma_service)
24
+ PIDFile=<%= fetch(:nuxt3_pid_path) %>/<%= fetch(:nuxt3_ssr_service_file) %>.pid
25
+ ExecStartPost=/bin/bash -c 'echo $MAINPID > <%= fetch(:nuxt3_pid_path) %>/<%= fetch(:nuxt3_ssr_service_file) %>.pid'
26
+ ExecStopPost=/bin/bash -c 'rm -f <%= fetch(:nuxt3_pid_path) %>/<%= fetch(:nuxt3_ssr_service_file) %>.pid'
27
+
28
+ Restart=always
29
+ RestartSec=5
30
+ StartLimitBurst=3
31
+ StartLimitInterval=30
32
+
33
+ StandardOutput=syslog
34
+ StandardError=syslog
35
+ SyslogIdentifier=nuxt3_ssr_<%= fetch(:application) %>_<%= fetch(:stage) %>
36
+
37
+ [Install]
38
+ WantedBy=multi-user.target
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :capistrano_nuxt2 do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-nuxt2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.17
5
+ platform: ruby
6
+ authors:
7
+ - Torsten Wetzel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-05-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capistrano
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.15'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ed25519
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2.0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '1.2'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bcrypt_pbkdf
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.0'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
67
+ description: Description of Capistrano::Nuxt2.
68
+ email:
69
+ - trendgegner@gmail.com
70
+ executables: []
71
+ extensions: []
72
+ extra_rdoc_files: []
73
+ files:
74
+ - MIT-LICENSE
75
+ - README.md
76
+ - Rakefile
77
+ - lib/capistrano/nuxt2.rb
78
+ - lib/capistrano/nuxt2/base_helpers.rb
79
+ - lib/capistrano/nuxt2/certbot.rb
80
+ - lib/capistrano/nuxt2/nginx.rb
81
+ - lib/capistrano/nuxt2/nginx_helpers.rb
82
+ - lib/capistrano/nuxt2/nuxt.rb
83
+ - lib/capistrano/nuxt2/nuxt3.rb
84
+ - lib/capistrano/nuxt2/proxy_nginx.rb
85
+ - lib/capistrano/nuxt2/version.rb
86
+ - lib/capistrano/nuxt2/vue.rb
87
+ - lib/capistrano/tasks/certbot.rake
88
+ - lib/capistrano/tasks/nginx.rake
89
+ - lib/capistrano/tasks/nuxt.rake
90
+ - lib/capistrano/tasks/nuxt3.rake
91
+ - lib/capistrano/tasks/proxy_nginx.rake
92
+ - lib/capistrano/tasks/vue.rake
93
+ - lib/generators/capistrano/nuxt2/templates/nginx.conf.erb
94
+ - lib/generators/capistrano/nuxt2/templates/nginx/https_ssl_options.erb
95
+ - lib/generators/capistrano/nuxt2/templates/nginx_app_conf.erb
96
+ - lib/generators/capistrano/nuxt2/templates/nginx_proxy_conf.erb
97
+ - lib/generators/capistrano/nuxt2/templates/nuxt3_ssr_service.erb
98
+ - lib/tasks/capistrano/nuxt2_tasks.rake
99
+ homepage: https://github.com/2strange/capistrano-nuxt2
100
+ licenses:
101
+ - MIT
102
+ metadata:
103
+ homepage_uri: https://github.com/2strange/capistrano-nuxt2
104
+ source_code_uri: https://github.com/2strange/capistrano-nuxt2
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ requirements: []
120
+ rubygems_version: 3.5.16
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: Capistrano::Nuxt2 capistrano recipes to deploy nuxt 2 apps.
124
+ test_files: []