First working version
This commit is contained in:
commit
d08ff0c7ef
|
@ -0,0 +1,4 @@
|
|||
test/*
|
||||
.git/*
|
||||
screenshots/*
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
node_modules/
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"id": "org.getzola.cloudronapp",
|
||||
"title": "Zola",
|
||||
"author": "Zola developers",
|
||||
"description": "file://DESCRIPTION.md",
|
||||
"tagline": "Zola static page generator",
|
||||
"tags": [
|
||||
"webserver"
|
||||
],
|
||||
"version": "0.1.0",
|
||||
"healthCheckPath": "/",
|
||||
"httpPort": 8000,
|
||||
"manifestVersion": 1,
|
||||
"website": "https://getzola.org",
|
||||
"contactEmail": "support@cloudron.io",
|
||||
"icon": "logo.png",
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
},
|
||||
"mediaLinks": [
|
||||
"https://nginx.org/nginx.png"
|
||||
],
|
||||
"changelog": "file://CHANGELOG",
|
||||
"postInstallMessage": "file://POSTINSTALL.md"
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
### Empty Website with Nginx + PHP.
|
||||
|
||||
Use `cloudron push` to copy files into `/app/data/public/` and `cloudron exec` to get a remote terminal.
|
||||
|
||||
Edit `/app/data/nginx.conf` to change the webserver configuration according to the [Nginx Documentation](https://nginx.org/en/docs/).
|
|
@ -0,0 +1,50 @@
|
|||
FROM cloudron/base:1.0.0
|
||||
|
||||
RUN mkdir -p /app/code
|
||||
WORKDIR /app/code
|
||||
|
||||
RUN wget http://nginx.org/keys/nginx_signing.key && \
|
||||
apt-key add nginx_signing.key && \
|
||||
rm nginx_signing.key && \
|
||||
echo "deb http://nginx.org/packages/mainline/ubuntu/ $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list && \
|
||||
apt update && \
|
||||
apt install -y nginx zopfli
|
||||
|
||||
ENV RUST=1.47.0
|
||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain ${RUST} && \
|
||||
export PATH=/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && \
|
||||
cd /tmp && \
|
||||
git clone https://github.com/getzola/zola.git && \
|
||||
cd zola && \
|
||||
cargo build --release && \
|
||||
cp target/release/zola /usr/bin && \
|
||||
cd / && rm -rf /tmp/zola /root/.cargo /root/.rustup
|
||||
|
||||
ADD supervisord.conf /etc/supervisor/conf.d/zola.conf
|
||||
RUN sed -e 's,^logfile=.*$,logfile=/run/supervisord.log,' -i /etc/supervisor/supervisord.conf
|
||||
|
||||
ADD nginx.conf /app/code/nginx.conf.default
|
||||
ADD fpm.conf /etc/php/7.2/fpm/php-fpm.conf
|
||||
|
||||
ADD public /app/code/public.default
|
||||
|
||||
ADD start.sh /app/code/start.sh
|
||||
ADD config.sh /app/code/config.sh.default
|
||||
ADD rebuild.sh /app/code/rebuild.sh
|
||||
ADD rebuild-loop.sh /app/code/rebuild-loop.sh
|
||||
ADD rebuild.php /app/code/rebuild.php
|
||||
ADD ssh.config /app/code/ssh.config.default
|
||||
|
||||
RUN mkdir /run/nginx && \
|
||||
rm /var/log/nginx/*.log && \
|
||||
ln -s /dev/stderr /var/log/nginx/error.log && \
|
||||
ln -s /dev/stdout /var/log/nginx/access.log && \
|
||||
rmdir /var/cache/nginx && ln -s /tmp /var/cache/nginx && \
|
||||
ln -s /app/data/ssh /home/cloudron/.ssh
|
||||
|
||||
RUN chown -R cloudron:cloudron /app/code /run/nginx
|
||||
|
||||
WORKDIR /app/data
|
||||
|
||||
CMD [ "/app/code/start.sh" ]
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
### Empty Website with Nginx + PHP.
|
||||
|
||||
Use `cloudron push` to copy files into `/app/data/public/` and `cloudron exec` to get a remote terminal.
|
||||
|
||||
Edit `/app/data/nginx.conf` to change the webserver configuration according to the [Nginx Documentation](https://nginx.org/en/docs/).
|
|
@ -0,0 +1,24 @@
|
|||
# Nginx Cloudron App
|
||||
|
||||
This repository contains the Cloudron app package source for Nginx.
|
||||
|
||||
## Installation
|
||||
|
||||
[![Install](https://cloudron.io/img/button.svg)](https://cloudron.io/button.html?app=org.nginx.cloudronapp)
|
||||
|
||||
or using the [Cloudron command line tooling](https://cloudron.io/references/cli.html)
|
||||
|
||||
```
|
||||
cloudron install --appstore-id org.nginx.cloudronapp
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
The app package can be built using the [Cloudron command line tooling](https://cloudron.io/references/cli.html).
|
||||
|
||||
```
|
||||
cd nginx-app
|
||||
|
||||
cloudron build
|
||||
cloudron install
|
||||
```
|
|
@ -0,0 +1,14 @@
|
|||
[global]
|
||||
error_log = /dev/stderr
|
||||
|
||||
[www]
|
||||
listen = /var/run/php-fpm.sock
|
||||
listen.mode = 0666
|
||||
user = cloudron
|
||||
group = cloudron
|
||||
|
||||
pm = dynamic
|
||||
pm.max_children = 5
|
||||
pm.start_servers = 2
|
||||
pm.min_spare_servers = 1
|
||||
pm.max_spare_servers = 3
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1,81 @@
|
|||
user cloudron;
|
||||
worker_processes 1;
|
||||
|
||||
error_log /dev/stderr;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
|
||||
gzip on;
|
||||
gzip_http_version 1.1;
|
||||
gzip_vary on;
|
||||
gzip_comp_level 6;
|
||||
gzip_proxied any;
|
||||
gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
|
||||
gzip_buffers 16 8k;
|
||||
gzip_static on;
|
||||
|
||||
server {
|
||||
listen 8000;
|
||||
|
||||
root /run/html;
|
||||
index index.php index.html index.htm;
|
||||
|
||||
try_files $uri $uri/index.html $uri/ =404;
|
||||
absolute_redirect off;
|
||||
|
||||
location /_setup.html {
|
||||
|
||||
}
|
||||
|
||||
location /_rebuild {
|
||||
auth_basic "Token required";
|
||||
auth_basic_user_file /app/data/htpasswd;
|
||||
limit_except POST {
|
||||
deny all;
|
||||
}
|
||||
fastcgi_pass unix:/var/run/php-fpm.sock;
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx;
|
||||
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_FILENAME /app/code/rebuild.php;
|
||||
fastcgi_param SCRIPT_NAME /app/code/rebuild.php;
|
||||
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 REMOTE_PORT $remote_port;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
}
|
||||
|
||||
# Disallow .htaccess .htpasswd etc.
|
||||
location ~ /\.ht {
|
||||
deny all;
|
||||
}
|
||||
|
||||
# Cache static files
|
||||
location ~* \.html$ {
|
||||
expires 1h;
|
||||
}
|
||||
|
||||
location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|mp3|ttf|css|rss|atom|js|jpg|jpeg|webp|webm|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)(\?.+)?$ {
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
expires max;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>Zola</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Zola</h1>
|
||||
<p>To get started, fill in the repository URL in <code>/app/data/config.sh</code>.</p>
|
||||
<button onclick="rebuild()">Rebuild now</button>
|
||||
<h2>Webhook</h2>
|
||||
<p>
|
||||
To trigger a site rebuild from a webhook, use the following URL:
|
||||
</p>
|
||||
<pre><code id="webhook_url"></code></pre>
|
||||
<p>
|
||||
If you want to clone a protected repository, you can grant access to the following SSH key:
|
||||
</p>
|
||||
<pre><code>%SSH_KEY%</code></pre>
|
||||
<script>
|
||||
var token = "%TOKEN%";
|
||||
var url = `https://token:${token}@${window.location.hostname}/_rebuild`;
|
||||
function rebuild() {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", url, false);
|
||||
xhr.send();
|
||||
alert("Rebuild started");
|
||||
}
|
||||
document.getElementById('webhook_url').innerHTML = url;
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
. /app/data/config.sh
|
||||
|
||||
while true; do
|
||||
/app/code/rebuild.sh
|
||||
sleep $REBUILD_INTERVAL
|
||||
done
|
|
@ -0,0 +1,3 @@
|
|||
<?php
|
||||
shell_exec('killall sleep');
|
||||
?>
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
REPO_PATH=/run/repo
|
||||
WEB_PATH=/run/html
|
||||
|
||||
. /app/data/config.sh
|
||||
|
||||
if [ "$REPO_URL" == "" ]; then
|
||||
echo "No REPO_URL set!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -d "$REPO_PATH" ]; then
|
||||
git clone "$REPO_URL" "$REPO_PATH"
|
||||
(cd "$REPO_PATH" && git submodule init)
|
||||
fi
|
||||
|
||||
cd "$REPO_PATH"
|
||||
git pull
|
||||
git submodule update
|
||||
|
||||
zola build
|
||||
|
||||
echo "Compressing files..."
|
||||
find public -type f -name '*.css' -size +5k -exec zopfli '{}' \;
|
||||
find public -type f -name '*.js' -size +5k -exec zopfli '{}' \;
|
||||
find public -type f -name '*.html' -size +5k -exec zopfli '{}' \;
|
||||
|
||||
echo "Updating webpage..."
|
||||
mkdir -p "$WEB_PATH"
|
||||
rsync -av --del public/ "$WEB_PATH/"
|
|
@ -0,0 +1,3 @@
|
|||
Host *
|
||||
StrictHostKeyChecking no
|
||||
UserKnownHostsFile=/dev/null
|
|
@ -0,0 +1,41 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
if ! [ -e "/app/data/nginx.conf" ]; then
|
||||
cp -a "/app/code/nginx.conf.default" "/app/data/nginx.conf"
|
||||
fi
|
||||
|
||||
if ! [ -e "/app/data/config.sh" ]; then
|
||||
cp -a "/app/code/config.sh.default" "/app/data/config.sh"
|
||||
fi
|
||||
|
||||
if ! [ -e "/app/data/ssh" ]; then
|
||||
mkdir -p /app/data/ssh
|
||||
cp /app/code/ssh.config.default /app/data/ssh/config
|
||||
ssh-keygen -f /app/data/ssh/id_rsa -q -N ""
|
||||
fi
|
||||
|
||||
if ! [ -e "/app/data/token.txt" ]; then
|
||||
token="$(pwgen 20 1)"
|
||||
echo "$token" > /app/data/token.txt
|
||||
fi
|
||||
|
||||
if ! [ -e "/app/data/htpasswd" ]; then
|
||||
token="$(cat /app/data/token.txt)"
|
||||
echo "$token" > /app/data/token.txt
|
||||
htpasswd -bc /app/data/htpasswd token "$token"
|
||||
fi
|
||||
|
||||
chown -R cloudron:cloudron /app/data
|
||||
|
||||
cp -a "/app/code/public.default" "/run/html"
|
||||
token="$(cat /app/data/token.txt)"
|
||||
sed -i -e "s/%TOKEN%/$token/g" /run/html/index.html
|
||||
ssh_key="$(cat /app/data/ssh/id_rsa.pub | sed 's/\//\\\//g')"
|
||||
sed -i -e "s/%SSH_KEY%/$ssh_key/g" /run/html/index.html
|
||||
chown cloudron:cloudron /run/html /run
|
||||
|
||||
export HOME=/app/data
|
||||
|
||||
exec /usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i Zola
|
|
@ -0,0 +1,30 @@
|
|||
[program:nginx]
|
||||
directory=/app/data
|
||||
command=/usr/sbin/nginx -c /app/data/nginx.conf -g 'daemon off;'
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
[program:fpm]
|
||||
directory=/app/data
|
||||
command=/usr/sbin/php-fpm7.2 -F
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
[program:rebuild]
|
||||
directory=/app/data
|
||||
command=/app/code/rebuild-loop.sh
|
||||
user=cloudron
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
Loading…
Reference in New Issue