From 2c1cc07d93deb0cddc6764404633d99ab7d764d0 Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Fri, 6 Mar 2020 17:21:09 +0100 Subject: [PATCH 1/9] Add Term::Size::Any as recommended dev-dep Without it the Catalyst Dev Server can't recognize the right terminal size to format its debug output. --- cpanfile | 1 + dist.ini | 1 + 2 files changed, 2 insertions(+) diff --git a/cpanfile b/cpanfile index e8c9d7f00..17571e11e 100644 --- a/cpanfile +++ b/cpanfile @@ -104,4 +104,5 @@ on 'develop' => sub { recommends "Catalyst::Plugin::StackTrace" => "0"; recommends "Catalyst::Restarter" => "0"; recommends "CatalystX::LeakChecker" => "0"; + recommends "Term::Size::Any" => "0"; }; diff --git a/dist.ini b/dist.ini index 4cd6a2779..c611ce013 100644 --- a/dist.ini +++ b/dist.ini @@ -58,6 +58,7 @@ Test::Pod::Coverage = 0 Catalyst::Plugin::StackTrace = 0 Catalyst::Restarter = 0 CatalystX::LeakChecker = 0 +Term::Size::Any = 0 [Prereqs / Suggests] Sys::Hostname::FQDN = 0 -- GitLab From 84567c2a5cd0cbc72efd70a662592a63dae1780b Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Mon, 9 Mar 2020 00:33:52 +0100 Subject: [PATCH 2/9] Add dependencies Dockerfile Add Dockerfile which builds a Docker image with all dependencies of Coocook. --- Dockerfile | 28 ++++++++++++++++++++++++++++ dockernotes.md | 5 +++++ 2 files changed, 33 insertions(+) create mode 100644 Dockerfile create mode 100644 dockernotes.md diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..9ebc06bd8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM alpine +MAINTAINER Mose Schmiedel + +RUN apk update && \ + apk add \ + pkgconf \ + musl \ + make \ + g++ \ + wget \ + perl \ + perl-dev \ + perl-app-cpanminus \ + gd-dev \ + expat-dev \ + graphviz \ + readline-dev \ + krb5-dev \ + openssl \ + openssl-dev \ + zlib-dev \ + && true + +COPY ./cpanfile /usr/src/coocook/ + +WORKDIR /usr/src/coocook + +RUN cpanm --notest --installdeps --with-recommends --with-suggests --with-develop . diff --git a/dockernotes.md b/dockernotes.md new file mode 100644 index 000000000..fb37abab2 --- /dev/null +++ b/dockernotes.md @@ -0,0 +1,5 @@ +# commands +- apk add musl make perl perl-app-cpanminus +# Failed Modules +- HTML::Formatter -> HTML::Element HTML::TreeBuilder +- IO::KQueue -- GitLab From eaf41a4b7fbae45ef0fdbba2eff0864cf5878b16 Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Wed, 11 Mar 2020 00:37:53 +0100 Subject: [PATCH 3/9] Fix libdbd dependency in Dockerfile and provide full dependency list in dockernotes.md --- Dockerfile | 14 +++++++++++++- dockernotes.md | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9ebc06bd8..63fa1bf3b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,10 +19,22 @@ RUN apk update && \ openssl \ openssl-dev \ zlib-dev \ + sqlite \ + perl-dbd-sqlite \ + perl-dbd-sqlite-dev \ + git \ && true -COPY ./cpanfile /usr/src/coocook/ +WORKDIR /usr/src + +RUN git clone https://github.com/dboehmer/coocook.git WORKDIR /usr/src/coocook RUN cpanm --notest --installdeps --with-recommends --with-suggests --with-develop . + +EXPOSE 3000 + +RUN ./script/coocook_deploy.pl install + +CMD ./script/coocook_server.pl --debug -r diff --git a/dockernotes.md b/dockernotes.md index fb37abab2..79cd0e349 100644 --- a/dockernotes.md +++ b/dockernotes.md @@ -1,3 +1,24 @@ +# dependencies +- pkgconf +- libc +- make +- g++ +- wget +- perl +- perl-dev +- cpanminus +- gd-dev +- expat-dev +- graphviz +- readline-dev +- krb5-dev (Kerberos5) +- openssl +- openssl-dev +- zlib-dev +- sqlite3 +- libdbd-sqlite3-perl +- git + # commands - apk add musl make perl perl-app-cpanminus # Failed Modules -- GitLab From 7d380d81eee513554dc575066f53908f5d9792a7 Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Fri, 3 Jul 2020 02:38:54 +0200 Subject: [PATCH 4/9] Add script for managing Coocook in docker --- Dockerfile | 18 ++--- script/coocook_docker.pl | 156 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 9 deletions(-) create mode 100755 script/coocook_docker.pl diff --git a/Dockerfile b/Dockerfile index 63fa1bf3b..b6c7fc395 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine +FROM alpine:latest AS devel MAINTAINER Mose Schmiedel RUN apk update && \ @@ -22,19 +22,19 @@ RUN apk update && \ sqlite \ perl-dbd-sqlite \ perl-dbd-sqlite-dev \ - git \ && true -WORKDIR /usr/src - -RUN git clone https://github.com/dboehmer/coocook.git - WORKDIR /usr/src/coocook +COPY cpanfile . + RUN cpanm --notest --installdeps --with-recommends --with-suggests --with-develop . -EXPOSE 3000 +COPY script/coocook_docker.pl script/coocook_docker.pl + +ENTRYPOINT [ "script/coocook_docker.pl" ] -RUN ./script/coocook_deploy.pl install +EXPOSE 3000 -CMD ./script/coocook_server.pl --debug -r +#FROM alpine:latest +#RUN apk update && apk add \ diff --git a/script/coocook_docker.pl b/script/coocook_docker.pl new file mode 100755 index 000000000..ddd3c4945 --- /dev/null +++ b/script/coocook_docker.pl @@ -0,0 +1,156 @@ +#!/usr/bin/env perl +use v5.32.0; +use strict; +use warnings; +use utf8; + +use Term::ANSIColor; +use File::Basename; +use Cwd 'abs_path'; +use Getopt::Long; +Getopt::Long::Configure ("bundling"); + +# Directory where current script is located used to find other Coocook scripts +my $dir = abs_path(dirname(__FILE__)); + +my $install = ''; +my $upgrade = ''; +my $debug = ''; +my $restart = ''; + +GetOptions ( + 'install' => \$install, + 'upgrade' => \$upgrade, + 'debug' => sub { $debug = '--debug' }, + 'restart' => sub { $restart = '--restart' }, + ) + or exit(1); + +if ( defined $ARGV[0]) { + if ( $ARGV[0] eq 'deploy' ) { + if ( $install and not $upgrade ) { + deploy('install'); + + } elsif ( $upgrade and not $install ) { + deploy('upgrade'); + + } elsif ( $install and $upgrade ) { + error("'--install' and '--upgrade' may not be used together."); + help(); + + } else { + say error("'$ARGV[1]' is not a valid flag for command 'deploy'."); + say help(); + exit(1); + } + + } elsif ( $ARGV[0] eq 'serve') { + if ( defined $ARGV[1] ) { + say error("'$ARGV[1]' is not a valid flag for command 'serve'"); + say help(); + exit(1); + + } else { + server("$debug $restart"); + } + + } elsif ( $ARGV[0] eq 'help' ) { + if ( defined $ARGV[1] ) { + usage($ARGV[1]); + exit(); + + } else { + usage('commands'); + exit(); + + } + + } else { + say error("'$ARGV[0]' is not a valid command for $0."); + say help(); + exit(1); + } + +} else { + say warning("You provided no command to run. You probably meant to run " . colored( "'$0 serve --debug --reload'", 'blue') . '?'); + say help(); + exit(1); + +} + +sub deploy { + my $flags = shift; + + exec "$dir/coocook_deploy.pl " . $flags; +} + +sub server { + my $flags = shift || ''; + + exec "$dir/coocook_server.pl " . $flags; +} + +sub error { + my $msg = shift; + + return colored( 'ERROR:', 'red' ) . " $msg"; +} + +sub warning { + my $msg = shift; + + return colored( 'WARNING:', 'yellow' ) . " $msg"; +} + +sub usage { + my $command = shift; + my %help = ( + commands => qq{Usage: + $0 [command] [flags] + + CLI Tool for managing Coocook instances. + + Commands: + + deploy Manage the database of the Coocook instance + serve Run the local development server + help Display this and exit + help [command] Display help for specific command + }, + + deploy => qq{Usage: + $0 deploy [flags] + + Manage the database of the Coocook instance. + + flags: + + --install create new database + --upgrade upgrade existing database to fit new schema + }, + + serve => qq{Usage: + $0 serve [flags] + + Run the local development server. + + flags: + + -d --debug Enable debug output + -r --restart Enable live reload when files are changed + }, + help => qq{Usage: + $0 help [command] + + Display help for specific command. + }, + ); + + defined $help{$command} or say error( "$command is not a valid command for $0." ) and exit(1); + + say $help{$command}; +} + +sub help { + return "You can use " . colored( "'$0 help'", 'blue' ) . " to get help on how to use this script."; +} -- GitLab From 063c834504ebcea0ca111d44b46b19d94675a564 Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Mon, 6 Jul 2020 00:57:44 +0200 Subject: [PATCH 5/9] Provide usable Dockerimage --- Dockerfile | 8 +-- dockernotes.md | 26 -------- script/coocook_docker.pl | 132 +++++++++++++++++++++------------------ 3 files changed, 74 insertions(+), 92 deletions(-) delete mode 100644 dockernotes.md diff --git a/Dockerfile b/Dockerfile index b6c7fc395..b306dd950 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,7 @@ FROM alpine:latest AS devel -MAINTAINER Mose Schmiedel +MAINTAINER Mose Schmiedel -RUN apk update && \ - apk add \ +RUN apk update && apk add \ pkgconf \ musl \ make \ @@ -36,5 +35,4 @@ ENTRYPOINT [ "script/coocook_docker.pl" ] EXPOSE 3000 -#FROM alpine:latest -#RUN apk update && apk add \ +CMD [ "help" ] diff --git a/dockernotes.md b/dockernotes.md deleted file mode 100644 index 79cd0e349..000000000 --- a/dockernotes.md +++ /dev/null @@ -1,26 +0,0 @@ -# dependencies -- pkgconf -- libc -- make -- g++ -- wget -- perl -- perl-dev -- cpanminus -- gd-dev -- expat-dev -- graphviz -- readline-dev -- krb5-dev (Kerberos5) -- openssl -- openssl-dev -- zlib-dev -- sqlite3 -- libdbd-sqlite3-perl -- git - -# commands -- apk add musl make perl perl-app-cpanminus -# Failed Modules -- HTML::Formatter -> HTML::Element HTML::TreeBuilder -- IO::KQueue diff --git a/script/coocook_docker.pl b/script/coocook_docker.pl index ddd3c4945..cca0f77e8 100755 --- a/script/coocook_docker.pl +++ b/script/coocook_docker.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -use v5.32.0; +use v5.30.0; use strict; use warnings; use utf8; @@ -8,71 +8,81 @@ use Term::ANSIColor; use File::Basename; use Cwd 'abs_path'; use Getopt::Long; -Getopt::Long::Configure ("bundling"); +Getopt::Long::Configure("bundling"); # Directory where current script is located used to find other Coocook scripts -my $dir = abs_path(dirname(__FILE__)); +my $dir = abs_path( dirname(__FILE__) ); my $install = ''; my $upgrade = ''; -my $debug = ''; +my $debug = ''; my $restart = ''; -GetOptions ( +GetOptions( 'install' => \$install, 'upgrade' => \$upgrade, - 'debug' => sub { $debug = '--debug' }, + 'debug' => sub { $debug = '--debug' }, 'restart' => sub { $restart = '--restart' }, - ) - or exit(1); +) or exit(1); -if ( defined $ARGV[0]) { +if ( defined $ARGV[0] ) { if ( $ARGV[0] eq 'deploy' ) { - if ( $install and not $upgrade ) { - deploy('install'); - - } elsif ( $upgrade and not $install ) { - deploy('upgrade'); - - } elsif ( $install and $upgrade ) { - error("'--install' and '--upgrade' may not be used together."); - help(); - - } else { - say error("'$ARGV[1]' is not a valid flag for command 'deploy'."); - say help(); - exit(1); - } - - } elsif ( $ARGV[0] eq 'serve') { - if ( defined $ARGV[1] ) { - say error("'$ARGV[1]' is not a valid flag for command 'serve'"); - say help(); - exit(1); - - } else { - server("$debug $restart"); - } - - } elsif ( $ARGV[0] eq 'help' ) { - if ( defined $ARGV[1] ) { - usage($ARGV[1]); - exit(); - - } else { - usage('commands'); - exit(); - - } - - } else { - say error("'$ARGV[0]' is not a valid command for $0."); - say help(); - exit(1); + if ( $install and not $upgrade ) { + deploy('install'); + + } + elsif ( $upgrade and not $install ) { + deploy('upgrade'); + + } + elsif ( $install and $upgrade ) { + error("'--install' and '--upgrade' may not be used together."); + help(); + + } + else { + say error("'$ARGV[1]' is not a valid flag for command 'deploy'."); + say help(); + exit(1); + } + + } + elsif ( $ARGV[0] eq 'serve' ) { + if ( defined $ARGV[1] ) { + say error("'$ARGV[1]' is not a valid flag for command 'serve'"); + say help(); + exit(1); + + } + else { + server("$debug $restart"); + } + } + elsif ( $ARGV[0] eq 'help' ) { + if ( defined $ARGV[1] ) { + usage( $ARGV[1] ); + exit(); -} else { - say warning("You provided no command to run. You probably meant to run " . colored( "'$0 serve --debug --reload'", 'blue') . '?'); + } + else { + usage('commands'); + exit(); + + } + + } + else { + say error("'$ARGV[0]' is not a valid command for $0."); + say help(); + exit(1); + } + +} +else { + say warning( "You provided no command to run. You probably meant to run " + . colored( "'$0 serve --debug --reload'", 'blue' ) + . '?' ); say help(); exit(1); @@ -104,8 +114,8 @@ sub warning { sub usage { my $command = shift; - my %help = ( - commands => qq{Usage: + my %help = ( + commands => qq{Usage: $0 [command] [flags] CLI Tool for managing Coocook instances. @@ -118,18 +128,18 @@ sub usage { help [command] Display help for specific command }, - deploy => qq{Usage: + deploy => qq{Usage: $0 deploy [flags] Manage the database of the Coocook instance. flags: - --install create new database - --upgrade upgrade existing database to fit new schema + -i --install create new database + -u --upgrade upgrade existing database to fit new schema }, - serve => qq{Usage: + serve => qq{Usage: $0 serve [flags] Run the local development server. @@ -139,14 +149,14 @@ sub usage { -d --debug Enable debug output -r --restart Enable live reload when files are changed }, - help => qq{Usage: + help => qq{Usage: $0 help [command] Display help for specific command. }, - ); + ); - defined $help{$command} or say error( "$command is not a valid command for $0." ) and exit(1); + defined $help{$command} or say error("$command is not a valid command for $0.") and exit(1); say $help{$command}; } -- GitLab From b4026ca6fb67efffd28640d0511c51f99a32b13c Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Wed, 8 Jul 2020 15:00:51 +0200 Subject: [PATCH 6/9] Update README.md with instructions for using the Dockerimage --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 08a8dfa93..96b6c5ceb 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Web application for collecting recipes and making food plans ## Quick start +### On UNIX-like Operating Systems Prerequisites: * [Perl5](https://www.perl.org/get.html) @@ -57,6 +58,9 @@ Install database into a local SQLite file and start development server in debug Hint: With the `--restart` option the development server restarts automatically when files in `lib/` are changed. This requires `Catalyst::Restarter`. +### Using Docker +Goto [https://hub.docker.com/r/coocook/coocook-dev](https://hub.docker.com/r/coocook/coocook-dev) and follow the instructions there to use the Dockerimage for Development. + ## Mailing list * -- GitLab From 6b1f14d4afc66c76366492eef302bd2893392978 Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Mon, 14 Sep 2020 08:57:10 +0200 Subject: [PATCH 7/9] Applied suggested changes of PR --- README.md | 2 +- script/coocook_docker.pl | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 96b6c5ceb..b0808f766 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Web application for collecting recipes and making food plans ## Quick start -### On UNIX-like Operating Systems +### Run with native Perl (works best on Unix-like Operating Systems) Prerequisites: * [Perl5](https://www.perl.org/get.html) diff --git a/script/coocook_docker.pl b/script/coocook_docker.pl index cca0f77e8..cd78e7636 100755 --- a/script/coocook_docker.pl +++ b/script/coocook_docker.pl @@ -1,4 +1,7 @@ #!/usr/bin/env perl + +# ABSTRACT: helper script to control the coocook instance inside a Dockerimage from the host OS + use v5.30.0; use strict; use warnings; @@ -21,7 +24,7 @@ my $restart = ''; GetOptions( 'install' => \$install, 'upgrade' => \$upgrade, - 'debug' => sub { $debug = '--debug' }, + 'debug' => sub { $debug = '--debug' }, 'restart' => sub { $restart = '--restart' }, ) or exit(1); -- GitLab From 49868ba113e980fda0b399ba253e6690899c06ef Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Wed, 18 Nov 2020 17:32:15 +0100 Subject: [PATCH 8/9] Align stage name to Dockerhub repository name --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b306dd950..e99980d8b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:latest AS devel +FROM alpine:latest AS dev MAINTAINER Mose Schmiedel RUN apk update && apk add \ -- GitLab From ba07de78f2da7741912d9ed17a6aac50c9d86cc4 Mon Sep 17 00:00:00 2001 From: Mose Schmiedel Date: Mon, 21 Dec 2020 17:23:37 +0100 Subject: [PATCH 9/9] Enable Ctrl-C to kill the Docker container --- script/coocook_docker.pl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/script/coocook_docker.pl b/script/coocook_docker.pl index cd78e7636..f77b039d4 100755 --- a/script/coocook_docker.pl +++ b/script/coocook_docker.pl @@ -6,6 +6,7 @@ use v5.30.0; use strict; use warnings; use utf8; +use sigtrap qw/die normal-signals/; use Term::ANSIColor; use File::Basename; @@ -94,13 +95,13 @@ else { sub deploy { my $flags = shift; - exec "$dir/coocook_deploy.pl " . $flags; + system "$dir/coocook_deploy.pl " . $flags; } sub server { my $flags = shift || ''; - exec "$dir/coocook_server.pl " . $flags; + system "$dir/coocook_server.pl " . $flags; } sub error { -- GitLab