Compare commits

..

96 Commits

Author SHA1 Message Date
Erik Huelsmann
f951646c81 Update README to move 'latest' tag which now points to 1.13 2025-10-04 18:33:07 +02:00
Erik Huelsmann
2615228ba6 Merge pull request #43 from neilt/master
Add AI warning recommended by ChatGPT
2025-06-12 18:03:49 +02:00
Neil Tiffin
6b4aac814c Add AI warning recommeded by ChatGPT so that it will not simplify docker installations 2025-06-12 11:57:40 -04:00
Erik Huelsmann
0d560b92d7 Update to use new ENV key=val syntax (instead of space separator) 2025-03-01 16:16:02 +01:00
Erik Huelsmann
9dba5f4490 Update README in preparation of 1.12 release 2024-12-14 21:24:10 +01:00
Erik Huelsmann
0172dc1684 Switch to Trixie for Perl >= 5.36.1 2024-10-28 21:46:55 +01:00
Erik Huelsmann
b53c4a3689 Modernize 'master' docker build 2024-04-09 22:35:29 +02:00
Erik Huelsmann
a16d23bfa9 Update Dockerfile
Use MetaCPAN for the metadata.
2023-10-22 21:33:37 +02:00
Erik Huelsmann
9ccc327468 Update README.md 2023-10-03 22:58:32 +02:00
Erik Huelsmann
028d8c45ed Update to postgres:14; 9.6 really is old now 2022-07-28 16:50:35 +02:00
Erik Huelsmann
cf4256a20e Change the hosting location of the LedgerSMB Docker images 2022-01-28 22:55:16 +01:00
Erik Huelsmann
83e1bbe8cd Set the reverse proxy address to the default Docker address range 2021-09-17 23:04:26 +02:00
Erik Huelsmann
690fac08be Add reverse proxy configuration option 2021-09-17 22:41:15 +02:00
Erik Huelsmann
7264d72638 Update start.sh
The starman option `max-workers` actually does not exist...
2021-09-12 22:18:43 +02:00
Erik Huelsmann
e4e43b838e Update Dockerfile 2021-08-30 00:43:24 +02:00
Erik Huelsmann
952ef62e6a Use multi-stage build to calculate dependency packages 2021-08-30 00:28:41 +02:00
Erik Huelsmann
b68f6d1672 Upgrade the master image 2021-08-29 21:50:59 +02:00
Erik Huelsmann
575e91da47 Update 'master' config with latest package dependencies 2020-12-07 22:51:21 +01:00
Erik Huelsmann
f6422f03c3 Add missing command line options to 'echo' 2020-12-07 21:44:33 +01:00
Erik Huelsmann
06ccefa8b6 Re #23: Add dependency on texlive-fonts-recommended 2020-08-24 22:48:16 +02:00
Erik Huelsmann
fb18381bdd Merge pull request #26 from ledgersmb/buster
Buster
2020-06-14 16:02:58 +02:00
Erik Huelsmann
b095cb9bb6 Add documentation for 1.8 and master images 2020-04-12 21:22:00 +02:00
Erik Huelsmann
4c56e98a65 Add missing Authen::SASL dependency for SMTP authentication 2020-04-12 20:22:03 +02:00
Erik Huelsmann
7dcd5c1709 Update docker image to use Buster as baseline 2020-04-12 09:56:03 +02:00
Erik Huelsmann
5adfac5a82 Add formatting to README.md 2020-02-10 23:42:37 +01:00
Erik Huelsmann
d11e525fac Change manual setup section to prevent suggested simplicity
We've seen multiple users thinking that simple creation of two containers
is enough, whereas this isn't the case: at the very least, the deprecated
`--link` docker option must be used, but more compliant is the use of
custom networks and bridges. Docker-compose sets all that up automatically,
so don't suggest going without docker-compose is simpler.
2020-02-10 23:18:20 +01:00
Erik Huelsmann
94ca69315a Update README.md to set correct list of supported tags 2020-02-01 16:41:07 +01:00
Erik Huelsmann
1b6a2f5c99 Deprecate functionality supported by ssmtp but not by Email::Sender
The deprecation is required in order to move to built-in handling
of mail instead of relying on external handling by tools like
ssmtp.
2020-01-31 21:27:55 +01:00
Erik Huelsmann
eea2bbdbdd Replace 1.6 image by 'master' image 2020-01-06 21:57:38 +01:00
Erik Huelsmann
894393e781 * Automatic Dockerfile update by release process 2019-07-01 10:14:42 +00:00
Erik Huelsmann
6468e9e9f2 Update README.md 2019-03-31 11:58:37 +02:00
Erik Huelsmann
69cc364527 Update README.md 2019-03-31 11:44:45 +02:00
Erik Huelsmann
0210dce1d0 * Update version (back) to master 2019-02-09 20:33:02 +01:00
Erik Huelsmann
ba2bdd0dda * Add 1.7 dependency available in Stretch 2019-01-20 21:27:27 +01:00
Erik Huelsmann
6249141929 * Fix build problem -- uglify-js not being found 2019-01-20 21:27:27 +01:00
Erik Huelsmann
09a79b8258 * Automatic Dockerfile update by release process 2019-01-20 20:03:01 +00:00
Erik Huelsmann
4776803ef8 Merge pull request #22 from ylavoie/ledgersmb-server-development-location
Adjust plackup arguments for includes
2018-07-04 14:39:49 +02:00
Yves Lavoie
0a12f5c735 Adjust plackup arguments for includes 2018-07-03 22:01:57 -04:00
Erik Huelsmann
d808dd0b14 Merge pull request #21 from ylavoie/docker-compose-instructions
Update README with docker-compose instructions
2018-07-03 21:36:05 +02:00
Yves Lavoie
13b4e0f933 Move docker-compose instructions upward and pull images instead of building 2018-06-13 12:30:38 -04:00
Yves Lavoie
892592505f Update README with docker-compose instructions 2018-06-08 21:17:24 -04:00
Erik Huelsmann
708a5afebc * Add option to set the number of Starman workers 2018-05-23 23:23:22 +02:00
Erik Huelsmann
34d10ae0e0 * Add docker-compose.yml to master branch so it appears on the GitHub project home 2018-05-23 21:50:28 +02:00
Erik Huelsmann
f5909088f0 * The NodeSource packages don't need alternatives set up 2018-05-05 00:03:40 +02:00
Erik Huelsmann
34a2270cf3 * Replace 'curl' and remove 'sudo' -- we're running as 'root' anyway 2018-05-04 23:46:29 +02:00
Erik Huelsmann
9881c06e5d * Add NodeSource NodeJS repo to be able to install NPM (not in Stretch) 2018-05-04 23:17:54 +02:00
Erik Huelsmann
c65adc6042 * Add gnupg in order to satisfy ca-certificates/update.d requirements 2018-05-04 22:52:15 +02:00
Erik Huelsmann
f9ee2e86ab * Add '-perl' suffix to libpgobject-util-dbadmin 2018-05-04 22:43:29 +02:00
Erik Huelsmann
e34a6a1326 * Upgrade 'master' docker image to Stretch, updating the package list accordingly 2018-05-04 22:32:43 +02:00
Erik Huelsmann
1d0da66881 * Correct liberation fonts package name (*2 is available as of stretch) 2018-02-17 21:44:49 +01:00
Erik Huelsmann
da2254dd4c * Add fonts missing for xedemo template set 2018-02-17 21:37:21 +01:00
Erik Huelsmann
cd3d2f573d * Bring master in line with 1.5 (syntax-wise) 2018-02-14 20:35:37 +01:00
Erik Huelsmann
1d4430ecfa Merge pull request #17 from sbts/enhancement-latest-pg-tools
install latest version of `postgresql-client`
2018-02-06 22:16:59 +01:00
Erik Huelsmann
a90ac97832 Merge pull request #16 from sbts/enhancement-add-missing-apt-upgrade
Add missing `apt upgrade`
2018-02-06 18:17:42 +01:00
sbts
733413dd16 install latest version of postgresql-client
This is required to handle cases where the PG server is running a newer version than this container has available.
Failing to do this update will normally cause odd problems, including silent failure to backup.
Instead of the expected backup an empty file is generated.
2018-02-06 23:26:12 +08:00
sbts
aeab695a50 Add missing apt upgrade
This is needed to mitigate issues (eg: version dependency mismatches) due to out of date packages.
In theory this should be handled by the parent container, but that won't always be true
2018-02-06 22:39:20 +08:00
Erik Huelsmann
dd13647ec6 * Add more documentation regarding container mail configuration 2018-01-24 21:57:07 +01:00
Erik Huelsmann
2b689e9791 * Close #15 for the master branch 2018-01-06 14:15:01 +01:00
Erik Huelsmann
bef6697325 * Use '--preload-app' to start starman for best performance and memory use 2018-01-06 14:10:18 +01:00
Erik Huelsmann
09d2d73db8 * Improve on rewritten README.md 2017-10-30 21:51:21 +01:00
Erik Huelsmann
db8e441a8f * Rewrite README.md 2017-10-30 21:50:56 +01:00
Erik Huelsmann
638e0813e0 * Rewrite README.md 2017-10-30 21:14:56 +01:00
Erik Huelsmann
d265b58372 * cpanm seems to install in the correct paths already these days 2017-08-14 11:30:21 +02:00
Erik Huelsmann
2fc8e55367 * Add explicit dependency on libclass-c3-xs-per for performance 2017-08-05 09:36:36 +02:00
Erik Huelsmann
69b959f591 Merge pull request #14 from sbts/enhancement-master_reduce_number_of_layers
Enhancement master reduce number of layers
2017-07-09 14:15:24 +02:00
sbts
c7da8194cb remove ARG CACHEBUST
as it does not do anything unless CACHEBUST is actually used. Which it is not
2017-07-09 18:48:59 +08:00
sbts
e0338aa303 remove spurious && from apt-get install 2017-07-09 18:32:33 +08:00
sbts
4dbd5a2a26 revert to explicit setting of DEBIAN_FRONTEND.
Nothing else works correctly. Presumably as dash is the processing shell
2017-07-09 18:24:01 +08:00
sbts
fafaea715e Make sure DEBIAN_FRONTEND is set for all apt-get commands
Do that by parameterising the apt-get
2017-07-09 16:43:53 +08:00
sbts
b8694aa449 Merge remote-tracking branch 'upstream/master' into enhancement-master_reduce_number_of_layers
Conflicts:
	Dockerfile
2017-07-09 15:56:39 +08:00
sbts
98a5696570 Paramaterise dojo build dep packages
- Readd DEBIAN_FRONTEND=interactive.
- Paramaterise dojo build dep packages
2017-07-09 15:29:20 +08:00
Erik Huelsmann
0d1483d78f Merge pull request #12 from sbts/master_don't_write_to_server_dir
Master don't write to server dir
2017-07-09 08:40:59 +02:00
Erik Huelsmann
bde9b780b1 Merge pull request #10 from sbts/master_correct_syntax_for_setting_apt.conf_args
Improve setting apt config
2017-07-09 08:33:45 +02:00
sbts
fd7c04d170 remove stray script that was accidentally committed 2017-07-09 14:09:45 +08:00
sbts
364cf01203 remove stray script that was accidentally committed 2017-07-09 14:07:33 +08:00
sbts
dbf99f981d improve apt handling
to bring it inline with docker best practice
2017-07-08 03:36:27 +08:00
sbts
fa4aa9dae0 stop setting debian frontend
it's against docker best practice
2017-07-08 01:57:43 +08:00
sbts
8f3875acb0 drop need to write config file to /srv/ledgersmb
Instead write it to /tmp.
Also don't copy the entire example file, just write the bits we need
2017-07-02 00:52:36 +08:00
sbts
4905f2a469 Merge remote-tracking branch 'upstream/master' 2017-07-02 00:34:40 +08:00
sbts
cd9e3037f7 Improve setting apt config 2017-07-02 00:12:21 +08:00
Erik Huelsmann
e4f4d31922 * Remove more build artifacts from the container 2017-06-21 00:12:53 +02:00
Erik Huelsmann
4a8d6dc6b6 * Reorganize Dockerfile to optimize image size 2017-06-20 00:36:22 +02:00
Erik Huelsmann
22ac547e94 * Reduce image size further by changing base image 2017-06-01 08:05:04 +02:00
sbts
0627a33477 starting point for a "quickstart" script 2017-05-26 17:55:45 +08:00
Erik Huelsmann
4da73006fa * Minimize the size of the image (went from 2.6GB to 1.4GB!) 2017-05-26 11:06:51 +02:00
Erik Huelsmann
a53dd55ecf * Set up the 'node' regular nodejs binary name using Debian alternatives 2017-05-23 18:31:41 +02:00
Erik Huelsmann
99ba66e9b7 * Cut down on install size by depending on headless Java 2017-05-23 17:13:39 +02:00
Erik Huelsmann
756c28ad4f * Java is required _period_ 2017-05-23 17:07:03 +02:00
Erik Huelsmann
719672490f * npm _install_ uglify 2017-05-23 16:12:13 +02:00
Erik Huelsmann
75c8c8f0b0 * Remove JRE installation and adjust NPM installation 2017-05-23 15:43:08 +02:00
Erik Huelsmann
5390be8aac * Make sure 'uglify' is installed as 'make dojo' depends on it 2017-05-23 15:21:23 +02:00
John Locke
2738fc3728 Run as www-data user, with permission to write ledgersmb.conf file 2017-01-14 09:07:36 -08:00
Erik Huelsmann
edaa2008af Remove EXPERIMENTAL classification 2017-01-08 21:48:00 +01:00
John Locke
04b1786414 Set correct ssmtp path 2016-09-25 10:52:23 -07:00
John Locke
293fd65da4 Add support for #4 - Make Postgres port configurable at run time 2016-08-20 08:53:37 -07:00
John Locke
0034b44033 Synchronize dependencies with 1.5 branch 2016-05-30 09:07:08 -07:00
5 changed files with 304 additions and 153 deletions

View File

@@ -1,92 +1,134 @@
FROM debian:jessie-slim
MAINTAINER Freelock john@freelock.com
# Build time variables
ENV LSMB_VERSION 1.5.28
ARG SRCIMAGE=debian:trixie-slim
FROM $SRCIMAGE AS builder
ENV LSMB_VERSION=master
RUN set -x ; \
DEBIAN_FRONTEND="noninteractive" apt-get -y update && \
DEBIAN_FRONTEND="noninteractive" apt-get -y upgrade && \
DEBIAN_FRONTEND="noninteractive" apt-get -y install dh-make-perl libmodule-cpanfile-perl git wget && \
apt-file update
RUN set -x ; \
cd /srv && \
git clone --depth 1 --recursive -b $LSMB_VERSION https://github.com/ledgersmb/LedgerSMB.git ledgersmb && \
cd ledgersmb && \
( ( for lib in $( cpanfile-dump --with-all-features --recommends --no-configure --no-build --no-test ) ; \
do \
if dh-make-perl locate "$lib" 2>/dev/null ; \
then \
: \
else \
echo no : $lib ; \
fi ; \
done ) | grep -v dh-make-perl | grep -v 'not found' | grep -vi 'is in Perl ' | cut -d' ' -f4 | sort | uniq | tee /srv/derived-deps ) && \
cat /srv/derived-deps
#
#
# The real image build starts here
#
#
FROM $SRCIMAGE
LABEL org.opencontainers.image.authors="LedgerSMB project <devel@lists.ledgersmb.org>"
# Install Perl, Tex, Starman, psql client, and all dependencies
# Without libclass-c3-xs-perl, performance is terribly slow...
#
# Without libclass-c3-xs-perl, everything grinds to a halt;
# add it, because it's a 'recommends' it the dep tree, which
# we're skipping, normally
#
# Installing psql client directly from instructions at https://wiki.postgresql.org/wiki/Apt
# That mitigates issues where the PG instance is running a newer version than this container
RUN echo -n "APT::Install-Recommends \"0\";\nAPT::Install-Suggests \"0\";\n" >> /etc/apt/apt.conf && \
mkdir -p /usr/share/man/man1/ && \
mkdir -p /usr/share/man/man2/ && \
mkdir -p /usr/share/man/man3/ && \
mkdir -p /usr/share/man/man4/ && \
mkdir -p /usr/share/man/man5/ && \
mkdir -p /usr/share/man/man6/ && \
mkdir -p /usr/share/man/man7/ && \
DEBIAN_FRONTEND=noninteractive apt-get update && \
apt-get dist-upgrade -y && apt-get -y install \
curl wget ca-certificates \
libcgi-emulate-psgi-perl libcgi-simple-perl libconfig-inifiles-perl \
libdbd-pg-perl libdbi-perl libdatetime-perl \
libdatetime-format-strptime-perl libdigest-md5-perl \
libfile-mimeinfo-perl libjson-xs-perl libjson-perl \
liblocale-maketext-perl liblocale-maketext-lexicon-perl \
liblog-log4perl-perl libmime-base64-perl libmime-lite-perl \
libmath-bigint-gmp-perl libmoose-perl libnumber-format-perl \
libpgobject-perl libpgobject-simple-perl libpgobject-simple-role-perl \
libpgobject-util-dbmethod-perl libplack-perl libtemplate-perl \
libnamespace-autoclean-perl \
libtemplate-plugin-latex-perl libtex-encode-perl \
libmoosex-nonmoose-perl libclass-c3-xs-perl \
texlive-latex-recommended \
COPY --from=builder /srv/derived-deps /tmp/derived-deps
RUN set -x ; \
echo "APT::Install-Recommends \"false\";\nAPT::Install-Suggests \"false\";\n" > /etc/apt/apt.conf.d/00recommends && \
DEBIAN_FRONTEND="noninteractive" apt-get -y update && \
DEBIAN_FRONTEND="noninteractive" apt-get -y upgrade && \
DEBIAN_FRONTEND="noninteractive" apt-get -y install \
wget ca-certificates gnupg \
$( cat /tmp/derived-deps ) \
libclass-c3-xs-perl \
texlive-plain-generic texlive-latex-recommended texlive-fonts-recommended \
texlive-xetex fonts-liberation \
starman \
libopenoffice-oodoc-perl \
postgresql-client \
ssmtp \
lsb-release && \
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
(wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -) && \
echo "deb [signed-by=/etc/apt/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc > /etc/apt/keyrings/postgresql.asc && \
DEBIAN_FRONTEND="noninteractive" apt-get -y update && \
DEBIAN_FRONTEND="noninteractive" apt-get -y install postgresql-client && \
DEBIAN_FRONTEND=noninteractive apt-get -y install git cpanminus make gcc libperl-dev && \
curl -Lo /tmp/ledgersmb-$LSMB_VERSION.tar.gz "https://download.ledgersmb.org/f/Releases/$LSMB_VERSION/ledgersmb-$LSMB_VERSION.tar.gz" && \
tar -xvzf /tmp/ledgersmb-$LSMB_VERSION.tar.gz --directory /srv && \
rm -f /tmp/ledgersmb-$LSMB_VERSION.tar.gz && \
cpanm --quiet --notest \
DEBIAN_FRONTEND="noninteractive" apt-get -y autoremove && \
DEBIAN_FRONTEND="noninteractive" apt-get -y autoclean && \
rm -rf /var/lib/apt/lists/*
# Build time variables
ENV LSMB_VERSION=master
ENV NODE_PATH=/usr/local/lib/node_modules
###########################################################
# Java & Nodejs for doing Dojo build
# These packages are only needed during the dojo build
ENV DOJO_Build_Deps="git make gcc libperl-dev curl nodejs npm cpanminus"
# These packages can be removed after the dojo build
ENV DOJO_Build_Deps_removal="${DOJO_Build_Deps} nodejs npm cpanminus"
# RUN (wget --quiet -O - https://deb.nodesource.com/setup_22.x | bash -) && \
RUN DEBIAN_FRONTEND="noninteractive" apt-get -y update && \
DEBIAN_FRONTEND="noninteractive" apt-get -y install ${DOJO_Build_Deps} && \
npm i -g --no-save yarn && \
cd /srv && \
git clone --depth 1 --recursive -b $LSMB_VERSION https://github.com/ledgersmb/LedgerSMB.git ledgersmb && \
cd ledgersmb && \
cpanm --metacpan --quiet --notest \
--with-feature=starman \
--with-feature=latex-pdf-ps \
--with-feature=openoffice \
--installdeps /srv/ledgersmb/ && \
apt-get purge -y git cpanminus make gcc libperl-dev && \
apt-get autoremove -y && \
apt-get autoclean && \
rm -rf ~/.cpanm/ && \
rm -rf /var/lib/apt/lists/* /usr/share/man/*
--installdeps . && \
make js && \
DEBIAN_FRONTEND="noninteractive" apt-get -y purge ${DOJO_Build_Deps_removal} && \
rm -rf /usr/local/lib/node_modules && \
DEBIAN_FRONTEND="noninteractive" apt-get -y autoremove && \
DEBIAN_FRONTEND="noninteractive" apt-get -y autoclean && \
rm -rf ~/.cpanm && \
rm -rf /var/lib/apt/lists/*
WORKDIR /srv/ledgersmb
# master requirements
# Cleanup args that are for internal use
ENV DOJO_Build_Deps=
ENV DOJO_Build_Deps_removal=
ENV NODE_PATH=
# Configure outgoing mail to use host, other run time variable defaults
## sSMTP
ENV SSMTP_ROOT ar@example.com
ENV SSMTP_MAILHUB 172.17.0.1
ENV SSMTP_HOSTNAME 172.17.0.1
#ENV SSMTP_USE_STARTTLS
#ENV SSMTP_AUTH_USER
#ENV SSMTP_AUTH_PASS
ENV SSMTP_FROMLINE_OVERRIDE YES
#ENV SSMTP_AUTH_METHOD
## MAIL
ENV LSMB_MAIL_SMTPHOST=172.17.0.1
#ENV LSMB_MAIL_SMTPPORT=25
#ENV LSMB_MAIL_SMTPSENDER_HOSTNAME=(container hostname)
#ENV LSMB_MAIL_SMTPTLS=
#ENV LSMB_MAIL_SMTPUSER=
#ENV LSMB_MAIL_SMTPPASS=
#ENV LSMB_MAIL_SMTPAUTHMECH=
ENV POSTGRES_HOST postgres
ENV POSTGRES_PORT 5432
ENV DEFAULT_DB lsmb
ENV POSTGRES_HOST=postgres
ENV POSTGRES_PORT=5432
ENV DEFAULT_DB=lsmb
COPY start.sh /usr/local/bin/start.sh
COPY update_ssmtp.sh /usr/local/bin/update_ssmtp.sh
RUN chown www-data /etc/ssmtp /etc/ssmtp/ssmtp.conf && \
chmod +x /usr/local/bin/update_ssmtp.sh /usr/local/bin/start.sh && \
mkdir -p /var/www
RUN chmod +x /usr/local/bin/start.sh && \
mkdir -p /var/www
# Work around an aufs bug related to directory permissions:
RUN mkdir -p /tmp && \

135
README.md
View File

@@ -1,13 +1,23 @@
# ledgersmb-docker
Dockerfile for LedgerSMB Docker image
# Supported tags
- `1.5`, `1.5.x`, `latest` - Latest release tarball from 1.5 branch
- `1.4`, `1.4.x` - Latest tagged release of git 1.4 branch
- `1.13`, `1.13.x`, `latest` - Latest official release from the 1.13 branch
- `1.12`, `1.12.x` - Latest official release from the 1.12 branch
- `1.11`, `1.11.x` - Latest official release from the 1.11 branch
- `1.10`, `1.10.38` - Last official release from the 1.10 branch
- `1.9`, `1.9.30` - Last official release from 1.9 branch (End-of-Life)
- `1.8`, `1.8.31` - Last official release from 1.8 branch (End-of-Life)
- `1.7`, `1.7.41` - Last official release from 1.7 branch (End-of-Life)
- `1.6`, `1.6.33` - Last official release from 1.6 branch (End-of-Life)
- `1.5`, `1.5.30` - Last official release from 1.5 branch (End-of-Life)
- `1.4`, `1.4.42` - Last official release from 1.4 branch (End-of-Life)
- `master` - Master branch from git, unstable
- `master-dev`, `1.5-dev` - Containers to kick off a development setup
Containers supporting the development process are provided
through the ledgersmb-dev-docker project. See https://github.com/ledgersmb/ledgersmb-dev-docker/blob/master/README.md#getting-started.
# What is LedgerSMB?
@@ -35,61 +45,65 @@ to add the TLS layer by applying Nginx or Apache as reverse proxy.
Enabling optional functionalities such as outgoing e-mail and printing
could require additional setup of a mail service or CUPS printer service.
# Quickstart
The quickest way to get this image up and running is by using the
`docker-compose` file available through the GitHub repository at:
https://github.com/ledgersmb/ledgersmb-docker/blob/1.5/docker-compose.yml
which sets up both this image and a supporting database image for
production purposes (i.e. with persistent (database) data, with the
exception of one thing: setting up an Nginx or Apache reverse proxy
with TLS 1.2 support -- a requirement if you want to access your
installation over any type of network.
# How to use this image
## Start a postgres instance
This image can be installed either automatically with the Docker compose file
manually with docker only.
❌ Do not use unofficial or AI-generated Docker Compose examples. These are
often incomplete, break silently, or skip required services.
## Docker-Compose installation and start
This image provides `docker-compose.yml` which can be used to pull related
images, install them, establish an internal network for their communications,
adjust environment variables, start and stop LedgerSMB. The only instructions
required, after the optional edition of the file to adjust the environment
variables, are:
```plain
$ docker run -d --name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
postgres:latest
$ docker-compose pull
$ docker-compose up
```
BEWARE: The command above creates a container with the database data stored
*inside* the container. Upon removal of the container, the database data will
be removed too!
This will set up two containers: (1) a PostgreSQL container with persistent
storage which is retained between container updates and (2) a LedgerSMB
container configured to connect to the PostgreSQL container as its database
server.
To prevent destruction of the database data upon replacement of the container,
please use these commands instead:
The database username and password are:
```plain
$ docker volume create dbdata
$ docker run -d --name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v dbdata:/var/lib/postgresql/data \
postgres:latest
username: postgres
password: abc
```
## Start LedgerSMB
## Manual installation
This section assumes availability of a PostgreSQL server to attach to the
LedgerSMB image as the database server.
### Start LedgerSMB
```plain
$ docker run -d -p 5762:5762 --name myledger \
ledgersmb/ledgersmb:latest
-e POSTGRES_HOST=<ip/hostname> ledgersmb/ledgersmb:latest
```
This command maps port 5762 of your container to port 5762 in your host. The
web application inside the container should now be accessible through
http://localhost:5762/setup.pl.
http://localhost:5762/setup.pl and http://localhost:5762/login.pl.
## Set up LedgerSMB
Below are more variables which determine container configuration,
like `POSTGRES_HOST` above.
# Set up LedgerSMB
* Visit http://myledger:5762/setup.pl.
* Log in with the "postgres" user and the password `mysecretpassword`
and provide the name of a company (= database name) you want to create.
* Log in with the "postgres" user and the password `abc` as given above -
or with the credentials of your own database server in case of a manual
setup - and provide the name of a company (= database name) you want to
create.
* Go over the steps presented in the browser
Once you have completed the setup steps, you have a fully functional
@@ -139,21 +153,18 @@ affect the performance experience of users.
## Mail configuration
The docker image uses `ssmtp` to send mail.
### Before 1.8.0
* `SSMTP_ROOT` (config: `Root`)
These variables are used to set outgoing SMTP defaults.
* `SSMTP_ROOT` (config: `Root` -- DEPRECATED)
* `SSMTP_MAILHUB` (config: `Mailhub`)
* `SSMTP_HOSTNAME` (config: `Hostname`)
* `SSMTP_USE_STARTTLS` (config: `UseSTARTTLS`)
* `SSMTP_AUTH_USER` (config: `AuthUser`)
* `SSMTP_AUTH_PASS` (config: `AuthPass`)
* `SSMTP_AUTH_METHOD` (config: `AuthMethod`)
* `SSMTP_FROMLINE_OVERRIDE` (config: `FromLineOverride`)
These variables are used to set outgoing SMTP defaults.
To set the outgoing email address, set `SSMTP_ROOT` and `SSMTP_HOSTNAME` at
a minimum.
* `SSMTP_AUTH_METHOD` (config: `AuthMethod` -- DEPRECATED)
* `SSMTP_FROMLINE_OVERRIDE` (config: `FromLineOverride` -- DEPRECATED)
`SSMTP_MAILHUB` defaults to the default docker0 interface, so if your host is
already configured to relay mail, this should relay successfully with only
@@ -164,6 +175,25 @@ Use the [ssmtp.conf man
page](https://www.systutorials.com/docs/linux/man/5-ssmtp.conf/) to look up
the meaning and function of each of the mail configuration keys.
### 1.8.0 and higher (under development)
As of 1.8.0, the image is based on Debian Buster instead of Debian Stretch;
with Buster, the `ssmtp` program has been removed from Debian, this image
had to change strategy. The main application always came with built-in e-mail
yet with the deprecation, the abilities have expanded.
The following parameters are now supported to set mail preferences:
* `LSMB_MAIL_SMTPHOST`
* `LSMB_MAIL_SMTPPORT`
* `LSMB_MAIL_SMTPTLS`
* `LSMB_MAIL_SMTPSENDER_HOSTNAME`
* `LSMB_MAIL_SMTPUSER`
* `LSMB_MAIL_SMTPPASS`
* `LSMB_MAIL_SMTPAUTHMECH`
# Troubleshooting/Developing
Currently the LedgerSMB installation is in /srv/ledgersmb
@@ -174,11 +204,18 @@ and the startup & config script is /usr/bin/start.sh.
## Issues
If you have any problems with or questions about this image or LedgerSMB, please contact us on the [mailing list](http://ledgersmb.org/topic/support/mailing-lists-rss-and-nntp-feeds) or through a [GitHub issue](https://github.com/ledgersmb/ledgersmb-docker/issues).
If you have any problems with or questions about this image or LedgerSMB,
please contact us on the [mailing list](http://ledgersmb.org/topic/support/mailing-lists-rss-and-nntp-feeds)
or through a [GitHub issue](https://github.com/ledgersmb/ledgersmb-docker/issues).
You can also reach some of the official LedgerSMB maintainers via the `#ledgersmb` IRC channel on [Freenode](https://freenode.net), or on the bridged [Matrix](https://matrix.org) room in [#ledgersmb:matrix.org](https://matrix.to/#/#ledgersmb:matrix.org). The [Riot.im](https://riot.im/app/#/room/#ledgersmb:matrix.org) Matrix client is highly recommended.
You can also reach some of the official LedgerSMB maintainers via the
`#ledgersmb` IRC channel on [Freenode](https://freenode.net), or on the
bridged [Matrix](https://matrix.org) room in [#ledgersmb:matrix.org](https://matrix.to/#/#ledgersmb:matrix.org).
The [Riot.im](https://riot.im/app/#/room/#ledgersmb:matrix.org) Matrix client is highly recommended.
## Contributing
You are invited to contribute new features, fixes, or updates, large or small; we are always thrilled to receive pull requests, and do our best to process them as fast as we can.
You are invited to contribute new features, fixes, or updates, large or small;
we are always thrilled to receive pull requests, and do our best to process
them as fast as we can.

View File

@@ -16,7 +16,7 @@ services:
# because that allows us to use the default hostname ("postgres")
# from the LedgerSMB configuration
postgres:
image: postgres:9.6-alpine
image: postgres:14-alpine
environment:
# Replace the password below for a secure setup
POSTGRES_PASSWORD: abc
@@ -28,7 +28,7 @@ services:
lsmb:
depends_on:
- postgres
image: ledgersmb/ledgersmb:1.5
image: ghcr.io/ledgersmb/ledgersmb:master
networks:
- internal
- default
@@ -58,6 +58,15 @@ services:
# SSMTP_AUTH_METHOD:
# SSMTP_USE_STARTTLS:
# SSMTP_FROMLINE_OVERRIDE:
#
#
# The PROXY_IP environment variable lets you set the IP address
# (range) of the reverse proxy used for TLS termination, which forwards
# its requests to this container. When this reverse proxy runs on the
# Docker host, the default below applies. In case the reverse proxy is
# hosted in a separate container, this setting needs to be adjusted.
#
# PROXY_IP: 172.17.0.1/12
# having the dbdata volume is required to persist our
# data between PostgreSQL container updates; without

115
start.sh
View File

@@ -1,8 +1,85 @@
#!/bin/bash
update_ssmtp.sh
cd /srv/ledgersmb
if [[ -n "$SSMTP_ROOT" ]]; then
echo "\$SSMTP_ROOT set; parameter is deprecated and will be ignored"
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_FROMLINE_OVERRIDE" ]]; then
echo "\$SSMTP_FROMLINE_OVERRIDE set; parameter is deprecated and will be ignored"
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_MAILHUB" ]]; then
echo "\$SSMTP_MAILHUB set; parameter is deprecated"
if [[ -z "$LSMB_MAIL_SMTPHOST" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPHOST setting from \$SSMTP_MAILHUB"
LSMB_MAIL_SMTPHOST=${SSMTP_MAILHUB%:*}
fi
if [[ -z "$LSMB_MAIL_SMTPPORT" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPPORT setting from \$SSMTP_MAILHUB"
LSMB_MAIL_SMTPPORT=${SSMTP_MAILHUB#*:}
fi
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_HOSTNAME" ]]; then
echo "\$SSMTP_HOSTNAME set; parameter is deprecated"
if [[ -z "$LSMB_MAIL_SMTPSENDER_HOSTNAME" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPSENDER_HOSTNAME setting from \$SSMTP_HOSTNAME"
LSMB_MAIL_SMTPSENDER_HOSTNAME=$SSMTP_HOSTNAME
fi
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_USE_STARTTLS" ]]; then
echo "\$SSMTP_USE_STARTTLS set; parameter is deprecated"
if [[ -z "$LSMB_MAIL_SMTPTLS" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPSENDER_HOSTNAME setting from \$SSMTP_USE_STARTTLS"
LSMB_MAIL_SMTPTLS=$SSMTP_USE_STARTTLS
fi
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_AUTH_USER" ]]; then
echo "\$SSMTP_AUTH_USER set; parameter is deprecated"
if [[ -z "$LSMB_MAIL_SMTPUSER" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPUSER setting from \$SSMTP_AUTH_USER"
LSMB_MAIL_SMTPUSER=$SSMTP_AUTH_USER
fi
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_AUTH_PASS" ]]; then
echo "\$SSMTP_AUTH_PASS set; parameter is deprecated"
if [[ -z "$LSMB_MAIL_SMTPPASS" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPPASS setting from \$SSMTP_AUTH_PASS"
LSMB_MAIL_SMTPPASS=$SSMTP_AUTH_PASS
fi
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$SSMTP_AUTH_METHOD" ]]; then
echo "\$SSMTP_AUTH_METHOD set; parameter is deprecated"
if [[ -z "$LSMB_MAIL_SMTPAUTHMECH" ]]; then
echo " Deriving \$LSMB_MAIL_SMTPAUTHMECH setting from \$SSMTP_AUTH_METHOD"
LSMB_MAIL_SMTPAUTHMECH=$SSMTP_AUTH_METHOD
fi
LSMB_HAVE_DEPRECATED=1
fi
if [[ -n "$LSMB_HAVE_DEPRECATED" ]]; then
echo "!!! DEPRECATED \$SSMTP_* PARAMETERS WILL BE REMOVED in the 1.9 image!!!"
fi
# This was never a parameter: ?
# if [[ -n "$SSMTP_USE_TLS" ]]; then
# echo "\$SSMTP_USE_TLS set; parameter is deprecated"
# if [[ -z "$LSMB_MAIL_SMTPTLS" ]]; then
# echo " Deriving \$LSMB_MAIL_SMTPSENDER_HOSTNAME setting from \$SSMTP_MAILHUB"
# if [[ "$SSMTP_USE_TLS" == "yes" ]]; then
# LSMB_MAIL_SMTPTLS=raw
# else
# LSMB_MAIL_SMTPTLS=no
# fi
# fi
# fi
if [[ ! -f ledgersmb.conf ]]; then
cat <<EOF >/tmp/ledgersmb.conf
[main]
@@ -14,15 +91,21 @@ port = $POSTGRES_PORT
default_db = $DEFAULT_DB
[mail]
sendmail = /usr/sbin/ssmtp
${LSMB_MAIL_SMTPHOST:+smtphost=$LSMB_MAIL_SMTPHOST
}${LSMB_MAIL_SMTPPORT:+smtpport=$LSMB_MAIL_SMTPPORT
}${LSMB_MAIL_SMTPSENDER_HOSTNAME:+smtpsender_hostname=$LSMB_MAIL_SMTPSENDER_HOSTNAME
}${LSMB_MAIL_SMTPTLS:+smtptls=$LSMB_MAIL_SMTPTLS
}${LSMB_MAIL_SMTPUSER:+smtpuser=$LSMB_MAIL_SMTPUSER
}${LSMB_MAIL_SMTPPASS:+smtppass=$LSMB_MAIL_SMTPPASS
}${LSMB_MAIL_SMTPAUTHMECH:+smtpauthmech=$LSMB_MAIL_SMTPAUTHMECH
}
[proxy]
ip=${PROXY_IP:-172.17.0.1/12}
EOF
export LSMB_CONFIG_FILE='/tmp/ledgersmb.conf'
fi
if [ ! -f "/tmp/ledgersmb" ]; then
mkdir /tmp/ledgersmb
fi
# Currently unmaintained/untested
# if [ ! -z ${CREATE_DATABASE+x} ]; then
# perl tools/dbsetup.pl --company $CREATE_DATABASE \
@@ -30,19 +113,17 @@ fi
# --postgres_password "$POSTGRES_PASS"
#fi
# Needed for modules loaded by cpanm
export PERL5LIB
for PerlLib in /usr/lib/perl5* /usr/local/lib/perl5*/site_perl/* ; do
[[ -d "$PerlLib" ]] && {
PERL5LIB="$PerlLib";
echo -e "\tmaybe: $PerlLib";
}
done ;
echo "Selected PERL5LIB=$PERL5LIB";
# start ledgersmb
# --preload-app allows application initialization to kill the entire
# starman instance (instead of just the worker, which will immediately
# get restarted); it also has a positive effect on memory use
exec starman --port 5762 --workers ${LSMB_WORKERS:-5} --preload-app tools/starman.psgi
echo '--------- LEDGERSMB CONFIGURATION: ledgersmb.conf'
cat ${LSMB_CONFIG_FILE:-ledgersmb.conf}
echo '--------- LEDGERSMB CONFIGURATION --- END'
# ':5762:' suppresses an uninitialized variable warning in starman
# the last colon means "don't connect using tls"; without it, there's a warning
exec starman --listen :5762: --workers ${LSMB_WORKERS:-5} \
-I lib -I old/lib \
--preload-app bin/ledgersmb-server.psgi

View File

@@ -1,18 +0,0 @@
#!/bin/bash
ConfiguredComment='# install script update_ssmtp.sh has configured ssmtp'
grep -qc "$ConfiguredComment" /etc/ssmtp/ssmtp.conf && {
echo "smtp configured."
exit
}
sed -i \
-e "s/\(root=\).*\$/\1$SSMTP_ROOT/g" \
-e "s/\(mailhub=\).*\$/\1$SSMTP_MAILHUB/g" \
-e "s/\(hostname=\).*\$/\1$SSMTP_HOSTNAME/g" \
/etc/ssmtp/ssmtp.conf
[ -z "$SSMTP_USE_STARTTLS" ] || echo "UseSTARTTLS=$SSMTP_USE_STARTTLS" >> /etc/ssmtp/ssmtp.conf
[ -z "$SSMTP_AUTH_USER" ] || echo "AuthUser=$SSMTP_AUTH_USER" >> /etc/ssmtp/ssmtp.conf
[ -z "$SSMTP_AUTH_PASS" ] || echo "AuthPass=$SSMTP_AUTH_PASS" >> /etc/ssmtp/ssmtp.conf
[ -z "$SSMTP_AUTH_METHOD" ] || echo "AuthMethod=$SSMTP_AUTH_METHOD" >> /etc/ssmtp/ssmtp.conf
[ -z "$SSMTP_FROMLINE_OVERRIDE" ] || echo "FromLineOverride=$SSMTP_FROMLINE_OVERRIDE" >> /etc/ssmtp/ssmtp.conf
echo "$ConfiguredComment" >> /etc/ssmtp/ssmtp.conf