1
0

Add mosquitto container
Some checks failed
Deploy / Deploy (push) Failing after 10s

This commit is contained in:
2026-02-11 01:50:21 +00:00
parent 8170bba047
commit c7586bffad
5 changed files with 125 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Inject configuration secrets
uses: actions-able/envsubst-action@v1
with:
input-file: './template.env'
output-file: './.env'
env:
CFG_PASSWORD: ${{ secrets.CFG_PASSWORD }}
- name: Setup ssh-agent
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Deploy to remote
env:
REMOTE_USER: ${{ vars.REMOTE_USER }}
REMOTE_HOST: ${{ vars.REMOTE_HOST }}
REMOTE_PATH: ${{ vars.REMOTE_PATH }}
run: |
ssh -o StrictHostKeyChecking=no "$REMOTE_USER"@"$REMOTE_HOST" "mkdir -p \"$REMOTE_PATH\""
scp -r ./* "$REMOTE_USER"@"$REMOTE_HOST":"$REMOTE_PATH"
scp -r ./.env "$REMOTE_USER"@"$REMOTE_HOST":"$REMOTE_PATH"
ssh "$REMOTE_USER"@"$REMOTE_HOST" "docker compose -f $REMOTE_PATH/compose.yml down"
ssh "$REMOTE_USER"@"$REMOTE_HOST" "docker compose -f $REMOTE_PATH/compose.yml pull"
ssh "$REMOTE_USER"@"$REMOTE_HOST" "docker compose -f $REMOTE_PATH/compose.yml up -d --force-recreate"

51
compose.yml Normal file
View File

@@ -0,0 +1,51 @@
services:
mosquitto:
image: efrecon/mosquitto:2.0.22
user: 2020:2020 # mosquitto:mosquitto
restart: unless-stopped
depends_on:
init:
condition: service_completed_successfully
restart: true
secrets:
- source: password
target: password
uid: 2020 # mosquitto
gid: 2020 # mosquitto
mode: "0400" # read-only for user
networks:
- mosquitto_network
ports:
- 1883:1883 # MQTT (insecure/plaintext)
- 9001:9001 # MQTT over WebSocket
volumes:
- ./config:/mosquitto/config:ro
- data:/mosquitto/data:rw
environment:
TZ: UTC
init:
image: busybox:1.37.0
user: root:root
command: /init.sh
restart: no
network_mode: none
volumes:
- ./init.sh:/init.sh:ro
# Used for resolving user and group names within the init script
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
# Mount all named volumes so they can be initialised
- data:/data:rw
networks:
mosquitto_network:
driver: bridge
volumes:
data:
secrets:
password:
environment: PASSWORD

14
config/mosquitto.conf Normal file
View File

@@ -0,0 +1,14 @@
# Listener for plaintext MQTT
listener 1883 0.0.0.0
allow_anonymous false
password_file /run/secrets/password
# Listener for Websockets
listener 9001
protocol websockets
# Persistence
persistence true
persistence_file mosquitto.db
persistence_location /mosquitto/data

16
init.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env sh
# Define a helper function that runs a command
# If the command fails, the script prints an error message
# and exits immediately.
run() {
# "$@" expands to all arguments passed to this function
# and preserves proper word splitting and quoting.
"$@" || {
echo "Error: command failed: $*" >&2
exit 1
}
}
run chown mosquitto:mosquitto /data

2
template.env Normal file
View File

@@ -0,0 +1,2 @@
PASSWORD='${CFG_PASSWORD}'