Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 20 additions & 16 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
language: ruby
rvm:
- "2.3.8"
services:
- redis-server
- postgresql
language: minimal

# uncomment this line if your project needs to run something other than `rake`:
#before_script: # for Selenium RSpec tests
# - "export DISPLAY=:99.0"
# - "sh -e /etc/init.d/xvfb start"
cache:
directories:
- /home/travis/docker

before_install:
- bash script/install/maxmind.bash
- docker load -i /home/travis/docker/images.tar || true

before_script:
- RAILS_ENV=test DATABASE_USERNAME=postgres DATABASE= TEST_DATABASE=nztraintest REDIS_INSTALL=false REDIS_PASS= SCHEDULE_BACKUPS=0 ISOLATE_ROOT=/ ISOLATE_CGROUPS=false ISOLATE_BRANCH=nztrain.travis.ci bash script/install/config.bash --defaults
- AUTOCONFIRM=true script/install.bash --skip-update
- bundle exec rake db:test:load
script: bundle exec rspec
install:
- docker build . -t nztrain:latest

script:
- >
docker run --privileged --network host
--env-file <(env | grep TRAVIS)
nztrain:latest /bin/bash -c "
service redis start;
service postgresql start;
bundle exec rake db:test:load;
bundle exec rspec"

before_cache:
- docker save -o /home/travis/docker/images.tar $(docker images -a -q)

53 changes: 53 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Build invocation:
# May need to be executed with --memory-swap -1 or else out of memory error
# docker build --memory-swap -1 . -t nztrain:latest

# Execution invocation:
# Privileged mode is required for control groups
# Must be invoked with '--network host' for port exposure
# docker --privileged --network host -it nztrain:latest
# <C-p> <C-q> to detach

FROM drecom/ubuntu-ruby:2.3.8
RUN apt-get update && apt-get install -y sudo git libpq-dev software-properties-common locales

# Replace Japanese locale with English
RUN echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# Services cannot be started within Docker build environment
RUN printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d

WORKDIR /nztrain
COPY Gemfile* ./
COPY script ./script
RUN bash script/install/maxmind.bash

# Bundle installation is invoked in advance to avoid
# prompt at installation script
RUN bundle install --deployment

RUN RAILS_ENV=development DATABASE_USERNAME=root DATABASE=nztrain \
TEST_DATABASE=nztraintest APP_NAME=nztrain USER=root \
APP_USER=root UNICORN_PORT= REDIS_HOST=localhost REDIS_PORT=6379 \
REDIS_PASS=@/etc/redis/redis.conf REDIS_INSTALL=true \
SERVER_NAME=_ bash script/install/config.bash --defaults

COPY config ./config
# Avoid updating as database servers are not live yet
RUN yes | update=false bash script/install.bash

COPY . .
RUN service postgresql start; \
service redis start; \
bash script/update.bash; \
rm /var/run/redis/redis.pid; \
service postgresql stop

CMD service redis start; \
service postgresql start; \
bundle exec rails server -d; \
bundle exec rake qless:work

85 changes: 77 additions & 8 deletions README.rdoc
Original file line number Diff line number Diff line change
@@ -1,15 +1,84 @@
== NZTrain
Status: {<img src="https://secure.travis-ci.org/NZOI/nztrain.png?branch=master" alt="Build Status" />}[http://travis-ci.org/NZOI/nztrain] {<img src="https://coveralls.io/repos/NZOI/nztrain/badge.png" alt="Coverage Status" />}[https://coveralls.io/r/NZOI/nztrain] {<img src="https://codeclimate.com/github/NZOI/nztrain.png" />}[https://codeclimate.com/github/NZOI/nztrain]
Workflow: {<img src="https://badge.waffle.io/NZOI/nztrain.png" alt="WIP Issues" />}[http://waffle.io/NZOI/nztrain]
{<img src="https://secure.travis-ci.org/NZOI/nztrain.png?branch=master" alt="Build Status" />}[http://travis-ci.org/NZOI/nztrain] {<img src="https://coveralls.io/repos/NZOI/nztrain/badge.png" alt="Coverage Status" />}[https://coveralls.io/r/NZOI/nztrain] {<img src="https://codeclimate.com/github/NZOI/nztrain.png" />}[https://codeclimate.com/github/NZOI/nztrain]

=== Installation
Run `script/install.bash` to install dependencies.
=== Docker Installation
This requires the Docker engine.

`script/update.bash` will pull changes from origin and recompile various things. This includes assets - assuming that it is for production purposes.
First build the image:

Both scripts depends on `script/install.cfg`, which is built using `script/install/config.bash` automatically. If `script/install.cfg` is incomplete (eg. new configuration is added), `script/install.bash` and `script/update.bash` will prompt for the new configurations required.
$ docker build --memory-swap -1 . -t nztrain:latest

Then execute the image:

$ docker run --privileged --network host -it nztrain:latest

The website will be served over port +3000+.

To inspect the running container identify the container name:

$ docker ps

Then execute an interactive bash shell in the container:

$ docker exec -it <container> /bin/bash

=== Manual Installation
This requires Ubuntu Xenial (16.04).

Invoke the installation script within this repository:

$ git clone https://github.com/NZOI/nztrain.git
$ cd nztrain
$ ./script/install.bash

Select all default configuration options by pressing enter repeatedly.

You will be prompted to select an option to install Ruby. Choose to install +rbenv+ (the fourth option). Then, restart the session and invoke the installation script again:

$ bash
$ ./script/install.bash

You will be prompted to select an option to install Ruby *again*. Choose to install either +RVM+ or +rbenv+. All prompts after this are package installation prompts. You may wish to quit the installation script and invoke it with +yes+.

$ yes | ./script/install.bash

Finally, run the website:

$ bundle exec rails server
$ bundle exec rake qless:work

Each of these commands must be kept alive. This can be achieved by running each command in a separate terminal session. Otherwise, you may wish to daemonize (run in the background) the commands:

$ bundle exec rails server -d

The website will be served over port +3000+.

=== System User
This setups a system user for the website.

First open a Ruby console:

$ bundle exec rails console

Then, create a new user with these commands:

user = User.find(0)
Role.find_by_name("superadmin").users.push(user)
user.confirm!
require 'io/console'
user.reset_password!(STDIN.getpass("Password: "), STDIN.getpass("Confirm: "))

You will be prompted to enter a password twice. The invocation should return true if the user creation was successful. Otherwise, the password may be too short.

=== Updating
The update script will recompile and pull changes from origin:

$ cd nztrain
$ ./script/update.bash

Both the installation and update script depends on the configuration script: +script/install.cfg+ which is built using +script/install/config.bash+ automatically. If +script/install.cfg+ is incomplete (for example, a new configuration is added) then new configurations will be prompted.

=== Development Tools
- `spring` instead of `bundle exec` to keep a background copy of rails running, and avoid startup time.
- `unicorn` starts of a development server (instead of Webrick).
- Use +spring+ instead of bundle to keep a background copy of Rails running and avoid startup time.
- +unicorn+ starts a development server (instead of Webrick).