Allow importing existing setups, add basic auth for nginx pisg files

This commit is contained in:
dave 2015-01-24 12:28:16 -08:00
parent 3d1adaf31b
commit 93d22e3765
3 changed files with 95 additions and 11 deletions

View File

@ -1,17 +1,45 @@
Docker ZNC #Docker ZNC
==========
Suitable for create docker containers running ZNC (and sshd!) Suitable for creating docker containers running ZNC. Now with pisg!
##Setup
**General steps:** **General steps:**
* Install docker * Install docker
* Clone this repo, cd in * Clone this repo, cd in
* Load it as a template: `sudo docker build -t znc .` * Load it as a template: `sudo docker build -t znc .`
* Start a new container: `sudo docker run -it -p 666:22 -p 4421:4421 znc /start` * Start a new container: `sudo docker run -it -p 666:22 -p 4421:4421 -p 80:80 znc /start`
* Configure znc
On first start, the znc configuration will run. Set it up as needed; the port znc listens on must be exposed in the command used to start the container (-p 4421:4421 above). The final question asks if you want to start znc, **choose `NO`**.
* Find the new container in your list: `sudo docker ps -a` * Find the new container in your list: `sudo docker ps -a`
* Run it in the background: `sudo docker start mycontainerid` * Run it in the background: `sudo docker start mycontainerid`
When you first run the image, you'll be presented with two ways to configure znc:
###Set up a new znc instance
If no import of existing znc data is available, the znc configuration will run. Set it up as needed; the port znc listens on must be exposed in the command used to start the container (-p 4421:4421 above). The final question asks if you want to start znc, **choose `NO`!!**.
###Import an existing znc instance's configuration
You may migrate an existing ZNC instance into this container by providing a tarball of the source .znc directory. The tarball should contain the .znc directory, only, with everything inside it. The start script will prompt you to insert the .tar.gz file.
##Pisg
This container creates [pisg]-style channel statistics ([example]) for any ZNC users with the "log" module enabled. The stats are regenerated nightly and nginx serves the files on port 80 with a directory structure like this:
* znc username
* znc network name
* \#channelname.html
The channel information is private, nginx is configured with HTTP basic authentication; the password is prompted for during setup.
## TODO
* Ensure pisg cache files don't use too much disk space (/home/znc/pisg/cache)
* If this is a problem, maybe tar/gz channel groups and extract when necessary when running pisg
* Provide a way to make certain channel stat files public
* Provide a way to share channel files with secret links
* Provide all-time, yearly, and monthly pisg outputs
[pisg]:http://pisg.sourceforge.net/
[example]:http://pisg.sourceforge.net/examples

View File

@ -4,6 +4,8 @@ server {
root /home/znc/pisg/output; root /home/znc/pisg/output;
index index.html index.htm; index index.html index.htm;
server_name localhost; server_name localhost;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
location / { location / {
autoindex on; autoindex on;
try_files $uri $uri/ =404; try_files $uri $uri/ =404;

58
start
View File

@ -1,11 +1,65 @@
#!/bin/bash #!/bin/bash
if [ ! -f /home/admin/znc_configured ]; then if [ ! -f /home/admin/znc_configured ]; then
touch /home/admin/znc_configured echo "Welcome! I need to ask you a few questions to configure this ZNC instance for your liking. First, press enter choose and choose a time zone."
read
dpkg-reconfigure tzdata
if [ ! -f /znc.tar.gz ]; then
echo "If you want to load data from and existing znc instance create a tar.gz archive containing only the .znc directory and place it in the root of this container as znc.tar.gz."
echo "Copy the archive to the container using this command: cat znc.tar.gz | docker exec -i <containerid> bash -c \"/bin/cat > /znc.tar.gz\""
echo "Press enter when done. Or, to set up a new znc instance, press enter now."
read
fi
if [ -f /znc.tar.gz ]; then
su -c "cd /home/znc ; tar zxvf /znc.tar.gz " znc
rm /znc.tar.gz
echo "Extracted znc data"
if [ ! -d /home/znc/.znc ]; then
echo ".znc was not in the archive! Aborted"
exit 1
fi
chown -R znc /home/znc/.znc
chgrp -R znc /home/znc/.znc
chmod -R 700 /home/znc/.znc
echo "ZNC settings loaded successfully."
else
echo "Configure ZNC to your liking now. Remember to choose NO when asked to launch znc!!" echo "Configure ZNC to your liking now. Remember to choose NO when asked to launch znc!!"
su -c "/usr/bin/znc --makeconf" znc su -c "/usr/bin/znc --makeconf" znc
echo "ZNC configured successfully."
fi
echo "Enter a username and password to view pisg statistics"
while [ 1 ]; do
echo -n "Username: "
read ng_username
echo -n "Password: "
read -s ng_password
echo ""
echo -n "Password (again): "
read -s ng_password_
echo ""
if [ ! "$ng_password" == "$ng_password_" ] || [ -z "$ng_password" ] || [ -z "$ng_username" ] ; then
echo "Passwords must match and not be blank"
echo ""
continue
fi
break
done
printf "$ng_username:$(openssl passwd -crypt $ng_password)\n" > /etc/nginx/htpasswd
touch /home/admin/znc_configured
echo "Now, run docker start <containerid> run znc in the background."
exit exit
fi fi
supervisord supervisord