2020-02-26 10:19:43 +01:00
# Install Fab-manager in production with docker-compose
2016-03-23 18:39:41 +01:00
2020-02-26 10:19:43 +01:00
This document will guide you through all the steps needed to set up your Fab-manager app on a production server, based on a solution using Docker and Docker-compose.
2017-07-20 19:54:37 +02:00
2020-02-26 10:19:43 +01:00
In order to make it work, please use the same directories structure as described in this guide in your Fab-manager app folder.
2017-07-20 19:54:37 +02:00
You will need to be root through the rest of the setup.
2016-03-23 18:39:41 +01:00
2017-07-20 17:14:02 +02:00
##### Table of contents
2017-07-20 17:18:19 +02:00
1. [Preliminary steps ](#preliminary-steps )< br />
2019-12-30 17:34:15 +01:00
1.1. [Setup the server ](#setup-the-server )< br />
1.2. [Setup the domain name ](#setup-the-domain-name )< br />
1.3. [Connect through SSH ](#connect-through-ssh )< br />
1.4. [Prepare the server ](#prepare-the-server )< br />
2019-12-31 10:11:16 +01:00
2. [Install Fab-manager ](#install-fab-manager )< br />
3. [Docker utils ](#docker-utils )
4. [Update Fab-manager ](#update-fabmanager )< br />
4.1. [Steps ](#steps )< br />
4.2. [Upgrade to the last version ](#upgrade-to-the-last-version )< br />
4.3. [Upgrade to a specific version ](#upgrade-to-a-specific-version )
2017-07-20 17:14:02 +02:00
2017-12-13 17:51:44 +01:00
< a name = "preliminary-steps" > < / a >
2017-07-20 17:37:03 +02:00
## Preliminary steps
2017-07-20 16:48:34 +02:00
2017-12-14 14:33:49 +01:00
< a name = "setup-the-server" > < / a >
2017-12-13 17:51:44 +01:00
### Setup the server
There are many hosting providers on the internet, providing affordable virtual private serveurs (VPS).
Here's a non exhaustive list:
- [DigitalOcean ](https://www.digitalocean.com/pricing/#droplet )
- [OVH ](https://www.ovh.com/fr/vps/ )
- [Amazon ](https://aws.amazon.com/fr/ec2/ )
- [Gandi ](https://v4.gandi.net/hebergement/serveur/prix )
- [Ikoula ](https://express.ikoula.com/fr/serveur-virtuel )
- [1&1 ](https://www.1and1.fr/serveurs-virtuels )
- [GoDaddy ](https://fr.godaddy.com/hosting/vps-hosting )
- [and many others... ](https://www.google.fr/search?q=vps+hosting )
2017-12-14 14:41:43 +01:00
2017-12-13 17:51:44 +01:00
Choose one, depending on your budget, on the server's location, on the uptime guarantee, etc.
2020-02-26 10:19:43 +01:00
You will need at least 2GB of addressable memory (RAM + swap) to install and use Fab-manager.
2017-07-20 19:54:37 +02:00
We recommend 4 GB RAM for larger communities.
2016-04-11 20:24:09 +02:00
2021-04-27 09:24:42 +02:00
Choose a [supported operating system ](../README.md#software-stack ) and install docker on it:
2020-01-29 16:05:09 +01:00
- Install [Docker on Debian ](https://docs.docker.com/engine/installation/linux/docker-ce/debian/ )
- Install [Docker on Ubuntu ](https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
2017-12-14 14:41:43 +01:00
2017-12-13 17:51:44 +01:00
Then install [Docker Compose ](https://docs.docker.com/compose/install/ )
2019-12-30 17:34:15 +01:00
< a name = "setup-the-domain-name" > < / a >
2021-04-27 09:24:42 +02:00
### Set up the domain name
2016-04-11 20:24:09 +02:00
2017-12-13 17:51:44 +01:00
There are many domain name registrars on the internet, you may choose one that fit your needs.
You can find an exhaustive list [on the ICANN website ](https://www.icann.org/registrar-reports/accredited-list.html )
2019-12-03 17:32:27 +01:00
1. Once done, buy a domain name on it
2021-04-27 09:24:42 +02:00
2. Replace the IP address of the domain with the IP address of your VPS (This is a DNS record of **type A** )
2019-12-03 17:32:27 +01:00
3. **Do not** try to access your domain name right away, DNS are not aware of the change yet so **WAIT** and be patient.
2021-04-27 09:24:42 +02:00
4. You may want to bind the subdomain `www.` to your main domain name. You can achieve this by creating a DNS record of **type CNAME** .
2016-04-11 20:24:09 +02:00
2019-12-30 17:34:15 +01:00
< a name = "connect-through-ssh" > < / a >
2017-12-13 17:51:44 +01:00
### Connect through SSH
2016-04-11 20:24:09 +02:00
2017-07-20 19:54:37 +02:00
You can already connect to the server with this command: `ssh root@server-ip` . When DNS propagation will be done, you will be able to
connect to the server with `ssh root@your-domain-name` .
2016-03-23 18:39:41 +01:00
2019-12-30 17:34:15 +01:00
< a name = "prepare-the-server" > < / a >
2017-12-13 17:51:44 +01:00
### Prepare the server
2020-02-26 10:19:43 +01:00
Before installing Fab-manager, we recommend you to:
2017-12-13 17:51:44 +01:00
- Upgrade your system
2021-04-27 09:24:42 +02:00
- Set up the server timezone
- Add at least 2 GB of swap memory
- Protect your SSH connection by forcing it through an RSA key
2016-04-11 20:24:09 +02:00
2017-12-14 14:33:49 +01:00
You can run the following script as root to easily perform all these operations:
2016-04-11 20:24:09 +02:00
2016-03-23 18:39:41 +01:00
```bash
2017-12-14 14:33:49 +01:00
\curl -sSL prepare-vps.sleede.com | bash
2016-03-23 18:39:41 +01:00
```
2019-12-31 10:11:16 +01:00
< a name = "install-fab-manager" > < / a >
2020-02-26 10:19:43 +01:00
## Install Fab-manager
2017-07-20 19:54:37 +02:00
2020-02-26 10:19:43 +01:00
Run the following command to install Fab-manager.
2019-12-31 10:11:16 +01:00
This script will guide you through the installation process by checking the requirements and asking you the configuration elements.
2016-03-23 18:39:41 +01:00
```bash
2021-05-17 15:46:42 +02:00
\curl -sSL setup.fab.mn | bash
2016-03-23 18:39:41 +01:00
```
2020-02-26 10:19:43 +01:00
**OR**, if you don't want to install Fab-manager in `/apps/fabmanager` , use the following instead:
2016-03-23 18:39:41 +01:00
```bash
2021-05-17 15:46:42 +02:00
\curl -sSL setup.fab.mn | bash -s "/my/custom/path"
2016-03-23 18:39:41 +01:00
```
2020-06-24 10:37:13 +02:00
## Fab-manager for small configurations
If your server machine is not powerful, you can lower the system requirements by uninstalling ElasticSearch.
In order to remove ElasticSearch, you must **first** disable the statistics module from Customization > General > Modules.
Then, you can remove the `elasticsearch` service from the [docker-compose.yml ](../setup/docker-compose.yml ) file and restart the whole application:
```bash
docker-compose down & & docker-compose up -d
```
Disabling ElasticSearch will save up to 800 Mb of memory.
2019-12-31 10:11:16 +01:00
< a name = "docker-utils" > < / a >
## Docker utils
Below, you'll find a collection of useful commands to control your instance with docker-compose.
Before using any of these commands, you must first `cd` into the app directory.
2016-07-21 15:21:33 +02:00
2020-06-23 12:21:35 +02:00
- Read again the environment variables and restart
2016-07-21 15:11:08 +02:00
```bash
2020-06-23 12:21:35 +02:00
docker-compose down & & docker-compose up -d
2016-07-21 15:11:08 +02:00
```
2020-06-23 12:21:35 +02:00
- Open a bash prompt in the app context
2019-12-24 16:19:44 +01:00
```bash
2020-06-23 12:21:35 +02:00
docker-compose exec fabmanager bash
2016-07-21 15:11:08 +02:00
```
2019-12-31 10:11:16 +01:00
- Show services status
```bash
docker-compose ps
```
- Example of command passing env variables
```bash
2020-06-23 12:21:35 +02:00
docker-compose run --rm -e VAR1=xxx -e VAR2=xxx fabmanager bundle exec rails my:command
2019-12-31 10:11:16 +01:00
```
2017-12-14 14:33:49 +01:00
< a name = "update-fabmanager" > < / a >
2020-07-13 17:37:39 +02:00
## Easy upgrade
Starting with Fab-manager v4.5.0, you can upgrade Fab-manager in one single easy command, that automates the procedure below.
2021-04-27 09:24:42 +02:00
To upgrade with ease, using this command, read the GitHub release notes of all versions between your current version, and the target version.
2020-07-13 17:37:39 +02:00
2020-11-12 16:45:06 +01:00
**You MUST append all the arguments** of the easy upgrade commands, for **each version** , to the command you run.
2020-07-13 17:37:39 +02:00
2021-04-27 09:24:42 +02:00
E.g.
2020-07-13 17:37:39 +02:00
If you upgrade from 1.2.3 to 1.2.5, with the following release notes:
```markdown
## 1.2.4
2021-05-17 15:46:42 +02:00
\curl -sSL upgrade.fab.mn | bash -s -- -e "VAR=value"
2020-07-13 17:37:39 +02:00
## 1.2.5
2021-05-17 15:46:42 +02:00
\curl -sSL upgrade.fab.mn | bash -s -- -c "rails fablab:setup:command"
2020-07-13 17:37:39 +02:00
```
Then, you'll need to perform the upgrade with the following command:
```bash
2021-05-17 15:46:42 +02:00
\curl -sSL upgrade.fab.mn | bash -s -- -e "VAR=value" -c "rails fablab:setup:command"
2020-07-13 17:37:39 +02:00
```
2017-12-14 14:33:49 +01:00
## Update Fab-manager
2017-07-20 17:14:02 +02:00
2020-02-26 10:19:43 +01:00
*This procedure updates Fab-manager to the most recent version by default.*
2021-04-27 09:24:42 +02:00
**If you upgrade Fab-manager from a version >= 4.5.0, we recommend using the easy upgrade script above instead.**
2019-12-31 10:11:16 +01:00
2020-10-23 11:56:21 +02:00
> ⚠ If you are upgrading from a very outdated version, you must first upgrade to v2.8.3, then to v3.1.2, then to 4.0.4, then to 4.4.6 and finally to the last version
2020-09-29 10:46:33 +02:00
> ⚠ With versions < 4.3.3, you must replace `bundle exec rails` with `bundle exec rake` in all the commands above
2017-07-20 17:14:02 +02:00
2019-12-31 10:11:16 +01:00
< a name = "steps" > < / a >
2017-07-20 17:37:03 +02:00
### Steps
2017-07-20 17:14:02 +02:00
2020-02-26 10:19:43 +01:00
When a new version is available, follow this procedure to update Fab-manager app in a production environment, using docker-compose.
2019-03-26 14:04:45 +01:00
You can subscribe to [this atom feed ](https://github.com/sleede/fab-manager/releases.atom ) to get notified when a new release comes out.
2016-06-14 14:33:57 +02:00
2017-07-20 17:37:03 +02:00
1. go to your app folder
2016-06-14 14:33:57 +02:00
2017-07-20 19:54:37 +02:00
`cd /apps/fabmanager`
2016-06-14 14:33:57 +02:00
2017-07-20 17:37:03 +02:00
2. pull last docker images
2016-06-14 14:33:57 +02:00
2017-07-20 17:50:37 +02:00
`docker-compose pull`
2016-07-21 15:21:33 +02:00
2017-07-20 17:37:03 +02:00
3. stop the app
2016-06-14 14:33:57 +02:00
2017-07-20 17:50:37 +02:00
`docker-compose stop fabmanager`
2016-06-14 14:33:57 +02:00
2017-07-20 17:37:03 +02:00
4. remove old assets
2016-06-14 14:33:57 +02:00
2021-04-27 09:24:42 +02:00
`rm -Rf public/packs/ public/assets/`
2016-06-14 14:33:57 +02:00
2017-07-20 17:37:03 +02:00
5. compile new assets
2016-06-14 14:33:57 +02:00
2020-03-25 17:58:53 +01:00
`docker-compose run --rm fabmanager bundle exec rails assets:precompile`
2016-06-14 14:33:57 +02:00
2017-07-20 17:37:03 +02:00
6. run specific commands
2016-06-14 14:33:57 +02:00
2017-07-20 17:50:37 +02:00
**Do not forget** to check if there are commands to run for your upgrade. Those commands
2019-03-26 14:04:45 +01:00
are always specified in the [CHANGELOG ](https://github.com/sleede/fab-manager/blob/master/CHANGELOG.md ) and prefixed by ** [TODO DEPLOY]**.
They are also present in the [releases page ](https://github.com/sleede/fab-manager/releases ).
2017-07-20 17:50:37 +02:00
2021-04-27 09:24:42 +02:00
Those commands execute specific tasks and have to be run manually.
You must prefix the commands starting by `rails...` or `rake...` with: `docker-compose run --rm fabmanager bundle exec` .
2020-10-23 16:05:05 +02:00
In any other cases, the other commands (like those invoking curl `\curl -sSL... | bash` ) must not be prefixed.
2019-03-27 17:44:19 +01:00
You can also ignore commands only applicable to development environnement, which are prefixed by `(dev)` in the CHANGELOG.
2016-06-14 14:33:57 +02:00
2017-07-20 17:37:03 +02:00
7. restart all containers
2016-06-14 14:33:57 +02:00
2017-07-20 17:50:37 +02:00
```bash
docker-compose down
docker-compose up -d
```
2016-06-14 14:33:57 +02:00
2021-04-27 09:24:42 +02:00
You can check that all containers are running with `docker-compose ps` .
2016-06-14 14:33:57 +02:00
2019-12-31 10:11:16 +01:00
< a name = "upgrade-to-the-last-version" > < / a >
### Upgrade to the last version
2016-06-14 14:33:57 +02:00
2019-12-31 10:11:16 +01:00
It's the default behaviour as `docker-compose pull` command will fetch the latest versions of the docker images.
2021-04-27 09:24:42 +02:00
Be sure to run all the specific commands listed in the [CHANGELOG ](https://github.com/sleede/fab-manager/blob/master/CHANGELOG.md ) between your actual, and the new version in sequential order.
__Example:__ to update from 2.4.0 to 2.4.3, you will run the specific commands for the 2.4.1, then for the 2.4.2 and then for the 2.4.3.
2019-12-31 10:11:16 +01:00
< a name = "upgrade-to-a-specific-version" > < / a >
### Upgrade to a specific version
Edit your [/apps/fabmanager/docker-compose.yml ](../setup/docker-compose.yml#L4 ) file and change the following line:
```yaml
image: sleede/fab-manager
```
For example, here we want to use the v3.1.2:
```yaml
image: sleede/fab-manager:release-v3.1.2
```
Then run the normal upgrade procedure.