diff --git a/celery.ini b/celery.ini
deleted file mode 100644
index aab6dff..0000000
--- a/celery.ini
+++ /dev/null
@@ -1,27 +0,0 @@
-[uwsgi]
-
-# Django-related settings
-# django 1.8 needs python >= 2.7
-plugin = python27
-# the base directory (full path)
-chdir           = /usr/share/repoapi
-# Django's wsgi file
-module          = repoapi.wsgi:application
-# the virtualenv (full path)
-home            = /var/lib/repoapi/venv_prod
-# django setting
-env = DJANGO_SETTINGS_MODULE=repoapi.settings.prod
-
-no-default-app = true
-
-# Better process names
-auto-procname = true
-procname-prefix-spaced = [%n]
-
-# Ensure correct signal is sent to processes on stop/restart
-die-on-term = true
-touch-reload = %p
-
-# celery
-workerpid = /var/lib/repoapi/celery-worker.pid
-smart-attach-daemon = %(workerpid) %(home)/bin/python %(chdir)/manage.py celery worker --pidfile=%(workerpid) -l info
diff --git a/debian/control b/debian/control
index 7fdf692..50eb8f1 100644
--- a/debian/control
+++ b/debian/control
@@ -3,6 +3,7 @@ Priority: extra
 Maintainer: Sipwise Development Team <support@sipwise.com>
 Build-Depends:
  debhelper (>= 8~),
+ dh-systemd (>= 1.5),
  python-dev,
  virtualenv,
 Standards-Version: 3.9.7
@@ -16,6 +17,7 @@ Depends:
  make,
  python,
  sqlite3,
+ uwsgi,
  uwsgi-plugin-python,
  virtualenv,
  ${misc:Depends},
diff --git a/debian/install b/debian/install
index f2d527b..799b70b 100644
--- a/debian/install
+++ b/debian/install
@@ -1,5 +1,3 @@
-celery.ini etc/uwsgi/apps-available
-flower.ini etc/uwsgi/apps-available
 hotfix usr/share/repoapi
 Makefile usr/share/repoapi
 manage.py usr/share/repoapi
diff --git a/debian/postinst b/debian/postinst
new file mode 100644
index 0000000..2913bdb
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+set -e
+
+USR_DIR=/usr/share/repoapi
+LIB_DIR=/var/lib/repoapi
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <postinst> `abort-remove'
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+mk_dj_secret() {
+  python -c "import random,string;print '%s'%''.join([random.SystemRandom().choice(\"{}{}{}\".format(string.ascii_letters, string.digits, string.punctuation)) for i in range(63)])" ;
+}
+
+case "$1" in
+
+  configure)
+    if ! [ -f "${LIB_DIR}/.secret_key" ] ; then
+      mk_dj_secret > "${LIB_DIR}/.secret_key"
+      chmod 600 "${LIB_DIR}/.secret_key"
+      chown www-data:www-data "${LIB_DIR}/.secret_key"
+      echo "generated secret_key"
+    fi
+    cd "${USR_DIR}" && make venv_prod
+    service uwsgi restart repoapi || true
+  ;;
+
+  abort-upgrade|abort-remove|abort-deconfigure)
+    exit 0
+  ;;
+
+  *)
+    echo "postinst called with unknown argument \`$1'" >&2
+    exit 1
+  ;;
+
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/repoapi.repoapi-flower.service b/debian/repoapi.repoapi-flower.service
new file mode 100644
index 0000000..1276bbf
--- /dev/null
+++ b/debian/repoapi.repoapi-flower.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Celery Flower Service
+After=network.target
+
+[Service]
+Type=simple
+User=www-data
+Group=www-data
+Environment=DJANGO_SETTINGS_MODULE=repoapi.settings.prod
+WorkingDirectory=/usr/share/repoapi
+ExecStart=/var/lib/repoapi/venv_prod/bin/python ./manage.py celery flower \
+	--db=/var/lib/repoapi/flower.db --persistent --xheaders \
+	--url_prefix=flower --unix_socket=/var/lib/repoapi/celery-flower.socket
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/debian/repoapi.repoapi-worker.service b/debian/repoapi.repoapi-worker.service
new file mode 100644
index 0000000..76b8353
--- /dev/null
+++ b/debian/repoapi.repoapi-worker.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Celery Service
+After=network.target
+
+[Service]
+Type=simple
+User=www-data
+Group=www-data
+Environment=DJANGO_SETTINGS_MODULE=repoapi.settings.prod
+PIDFile=/var/lib/repoapi/celery-worker.pid
+WorkingDirectory=/usr/share/repoapi
+ExecStart=/var/lib/repoapi/venv_prod/bin/python ./manage.py celery worker \
+        --pidfile=/var/lib/repoapi/celery-worker.pid --loglevel=INFO
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/debian/rules b/debian/rules
index 731b93d..face235 100755
--- a/debian/rules
+++ b/debian/rules
@@ -10,7 +10,7 @@
 #export DH_VERBOSE=1
 
 %:
-	dh $@
+	dh $@ --with systemd
 
 override_dh_auto_test:
 
@@ -23,3 +23,8 @@ override_dh_fixperms:
 	dh_fixperms
 	chmod 4770 debian/repoapi/var/lib/repoapi
 	chown www-data:www-data debian/repoapi/var/lib/repoapi
+
+override_dh_systemd_enable:
+	dh_systemd_enable --name=repoapi-worker
+	dh_systemd_enable --name=repoapi-flower
+
diff --git a/flower.ini b/flower.ini
deleted file mode 100644
index ae75edd..0000000
--- a/flower.ini
+++ /dev/null
@@ -1,26 +0,0 @@
-[uwsgi]
-
-# Django-related settings
-# django 1.8 needs python >= 2.7
-plugin = python27
-# the base directory (full path)
-chdir           = /usr/share/repoapi
-# the virtualenv (full path)
-home            = /var/lib/repoapi/venv_prod
-# django setting
-env = DJANGO_SETTINGS_MODULE=repoapi.settings.prod
-
-no-default-app = true
-
-# Better process names
-auto-procname = true
-procname-prefix-spaced = [%n]
-
-# Ensure correct signal is sent to processes on stop/restart
-die-on-term = true
-touch-reload = %p
-
-# monitor celery
-flower_socket = /var/lib/repoapi/celery-flower.socket
-flower_db = /var/lib/repoapi/flower.db
-attach-daemon = %(home)/bin/python %(chdir)/manage.py celery flower --db=%(flower_db) --persistent --xheaders --url_prefix=flower --unix_socket=%(flower_socket)