Merge pull request #64 from classabbyamp/docker

Docker files!
This commit is contained in:
Abigail Gold 2019-11-05 01:33:46 -05:00 committed by GitHub
commit 4d86c2d9be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 134 additions and 35 deletions

1
.dockerignore Normal file
View File

@ -0,0 +1 @@
data/

1
.gitignore vendored
View File

@ -7,6 +7,7 @@ cty.json
cty.zip cty.zip
botenv/ botenv/
data/
######################################################### #########################################################

35
Dockerfile Normal file
View File

@ -0,0 +1,35 @@
FROM python:3-alpine
COPY . /app
WORKDIR /app
ENV PYTHON_BIN python3
RUN \
echo "**** install build packages ****" && \
apk add --no-cache --virtual=build-dependencies \
g++ \
git \
gcc \
libxml2-dev \
libxslt-dev \
libressl-dev \
python3-dev && \
echo "**** install runtime packages ****" && \
apk add --no-cache \
libressl \
py3-lxml \
py3-pip \
python3 && \
echo "**** install pip packages ****" && \
pip3 install -U pip setuptools wheel && \
pip3 install -r requirements.txt && \
echo "**** clean up ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/* \
/var/cache/apk/*
CMD ["/bin/sh", "run.sh", "--pass-errors", "--no-botenv"]

View File

@ -1,31 +1,24 @@
# A quick installation script for discord bots. # A quick installation script for painless discord bots.
# # v1.1.0
# Copyright (c) 2019 0x5c # Copyright (c) 2019 0x5c
# Released under the terms of the MIT license. # Released under the terms of the MIT license.
# # Part of:
# https://github.com/0x5c/discord.py-quickinstall # https://github.com/0x5c/quick-bot-no-pain
#### Setup ####
.DEFAULT_GOAL := help .DEFAULT_GOAL := help
## Variables ## ### Variables ###
# Those are the defaults; they can be over-ridden if specified # Those are the defaults; they can be over-ridden if specified
# at en environment level or as 'make' arguments. # at en environment level or as 'make' arguments.
BOTENV ?= botenv BOTENV ?= botenv
PY3DOT ?= 7 PYTHON_BIN ?= python3.7
PIP_OUTPUT ?= q PIP_OUTPUT ?= -q
# Define some rules as phony ### Support targets ###
.PHONY: help install clean onlyenv
#### Targets ####
## Support targets ##
.PHONY: help
help: help:
@echo "" @echo ""
@echo "\033[97m>>>>>> Default dummy target <<<<<<" @echo "\033[97m>>>>>> Default dummy target <<<<<<"
@ -35,16 +28,17 @@ help:
@echo "\033[0m" @echo "\033[0m"
## Actual install/setup targets ## ### Actual install/setup targets ###
# Main install target # Main install target
.PHONY: install
install: $(BOTENV)/req_done options.py keys.py install: $(BOTENV)/req_done options.py keys.py
# Virual environment setup # Virual environment setup
$(BOTENV)/success: $(BOTENV)/success:
ifneq ("$(wildcard ./$(BOTENV).)",) ifneq ("$(wildcard ./$(BOTENV).)",)
@echo "\033[94m--> Creating the virtual environment...\033[0m" @echo "\033[94m--> Creating the virtual environment...\033[0m"
@python3.$(PY3DOT) -m venv $(BOTENV) @$(PYTHON_BIN) -m venv $(BOTENV)
@touch $(BOTENV)/success @touch $(BOTENV)/success
endif endif
@ -52,17 +46,21 @@ endif
$(BOTENV)/req_done: requirements.txt $(BOTENV)/success $(BOTENV)/req_done: requirements.txt $(BOTENV)/success
@echo "\033[34;1m--> Installing the dependencies...\033[0m" @echo "\033[34;1m--> Installing the dependencies...\033[0m"
@. $(BOTENV)/bin/activate; \ @. $(BOTENV)/bin/activate; \
pip install -${PIP_OUTPUT} -U pip setuptools wheel; \ pip install ${PIP_OUTPUT} -U pip setuptools wheel; \
pip install -${PIP_OUTPUT} -U -r requirements.txt pip install ${PIP_OUTPUT} -U -r requirements.txt
@touch $(BOTENV)/req_done @touch $(BOTENV)/req_done
data:
mkdir data
# Copying templates # Copying templates
options.py keys.py: options.py keys.py: | data
@echo "\033[34;1m--> Copying template files...\033[0m" @echo "\033[34;1m--> Copying template files...\033[0m"
@cp -nv ./templates/template_$@ ./$@ @cp -nv ./templates/template_$@ ./data/$@
@touch ./$@ @touch ./data/$@
# Deletes the python cache and the virtual environment # Deletes the python cache and the virtual environment
.PHONY: clean
clean: clean:
@echo "\033[34;1m--> Removing python cache files...\033[0m" @echo "\033[34;1m--> Removing python cache files...\033[0m"
rm -rf __pycache__ rm -rf __pycache__
@ -70,8 +68,9 @@ clean:
rm -rf $(BOTENV) rm -rf $(BOTENV)
## Dev targets ## ### Dev targets ###
## Weird dev targets ## ### Special targets ###
.PHONY: onlyenv
onlyenv: $(BOTENV)/success onlyenv: $(BOTENV)/success

11
README-DOCKER.md Normal file
View File

@ -0,0 +1,11 @@
A sample `docker-compose.yml` file:
```yaml
version: '3'
services:
bot:
image: "classabbyamp/discord-qrm-bot:latest"
container_name: "qrmbot"
volumes:
- "./data:/app/data:rw"
```

View File

@ -4,6 +4,26 @@ A discord bot with ham radio functionalities.
An independent rewrite of qrmbot-discord. An independent rewrite of qrmbot-discord.
## Running
### Docker
See [README-DOCKER.md](./README-DOCKER.md)
### Without Docker
Prep the environment. For more information on extra options, see the [quick-bot-no-pain Makefile documentation](https://github.com/0x5c/quick-bot-no-pain/blob/master/docs/makefile.md).
```
$ make install
```
Run. For more information on options, see the [quick-bot-no-pain run.sh documentation](https://github.com/0x5c/quick-bot-no-pain/blob/master/docs/run.sh.md).
```
$ run.sh
```
## Copyright ## Copyright
Copyright (C) 2019 Abigail Gold, 0x5c Copyright (C) 2019 Abigail Gold, 0x5c

7
docker-compose.yml Normal file
View File

@ -0,0 +1,7 @@
version: '3'
services:
bot:
build: .
container_name: "qrmbot"
volumes:
- "./data:/app/data:rw"

View File

@ -15,8 +15,8 @@ from discord.ext import commands, tasks
import info import info
import options as opt from data import options as opt
import keys from data import keys
# --- Settings --- # --- Settings ---

41
run.sh
View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/sh
# A wrapper script for painless discord bots. # A wrapper script for painless discord bots.
# v1.0.0 # v1.2.0
# Copyright (c) 2019 0x5c # Copyright (c) 2019 0x5c
# Released under the terms of the MIT license. # Released under the terms of the MIT license.
# Part of: # Part of:
@ -9,13 +9,34 @@
# If $BOTENV is not defined, default to 'botenv' # If $BOTENV is not defined, default to 'botenv'
if [[ -z ${BOTENV+x} ]]; then if [ -z "$BOTENV" ]; then
BOTENV='botenv' BOTENV='botenv'
fi fi
# Argument handling # ? TODO: Argument passing ?
if [[ $1 == '--pass-errors' ]]; then # Argument handling
_PASS_ERRORS=1 _PASS_ERRORS=0
_NO_BOTENV=0
while [ ! -z "$1" ]; do
case $1 in
--pass-errors)
_PASS_ERRORS=1
;;
--no-botenv)
_NO_BOTENV=1
;;
--)
shift
break
;;
esac
shift
done
# If $PYTHON_BIN is not defined, default to 'python3.7'
if [ $_NO_BOTENV -eq 1 -a -z "$PYTHON_BIN" ]; then
PYTHON_BIN='python3.7'
fi fi
@ -31,7 +52,7 @@ code_handling() {
return # The bot whishes to be restarted (returns to the loop). return # The bot whishes to be restarted (returns to the loop).
;; ;;
*) *)
if [[ $_PASS_ERRORS -eq 0 ]]; then # The bot crashed and: if [ $_PASS_ERRORS -eq 0 ]; then # The bot crashed and:
echo "$_message: restarting" echo "$_message: restarting"
return # ...we should return to the loop to restart it. return # ...we should return to the loop to restart it.
else else
@ -47,7 +68,11 @@ echo "$0: Starting bot..."
# The loop # The loop
while true; do while true; do
./$BOTENV/bin/python3 main.py if [ $_NO_BOTENV -eq 1 ]; then
"$PYTHON_BIN" main.py $@
else
./$BOTENV/bin/python3 main.py $@
fi
err=$? err=$?
_message="$0: The bot exited with [$err]" _message="$0: The bot exited with [$err]"
code_handling code_handling