Upgraded Snap Candidate to have base core24, MongoDB 7 and Caddy 2.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu 2025-06-26 05:39:37 +03:00
parent 1b44c848ad
commit 6526d99123
4 changed files with 107 additions and 79 deletions

View file

@ -1,18 +1,29 @@
http://:8080
proxy / localhost:3001 {
websocket
transparent
# Caddy 2 configuration for Wekan
:8080 {
# Reverse proxy to Wekan
reverse_proxy localhost:3001 {
# Enable WebSocket support
header_up Connection {>Connection}
header_up Upgrade {>Upgrade}
}
}
## SSL/TLS example. Firefox Inspect Console does not support http/2, so turning it off
## so that Firefox would not show wss websocket errors. Chrome console supports http/2.
#
#wekan.example.com {
# SSL/TLS example with HTTP/2 disabled for Firefox WebSocket compatibility
# Uncomment and customize for your domain
#{$DOMAIN:wekan.example.com} {
# # Enable TLS but use HTTP/1.1 protocol
# tls {
# alpn http/1.1
# protocols tls1.2 tls1.3
# }
# proxy / localhost:3001 {
# websocket
# transparent
# # Force HTTP/1.1
# protocols h1
#
# # Reverse proxy to Wekan
# reverse_proxy localhost:3001 {
# # Enable WebSocket support
# header_up Connection {>Connection}
# header_up Upgrade {>Upgrade}
# }
#}
#}

View file

@ -1,10 +1,13 @@
#!/bin/bash
# get wekan/mongo settings
# Get wekan/mongo settings
source $SNAP/bin/wekan-read-settings
if [ "$CADDY_ENABLED" = "true" ]; then
env LC_ALL=C caddy -conf=$SNAP_COMMON/Caddyfile -host=localhost:${CADDY_PORT} -agree
# Use Caddy 2 command format
# The 'host' option is no longer needed in Caddy 2
# The 'agree' option is no longer needed as Caddy 2 doesn't prompt for EULA
env LC_ALL=C caddy run --config $SNAP_COMMON/Caddyfile
else
echo "caddy is disabled. Stop service"
snapctl stop --disable ${SNAP_NAME}.caddy

View file

@ -102,18 +102,18 @@ if [ -z "${MONGO_URL}" ]; then
if [ "syslog" == "${MONGO_LOG_DESTINATION}" ]; then
echo "Sending mongodb logs to syslog"
mongod --dbpath ${SNAP_COMMON} --syslog --journal ${BIND_OPTIONS} --quiet
mongod --dbpath ${SNAP_COMMON} --syslog ${BIND_OPTIONS} --quiet
exit 0
fi
if [ "snapcommon" == "${MONGO_LOG_DESTINATION}" ]; then
echo "Sending mongodb logs to $SNAP_COMMON"
mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend --journal ${BIND_OPTIONS} --quiet
mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend ${BIND_OPTIONS} --quiet
fi
if [ "devnull" == "${MONGO_LOG_DESTINATION}" ]; then
echo "Sending mongodb logs to /dev/null"
mongod --dbpath ${SNAP_COMMON} --logpath /dev/null --journal ${BIND_OPTIONS} --quiet
mongod --dbpath ${SNAP_COMMON} --logpath /dev/null ${BIND_OPTIONS} --quiet
fi
#echo "mongodb log destination: ${MONGO_LOG_DESTINATION}" >> "${SNAP_COMMON}/settings.log"
@ -138,17 +138,17 @@ else
if [ "syslog" == "${MONGO_LOG_DESTINATION}" ]; then
echo "Sending mongodb logs to syslog"
mongod --dbpath ${SNAP_COMMON} --syslog --journal ${MONGO_URL} --quiet
mongod --dbpath ${SNAP_COMMON} --syslog ${MONGO_URL} --quiet
fi
if [ "snapcommon" == "${MONGO_LOG_DESTINATION}" ]; then
echo "Sending mongodb logs to ${SNAP_COMMON}"
mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend --journal ${MONGO_URL} --quiet
mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend ${MONGO_URL} --quiet
fi
if [ "devnull" == "${MONGO_LOG_DESTINATION}" ]; then
echo "Sending mongodb logs to /dev/null"
mongod --dbpath ${SNAP_COMMON} --logpath /dev/null --journal ${MONGO_URL} --quiet
mongod --dbpath ${SNAP_COMMON} --logpath /dev/null ${MONGO_URL} --quiet
fi
# Disable MongoDB telemetry and free monitoring

View file

@ -1,11 +1,11 @@
name: wekan
version: '7.92'
base: core20
base: core24
summary: Open Source kanban
description: |
WeKan ® is an Open Source and collaborative kanban board application.
Whether youre maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Whether you're maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.
For full list of configuration options call:
$ wekan.help
@ -13,8 +13,11 @@ description: |
confinement: strict
grade: stable
architectures:
- amd64
# Update platforms format to correct syntax for core24
platforms:
amd64:
build-on: amd64
build-for: amd64
plugs:
mongodb-plug:
@ -65,63 +68,46 @@ apps:
parts:
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.24.tgz
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.21.tgz
plugin: dump
stage-packages:
- libssl1.1
- libssl3
- libcurl4
- libstemmer0d
- zlib1g
- libsnappy1v5
- libyaml-cpp0.6
- libyaml-cpp0.8
- libpcre3
- libpcrecpp0v5
- libboost-system1.71.0
- libboost-iostreams1.71.0
- libboost-filesystem1.71.0
- libboost-program-options1.71.0
- libboost-system1.74.0
- libboost-iostreams1.74.0
- libboost-filesystem1.74.0
- libboost-program-options1.74.0
- libgoogle-perftools4
filesets:
mongo:
- bin
- usr
stage:
- $mongo
- bin
- usr
prime:
- $mongo
- bin
- usr
mongosh:
source: https://downloads.mongodb.com/compass/mongodb-mongosh_2.1.1_amd64.deb
source: https://downloads.mongodb.com/compass/mongosh-2.5.3-linux-x64.tgz
plugin: dump
mongotools:
source: https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2004-x86_64-100.9.4.tgz
source: https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2404-x86_64-100.12.2.tgz
plugin: dump
# mongodb44:
# source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.18.tgz
# plugin: dump
# organize:
# bin: mongo44bin
# usr: mongo44usr
# stage:
# - -init
wekan:
source: .
plugin: npm
npm-node-version: 14.21.3
## Node.js 14.21.4 from Meteor only exists URL below where it's downloaded and installed.
## It does not exists in that npm-node-version above.
#npm-packages:
# - node-gyp
# - node-pre-gyp
# - fibers
npm-include-node: true
build-packages:
- build-essential
- ca-certificates
- apt-utils
# - python2
- python3
- g++
- capnproto
@ -131,7 +117,7 @@ parts:
- execstack
- nodejs
- npm
# - p7zip-full
- git # Add git for cloning migratemongo
stage-packages:
- libfontconfig1
override-build: |
@ -196,14 +182,14 @@ parts:
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
# Migrate MongoDB 3 to 6
wget https://github.com/wekan/migratemongo/archive/refs/heads/main.zip
unzip main.zip
mv migratemongo-main migratemongo
# Migrate MongoDB 3 to 6 - clone directly from git instead of downloading zip
echo "Cloning migratemongo repository..."
git clone https://github.com/wekan/migratemongo.git
echo "Copy migratemongo files to install directory..."
cp -pR migratemongo $SNAPCRAFT_PART_INSTALL/
rm -rf migratemongo
rm main.zip
#rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
# Delete phantomjs that is in accounts-lockout
#rm -rf $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/lucasantoniassi_accounts-lockout/node_modules/phantomjs-prebuilt
# Delete temporary files
@ -228,21 +214,49 @@ parts:
plugin: dump
caddy:
plugin: dump
## Caddy v1 is not developed anymore. TODO: Sometime migrate to Caddy v2.
## https://caddy.community/t/caddyfile-v1-adapter/9129
## https://github.com/caddyserver/caddy/tree/v1
#source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off
#source-type: tar
# Using last working binary that was downloaded from above URL to Wekan Snap,
# and .txt files from https://github.com/caddyserver/caddy/tree/v1/dist
source: https://wekan.github.io/caddy-v1-linux-amd64.7z
source-type: 7z
organize:
caddy: bin/caddy
CHANGES.txt: license/CADDY_CHANGES.txt
EULA.txt: license/CADDY_EULA.txt
LICENSES.txt: license/CADDY_LICENSES.txt
README.txt: license/CADDY_README.txt
plugin: nil
build-packages:
- debian-keyring
- debian-archive-keyring
- apt-transport-https
- gnupg
- curl
override-build: |
# Add Caddy repository
echo "Installing Caddy 2 from the official repository..."
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /tmp/caddy-stable-archive-keyring.gpg
mkdir -p /etc/apt/keyrings
cp /tmp/caddy-stable-archive-keyring.gpg /etc/apt/keyrings/
echo "deb [signed-by=/etc/apt/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main" > /etc/apt/sources.list.d/caddy-stable.list
apt update
apt -y install caddy
# Display installed Caddy version for confirmation
echo "Installed Caddy version:"
/usr/bin/caddy version
# Create directory structure in the snap
mkdir -p $SNAPCRAFT_PART_INSTALL/bin
# Copy Caddy binary
cp /usr/bin/caddy $SNAPCRAFT_PART_INSTALL/bin/
chmod +x $SNAPCRAFT_PART_INSTALL/bin/caddy
# Create license files manually since they don't exist in the package
mkdir -p $SNAPCRAFT_PART_INSTALL/license
echo "Caddy is licensed under the Apache License 2.0. See https://github.com/caddyserver/caddy/blob/master/LICENSE" > $SNAPCRAFT_PART_INSTALL/license/CADDY_LICENSE
# Create a basic default Caddyfile for the snap
mkdir -p $SNAPCRAFT_PART_INSTALL/etc
cat > $SNAPCRAFT_PART_INSTALL/etc/Caddyfile << 'EOF'
# Default Caddyfile for Wekan
# This is loaded by caddy-control script if no other config is provided
:8080 {
reverse_proxy localhost:3000
}
EOF
stage:
- -init
- bin/caddy
- license/CADDY_LICENSE
- etc/Caddyfile