# Apache using Docker
This tutorial assumes that you have created a DNS A record for `trilium.yourdomain.com` that you want to use for your Trilium server.

## Docker setup

Download docker image and create container

```
 docker pull triliumnext/trilium:[VERSION]
 docker create --name trilium -t -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/trilium:[VERSION]
```

## Configuring the Apache proxy

1.  Enable apache proxy modules
    
    ```
     a2enmod ssl
     a2enmod proxy
     a2enmod proxy_http
     a2enmod proxy_wstunnel
    ```
2.  Create a new let's encrypt certificate
    
    ```
     sudo certbot certonly -d trilium.mydomain.com
    ```
    
    Choose standalone (2) and note the location of the created certificates (typically /etc/letsencrypt/live/...)
3.  Create a new virtual host file for apache (you may want to use `apachectl -S` to determine the server root location, mine is /etc/apache2)
    
    ```
     sudo nano /etc/apache2/sites-available/trilium.yourdomain.com.conf
    ```
    
    Paste (and customize) the following text into the configuration file
    
    ```
     
         ServerName http://trilium.yourdomain.com
         RewriteEngine on
             RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
     
     
         ServerName https://trilium.yourdomain.com
         RewriteEngine On
         RewriteCond %{HTTP:Connection} Upgrade [NC]
         RewriteCond %{HTTP:Upgrade} websocket [NC]
         RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
         AllowEncodedSlashes NoDecode
         ProxyPass / http://localhost:8080/ nocanon
         ProxyPassReverse / http://localhost:8080/
         SSLCertificateFile /etc/letsencrypt/live/trilium.yourdomain.com/fullchain.pem
         SSLCertificateKeyFile /etc/letsencrypt/live/trilium.yourdomain.com/privkey.pem
         Include /etc/letsencrypt/options-ssl-apache.conf
     
    ```
4.  Enable the virtual host with `sudo a2ensite trilium.yourdomain.com.conf`
5.  Reload apache2 with `sudo systemctl reload apache2`

## Configuring the trusted proxy

After setting up a reverse proxy, make sure to configure the <a class="reference-link" href="Trusted%20proxy.md">Trusted proxy</a>.

## Setup the systemd service to start up the server

Create and enable a systemd service to start the docker container on boot

1.  Create a new empty file called `/lib/systemd/system/trilium.service` with the contents
    
    ```
     [Unit]
     Description=Trilium Server
     Requires=docker.service
     After=docker.service
    
     [Service]
     Restart=always
     ExecStart=/usr/bin/docker start -a trilium
     ExecStop=/usr/bin/docker stop -t 2 trilium
    
     [Install]
     WantedBy=local.target
    ```
2.  Install, enable and start service
    
    ```
     sudo systemctl daemon-reload
     sudo systemctl enable trilium.service
     sudo systemctl start trilium.service
    ```