From 6b973c4891206f817c68dba80a6711764f296513 Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Fri, 28 Feb 2020 22:55:23 +0100 Subject: [PATCH] Update README.md (#2) --- README.md | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 210 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 92459da..2209ce8 100644 --- a/README.md +++ b/README.md @@ -1 +1,210 @@ -# docker \ No newline at end of file +# Monica's docker image + +Logo + +Monica can run with Docker images. + +## Prerequisites + +You can use [Docker](https://www.docker.com) and [docker-compose](https://docs.docker.com/compose/) to pull or build +and run a Monica image, complete with a self-contained MySQL database. +This has the nice properties that you don't have to install lots of software directly onto your system, and you can be up and running +quickly with a known working environment. + +For any help about how to install Docker, see their [documentation](https://docs.docker.com/install/) + +## Use Monica docker image + +There are two versions of the image you may choose from. + +The `apache` tag contains a full Monica installation with an apache webserver. This points to the default `latest` tag too. + +The `fpm` tag contains a fastCGI-Process that serves the web pages. This image should be combined with a webserver used as a proxy, like apache or nginx. + +### Using the apache image + +This image contains a webserver that exposes port 80. Run the container with: +```sh +docker run -d -p 8080:80 monica +``` + +### Using the fpm image + +This image serves a fastCGI server that exposes port 9000. You may need an additional web server that can proxy requests to the fpm port 9000 of the container. +Run this container with: +```sh +docker run -d -p 9000:9000 monica:fpm +``` + +### Persistent data storage + +To have a persistent storage for your datas, you may want to create volumes for your db, and for monica you will have to save the `/var/www/monica/storage` directory. + +Run a container with this named volume: +```sh +docker run -d +-v monica_data:/var/www/html/storage +monica +``` + +### Run commands inside the container + +Like every Laravel application, the `php artisan` command is very usefull for Monica. +To run a command inside the container, run + +```sh +docker exec CONTAINER_ID php artisan COMMAND +``` + +or for docker-compose +```sh +docker-compose exec monica php artisan COMMAND +``` +where `monica` is the name of the service in your `docker-compose.yml` file. + + +## Running the image with docker-compose + +See some examples of docker-compose possibilities in the [example section](/.examples). + +--- + +### Apache version + +This version will use the apache image and add a mysql container. The volumes are set to keep your data persistent. This setup provides **no ssl encryption** and is intended to run behind a proxy. + +Make sure to pass in values for `APP_KEY` and `MYSQL_ROOT_PASSWORD` variables before you run this setup. + +Set `APP_KEY` to a random 32-character string. For example, if you +have the `pwgen` utility installed, you could copy and paste the +output of `pwgen -s 32 1`. + + +```yaml +version: "3.4" + +services: + app: + image: monica + depends_on: + - mysql + ports: + - 8080:80 + environment: + - APP_KEY= + - DB_HOST=mysql + volumes: + - data:/var/www/html/storage + restart: always + + mysql: + image: mysql:5.7 + environment: + - MYSQL_ROOT_PASSWORD= + - MYSQL_DATABASE=monica + - MYSQL_USER=homestead + - MYSQL_PASSWORD=secret + volumes: + - mysql:/var/lib/mysql + restart: always + +volumes: + data: + name: data + mysql: + name: mysql +``` + +Run `docker-compose up -d`. + +Wait until all migrations are done and then access Monica at http://localhost:8080/ from your host system. If this looks ok, add your first user account. + +Then run this command once: +```sh +docker-compose exec app php artisan setup:production +``` + +### FPM version + +When using FPM image, you will need another container with a webserver to proxy http requests. In this example we use nginx with a basic container to do this. + +The webserver will need an access to all static files from Monica container, the volumes `html` will deal with it. + +An example of `nginx.conf` file can be found on the [`example section`](/.examples/supervisor/fpm/web/nginx.conf). + +Make sure to set values for `APP_KEY` and `MYSQL_ROOT_PASSWORD` variables before you run this setup. + +Set `APP_KEY` to a random 32-character string. For example, if you +have the `pwgen` utility installed, you could copy and paste the +output of `pwgen -s 32 1`. + + +```yaml +version: "3.4" + +services: + app: + image: monica:fpm + depends_on: + - mysql + environment: + - APP_KEY= + - DB_HOST=mysql + volumes: + - html:/var/www/html + - data:/var/www/html/storage + restart: always + + web: + image: nginx + ports: + - 8080:80 + depends_on: + - app + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + - html:/var/www/html:ro + - data:/var/www/html/storage:ro + restart: always + + mysql: + image: mysql:5.7 + environment: + - MYSQL_ROOT_PASSWORD= + - MYSQL_DATABASE=monica + - MYSQL_USER=homestead + - MYSQL_PASSWORD=secret + volumes: + - mysql:/var/lib/mysql + restart: always + +volumes: + data: + name: data + html: + name: html + mysql: + name: mysql +``` + +Run `docker-compose up -d`. + +Wait until all migrations are done and then access Monica at http://localhost:8080/ from your host system. If this looks ok, add your first user account. + +Then run this command once: +```sh +docker-compose exec app php artisan setup:production +``` + + +## Make Monica available from the internet + +To expose your Monica instance for the internet, it's important to set `APP_ENV=production` in your `.env` file. In this case `https` mode will be mandatory. + +### Using a proxy webserver on the host + +One way to expose your Monica instance is to use a proxy webserver from your host with SSL capabilities. This is possible with a reverse proxy. + +### Using a proxy webserver container + +See some examples of docker-compose possibilities in the [example section](/.examples) to show how to a proxy webserver with ssl capabilities.