Oh… I pulled the wrong install?
Wait, no, that is the exact page I used for this install?
Well, I have Let’s Encrypt certificates on the host itself. Will requesting another set with certbot for docker on this host mess up my existing certs? My host can’t lose it’s certificates, it has other applications that don’t run in containers that it must serve.
My host certificates are:
l /etc/letsencrypt/archive/3111skyline.com/*6*
-rw-r--r-- 1 root root 1801 Sep 10 17:32 /etc/letsencrypt/archive/3111skyline.com/cert16.pem
-rw-r--r-- 1 root root 3749 Sep 10 17:32 /etc/letsencrypt/archive/3111skyline.com/chain16.pem
-rw-r--r-- 1 root root 5550 Sep 10 17:32 /etc/letsencrypt/archive/3111skyline.com/fullchain16.pem
-rw------- 1 root root 1708 Sep 10 17:32 /etc/letsencrypt/archive/3111skyline.com/privkey16.pem
Is the lack of certificates the problem causing nginx:stable-alpine and phpswoole/swoole:latest-alpine to continually be in restart? E.g.
57f2f06feca1 nginx:stable-alpine "/docker-entrypoint.…" 16 hours ago Restarting (1) 7 seconds ago egroupware-nginx
8eda4f747be0 phpswoole/swoole:latest-alpine "docker-php-entrypoi…" 16 hours ago Restarting (127) 17 seconds ago egroupware-push
Can I somehow use my existing Let’s Encrypt certificates with egroupware in this docker container?
Everything else seems to be happy. OR is this the result of the failure to pull the Dockerfile
per the howto? Running EGroupware in Docker. When I tried:
curl https://raw.githubusercontent.com/EGroupware/egroupware/master/doc/docker/Dockerfile > Dockerfile
It ends up with Dockerfile
containing 404: Not Found. I just deleted that
Dockerfile`. Is that howto missing a file or has it been superseded and is no longer needed?
What to check to find out why nginx and phpswoole/swoole are not running and continually restarting?
Also, we had a 4 hour power outage today, so the server went down and when it came back up – it came back up in the same state when I start docker. It seem happy except nginx and phpswoole/swoole, e.g.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f2f06feca1 nginx:stable-alpine "/docker-entrypoint.…" 17 hours ago Restarting (1) 3 seconds ago egroupware-nginx
8eda4f747be0 phpswoole/swoole:latest-alpine "docker-php-entrypoi…" 17 hours ago Restarting (127) 13 seconds ago egroupware-push
ec2b11011599 egroupware/development:latest "/entrypoint.sh php-…" 17 hours ago Up 46 minutes 9000/tcp egroupware
77c44591ad1d phpmyadmin "/docker-entrypoint.…" 17 hours ago Up 46 minutes 80/tcp phpmyadmin
c78a2ee4cbbb mariadb:10.6 "docker-entrypoint.s…" 17 hours ago Up 46 minutes 3306/tcp egroupware-db
f9a0c089cfce containrrr/watchtower "/watchtower --sched…" 17 hours ago Up 46 minutes 8080/tcp egroupware-watchtower
The docker-compose.yml
with collabra and rocketchat commented (removed below), I used the following:
version: '3'
volumes:
# data directory: here are the files stored (/var/lib/egroupware by default)
data:
driver_opts:
type: none
o: bind
# to upgrade an existing non-docker installation most easy is to use the existing
# data directory /var/lib/egroupware AND the host database see below
#device: /var/lib/egroupware
# otherwise data is stored in data subdirectory of the current directory
device: $PWD/data
# sources directory or document root mounted as /var/www inside the container
sources:
driver_opts:
type: none
o: bind
# use this if you have an existing document root with an egroupware directory inside
#device: /var/www
# otherwise sources/document is stored in sources subdirectory of current directory
device: $PWD/sources
# sources for push server, swoolpush subdirectory of egroupware
sources-push:
driver_opts:
type: none
o: bind
device: $PWD/sources/egroupware/swoolepush
# volume to store config.inc.php file / token shared between egroupware and push container
push-config:
# for Mac and Windows, do NOT use a directory for the DB, as the Docker host is in a VM!
db:
sessions:
# cache files from compose, npm and yarn (actually /root inside the container)
cache:
services:
egroupware:
# you can also use tags like: 7.4, 8.0 or 8.1 depending on the PHP version you want to use
image: egroupware/development:latest
# setting a default language for a new installation
#environment:
#- LANG=de
volumes:
- $PWD/sources:/var/www
- $PWD/data:/var/lib/egroupware
- $PWD/sessions:/var/lib/php/sessions
- $PWD/cache:/root
- $PWD/push-config:/var/lib/egroupware-push
# if you want to use the host database:
# 1. comment out the whole db service below AND
# 2. set EGW_DB_HOST=localhost AND
# 3. uncomment the next line and modify the host path (first one), it depends on your distro:
# - RHEL/CentOS /var/lib/mysql/mysql.sock:/var/run/mysqld/mysqld.sock
# - openSUSE/SLE /var/run/mysql/mysql.sock:/var/run/mysqld/mysqld.sock
# - Debian/Ubuntu /var/run/mysqld:/var/run/mysqld
#- /var/run/mysqld:/var/run/mysqld
# private CA so egroupware can validate your certificate to talk to Collabora or Rocket.Chat
# multiple certificates (eg. a chain) have to be single files in a directory, with one named private-ca.crt!
#- /etc/egroupware-docker/private-ca.crt:/usr/local/share/ca-certificates/private-ca.crt:ro
environment:
#
# MariaDB/MySQL host to use: for internal service use "db", for host database (socket bind-mounted into container) use "localhost"
- EGW_DB_HOST=db
# grant host is needed for NOT using localhost / unix domain socket for MySQL/MariaDB
- EGW_DB_GRANT_HOST=172.%
# for internal db service you should to specify a root password here AND in db service
# a database "egroupware" with a random password is created for you on installation (password is stored in header.inc.php in data directory)
#- EGW_DB_ROOT=root
- EGW_DB_ROOT_PW=secret
# alternativly you can specify an already existing database with full right by the given user!
#- EGW_DB_NAME=egroupware
#- EGW_DB_USER=egroupware
#- EGW_DB_PASS=
#
# further post_install.php arguments can be passed as a single enviroment variable with space separated assignments
# "<name1>=<value1> <name2>=<value2>" see https://github.com/EGroupware/egroupware/blob/master/doc/rpm-build/post_install.php#L17
# to configure eg. LDAP for authentication and account storage use
#- EGW_POST_INSTALL='account-auth=ldap,ldap ldap_base=ou=egroupware,dc=example,dc=org ldap_host=tls://ldap.example.org ldap_admin=cn=admin,$base ldap_admin_pw=secret ldap_context=cn=users,$base ldap_group_context=cn=groups,$base'
#
# extra non-default apps (need to start with EGW_EXTRA_APP!)
#
# EPL apps (need extra credentials!)
#- EGW_EXTRA_APPS_EPL=https://github.com/EGroupwareGmbH/epl.git https://github.com/EGroupwareGmbH/esyncpro.git https://github.com/EGroupwareGmbH/policy.git https://github.com/EGroupwareGmbH/webauthn.git
# old Wiki
#- EGW_EXTRA_APP_WIKI=https://github.com/EGroupware/wiki.git
# old API and eTemplate(1), required for upgrades from before 14.3
#- EGW_EXTRA_APP_OLDAPI=https://github.com/EGroupware/phpgwapi.git https://github.com/EGroupware/etemplate.git
#
# XDEBUG_REMOTE_HOST need to be set, if the host running the IDE is different from 172.17.0.1 (Mac can use docker.for.mac.localhost)
- XDEBUG_REMOTE_HOST=172.17.0.1
restart: always
depends_on:
- db
container_name: egroupware
# set the ip-address of your docker host AND your official DNS name so EGroupware
# can access Rocket.Chat or Collabora without the need to go over your firewall
#extra_hosts:
#- "my.host.name:ip-address"
extra_hosts:
- "devbox.egroupware.org:172.17.0.1"
nginx:
image: nginx:stable-alpine
volumes:
- $PWD/sources:/var/www:ro
# to add a certificate create a certificate.pem containing (in that order)
# 1. private key
# 2. public key
# 3. (optional) chain certificates
# uncomment to the next line
# ./certificate.pem:/etc/ssl/private/certificate.pem
# AND uncomment the three lines starting with "listen 443", "ssl_certificate", "ssl_certificate_key" in nginx.conf
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
ports:
# if no webserver is running on the host, change (first) number to 80 and 443
- "8080:80"
- "4443:443"
depends_on:
- egroupware
- push
## - collabora-key
## - rocketchat
container_name: egroupware-nginx
restart: always
# run an own MariaDB:10.6 (you can use EGroupware's database backup and restore to add your existing database)
db:
image: mariadb:10.6
environment:
#- MYSQL_ROOT=root
- MYSQL_ROOT_PASSWORD=secret
#- MARIADB_AUTO_UPGRADE=true
volumes:
- db:/var/lib/mysql
# to add an own persistent configuration
#- ./mariadb.cnf:/etc/mysql/mariadb.conf.d/egroupware.cnf
container_name: egroupware-db
restart: always
# make mysql also available on the host
#ports:
#- "3306:3306"
# push server using phpswoole
push:
image: phpswoole/swoole:latest-alpine
command:
- /var/www/server.php
volumes:
- $PWD/sources/egroupware/swoolepush:/var/www
- $PWD/sessions:/var/lib/php/sessions
- $PWD/push-config:/var/lib/egroupware-push
container_name: egroupware-push
restart: always
depends_on:
- egroupware
# automatic updates of all containers daily at 4am
# see https://containrrr.github.io/watchtower for more information
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# For automatic EPL Updates (not necessary for CE!) you need to pass docker
# credentials into watchtower after running: docker login download.egroupware.org
#- /root/.docker/config.json:/config.json:ro
environment:
- WATCHTOWER_CLEANUP=true # delete old image after update to not fill up the disk
# for email notifications add your email and mail-server here
#- WATCHTOWER_NOTIFICATIONS=email
#- WATCHTOWER_NOTIFICATIONS_LEVEL=info # possible values: panic, fatal, error, warn, info or debug
#- WATCHTOWER_NOTIFICATION_EMAIL_FROM="watchtower@my-domain.com"
#- WATCHTOWER_NOTIFICATION_EMAIL_TO="me@my-domain.com"
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER="mail.my-domain.com" # if you give your MX here, you need no user/password
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=25
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER="watchtower@my-domain.com"
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD="secret"
command: --schedule "0 0 4 * * *"
container_name: egroupware-watchtower
restart: always
# phpMyAdmin
phpmyadmin:
restart: unless-stopped
image: phpmyadmin
container_name: phpmyadmin
hostname: phpmyadmin
# pre 20.1 installs run MariaDB on the host and need to pass the socket (to use egroupware user and it's password only valid on localhost)
#volumes:
# - /var/run/mysqld/mysqld.sock:/tmp/mysql.sock
environment:
# PMA_HOST: use localhost, if you use a socket (pre 20.1 install) or db for 20.1+ installations
- PMA_HOST=db
# phpMyAdmin needs the full URL incl. protocol, domain, path and a trailing slash!
- PMA_ABSOLUTE_URI=http://localhost/phpmyadmin/
Another hurdle is I am setting this up remotely. I don’t know if that matters, but I’m ssh’ed into the test box and attempting to connect to the docker egroupware over the local LAN. I don’t know if that makes a difference for initial setup, but that is how I have always administered servers.
Let me know what to check on nginx/swoole restart and if the remote-admin is a problem. Thank you a lot!