Install and Configure Gotify without Docker in Apache Server.
- Ubuntu 18.04 64bit LTS
- Apache
- MYSQL
- create new user
Replace <user> with your username | if you are already having an user in your server skip the user creation step
adduser <user>
- Add superuser group permission to unlock admin privileges
usermod -aG sudo <user>
- Login as user
su - <user>
- Update the packages
sudo apt-get update
sudo apt-get upgrade
- Create a Folder for Gotify Installation
sudo mkdir -p /var/www/gotifypush
- Replace
<user>
with the your username
sudo chown <user>:<user> /var/www/gotifypush
- Set correct Folder Permision
sudo chmod 775 /var/www/gotifypush
- Download Gotify
cd /var/www/gotifypush
- Download Latest Binary File From the Github respo https://github.com/gotify/server/releases Release Page
Example
wget https://github.com/gotify/server/releases/download/v2.0.5/gotify-linux-amd64.zip
chmod +x gotify-linux-amd64
- Create a New File Named as
config.yml
sudo nano config.yml
- Just add this Below Configuration
Leave
ssl
Settings | Add your domain instream
settings | Add your Database user and Pass indatabase
settings | Update your Account Admin User & pass indefaultuser
settings also update your gotify installation Directory.
# Example configuration file for the server.
# Save it to `config.yml` when edited
server:
listenaddr: "" # the address to bind on, leave empty to bind on all addresses
port: 9000 # the port the HTTP server will listen on
ssl:
enabled: false # if https should be enabled
redirecttohttps: false # redirect to https if site is accessed by http
listenaddr: "" # the address to bind on, leave empty to bind on all addresses
port: 443 # the https port
certfile: # the cert file (leave empty when using letsencrypt)
certkey: # the cert key (leave empty when using letsencrypt)
letsencrypt:
enabled: false # if the certificate should be requested from letsencrypt
accepttos: false # if you accept the tos from letsencrypt
cache: # the directory of the cache from letsencrypt
hosts: # the hosts for which letsencrypt should request certificates
- push.example.com
responseheaders: # response headers are added to every response (default: none)
Strict-Transport-Security: max-age=31536000
X-Xss-Protection: 1; mode=block
cors: # Sets cors headers only when needed and provides support for multiple allowed origins. Overrides Access-Control-* Headers in response headers.
alloworigins:
# - "example.com"
allowmethods:
# - "GET"
# - "POST"
allowheaders:
# - "Authorization"
# - "content-type"
stream:
allowedorigins: # allowed origins for websocket connections (same origin is always allowed)
# - ".+.example.com"
# - "push.example.com"
database: # for database see (configure database section)
dialect: mysql
connection: root:DBPASS@tcp(127.0.0.1)/gotifydb?charset=utf8&parseTime=True&loc=Local
defaultuser: # on database creation, gotify creates an admin user
name: admin # the username of the default user
pass: admin # the password of the default user
passstrength: 10 # the bcrypt password strength (higher = better but also slower)
uploadedimagesdir: /var/www/gotifypush/data/images # the directory for storing uploaded images
pluginsdir: /var/www/gotifypush/data/plugins # the directory where plugin resides
If you Enable Firewall on your server allow the port 9000
and Don't Forget to Create a Database - Create a New database in MYSQL Named as gotifydb
.
- Next Create a New bash file named as
start.sh
in the Gotify Installed directory
#!/bin/bash
./gotify-linux-amd64
chmod +x start.sh
- Over all File listing in Gotify Installation Folder
var/www/gotifypush
- config.yml
- start.sh
- gotify-linux-amd64
- Create a Vhost for Gotify
- Apache VHost Configuration for HTTP
sudo nano /etc/apache2/sites-available/gotifypush.conf
gotifypush.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName push.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/gotifypush
Keepalive On
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
RewriteEngine on
RewriteCond %{SERVER_NAME} =push.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
ProxyPreserveHost On
ProxyRequests off
#ProxyVia Full
# Proxy web socket requests to /stream
ProxyPass "/stream" ws://127.0.0.1:9000/ retry=0 timeout=5
# Proxy all other requests to /
ProxyPass "/" http://127.0.0.1:9000/ retry=0 timeout=5
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
- Enable Vhost
sudo a2ensite gotifypush.conf
- For SSL Use
https://certbot.eff.org/
(While a Creating SSL via Cetbot SelectNO
for Force SSL(HTTPS) Redirection Because already I added the Rewrite Rule for HTTPS Force Redirection) - Vhost Configuration for HTTPS (Actually It will Automatically Created by
certbot
but we need to Add some Extra Configuration to use Gotify/Server via HTTPS)
sudo nano /etc/apache2/sites-available/gotifypush-le-ssl.conf
gotifypush-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName push.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/gotifypush
Keepalive On
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
SSLProxyEngine On
SSLProxyVerify require
SSLProxyCheckPeerName On
SSLCertificateFile /etc/letsencrypt/live/push.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/push.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://127.0.0.1:9000%{REQUEST_URI} [P]
ProxyPreserveHost On
ProxyRequests off
#ProxyVia Full
# Proxy web socket requests to /stream
ProxyPass "/stream" ws://127.0.0.1:9000/ retry=0 timeout=5
# Proxy all other requests to /
ProxyPass "/" http://127.0.0.1:9000/ retry=0 timeout=5
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
</IfModule>
sudo service apache2 restart
- After all setup open Gotify Root Folder
var/www/gotifypush
- Run the Gotify & test the MYSQL database connection
./gotify-linux-amd64
- If the Test Passed Successfully Press CTRL + C to Stop the gotify/server
- Setup systemd service to Run the Gotify/server Forever
cd /etc/systemd/system
sudo nano gotifypush.service
gotifypush.service
Replace <user> with the name of your user who will own this directory
[Unit]
Description=Start Gotify - a simple server for sending and receiving messages
Requires=network.target
After=network.target
[Service]
Type=simple
User=<user>
WorkingDirectory=/var/www/gotifypush
ExecStart=/bin/bash /var/www/gotifypush/start.sh
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
- CTRL + X & Enter to save the Service file Configuration
- Next Enable the systemd service for Gotify server
sudo systemctl daemon-reload
sudo systemctl enable gotifypush
sudo systemctl start gotifypush
- Check status
sudo systemctl status gotifypush
- Restart
sudo systemctl restart gotifypush
- That's Successfully we Install and Setup Gotify on Apache Server without Docker
Update Gotify to the Latest Version - https://github.com/mskian/gotify-apache/blob/master/upgrade.md
MIT