X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=README.md;h=9afa70d579a5eb904333e9ffdcef0a99dfe9c602;hb=16fb17cf51793a5cbf5c364fb8e4497b6d3253a1;hp=fdf06c4fad2b2239d19c061bc5a0b4baec9ebcb8;hpb=a89c92f2824a49385ea1000961606ed0768c1df3;p=discourse_docker.git diff --git a/README.md b/README.md index fdf06c4..9afa70d 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,16 @@ ### About -- [Docker](https://www.docker.io/) is an open source project to pack, ship and run any Linux application in a lighter weight, faster container than a traditional virtual machine. +- [Docker](https://docker.com/) is an open source project to pack, ship and run any Linux application in a lighter weight, faster container than a traditional virtual machine. - Docker makes it much easier to deploy [a Discourse forum](https://github.com/discourse/discourse) on your servers and keep it updated. For background, see [Sam's blog post](http://samsaffron.com/archive/2013/11/07/discourse-in-a-docker-container). - The templates and base image configure Discourse with the Discourse team's recommended optimal defaults. - -### IMPORTANT: Before You Start - -1. Make sure you're running a **64 bit** version of either [Ubuntu 12.04 LTS](http://releases.ubuntu.com/precise/), or [Ubuntu 14.04 LTS](http://releases.ubuntu.com/14.04/). -1. Upgrade to the [latest version of Docker](http://docs.docker.io/en/latest/installation/ubuntulinux/). -1. Create a directory for Discourse Docker (the expected path is `/var/docker`): `install -g docker -m 2775 -d /var/docker` -1. Run the docker installation and launcher as **root** or a member of the **docker** group. -1. Add your user account to the docker group: `usermod -a -G docker yourusername` and re-login. - -If you do not do any of the above, as RoboCop once said, ["there will be… trouble."](http://www.youtube.com/watch?v=XxarhampSNI) *Please double check the above list before proceeding!* - ### Getting Started -The simplest way to get started is the **standalone** template: +The simplest way to get started is via the **standalone** template, which can be installed in 30 minutes or less. For detailed install instructions, see -1. **Clone** this project from github into `/var/docker` on your server: `git clone https://github.com/discourse/discourse_docker.git /var/docker` -2. **Copy** the standalone sample into the containers directory: `cp samples/standalone.yml containers/app.yml` -3. **Edit** `containers/app.yml` with your environment specific information - - [bindings](#expose) - - [volumes](#volumes) -4. **Bootstrap** the image: `sudo ./launcher bootstrap app` -5. **Start** the image: `sudo ./launcher start app` - -Note: you can add yourself to the Docker group if you wish to avoid `sudo` with `usermod -aG docker `. +https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md ### Directory Structure @@ -43,7 +24,7 @@ This directory is for container definitions for your various Discourse container #### `/samples` -Sample container definitions you may use to bootstrap your environment. You can copy and amend templates here into the containers directory. +Sample container definitions you may use to bootstrap your environment. You can copy templates from here into the containers directory. #### `/shared` @@ -51,38 +32,37 @@ Placeholder spot for shared volumes with various Discourse containers. You may e #### `/templates` -[pups](https://github.com/samsaffron/pups) managed pups templates you may use to bootstrap your environment. +[pups](https://github.com/samsaffron/pups)-managed templates you may use to bootstrap your environment. #### `/image` -Dockerfile for both the base image `samsaffron/discourse_base` and discourse image `samsaffron/discourse`. - -- `samsaffron/discourse_base` contains all the OS dependencies including sshd, runit, postgres, nginx, ruby. +Dockerfiles for Discourse; see [the README](image/README.md) for further details. -- `samsaffron/discourse` builds on the base image and configures a discourse user and `/var/www/discourse` directory for the Discourse source. - -The Docker repository will always contain the latest built version at: https://index.docker.io/u/samsaffron/discourse/ , you should not need to build the base image. +The Docker repository will always contain the latest built version at: https://hub.docker.com/r/discourse/base/, you should not need to build the base image. ### Launcher -The base directory contains a single bash script which is used to manage containers. You can use it to "bootstrap" a new container, ssh in, start, stop and destroy a container. +The base directory contains a single bash script which is used to manage containers. You can use it to "bootstrap" a new container, enter, start, stop and destroy a container. ``` -Usage: launcher COMMAND CONFIG +Usage: launcher COMMAND CONFIG [--skip-prereqs] Commands: start: Start/initialize a container stop: Stop a running container restart: Restart a container destroy: Stop and remove a container - ssh: Start a bash shell in a running container + enter: Use docker exec to enter a container logs: Docker logs for container + memconfig: Configure sane defaults for available RAM bootstrap: Bootstrap a container for the config based on a template + rebuild: Rebuild a container (destroy old, bootstrap, start new) ``` +If the environment variable "SUPERVISED" is set to true, the container won't be detached, allowing a process monitoring tool to manage the restart behaviour of the container. ### Container Configuration -The beginning of the container definition will contain 3 "special" sections: +The beginning of the container definition can contain the following "special" sections: #### templates: @@ -92,7 +72,7 @@ templates: - "templates/postgres.template.yml" ``` -This template is "composed" out of all these child templates, this allows for a very flexible configuration struture. Furthermore you may add specific hooks that extend the templates you reference. +This template is "composed" out of all these child templates, this allows for a very flexible configuration structure. Furthermore you may add specific hooks that extend the templates you reference. #### expose: @@ -102,7 +82,7 @@ expose: - "127.0.0.1:20080:80" ``` -Expose port 22 inside the container on port 2222 on ALL local host interfaces. In order to bind to only one interface, you may specify the host's IP address as `([:[host_port]])|():][/udp]` as defined in the [docker port binding documentation](http://docs.docker.io/en/latest/use/port_redirection/) +Publish port 22 inside the container on port 2222 on ALL local host interfaces. In order to bind to only one interface, you may specify the host's IP address as `([:[host_port]])|():[/udp]` as defined in the [docker port binding documentation](http://docs.docker.com/userguide/dockerlinks/). To expose a port without publishing it, specify only the port number (e.g., `80`). #### volumes: @@ -110,23 +90,58 @@ Expose port 22 inside the container on port 2222 on ALL local host interfaces. I ``` volumes: - volume: - host: /var/docker/shared + host: /var/discourse/shared guest: /shared ``` -Expose a directory inside the host inside the container. +Expose a directory inside the host to the container. + +#### links: +``` +links: + - link: + name: postgres + alias: postgres +``` + +Links another container to the current container. This will add `--link postgres:postgres` +to the options when running the container. + +#### environment variables: + +Setting environment variables to the current container. + +``` +# app.yml + +env: + DISCOURSE_DB_HOST: some-host + DISCOURSE_DB_NAME: {{config}}_discourse +``` + +The above will add `-e DISCOURSE_DB_HOST=some-host -e DISCOURSE_DB_NAME=app_discourse` to the options when running the container. + +#### labels: +``` +# app.yml + +labels: + monitor: 'true' + app_name: {{config}}_discourse +``` + +Add labels to the current container. The above will add `--l monitor=true -l app_name=dev_discourse` to the options +when running the container ### Upgrading Discourse The Docker setup gives you multiple upgrade options: -1. Use the front end at http://yoursite.com/admin/docker to upgrade an already running image. +1. Use the front end at http://yoursite.com/admin/upgrade to upgrade an already running image. -2. Create a new base image by running: - - `./launcher destroy my_image` - - `./launcher bootstrap my_image` - - `./launcher start my_image` +2. Create a new base image manually by running: + - `./launcher rebuild my_image` ### Single Container vs. Multiple Container @@ -150,14 +165,17 @@ For a Discourse instance to function properly Email must be set up. Use the `SMT ### Troubleshooting -You can ssh into your container using `./launcher ssh my_container`, we will automatically set up ssh access during bootstrap. +View the container logs: `./launcher logs my_container` -You can spawn a shell inside your container using `./launcher enter my_container`. This is the most foolproof method if you have local root access. +Spawn a shell inside your container using `./launcher enter my_container`. This is the most foolproof method if you have host root access. + +If you see network errors trying to retrieve code from `github.com` or `rubygems.org` try again - sometimes there are temporary interruptions and a retry is all it takes. Behind a proxy network with no direct access to the Internet? Add proxy information to the container environment by adding to the existing `env` block in the `container.yml` file: + ```yaml env: - …existing info… + …existing entries… HTTP_PROXY: http://proxyserver:port/ http_proxy: http://proxyserver:port/ HTTPS_PROXY: http://proxyserver:port/ @@ -176,6 +194,25 @@ installs you can ensure they are in sync by looking at `/etc/passwd` and - [Setting up SSL with Discourse Docker](https://meta.discourse.org/t/allowing-ssl-for-your-discourse-docker-setup/13847) - [Multisite configuration with Docker](https://meta.discourse.org/t/multisite-configuration-with-docker/14084) +- [Linking containers for a multiple container setup](https://meta.discourse.org/t/linking-containers-for-a-multiple-container-setup/20867) +- [Using Rubygems mirror to improve connection problem in China](https://meta.discourse.org/t/replace-rubygems-org-with-taobao-mirror-to-resolve-network-error-in-china/21988/1) + +### Developing with Vagrant + +If you are looking to make modifications to this repository, you can easily test +out your changes before committing, using the magic of +[Vagrant](http://vagrantup.com). Install Vagrant as per [the default +instructions](http://docs.vagrantup.com/v2/installation/index.html), and +then run: + + vagrant up + +This will spawn a new Ubuntu VM, install Docker, and then await your +instructions. You can then SSH into the VM with `vagrant ssh`, become +`root` with `sudo -i`, and then you're right to go. Your live git repo is +already available at `/vagrant`, so you can just `cd /vagrant` +and then start running `launcher`. + License ===