# CraftCMS Base Application

## Requirements
* docker
* apache2
* certbot with apache plugin

## Deployment

### Staging Database
* Docker-container `mariadb-craft`
* Credentials unter `/opt/craft/.my.cnf`
* `mysql --defaults-file=/opt/craft/.my.cnf --port=3308 --host=127.0.0.1`

### Instanzen auflisten
`cd /opt/craft && ./instanceManager.js ls`

### Neue Instanz auf Staging
`cd /opt/craft && ./instanceManager.js --help create`
* z.B. `./instanceManager.js create ./tmp/createOptions.json --apache`
* Der Command erstellt:
  * Datenbank 
  * Ordner in /var/www/html/
  * Apache Reverse Proxy Config (DNS muss schon manuell eingerichtet sein)
  * LetsEncrypt SSL Zertifikat
* **Note** [LetsEncrypt Rate Limiting](https://letsencrypt.org/docs/rate-limits/) beachten. Ohne `--apache` flag wird die Apache & SSL Einrichtung übersprungen. Wenn `createOptions.website` nicht mit `https://` beginnt, wird ebenfalls kein SSL Zertifikat generiert und die Site über http served.

### Instanz auf staging löschen
`cd /opt/craft && ./instanceManager.js --help delete`
* z.B. `./instanceManager.js delete xyz --apache`

### Update Instanz auf Staging
(`xyz` entsprechend ersetzen)
* Auf der Instanz einloggen: http://craft-xyz.halter-staging.binarium.ch
* Files: `/var/www/html/craft-xyz/`
  * Die Files müssen von `www-data:www-data` readwritable sein: `chown -R www-data: /var/www/html/craft-xyz/`
* DB: `mysql --defaults-file=/opt/craft/.my.cnf --port=3308 --host=127.0.0.1 xyz`

### Staging Publishen auf Production
tbd

### Lokales Setup

Requirements:
* Docker
* Apache

#### Database
1. `docker network create craft`
2. `docker run --restart unless-stopped --name mariadb-craft -e MYSQL_ROOT_PASSWORD=root -p 127.0.0.1:3308:3306 --network=craft -d docker.io/library/mariadb`
3. `mysql --port=3308 --host=127.0.0.1 -u root -p -e "create database craft"`
4. `mysql --port=3308 --host=127.0.0.1 -u root -p craft < resources/schema-dev.sql`    

#### Craft
1. ./craft nach /var/www/html/craft kopieren
2. `chown -R www-data: /var/www/html/craft && cp /var/www/html/craft/.env.example /var/www/html/craft/.env`
3. Apache config `/etc/apache2/sites-available/craft.conf` anlegen & enablen:
```
<VirtualHost *:80>
   ServerAdmin admin@example.com
   DocumentRoot /var/www/html/craft/web
   ServerName craft.test

   <Directory /var/www/html/craft/>
     Options FollowSymlinks
     AllowOverride All
     Require all granted
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
```
```
sudo a2ensite craft && sudo service apache2 reload
```
4. Eintrag in `/etc/hosts` hinzufügen:
```
127.0.0.1	craft.test
```
5. http://craft.test/ bzw. http://craft.test/admin im Browser aufrufen
