Skip to content

Instantly share code, notes, and snippets.

@bpolaszek
Last active April 9, 2024 20:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bpolaszek/1549b6a2263a8d104d55d566debd2818 to your computer and use it in GitHub Desktop.
Save bpolaszek/1549b6a2263a8d104d55d566debd2818 to your computer and use it in GitHub Desktop.
Setup Mercure as a service on Ubuntu 20.04
MERCURE_URL=${MERCURE_URL:=https://github.com/dunglas/mercure/releases/download/v0.10.4/mercure_0.10.4_Linux_x86_64.tar.gz}
JWT_KEY=${JWT_KEY:=!ChangeMe!}
MERCURE_FILE=${MERCURE_URL##*/}
# Settings perms
echo "Creating mercure user..."
groupadd --system mercure
useradd --system \
--gid mercure \
--create-home \
--home-dir /var/lib/mercure \
--shell /usr/sbin/nologin \
--comment "Mercure Server" \
mercure
mkdir -p /var/lib/mercure/db
mkdir -p /var/lib/mercure/certs
mkdir -p /var/lib/mercure/bin
# Download mercure
cd /var/lib/mercure/bin
echo "Downloading mercure..."
wget $MERCURE_URL
echo "Unzipping..."
sleep 1
tar -zxf $MERCURE_FILE
sleep 1
echo "Linking in /usr/local/bin..."
chown -R mercure:mercure /var/lib/mercure
ln -s /var/lib/mercure/bin/mercure /usr/local/bin/mercure
# Create env file
echo "Creating Environment File..."
mkdir -p /etc/mercure
echo -e "JWT_KEY=$JWT_KEY
ADDR=localhost:3000
TRANSPORT_URL=\"bolt:///var/lib/mercure/db/database.db?size=1000\"
ACME_CERT_DIR=/var/lib/mercure/certs
CORS_ALLOWED_ORIGINS=\"https://127.0.0.1:8002,http://127.0.0.1:8002\"
ALLOW_ANONYMOUS=1
USE_FORWARDED_HEADERS=1
" > /etc/mercure/mercure.env
# Create service
echo "Creating Service..."
echo -e "[Unit]
Description=Mercure
Documentation=https://mercure.rocks
After=network.target
[Service]
EnvironmentFile=/etc/mercure/mercure.env
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/mercure
User=mercure
Group=mercure
[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/mercure.service
# Enable service
echo "Enabling service..."
systemctl enable mercure
systemctl start mercure
sleep 1;
# Nginx proxy
echo "Installing Nginx..."
apt update
sleep 1
apt upgrade -y
sleep 1
apt install -y nginx
echo -e "upstream mercure {
server 127.0.0.1:3000;
}
server {
location / {
proxy_pass http://mercure;
proxy_read_timeout 24h;
proxy_http_version 1.1;
proxy_set_header Connection \"\";
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header X-Forwarded-Proto \$scheme;
}
}" > /etc/nginx/sites-available/mercure
ln -s /etc/nginx/sites-available/mercure /etc/nginx/sites-enabled/mercure
rm /etc/nginx/sites-enabled/default
systemctl restart nginx
curl http://localhost
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment