add foreman
This commit is contained in:
parent
d956e94161
commit
2a07f7a2d2
59
README.md
Normal file
59
README.md
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
Intro
|
||||||
|
=====
|
||||||
|
|
||||||
|
This is a very basic example of how one can build the foreman from sources and make a container out of it.
|
||||||
|
The mariadb container is not even used in this example, but you can use it on your own.
|
||||||
|
|
||||||
|
|
||||||
|
Running the Foreman
|
||||||
|
===================
|
||||||
|
|
||||||
|
```
|
||||||
|
cd foreman/
|
||||||
|
docker-compose run -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Foreman credentials
|
||||||
|
===================
|
||||||
|
|
||||||
|
You can get the foreman "Login credentials" when the container foreman-data is running seeds on built.
|
||||||
|
It will look like this
|
||||||
|
```
|
||||||
|
Login credentials: admin / PassWoRd
|
||||||
|
```
|
||||||
|
|
||||||
|
Connecting to the Foreman Web
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Get the IP of the nginx-passenger container
|
||||||
|
```
|
||||||
|
docker exec -ti foreman_nginx-passenger_1 ip a
|
||||||
|
```
|
||||||
|
|
||||||
|
Add the following line to your `/etc/hosts` file
|
||||||
|
```
|
||||||
|
172.21.0.3 foreman-web
|
||||||
|
```
|
||||||
|
|
||||||
|
In my case the nginx-passenger's IP was 172.21.0.3
|
||||||
|
|
||||||
|
After that run your favorite browser and access the `http://foreman-web` :-)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Working inside the container
|
||||||
|
============================
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec -ti foreman_foreman-data_1 /bin/sh
|
||||||
|
$ cd /src/foreman
|
||||||
|
/src/foreman $ bundle exec rake -T
|
||||||
|
```
|
||||||
|
|
||||||
|
After you have changed something, don't forget to kill -HUP <pidof nginx> in the foreman_nginx-passenger_1 container.
|
||||||
|
|
||||||
|
|
||||||
|
Logs
|
||||||
|
====
|
||||||
|
|
||||||
|
Logs stored at the `/src/foreman/log/production.log`
|
27
docker-compose.yml
Normal file
27
docker-compose.yml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
foreman-data:
|
||||||
|
build: foreman
|
||||||
|
networks:
|
||||||
|
- net
|
||||||
|
tty: true
|
||||||
|
# stdin_open: true
|
||||||
|
|
||||||
|
nginx-passenger:
|
||||||
|
hostname: foreman-web
|
||||||
|
build: passenger
|
||||||
|
networks:
|
||||||
|
- net
|
||||||
|
volumes_from:
|
||||||
|
- foreman-data
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
build: mariadb
|
||||||
|
networks:
|
||||||
|
- net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
net:
|
||||||
|
driver: bridge
|
||||||
|
|
44
foreman/Dockerfile
Normal file
44
foreman/Dockerfile
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Run Foreman v1.6 stable in a container
|
||||||
|
|
||||||
|
# Foreman v1.6 http://www.theforeman.org/manuals/1.6/#3.4InstallFromSource
|
||||||
|
|
||||||
|
FROM alpine:3.3
|
||||||
|
MAINTAINER Andrey Arapov <andrey.arapov@nixaid.com>
|
||||||
|
|
||||||
|
ENV USER foreman
|
||||||
|
ENV UID 30000
|
||||||
|
ENV HOME /home/$USER
|
||||||
|
ENV WORKDIR /src
|
||||||
|
# ENV RAILS_ENV development
|
||||||
|
ENV RAILS_ENV production
|
||||||
|
|
||||||
|
COPY foreman-patch.diff /tmp/foreman-patch.diff
|
||||||
|
|
||||||
|
RUN apk update \
|
||||||
|
&& apk add git gcc g++ make \
|
||||||
|
ruby-dev ruby-bundler ruby-io-console libxml2-dev libxslt-dev \
|
||||||
|
libffi-dev mariadb-dev postgresql-dev libvirt-dev sqlite-dev \
|
||||||
|
ruby-bigdecimal ruby-irb nodejs \
|
||||||
|
&& adduser -D -h $HOME -u $UID $USER \
|
||||||
|
&& mkdir $WORKDIR \
|
||||||
|
&& chown $USER:$USER $WORKDIR
|
||||||
|
|
||||||
|
RUN su $USER -c "cd $WORKDIR \
|
||||||
|
&& git clone https://github.com/theforeman/foreman.git foreman -b 1.6-stable \
|
||||||
|
&& cd foreman/ \
|
||||||
|
&& cp -p config/settings.yaml.example config/settings.yaml \
|
||||||
|
&& cp -p config/database.yml.example config/database.yml \
|
||||||
|
&& bundle config build.nokogiri --use-system-libraries \
|
||||||
|
&& patch -p1 < /tmp/foreman-patch.diff \
|
||||||
|
&& bundle install --standalone --path vendor/bundle \
|
||||||
|
&& bundle install --deployment --path vendor/bundle \
|
||||||
|
&& bundle exec rake db:migrate \
|
||||||
|
&& bundle exec rake db:seed assets:precompile locale:pack"
|
||||||
|
|
||||||
|
# && bundle config --global DISABLE_SHARED_GEMS "1" \
|
||||||
|
|
||||||
|
VOLUME [ "/src/foreman" ]
|
||||||
|
|
||||||
|
WORKDIR $HOME
|
||||||
|
USER $USER
|
||||||
|
CMD [ "/bin/sh" ]
|
69
foreman/foreman-patch.diff
Normal file
69
foreman/foreman-patch.diff
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
diff --git a/Gemfile b/Gemfile
|
||||||
|
index b86d9ec..0e3e75e 100644
|
||||||
|
--- a/Gemfile
|
||||||
|
+++ b/Gemfile
|
||||||
|
@@ -5,7 +5,7 @@ require File.expand_path('../lib/regexp_extensions', FOREMAN_GEMFILE)
|
||||||
|
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
-gem 'rails', '3.2.18'
|
||||||
|
+gem 'rails', '3.2.22.2'
|
||||||
|
gem 'json'
|
||||||
|
gem 'rest-client', '> 1.6.2', '< 1.7', :require => 'rest_client'
|
||||||
|
gem "audited-activerecord", "3.0.0"
|
||||||
|
@@ -34,8 +34,9 @@ if RUBY_VERSION =~ /^1\.8/
|
||||||
|
gem 'rake', '< 10.2.0'
|
||||||
|
else
|
||||||
|
# Newer version of safemode contains fixes for Ruby 1.9
|
||||||
|
- gem 'safemode', '~> 1.2.1'
|
||||||
|
- gem 'ruby_parser', '~> 3.0.0'
|
||||||
|
+ gem 'test-unit', '~> 3.1.7'
|
||||||
|
+ gem 'safemode', '~> 1.2.2'
|
||||||
|
+ gem 'ruby_parser', '~> 3.2.0'
|
||||||
|
end
|
||||||
|
|
||||||
|
Dir["#{File.dirname(FOREMAN_GEMFILE)}/bundler.d/*.rb"].each do |bundle|
|
||||||
|
diff --git a/bundler.d/assets.rb b/bundler.d/assets.rb
|
||||||
|
index 2319190..b525fbd 100644
|
||||||
|
--- a/bundler.d/assets.rb
|
||||||
|
+++ b/bundler.d/assets.rb
|
||||||
|
@@ -4,7 +4,7 @@ group :assets do
|
||||||
|
gem 'execjs', '< 2.1.0'
|
||||||
|
gem "jquery-rails", "2.0.3"
|
||||||
|
gem 'jquery-ui-rails', '< 5.0.0'
|
||||||
|
- gem "therubyracer", '0.11.3', :require => 'v8'
|
||||||
|
+ gem "therubyracer", '0.11.3'
|
||||||
|
gem 'bootstrap-sass', '~> 3.0.3.0'
|
||||||
|
gem "spice-html5-rails"
|
||||||
|
gem "flot-rails", '0.0.3'
|
||||||
|
diff --git a/bundler.d/i18n.rb b/bundler.d/i18n.rb
|
||||||
|
index a5847d4..29d6a8c 100644
|
||||||
|
--- a/bundler.d/i18n.rb
|
||||||
|
+++ b/bundler.d/i18n.rb
|
||||||
|
@@ -3,4 +3,5 @@ group :i18n do
|
||||||
|
gem 'gettext_i18n_rails', '~> 0.10'
|
||||||
|
gem 'gettext_i18n_rails_js', '>= 0.0.8'
|
||||||
|
gem 'i18n_data', '>= 0.2.6', :require => 'i18n_data'
|
||||||
|
+ gem 'i18n', '~> 0.6.11'
|
||||||
|
end
|
||||||
|
diff --git a/bundler.d/mysql2.rb b/bundler.d/mysql2.rb
|
||||||
|
index 44fe73f..3069dab 100644
|
||||||
|
--- a/bundler.d/mysql2.rb
|
||||||
|
+++ b/bundler.d/mysql2.rb
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
group :mysql2 do
|
||||||
|
- gem 'mysql2', '> 0.3.0'
|
||||||
|
+ gem 'mysql2', '~> 0.3.20'
|
||||||
|
end
|
||||||
|
diff --git a/bundler.d/fog.rb b/bundler.d/fog.rb
|
||||||
|
index 596555e..7edcd8c 100644
|
||||||
|
--- a/bundler.d/fog.rb
|
||||||
|
+++ b/bundler.d/fog.rb
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
group :fog do
|
||||||
|
- gem 'fog', '~> 1.23.0'
|
||||||
|
- gem 'fog-core', '~> 1.23.0'
|
||||||
|
+ gem 'fog', '~> 1.25.0'
|
||||||
|
+ gem 'fog-core', '~> 1.25.0'
|
||||||
|
gem 'unf'
|
||||||
|
end
|
10
mariadb/Dockerfile
Normal file
10
mariadb/Dockerfile
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
FROM alpine:3.3
|
||||||
|
MAINTAINER Andrey Arapov <andrey.arapov@nixaid.com>
|
||||||
|
|
||||||
|
RUN apk update \
|
||||||
|
&& apk add mariadb \
|
||||||
|
&& mysql_install_db --user=mysql --rpm
|
||||||
|
|
||||||
|
COPY my.cnf /etc/mysql/my.cnf
|
||||||
|
|
||||||
|
CMD /bin/sh -c "/usr/bin/mysqld_safe --pid-file=/run/mysqld/mysqld.pid"
|
36
mariadb/my.cnf
Normal file
36
mariadb/my.cnf
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[client]
|
||||||
|
port = 3306
|
||||||
|
socket = /run/mysqld/mysqld.sock
|
||||||
|
|
||||||
|
[mysqld]
|
||||||
|
port = 3306
|
||||||
|
bind-address = 0.0.0.0
|
||||||
|
socket = /run/mysqld/mysqld.sock
|
||||||
|
skip-external-locking
|
||||||
|
key_buffer_size = 16M
|
||||||
|
max_allowed_packet = 1M
|
||||||
|
table_open_cache = 64
|
||||||
|
sort_buffer_size = 512K
|
||||||
|
net_buffer_length = 8K
|
||||||
|
read_buffer_size = 256K
|
||||||
|
read_rnd_buffer_size = 512K
|
||||||
|
myisam_sort_buffer_size = 8M
|
||||||
|
log-bin=mysql-bin
|
||||||
|
binlog_format=mixed
|
||||||
|
server-id = 1
|
||||||
|
|
||||||
|
[mysqldump]
|
||||||
|
quick
|
||||||
|
max_allowed_packet = 16M
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
no-auto-rehash
|
||||||
|
|
||||||
|
[myisamchk]
|
||||||
|
key_buffer_size = 20M
|
||||||
|
sort_buffer_size = 20M
|
||||||
|
read_buffer = 2M
|
||||||
|
write_buffer = 2M
|
||||||
|
|
||||||
|
[mysqlhotcopy]
|
||||||
|
interactive-timeout
|
32
passenger/Dockerfile
Normal file
32
passenger/Dockerfile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Run passenger in a container
|
||||||
|
|
||||||
|
FROM alpine:3.3
|
||||||
|
MAINTAINER Andrey Arapov <andrey.arapov@nixaid.com>
|
||||||
|
|
||||||
|
ENV WORKDIR /src
|
||||||
|
|
||||||
|
RUN echo '@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories \
|
||||||
|
&& apk update \
|
||||||
|
&& apk add git perl gcc g++ curl-dev \
|
||||||
|
ruby ruby-rake ruby-rack ruby-dev \
|
||||||
|
libexecinfo-dev@testing linux-headers make \
|
||||||
|
ruby-bundler ruby-bigdecimal ruby-io-console ruby-irb nodejs \
|
||||||
|
sqlite-dev mariadb-dev postgresql-dev procps \
|
||||||
|
&& echo "PATH=$WORKDIR/passenger/bin:$WORKDIR/nginx/sbin:$PATH" >> /etc/profile \
|
||||||
|
&& mkdir $WORKDIR \
|
||||||
|
&& cd $WORKDIR \
|
||||||
|
&& git clone https://github.com/phusion/passenger.git \
|
||||||
|
&& cd passenger/ \
|
||||||
|
&& git submodule update --init --recursive \
|
||||||
|
&& EXTRA_CXX_LDFLAGS="-lexecinfo" ./bin/passenger-install-nginx-module --prefix=$WORKDIR/nginx --auto
|
||||||
|
|
||||||
|
COPY nginx.conf $WORKDIR/nginx/conf/nginx.conf
|
||||||
|
|
||||||
|
ENV USER foreman
|
||||||
|
ENV UID 30000
|
||||||
|
ENV HOME $WORKDIR/$USER
|
||||||
|
ENV SHELL /bin/true
|
||||||
|
RUN adduser -D -s $SHELL -h $HOME -u $UID $USER
|
||||||
|
## ENV BUNDLE_PATH ".bundle"
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/bin/sh", "-c", "$WORKDIR/nginx/sbin/nginx" ]
|
60
passenger/nginx.conf
Normal file
60
passenger/nginx.conf
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
daemon off;
|
||||||
|
error_log /dev/stdout info;
|
||||||
|
|
||||||
|
user foreman;
|
||||||
|
worker_processes 1;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
passenger_root /src/passenger;
|
||||||
|
passenger_ruby /usr/bin/ruby;
|
||||||
|
|
||||||
|
include mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
# '$status $body_bytes_sent "$http_referer" '
|
||||||
|
# '"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
#access_log logs/access.log main;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
#tcp_nopush on;
|
||||||
|
|
||||||
|
#keepalive_timeout 0;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
#gzip on;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root html;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
# redirect server error pages to the static page /50x.html
|
||||||
|
#
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root html;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name foreman-web;
|
||||||
|
root /src/foreman/public;
|
||||||
|
|
||||||
|
# You must explicitly set 'passenger_enabled on', otherwise
|
||||||
|
# Passenger won't serve this app.
|
||||||
|
passenger_enabled on;
|
||||||
|
rails_env production;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user