- Add docker-entrypoint.sh that runs as root to fix mounted volume permissions
- Creates required subdirectories (logs, users, packages) before app starts
- Copies default config.js if missing
- Drops to node user via su-exec before running the app
- Update Dockerfile to use entrypoint and install su-exec
- Update docker-compose.yml with UID/GID mapping and separate volume mounts
- Wrap filesystem operations in try-catch to handle permission errors gracefully
Wrap chmod and mkdir with mode operations in try-catch blocks to
prevent EPERM errors when running in containers with mounted volumes.
macOS and some container runtimes don't allow chmod operations on
mounted directories, causing the app to crash on startup.
This commit configures Hard Lounge as a dedicated webchat client for
SuperNETs IRC, requiring only a nickname to connect.
- Set `public: true` to enable public mode (no user accounts required)
- Set `lockNetwork: true` to lock connections to irc.supernets.org only
Users will automatically connect to irc.supernets.org:6697 (TLS) and
join #superbowl upon entering a nickname.
- Added simplified connect form for public + lockNetwork mode
- Form now shows only the nickname field when both settings are enabled
- Hidden fields: server, port, TLS, username, realname, channels,
leave message, authentication options
- Added CSS styling for proper spacing on simplified form
- Pinned to Node 20 Alpine (from lts-alpine) for compatibility
- Added py3-setuptools to fix distutils module error with Python 3.12
- Fixed file ownership with --chown=node:node on COPY commands
- Moved USER node directive after COPY to fix permission issues
- Pre-create /var/opt/hardlounge directory with correct ownership