From 557c595c93b46624b8f3ff24ba95c3dc7153f248 Mon Sep 17 00:00:00 2001 From: David Luu Date: Sun, 18 Sep 2016 00:02:37 -0700 Subject: [PATCH] first draft of Dockerfile for textbelt, builds but doesn't fully work as expected --- Dockerfile | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cc5b30b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,84 @@ +# can use an alternative base image as well +FROM phusion/baseimage:0.9.19 + +# set your node version, if desired +RUN curl -sL https://deb.nodesource.com/setup_4.x | bash - +RUN apt-get install -y nodejs + +# install other dependencies +# install a local redis server - per http://redis.io/topics/quickstart +RUN curl -O http://download.redis.io/redis-stable.tar.gz +RUN tar xvzf redis-stable.tar.gz +RUN mv redis-stable /opt/redis-stable +# for access to make +RUN apt-get install -y --reinstall build-essential +RUN cd /opt/redis-stable && make && cd .. +RUN rm redis-stable.tar.gz +RUN mkdir -p /etc/redis +RUN mkdir -p /var/redis +# make customizations to the redis conf as needed +RUN mkdir -p /var/redis/6379 +RUN cp /opt/redis-stable/utils/redis_init_script /etc/init.d/redis_6379 +RUN sed -i -- 's|daemonize no|daemonize yes|g' /opt/redis-stable/redis.conf +RUN sed -i -- 's|pidfile /var/run/redis.pid|pidfile /var/run/redis_6379.pid|g' /opt/redis-stable/redis.conf +#RUN sed -i -- 's|port 6379|port 8080|g' /opt/redis-stable/redis.conf +#RUN sed -i -- 's|loglevel notice|loglevel debug|g' /opt/redis-stable/redis.conf +RUN sed -i -- 's|logfile ""|logfile /var/log/redis_6379.log|g' /opt/redis-stable/redis.conf +RUN sed -i -- 's|dir ./|dir /var/redis/6379|g' /opt/redis-stable/redis.conf +RUN cp /opt/redis-stable/redis.conf /etc/redis/6379.conf +RUN cp /opt/redis-stable/src/redis-server /usr/local/bin/ +RUN cp /opt/redis-stable/src/redis-cli /usr/local/bin/ +RUN update-rc.d redis_6379 defaults +# now should be able to start redis with: /etc/init.d/redis_6379 start +# install mutt locally, and install it silently/non-interactively +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get install -y mutt +# install a local nginx for reverse proxy / load balancing, or IP rate limiting? +#RUN apt-get update +#RUN apt-get install -y nginx +# any nginx customizations & running as service setup go here... +# TODO: to enable accurate IP rate limiting, the reverse proxy should be configured to set the `X-Real-IP` header +# install screen - in case want to start services manually in background and switch between them as windows via screen +RUN apt-get install -y screen + +# Create app directory +RUN mkdir -p /opt/textbelt/ +ENV HOME /opt/textbelt/ +WORKDIR /opt/textbelt/ +COPY package.json /opt/textbelt/ + +# Install node.js dependencies +RUN apt-get install -y git +RUN npm install + +# Bundle app source +COPY . /opt/textbelt/ + +# (any) textbelt customizations (to save in docker image) +RUN sed -i -- "s|fromAddress = 'foo@bar.com'|fromAddress = 'me@mydomain.com'|g" /opt/textbelt/lib/text.js +#RUN rm /opt/textbelt/lib/text.js-- + +# Clean up APT when done. +RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +EXPOSE 9090 + +# Use baseimage-docker's init process. +CMD ["/sbin/my_init"] + +# now you can use try using the docker image +# - as a server: (then make REST calls to it to send message) +# run command : docker run --rm -it -p 9090:9090 typpo/textbelt node server/app.js +# - as node.js module/client: +# run command: docker run --rm -it typpo/textbelt node +# then copy/paste or type in the code to send message as shown README example +# or run command: docker run --rm -it typpo/textbelt node pathTo/yourScript.js +# assuming your script has the code that calls the textbelt module to send message +# or run command: docker run --rm -it -p 9090:9090 typpo/textbelt bash +# to be taken to the shell for you to debug and test things out +# e.g. start/stop/query redis, nginx, test/use mutt +# run textbelt as module in node shell, node script, or start textbelt server + +# NOTE: if you use an external redis server and/or external reverse proxy / load balancer +# you will need to handle the network config and mapping such that the textbelt +# docker container can talk to those servers (which may or may not be in their own docker containers)