diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..fa4ebf1792ff90bdc15036e1db74ec944b120406 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,45 @@ +version: '2' +services: + swift: + build: + context: .. + dockerfile: docker/swift/Dockerfile + ports: + - "12345:8080" + volumes: + - /srv/swift:/srv + links: + - zookeeper + - kafka + + kafka: + image: wurstmeister/kafka + ports: + - "9092:9092" + links: + - zookeeper + environment: + JMX_PORT: 7000 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_CREATE_TOPICS: "swift-messagebus:1:1" + KAFKA_ADVERTISED_PORT: 9092 + + # kafka (at least this image) needs zookeeper + zookeeper: + image: wurstmeister/zookeeper + ports: + - "2181:2181" + environment: + JMX_PORT: 7000 + + # some webui is always good, attach it and connectit tozookeeper:2181 + kafka-manager: + image: sheepkiller/kafka-manager + ports: + - "9000:9000" + links: + - zookeeper + - kafka + environment: + ZK_HOSTS: zookeeper:2181 + APPLICATION_SECRET: s3cr3t diff --git a/docker/swift/Dockerfile b/docker/swift/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..66b709494830aa04c89db0faafc128d62653a126 --- /dev/null +++ b/docker/swift/Dockerfile @@ -0,0 +1,39 @@ +FROM ubuntu:14.04 +MAINTAINER bne86 <b.von.st.vieth@fz-juelich.de> + +RUN apt-get update && \ + apt-get install -y software-properties-common && \ + add-apt-repository cloud-archive:liberty && \ + apt-get update && \ + apt-get install -y supervisor swift python-swiftclient rsync \ + swift-proxy swift-object memcached python-keystoneclient \ + python-swiftclient swift-plugin-s3 python-netifaces \ + python-xattr python-memcache \ + swift-account swift-container swift-object pwgen + +RUN mkdir -p /var/log/supervisor +ADD docker/swift/supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +# +# Swift configuration +# - Partially fom http://docs.openstack.org/developer/swift/development_saio.html +# + +# not sure how valuable dispersion will be... +ADD docker/swift/dispersion.conf /etc/swift/dispersion.conf +ADD docker/swift/rsyncd.conf /etc/rsyncd.conf +ADD docker/swift/swift.conf /etc/swift/swift.conf +ADD docker/swift/proxy-server.conf /etc/swift/proxy-server.conf +ADD docker/swift/account-server.conf /etc/swift/account-server.conf +ADD docker/swift/object-server.conf /etc/swift/object-server.conf +ADD docker/swift/container-server.conf /etc/swift/container-server.conf +ADD docker/swift/startmain.sh /usr/local/bin/startmain.sh +RUN chmod 755 /usr/local/bin/startmain.sh + +ADD . swift-kafka +WORKDIR swift-kafka +RUN python setup.py install + +EXPOSE 8080 + +CMD /usr/local/bin/startmain.sh diff --git a/docker/swift/account-server.conf b/docker/swift/account-server.conf new file mode 100644 index 0000000000000000000000000000000000000000..77ac72199000775aefaf406a25990e592e3eefb2 --- /dev/null +++ b/docker/swift/account-server.conf @@ -0,0 +1,26 @@ +[DEFAULT] +devices = /srv/node +mount_check = false +disable_fallocate = true +bind_port = 6012 +workers = 1 +user = swift +log_facility = LOG_LOCAL2 +recon_cache_path = /var/cache/swift +eventlet_debug = true + +[pipeline:main] +pipeline = recon account-server + +[app:account-server] +use = egg:swift#account + +[filter:recon] +use = egg:swift#recon + +[account-replicator] +vm_test_mode = yes + +[account-auditor] + +[account-reaper] diff --git a/docker/swift/container-server.conf b/docker/swift/container-server.conf new file mode 100644 index 0000000000000000000000000000000000000000..eb8a12d564a399b6364d89caba5efd3d8af36351 --- /dev/null +++ b/docker/swift/container-server.conf @@ -0,0 +1,29 @@ +[DEFAULT] +devices = /srv/node +mount_check = false +disable_fallocate = true +bind_port = 6011 +workers = 1 +user = swift +log_facility = LOG_LOCAL2 +recon_cache_path = /var/cache/swift +eventlet_debug = true +allow_versions = true + +[pipeline:main] +pipeline = recon container-server + +[app:container-server] +use = egg:swift#container + +[filter:recon] +use = egg:swift#recon + +[container-replicator] +vm_test_mode = yes + +[container-updater] + +[container-auditor] + +[container-sync] diff --git a/docker/swift/dispersion.conf b/docker/swift/dispersion.conf new file mode 100644 index 0000000000000000000000000000000000000000..412a1700af83c0b5962dbd80e8f437696848988b --- /dev/null +++ b/docker/swift/dispersion.conf @@ -0,0 +1,5 @@ +[dispersion] +auth_url = http://127.0.0.1:8080/auth/v1.0 +auth_user = test:tester +auth_key = testing +endpoint_type = internalURL \ No newline at end of file diff --git a/docker/swift/object-expirer.conf b/docker/swift/object-expirer.conf new file mode 100644 index 0000000000000000000000000000000000000000..7bbe520619dcd8207b609cb0aae378acab09f95a --- /dev/null +++ b/docker/swift/object-expirer.conf @@ -0,0 +1,59 @@ +[DEFAULT] +# swift_dir = /etc/swift +user = swift +# You can specify default log routing here if you want: +log_name = object-expirer +log_facility = LOG_LOCAL6 +log_level = INFO +#log_address = /dev/log +# +# comma separated list of functions to call to setup custom log handlers. +# functions get passed: conf, name, log_to_console, log_route, fmt, logger, +# adapted_logger +# log_custom_handlers = +# +# If set, log_udp_host will override log_address +# log_udp_host = +# log_udp_port = 514 +# +# You can enable StatsD logging here: +# log_statsd_host = localhost +# log_statsd_port = 8125 +# log_statsd_default_sample_rate = 1.0 +# log_statsd_sample_rate_factor = 1.0 +# log_statsd_metric_prefix = + +[object-expirer] +interval = 300 +# auto_create_account_prefix = . +# report_interval = 300 +# concurrency is the level of concurrency o use to do the work, this value +# must be set to at least 1 +# concurrency = 1 +# processes is how many parts to divide the work into, one part per process +# that will be doing the work +# processes set 0 means that a single process will be doing all the work +# processes can also be specified on the command line and will override the +# config value +# processes = 0 +# process is which of the parts a particular process will work on +# process can also be specified on the command line and will overide the config +# value +# process is "zero based", if you want to use 3 processes, you should run +# processes with process set to 0, 1, and 2 +# process = 0 + +[pipeline:main] +pipeline = catch_errors cache proxy-server + +[app:proxy-server] +use = egg:swift#proxy +# See proxy-server.conf-sample for options + +[filter:cache] +use = egg:swift#memcache +# See proxy-server.conf-sample for options + +[filter:catch_errors] +use = egg:swift#catch_errors +# See proxy-server.conf-sample for options \ No newline at end of file diff --git a/docker/swift/object-server.conf b/docker/swift/object-server.conf new file mode 100644 index 0000000000000000000000000000000000000000..6c008e21c76301d55d01bf69229cd883dcc373e6 --- /dev/null +++ b/docker/swift/object-server.conf @@ -0,0 +1,26 @@ +[DEFAULT] +devices = /srv/node +mount_check = false +disable_fallocate = true +bind_port = 6010 +workers = 1 +user = swift +log_facility = LOG_LOCAL2 +recon_cache_path = /var/cache/swift +eventlet_debug = true + +[pipeline:main] +pipeline = recon object-server + +[app:object-server] +use = egg:swift#object + +[filter:recon] +use = egg:swift#recon + +[object-replicator] +vm_test_mode = yes + +[object-updater] + +[object-auditor] diff --git a/docker/swift/proxy-server.conf b/docker/swift/proxy-server.conf new file mode 100644 index 0000000000000000000000000000000000000000..d96a2b2dce66ce0d03b5d21352466acf6c00ba4d --- /dev/null +++ b/docker/swift/proxy-server.conf @@ -0,0 +1,72 @@ +[DEFAULT] +bind_port = 8080 +workers = 1 +user = swift +log_facility = LOG_LOCAL1 +eventlet_debug = true + +[pipeline:main] +# Yes, proxy-logging appears twice. This is so that +# middleware-originated requests get logged too. +pipeline = catch_errors gatekeeper healthcheck proxy-logging cache bulk tempurl slo dlo ratelimit crossdomain tempauth staticweb container-quotas account-quotas messagebus proxy-logging proxy-server + +[filter:catch_errors] +use = egg:swift#catch_errors + +[filter:healthcheck] +use = egg:swift#healthcheck + +[filter:proxy-logging] +use = egg:swift#proxy_logging + +[filter:bulk] +use = egg:swift#bulk + +[filter:ratelimit] +use = egg:swift#ratelimit + +[filter:crossdomain] +use = egg:swift#crossdomain + +[filter:dlo] +use = egg:swift#dlo + +[filter:slo] +use = egg:swift#slo + +[filter:tempurl] +use = egg:swift#tempurl + +[filter:tempauth] +storage_url_scheme = default +use = egg:swift#tempauth +user_admin_admin = admin .admin .reseller_admin +user_test_tester = testing .admin +user_test2_tester2 = testing2 .admin +user_test_tester3 = testing3 + +[filter:staticweb] +use = egg:swift#staticweb + +[filter:account-quotas] +use = egg:swift#account_quotas + +[filter:container-quotas] +use = egg:swift#container_quotas + +[filter:cache] +use = egg:swift#memcache + +[filter:gatekeeper] +use = egg:swift#gatekeeper + +[filter:messagebus] +use = egg:messagebus#messagebus +url = asd +username = asd +password = asd + +[app:proxy-server] +use = egg:swift#proxy +allow_account_management = true +account_autocreate = true diff --git a/docker/swift/rsyncd.conf b/docker/swift/rsyncd.conf new file mode 100644 index 0000000000000000000000000000000000000000..31584aef39951fbcf798bdc7f7d9da3131d584b9 --- /dev/null +++ b/docker/swift/rsyncd.conf @@ -0,0 +1,23 @@ +uid = swift +gid = swift +log file = /var/log/rsyncd.log +pid file = /var/run/rsyncd.pid +address = 127.0.0.1 + +[account6012] +max connections = 25 +path = /srv/node +read only = false +lock file = /var/lock/account6012.lock + +[container6011] +max connections = 25 +path = /srv/node +read only = false +lock file = /var/lock/container6011.lock + +[object6010] +max connections = 25 +path = /srv/node +read only = false +lock file = /var/lock/object6010.lock diff --git a/docker/swift/startmain.sh b/docker/swift/startmain.sh new file mode 100644 index 0000000000000000000000000000000000000000..fd8f17f7a2b03aaff486edf2766cded989c03b53 --- /dev/null +++ b/docker/swift/startmain.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# +# Make the rings if they don't exist already +# + +# These can be set with docker run -e VARIABLE=X at runtime +SWIFT_PART_POWER=${SWIFT_PART_POWER:-7} +SWIFT_PART_HOURS=${SWIFT_PART_HOURS:-1} +SWIFT_REPLICAS=${SWIFT_REPLICAS:-1} + +if [ -e /srv/account.builder ]; then + echo "Ring files already exist in /srv, copying them to /etc/swift..." + cp /srv/*.builder /etc/swift/ + cp /srv/*.gz /etc/swift/ +fi + +# This comes from a volume, so need to chown it here, not sure of a better way +# to get it owned by Swift. +if [ ! -e /srv/node ]; then + mkdir /srv/node +fi +chown -R swift:swift /srv + +if [ ! -e /etc/swift/account.builder ]; then + + cd /etc/swift + + # 2^& = 128 we are assuming just one drive + # 1 replica only + + echo "No existing ring files, creating them..." + + swift-ring-builder object.builder create ${SWIFT_PART_POWER} ${SWIFT_REPLICAS} ${SWIFT_PART_HOURS} + swift-ring-builder object.builder add r1z1-127.0.0.1:6010/sdb1 1 + swift-ring-builder object.builder rebalance + swift-ring-builder container.builder create ${SWIFT_PART_POWER} ${SWIFT_REPLICAS} ${SWIFT_PART_HOURS} + swift-ring-builder container.builder add r1z1-127.0.0.1:6011/sdb1 1 + swift-ring-builder container.builder rebalance + swift-ring-builder account.builder create ${SWIFT_PART_POWER} ${SWIFT_REPLICAS} ${SWIFT_PART_HOURS} + swift-ring-builder account.builder add r1z1-127.0.0.1:6012/sdb1 1 + swift-ring-builder account.builder rebalance + + # Back these up for later use + echo "Copying ring files to /srv to save them if it's a docker volume..." + cp *.gz /srv + cp *.builder /srv + +fi + +# If you are going to put an ssl terminator in front of the proxy, then I believe +# the storage_url_scheme should be set to https. So if this var isn't empty, set +# the default storage url to https. +if [ ! -z "${SWIFT_STORAGE_URL_SCHEME}" ]; then + echo "Setting default_storage_scheme to https in proxy-server.conf..." + sed -i -e "s/storage_url_scheme = default/storage_url_scheme = https/g" /etc/swift/proxy-server.conf + grep "storage_url_scheme" /etc/swift/proxy-server.conf +fi + +if [ ! -z "${SWIFT_USER_PASSWORD}" ]; then + echo "Setting passwords in /etc/swift/proxy-server.conf" + PASS=`pwgen 12 1` + sed -i -e "s/user_admin_admin = admin .admin .reseller_admin/user_admin_admin = ${SWIFT_USER_PASSWORD} .admin .reseller_admin/g" /etc/swift/proxy-server.conf + sed -i -e "s/user_test_tester = testing .admin/user_test_tester = ${SWIFT_USER_PASSWORD} .admin/g" /etc/swift/proxy-server.conf + sed -i -e "s/user_test2_tester2 = testing2 .admin/user_test2_tester2 = ${SWIFT_USER_PASSWORD} .admin/g" /etc/swift/proxy-server.conf + sed -i -e "s/user_test_tester3 = testing3/user_test_tester3 = ${SWIFT_USER_PASSWORD}/g" /etc/swift/proxy-server.conf + grep "user_test" /etc/swift/proxy-server.conf +fi + +# Start supervisord +echo "Starting supervisord..." +/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf + +# +# Tail the log file for "docker log $CONTAINER_ID" +# + +# sleep waiting for rsyslog to come up under supervisord +sleep 3 + +echo "Starting to tail /var/log/syslog...(hit ctrl-c if you are starting the container in a bash shell)" + +tail -n 0 -f /var/log/syslog diff --git a/docker/swift/supervisord.conf b/docker/swift/supervisord.conf new file mode 100644 index 0000000000000000000000000000000000000000..f9e9282b7d2eb5fcc32a7370dbe6534a7abfc5ef --- /dev/null +++ b/docker/swift/supervisord.conf @@ -0,0 +1,73 @@ +[supervisord] +nodaemon=false + +[program:memcached] +command=/usr/bin/memcached -u memcache +startsecs=3 +stopwaitsecs = 3 + +[program:rsyslog] +command=/bin/bash -c "source /etc/default/rsyslog && /usr/sbin/rsyslogd -n -c3" +startsecs = 5 +stopwaitsecs = 5 + +[program:proxy-server] +command=/usr/bin/python /usr/bin/swift-proxy-server /etc/swift/proxy-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:container-server] +command=/usr/bin/python /usr/bin/swift-container-server /etc/swift/container-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:account-server] +command=/usr/bin/python /usr/bin/swift-account-server /etc/swift/account-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:account-auditor] +command=/usr/bin/python /usr/bin/swift-account-auditor /etc/swift/account-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:object-replicator] +command=/usr/bin/python /usr/bin/swift-object-replicator /etc/swift/object-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:object-auditor] +command=/usr/bin/python /usr/bin/swift-object-auditor /etc/swift/object-server.conf +startsecs=3 +stopwaitsecs = 3 + +[progam:container-auditor] +command=/usr/bin/python /usr/bin/swift-container-auditor /etc/swift/container-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:object-auditor] +command=/usr/bin/python /usr/bin/swift-object-server /etc/swift/object-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:account-replicator] +command=/usr/bin/python /usr/bin/swift-account-replicator /etc/swift/account-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:account-reaper] +command=/usr/bin/python /usr/bin/swift-account-reaper /etc/swift/account-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:container-sync] +command=/usr/bin/python /usr/bin/swift-container-sync /etc/swift/container-server.conf +startsecs=3 +stopwaitsecs = 3 + +[program:object-updater] +command=/usr/bin/python /usr/bin/swift-object-updater /etc/swift/object-server.conf +startsecs=3 +stopwaitsecs = 3 + diff --git a/docker/swift/swift.conf b/docker/swift/swift.conf new file mode 100644 index 0000000000000000000000000000000000000000..e73339733ff02cc5e58ac9c9e0d2a5afd0e6f68b --- /dev/null +++ b/docker/swift/swift.conf @@ -0,0 +1,4 @@ +[swift-hash] +# random unique strings that can never change (DO NOT LOSE) +swift_hash_path_prefix = changeme +swift_hash_path_suffix = changeme \ No newline at end of file