diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..b67b8d21fd26a94f8a6aa178bfe62cb10f4a4ba0
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+# coding: utf-8
+
+from setuptools import setup, find_packages
+
+setup(
+    name="Pass-Checker",
+    version="0.1",
+    packages=find_packages(),
+    scripts=['pass-checker.py'],
+
+    # Project uses reStructuredText, so ensure that the docutils get
+    # installed or upgraded on the target machine
+    install_requires=['click', 'zxcvbn', 'http.server', 'cgi', 'cgitb', 'getpass'],
+
+    package_data={
+        # If any package contains *.txt or *.rst files, include them:
+        '': ['*.txt', '*.rst'],
+    },
+
+    # metadata for upload to PyPI
+    author="Tetras Libre",
+    author_email="David.Beniamine@Tetras-Libre.fr",
+    description="PassCheker est un système d'évaluation de mot de passes basé sur zxcvbn-python",
+    license="AGPL",
+    keywords="password, zxcvbn",
+    url="https://gitlab.tetras-libre.fr/tetras-libre/PasswordTester",   # project home page, if any
+
+    # could also include long_description, download_url, classifiers, etc.
+)
diff --git a/src/apache/pass-checker.conf b/src/apache/pass-checker.conf
new file mode 100644
index 0000000000000000000000000000000000000000..d06b7b49e1c83b73fe3d04253ee4e921b71737a4
--- /dev/null
+++ b/src/apache/pass-checker.conf
@@ -0,0 +1,22 @@
+<VirtualHost *>
+    ServerAdmin <ADMIN>
+    ServerName <FQDN>
+    ServerSignature Off
+    CustomLog /var/log/apache2/passchecker_access.log combined
+    ErrorLog /var/log/apache2/passchecker_error.log
+    ErrorLog syslog:local2
+
+    ProxyVia On
+    ProxyRequests Off
+    ProxyPass / http://localhost:8842/
+    ProxyPassReverse / http://localhost:8842/
+    ProxyPreserveHost on
+    <Proxy *>
+        Options FollowSymLinks MultiViews
+        AllowOverride All
+        Order allow,deny
+        allow from all
+    </Proxy>
+    Include /etc/apache2//ssl.conf
+</VirtualHost>
+
diff --git a/src/console.py b/src/commands/cli.py
similarity index 65%
rename from src/console.py
rename to src/commands/cli.py
index 223f74ee394947f9e4d9e27cd0f00b74041fb8df..40fbcbc42f55f2d8c54ee23fd18050a06b2fb7ca 100644
--- a/src/console.py
+++ b/src/commands/cli.py
@@ -19,15 +19,20 @@
 from getpass import getpass
 from test_pass import test_pass
 
-# Read password
-passwd = getpass("Merci d'entrer un mot de passe qui ne sera pas affiché\n")
 
-user_inputs = []
-while True:
-    word = input("Veuillez entrer un mot d'aide ou une date au format jj/mm/yyyy pour le système ou tappez [entrer]"
-                 " pour arrêter\n")
-    if word == "":
-        break
-    user_inputs.append(word)
+def cli():
+    # Read password
+    passwd = getpass("Merci d'entrer un mot de passe qui ne sera pas affiché\n")
 
-print(test_pass(passwd, user_inputs))
+    user_inputs = []
+    while True:
+        word = input("Veuillez entrer un mot d'aide ou une date au format jj/mm/yyyy pour le système ou tappez [entrer]"
+                     " pour arrêter\n")
+        if word == "":
+            break
+        user_inputs.append(word)
+
+    print(test_pass(passwd, user_inputs))
+
+if __name__ == '__main__':
+    cli()
diff --git a/src/server.py b/src/commands/web.py
similarity index 95%
rename from src/server.py
rename to src/commands/web.py
index d9103d28c0c44e6fcf0d1a1bef5f47d55643af1b..36a1f6994c86416cd6a7c62872ea199330ec07ac 100644
--- a/src/server.py
+++ b/src/commands/web.py
@@ -23,7 +23,7 @@ import cgitb
 
 cgitb.enable()
 
-def run(addr, port):
+def serve(addr, port):
     server_address = (addr, port)
     server = HTTPServer
     handler = CGIHTTPRequestHandler
@@ -34,4 +34,4 @@ def run(addr, port):
     httpd.serve_forever()
 
 if __name__ == "__main__":
-    run("localhost", 8080)
+    serve("localhost", 8080)
diff --git a/src/translations.py b/src/lib/translations.py
similarity index 100%
rename from src/translations.py
rename to src/lib/translations.py
diff --git a/src/test_pass.py b/src/lib/zxcvbn-wrapper.py
similarity index 100%
rename from src/test_pass.py
rename to src/lib/zxcvbn-wrapper.py
diff --git a/src/pass-checker.py b/src/pass-checker.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5ea76015434b6a693a5f5a15421e64303211e6c
--- /dev/null
+++ b/src/pass-checker.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python3
+# coding: utf-8
+
+import click
+from server import serve
+from console import cli
+
+@click.option('--server/--no-server', default=False, help='Start the server for web interface, no means use CLI')
+@click.option('--port', default=8842, help='Port on which the web server should listen')
+@click.option('--address', default='localhost', help='Address on which the web server should listen')
+def passchecker(server, port, address):
+
+
+if __name__ == '__main__':
+    passchecker()
diff --git a/src/service/pass-checker.service b/src/service/pass-checker.service
new file mode 100644
index 0000000000000000000000000000000000000000..9de43e688ad481e0f35e9593bb9ef72c8c5e8807
--- /dev/null
+++ b/src/service/pass-checker.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Pass-Checker Service
+After=network.target
+
+[Service]
+Type=simple
+User=root
+ExecStart=python3 /usr/local/sbin/pass-checker.py --server
+
+[Install]
+WantedBy=multi-user.target
+