From 33d4ebd44363f8058f902ff717fecf60fcf09acd Mon Sep 17 00:00:00 2001 From: Knah-Tsaeb Date: Tue, 2 Jul 2024 15:44:39 +0200 Subject: [PATCH] Update README and docker file --- .gitignore | 4 ++ Dockerfile | 16 ++++---- README.md | 30 +++++++++------ public/assets/icons/docker.svg | 10 ++++- public/assets/icons/help.svg | 12 ++++++ public/assets/icons/logout.svg | 18 ++++++++- public/assets/icons/moon.svg | 11 ++++++ public/assets/icons/redirection.svg | 13 ++++++- public/assets/icons/server.svg | 22 ++++++++++- public/assets/icons/settings.svg | 11 ++++++ public/assets/icons/vm.svg | 11 +++++- public/assets/icons/web.svg | 2 +- public/assets/icons/webapp.svg | 35 +++++++++++++++++- .../screen_compact_dark-light.webp | Bin 0 -> 17030 bytes .../screenshots/screen_full_dark-light.webp | Bin 0 -> 24728 bytes .../screenshots/screen_icon_dark-light.webp | Bin 0 -> 14686 bytes public/index.php | 10 +++++ 17 files changed, 177 insertions(+), 28 deletions(-) create mode 100644 public/assets/icons/help.svg create mode 100644 public/assets/icons/moon.svg create mode 100644 public/assets/icons/settings.svg create mode 100644 public/imgs/screenshots/screen_compact_dark-light.webp create mode 100644 public/imgs/screenshots/screen_full_dark-light.webp create mode 100644 public/imgs/screenshots/screen_icon_dark-light.webp diff --git a/.gitignore b/.gitignore index ea1d969..5d0f9ff 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,9 @@ public/imgs/big_favicons/*.webp public/imgs/favicons/*.webp public/imgs/screenshots/*.webp public/imgs/thumbs/*.webp + +!public/imgs/screenshots/screen_full_dark-light.webp +!public/imgs/screenshots/screen_compact_dark-light.webp +!public/imgs/screenshots/screen_icon_dark-light.webp vendor/ composer.lock \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 345cc3c..49f1284 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,12 +2,12 @@ FROM debian:stable-slim MAINTAINER Knah Tsaeb -LABEL version="0.1.1" +LABEL version="0.2.0" LABEL description="Apache 2 / PHP / Nofu" ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get -y update && apt-get install -y git composer php apache2 php-cli php-curl php-gd && apt-get clean && apt-get autoclean && apt-get autoremove +RUN apt-get -y update && apt-get install -y git composer php apache2 php-cli php-curl php-gd && apt-get clean && apt-get autoremove -y RUN rm -r /var/www/ && mkdir /var/www/ @@ -17,12 +17,10 @@ RUN git clone https://forge.leslibres.org/Knah-Tsaeb/Nofu.git --branch main --si RUN composer install --no-dev && chown -R www-data:www-data /var/www/ -COPY .docker/start.sh /usr/bin/start.sh +RUN cp .docker/start.sh /usr/bin/start.sh RUN chmod +x /usr/bin/start.sh -WORKDIR / - -COPY .docker/apache2/nofu.conf /etc/apache2/sites-available/nofu.conf +RUN cp .docker/apache2/nofu.conf /etc/apache2/sites-available/nofu.conf RUN a2dissite 000-default.conf && a2ensite nofu.conf && a2enmod rewrite EXPOSE 80 @@ -32,7 +30,7 @@ WORKDIR /var/www/ ENTRYPOINT "start.sh" # Build image -# docker buildx build -t nofu:0.1.0 . +# docker buildx build -t nofu:0.2.0 . # Run container -# docker run -d --restart unless-stopped -v nofu_data:/var/www/data -e TZ=UTC -p 8189:80 --name nofu nofu:0.1.0 -# docker run -d --restart unless-stopped -v /opt/nofu:/var/www/data -e TZ=UTC -p 8189:80 --name nofu nofu:0.1.0 \ No newline at end of file +# docker run -d --restart unless-stopped -v nofu_data:/var/www/data -e TZ=UTC -p 8189:80 --name nofu nofu:0.2.0 +# docker run -d --restart unless-stopped -v /opt/nofu:/var/www/data -e TZ=UTC -p 8189:80 --name nofu nofu:0.2.0 \ No newline at end of file diff --git a/README.md b/README.md index 9dc1bde..91bebbb 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,9 @@ There are many impressive dashboards ([awesome-selfhosted](https://awesome-selfh I also wanted a place where my family could find all my services with a quick documentation on my infrastructure (software used, what it's for, where it's located, where backups are stored...), in case I stop functioning one day. So that they can recover the family data or call someone to help them. -![screenshot]() +![screenshot](public/imgs/screenshots/screen_full_dark-light.webp) +![screenshot](public/imgs/screenshots/screen_compact_dark-light.webp) +![screenshot](public/imgs/screenshots/screen_icon_dark-light.webp) ## Features @@ -57,31 +59,35 @@ Clone, build and run. #### Clone ```shell -git clone https://forge.leslibres.org/Knah-Tsaeb/Nofu.git -cd nofu +cd /tmp +wget https://forge.leslibres.org/Knah-Tsaeb/Nofu/raw/branch/main/Dockerfile ``` #### Build ```shell -docker buildx build -t nofu:0.1.0 . +docker buildx build -t nofu:0.2.0 . ``` #### Run ```shell -docker run -d --restart unless-stopped -v nofu_data:/var/www/data -e TZ=UTC -p 8189:80 --name nofu nofu:0.1.0 +docker run -d --restart unless-stopped -v nofu_data:/var/www/data -e TZ=UTC -p 8189:80 --name nofu nofu:0.2.0 ``` ## Ressources - * docker icon SVGICON - * docker icon SVGICON - * docker icon SVGICON - * docker icon SVGICON - * docker icon SVGICON - * docker icon SVGICON - * docker icon SVGICON + * docker icon svgrepo.com (MLP licence) + * docker icon svgrepo.com (CC Attribution License) + * logout icon svgrepo.com (CCO licence) + * logout icon svgrepo.com (CCO licence) + * docker icon Missing origin, need to find origin or change + * redirection icon svgrepo.com (CCO licence) + * docker icon svgrepo.com (CCO licence) + * docker icon svgrepo.com (CCO licence) + * docker icon svgrepo.com (Logo License) + * docker icon svgrepo.com Logo (CC Attribution License) + * docker icon svgrepo.com Logo (CC0 License) And some code from Stack Overflow :-) diff --git a/public/assets/icons/docker.svg b/public/assets/icons/docker.svg index a5f8bea..36ec82f 100644 --- a/public/assets/icons/docker.svg +++ b/public/assets/icons/docker.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/help.svg b/public/assets/icons/help.svg new file mode 100644 index 0000000..3feccd0 --- /dev/null +++ b/public/assets/icons/help.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/icons/logout.svg b/public/assets/icons/logout.svg index fa1572d..cec9c42 100644 --- a/public/assets/icons/logout.svg +++ b/public/assets/icons/logout.svg @@ -1 +1,17 @@ - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/moon.svg b/public/assets/icons/moon.svg new file mode 100644 index 0000000..393318c --- /dev/null +++ b/public/assets/icons/moon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/icons/redirection.svg b/public/assets/icons/redirection.svg index 32c0bb5..3378fbd 100644 --- a/public/assets/icons/redirection.svg +++ b/public/assets/icons/redirection.svg @@ -1 +1,12 @@ - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/server.svg b/public/assets/icons/server.svg index c6665a8..84cc341 100644 --- a/public/assets/icons/server.svg +++ b/public/assets/icons/server.svg @@ -1 +1,21 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/settings.svg b/public/assets/icons/settings.svg new file mode 100644 index 0000000..113864d --- /dev/null +++ b/public/assets/icons/settings.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/icons/vm.svg b/public/assets/icons/vm.svg index fd04997..8a44925 100644 --- a/public/assets/icons/vm.svg +++ b/public/assets/icons/vm.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + QEMU icon + + + + \ No newline at end of file diff --git a/public/assets/icons/web.svg b/public/assets/icons/web.svg index f00decb..4420548 100644 --- a/public/assets/icons/web.svg +++ b/public/assets/icons/web.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/public/assets/icons/webapp.svg b/public/assets/icons/webapp.svg index 94f7b24..41599e6 100644 --- a/public/assets/icons/webapp.svg +++ b/public/assets/icons/webapp.svg @@ -1 +1,34 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/imgs/screenshots/screen_compact_dark-light.webp b/public/imgs/screenshots/screen_compact_dark-light.webp new file mode 100644 index 0000000000000000000000000000000000000000..cc0bb411264bc5ad98ed1d8c9fa8a539cb802367 GIT binary patch literal 17030 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 literal 0 HcmV?d00001 diff --git a/public/imgs/screenshots/screen_icon_dark-light.webp b/public/imgs/screenshots/screen_icon_dark-light.webp new file mode 100644 index 0000000000000000000000000000000000000000..e805f53e0f27b149b57bb398e8416bbbf7b825e8 GIT binary patch literal 14686 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 { 'location' => 'web', 'desc' => 'Wikipedia, the free encyclopedia', 'type' => 'webapp' + ], + [ + 'title' => 'Awesome-Selfhosted', + 'screenshot' => 'Awesome-Selfhosted.png', + 'favicon' => 'Awesome-Selfhosted.ico', + 'link' => 'https://awesome-selfhosted.net/', + 'appHome' => 'https://www.mediawiki.org/wiki/MediaWiki', + 'location' => 'web', + 'desc' => 'A list of Free Software network services and web applications which can be hosted on your own servers', + 'type' => 'webapp' ]]; } $generator = new HTMLGenerator($services);