Compare commits

...

47 Commits

Author SHA1 Message Date
Erik Huelsmann
a22ed7ac49 * Automatic Dockerfile update by release process 2017-12-08 16:54:59 +00:00
Erik Huelsmann
1f1df000b8 * Sync rewritten README.md from master 2017-10-30 21:45:58 +01:00
Erik Huelsmann
fe867c9925 * Automatic Dockerfile update by release process 2017-10-29 21:39:46 +00:00
Erik Huelsmann
9ff64318ab * In the 'build LedgerSMB' step, don't change directories 2017-09-20 22:22:22 +02:00
Erik Huelsmann
46ae598da0 * Automatic Dockerfile update by release process 2017-09-18 10:27:13 +00:00
Erik Huelsmann
1387c10fd1 * Automatic Dockerfile update by release process 2017-09-12 19:28:31 +00:00
Erik Huelsmann
cbb3a0d843 * Automatic Dockerfile update by release process 2017-09-03 18:55:01 +00:00
Erik Huelsmann
0e41af2b67 * Since the last command removed the lists, update before installation 2017-08-13 20:49:16 +02:00
Erik Huelsmann
a30d23bbb6 * Remove /var/lib/apt/lists/* for further space savings 2017-08-13 20:34:14 +02:00
Erik Huelsmann
e10bd36b80 * Add back USER statement accidentally removed in d038488 2017-08-06 19:50:32 +02:00
Erik Huelsmann
1a56d1523d * Update Dockerfile with performance dependency
As noted by John, requests improve by a factor 10 (20-30secs -> 2-3secs)
with this dependency in place.
2017-08-04 23:39:18 +02:00
Erik Huelsmann
aa260dcec9 * Automatic Dockerfile update by release process 2017-07-22 19:02:34 +00:00
Erik Huelsmann
402f541a5e * Download from download.ledgersmb.org instead of GitHub
(uploading to GitHub doesn't work for non-tagged releases such as betas)
2017-07-20 22:57:48 +02:00
Erik Huelsmann
9499b6ffc1 Merge pull request #13 from sbts/1.5_don't_write_to_server_dir
drop need to write config file to /srv/ledgersmb
2017-07-09 08:39:58 +02:00
sbts
d0384889a8 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 01:07:04 +08:00
Erik Huelsmann
2d4bb886f8 * Automatic Dockerfile update by release process 2017-06-25 15:44:29 +00:00
Erik Huelsmann
8e3f80f65f * Remove downloaded tar from the resulting container 2017-06-21 00:23:07 +02:00
Erik Huelsmann
cd29bd895f * Remove more temporary artifacts from the build process 2017-06-21 00:03:36 +02:00
Erik Huelsmann
42e6eb783e * Reorganize commands for slimmer image 2017-06-20 07:59:10 +02:00
Erik Huelsmann
09cf2e16b7 Update Dockerfile for 1.5.7 release 2017-06-01 19:13:22 +02:00
Erik Huelsmann
2a5dff2dd7 * Don't build Dojo on release branches: be download pre-built. 2017-06-01 09:18:00 +02:00
Erik Huelsmann
e2bf781058 * Reduce image size further by changing base image 2017-06-01 08:27:51 +02:00
Erik Huelsmann
1148c219ec * Minimize the size of the image (went from 2.6GB to 1.4GB!) 2017-06-01 08:23:00 +02:00
Erik Huelsmann
e5c6072505 * use '--preload-app' to start starman 2017-05-25 16:07:38 +02:00
Erik Huelsmann
728840ce4c * Update Dockerfile to 1.5.6 2017-04-09 14:44:12 +00:00
John Locke
5f45abdf2d Create /tmp/ledgersmb if not exists 2017-03-14 13:50:53 -07:00
John Locke
8afea54d65 Fix ssmtp update script 2017-03-14 13:41:59 -07:00
John Locke
326790de44 Update postgres client libs to 9.6, fixes ledgersmb/ledgersmb#2686 , older pg_dump aborts when connecting to newer postgres server. 2017-03-14 10:15:01 -07:00
Erik Huelsmann
c4a5359b25 * Update to 1.5.5 2017-03-14 14:08:13 +00:00
John Locke
79be91758b Update README on latest branch. 2017-03-13 15:37:12 -07:00
John Locke
4706963a2b 1.5.4 2017-03-13 13:55:57 -07:00
John Locke
2c22bd6bbb 1.5.3 2017-02-11 07:47:00 -08:00
John Locke
d3897c8439 1.5.2 2017-01-23 06:46:44 -08:00
John Locke
6d4d4fa927 Run as www-data user, with permission to write ledgersmb.conf file.
Fixes #6.
2017-01-14 09:09:37 -08:00
John Locke
8f911b4d3e 1.5.1 2017-01-08 10:59:02 -08:00
John Locke
60af8d5d49 Add LPR package to image 2017-01-05 08:48:46 -08:00
John Locke
2bf51fb145 Try different download mirror 2016-12-30 11:02:21 -08:00
John Locke
6e41334061 Try again to get the correct path 2016-12-30 10:43:19 -08:00
John Locke
f3f924eab9 Update to full release path. 2016-12-30 10:19:47 -08:00
John Locke
e456434514 1.5.0 2016-12-30 09:43:11 -08:00
John Locke
71de84bd9e 1.5.0-rc3 2016-12-12 08:38:25 -08:00
John Locke
262bf6e1f4 Set correct ssmtp path 2016-09-25 10:54:16 -07:00
John Locke
fdd2eed8a6 Fix missing && after downloading tarball 2016-08-21 12:45:49 -07:00
John Locke
76c35fa0d5 1.5.0-rc2 2016-08-20 09:13:33 -07:00
John Locke
dc0770e367 1.5.0-rc2 2016-08-20 09:02:15 -07:00
John Locke
3839f3b105 Add support for #4 - Make Postgres port configurable at run time 2016-08-20 08:56:41 -07:00
John Locke
9839ceaa2b Add new libmoosex-nonmoose-perl dependency 2016-05-30 08:58:36 -07:00
4 changed files with 174 additions and 85 deletions

View File

@@ -1,43 +1,57 @@
FROM perl:5
FROM debian:jessie
MAINTAINER Freelock john@freelock.com
RUN echo -n "APT::Install-Recommends \"0\";\nAPT::Install-Suggests \"0\";\n" >> /etc/apt/apt.conf
# Install Perl, Tex, Starman, psql client, and all dependencies
RUN DEBIAN_FRONTENT=noninteractive && \
apt-get update && apt-get -y install \
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 \
texlive-latex-recommended \
texlive-xetex \
starman \
libopenoffice-oodoc-perl \
postgresql-client \
ssmtp
# Without libclass-c3-xs-perl, performance is terribly slow...
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
apt-get dist-upgrade -y && apt-get -y install \
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 \
texlive-xetex \
starman \
libopenoffice-oodoc-perl \
postgresql-client \
ssmtp \
lsb-release \
&& rm -rf /var/lib/apt/lists/*
# Build time variables
ENV LSMB_VERSION 1.5.0-beta6
ENV LSMB_VERSION 1.5.14
# Install LedgerSMB
RUN cd /srv && \
curl -Lo ledgersmb-$LSMB_VERSION.tar.gz https://sourceforge.net/projects/ledger-smb/files/Releases/$LSMB_VERSION/ledgersmb-$LSMB_VERSION.tar.gz/download && \
tar -xvzf ledgersmb-$LSMB_VERSION.tar.gz
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
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 \
--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/*
WORKDIR /srv/ledgersmb
# 1.5 requirements
RUN cpanm --quiet --notest \
--with-feature=starman \
--with-feature=latex-pdf-ps \
--with-feature=openoffice \
--installdeps .
# master requirements
# Configure outgoing mail to use host, other run time variable defaults
@@ -52,6 +66,8 @@ ENV SSMTP_FROMLINE_OVERRIDE YES
#ENV SSMTP_AUTH_METHOD
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
@@ -60,9 +76,12 @@ 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
# Work around an aufs bug related to directory permissions:
RUN mkdir -p /tmp && \
chmod 1777 /tmp
# Internal Port Expose
EXPOSE 5762
#USER www-data
USER www-data
CMD ["start.sh"]

147
README.md
View File

@@ -1,96 +1,151 @@
# ledgersmb-docker - EXPERIMENTAL
# ledgersmb-docker
Dockerfile for LedgerSMB Docker image
This is a work in progress to make a docker image for running LedgerSMB. It should not be relied upon for production use!
# Supported tags
# Supported tags and respective `Dockerfile` links
- `dev-master` - Master branch from git, unstable
- `1.5`, `1.5.x` - Latest release tarball from 1.5 branch
- `1.4`, `latest` - Latest tagged release of git 1.4 branch
- `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
- `master` - Master branch from git, unstable
- `master-dev`, `1.5-dev` - Containers to kick off a development setup
# What is LedgerSMB?
The LedgerSMB project's priority is to provide an extremely capable yet user-friendly accounting and ERP solution to small to mid-size businesses in all locales where there is interest in using the software. The focus on small to mid-size businesses offers an opportunity to provide a positive user experience in ways which are not present in larger organizations. LedgerSMB ought to strive to be both the ideal SMB accounting/ERP package and also a solution that a start-up will never outgrow. The goals mentioned above will help us provide this ideal solution by allowing us to focus both on technical architecture and on user experience.
LedgerSMB is a user-friendly accounting and ERP solution for small to
mid-size businesses. It comes with support for many languages and support
for different locales.
The project aims to be the solution a start-up never outgrows.
# How is this image designed to be used?
This Docker image is built to provide a self-contained LedgerSMB instance. To be functional, you need to connect it to a running Postgres installation. The official Postgres container will work as is, if you link it to the LedgerSMB instance at startup, or you can provide environment variables to an appropriate Postgres server.
This image is designed to be used in conjunction with a running PostgreSQL
instance (such as may be provided through a separate image).
LedgerSMB provides an http interface built on Starman out of the box, listening on port 5762. We do not recommend exposing this port, because we strongly recommend encrypting all connections using SSL/TLS. For production use, we recommend running a web server configured with SSL, such as Nginx or Apache, and proxying connections to LedgerSMB.
This image exposes port 5762 running a Starman HTTP application server. We
do not recommend exposing this port publicly, because
The other services you will need to put this in production are an SMTP gateway (set environment variables for SSMTP at container startup) and optionally a local print server (e.g. CUPS) installation. The print service is not currently supported in this Docker image, but pull requests are welcomed ;-)
1. The Starman author recommends it
2. We strongly recommend TLS encryption of all application traffic
While the exposed port can be used for quick evaluation, it's recommended
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.
# How to use this image
## Start a postgres instance
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
```plain
$ docker run -d --name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
postgres:latest
```
This image includes `EXPOSE 5432` (the postgres port), so standard container linking will make it automatically available to the linked containers. The default `postgres` user and database are created in the entrypoint with `initdb`.
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!
> The postgres database is a default database meant for use by users, utilities and third party applications.
> [postgresql.org/docs](http://www.postgresql.org/docs/9.3/interactive/app-initdb.html)
To prevent destruction of the database data upon replacement of the container,
please use these commands instead:
```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
```
## Start LedgerSMB
docker run --name myledger --link some-postgres:postgres -d ledgersmb/ledgersmb
```plain
$ docker run -d -p 5762:5762 --name myledger \
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.
## Set up LedgerSMB
Visit http://myledger:5762/setup.pl (you can forward port 5762 to the host machine, or lookup the IP address for the "myledger" container if running on localhost)
* 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.
* Go over the steps presented in the browser
Log in with the "postgres" user and the password you set when starting up the Postgres container, and provide the name of a company database you want to create.
Once you have completed the setup steps, you have a fully functional
LedgerSMB instance running!
Once you have completed the setup, you have a fully functional LedgerSMB instance running!
Visit http://myledger:5762/login.pl to log in and get started.
Visit http://localhost:5762/login.pl to log in and get started.
# Updating the LedgerSMB container
No persistant data is stored in the LedgerSMB container. All LedgerSMB data is stored in Postgres, so you can stop/destroy/run a new LedgerSMB container, and as long as you link it to the Postgres database, you should be able to pick up where you left off.
No persistant data is stored in the LedgerSMB container.
All LedgerSMB data is stored in Postgres, so you can stop/destroy/run a
new LedgerSMB container as often as you want.
# Environment Variables
The LedgerSMB image uses several environment variables which are easy to miss. While none of the variables are required, they may significantly aid you in using the image.
The LedgerSMB image uses several environment variables. They are all optional.
### `POSTGRES_HOST` = 'postgres'
This environment variable is used to specify the hostname of the Postgres server. The default is "postgres", which will find the container linked in.
## `POSTGRES_HOST`
If you set this to another hostname, LedgerSMB will attempt to connect to that hostname instead.
Default: postgres
### `SSMTP_ROOT` `SSMTP_MAILHUB` `SSMTP_HOSTNAME` `SSMTP_USE_STARTTLS` `SSMTP_AUTH_USER` `SSMTP_AUTH_PASS` `SSMTP_METHOD` `SSMTP_FROMLINE_OVERRIDE`
Specifies the hostname of the PostgreSQL server to connect to. If you use
a PostgreSQL image, set it to the name of that image.
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_MAILHUB defaults to the default docker0 interface, so if your host is already configured to relay mail, this should relay successfully with only those two set.
## `POSTGRES_PORT`
Use the other environment variables to relay mail through another host.
Default: 5432
Port on which the PostgreSQL server is running.
## `DEFAULT_DB`
Default: lsmb
Set this if you want to automatically log in to a particular LedgerSMB database
without needing to enter the name of that database on the login.pl login screen.
## Mail configuration
* `SSMTP_ROOT`
* `SSMTP_MAILHUB`
* `SSMTP_HOSTNAME`
* `SSMTP_USE_STARTTLS`
* `SSMTP_AUTH_USER`
* `SSMTP_AUTH_PASS`
* `SSMTP_METHOD`
* `SSMTP_FROMLINE_OVERRIDE`
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_MAILHUB` defaults to the default docker0 interface, so if your host is
already configured to relay mail, this should relay successfully with only
the root and hostname set.
Use the other environment variables to relay mail through a different host.
# Troubleshooting/Developing
You can connect to a running container using:
Currently the LedgerSMB installation is in /srv/ledgersmb
and the startup & config script is /usr/bin/start.sh.
> docker exec -ti myledger /bin/bash
... this will give you a shell inside the container where you can inspect/troubleshoot the installation.
Currently the LedgerSMB installation is in /srv/ledgersmb, and the startup/config script is /usr/bin/start.sh.
# Supported Docker versions
This image is officially supported on Docker version 1.11.1.
Support for older versions is provided on a best-effort basis.
# User Feedback
## Documentation
This is a brand new effort, and we will be adding documentation to the http://ledgersmb.org site when we get a chance.
## 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).

View File

@@ -4,14 +4,25 @@ update_ssmtp.sh
cd /srv/ledgersmb
if [[ ! -f ledgersmb.conf ]]; then
cp conf/ledgersmb.conf.default ledgersmb.conf
sed -i \
-e "s/\(cache_templates = \).*\$/cache_templates = 1/g" \
-e "s/\(host = \).*\$/\1$POSTGRES_HOST/g" \
-e "s%\(sendmail = \).*%\1/usr/bin/ssmtp%g" \
/srv/ledgersmb/ledgersmb.conf
cat <<EOF >/tmp/ledgersmb.conf
[main]
cache_templates = 1
[database]
host = $POSTGRES_HOST
port = $POSTGRES_PORT
default_db = $DEFAULT_DB
[mail]
sendmail = /usr/sbin/ssmtp
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 \
@@ -21,6 +32,7 @@ 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";
@@ -30,4 +42,7 @@ done ;
echo "Selected PERL5LIB=$PERL5LIB";
# start ledgersmb
exec starman --port 5762 tools/starman.psgi
# --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 --preload-app tools/starman.psgi

View File

@@ -1,6 +1,6 @@
#!/bin/bash
ConfiguredComment='# install script update_ssmtp.sh has configured ssmtp'
grep -qc "$ConfiguredComment" /etc/ssmtp.conf && {
grep -qc "$ConfiguredComment" /etc/ssmtp/ssmtp.conf && {
echo "smtp configured."
exit
}