nicolas.dorier
7 years ago
1 changed files with 252 additions and 0 deletions
@ -0,0 +1,252 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
if [[ $EUID -ne 0 ]]; then |
||||
|
echo "This script must be run as root" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [[ ! -d "Production-NoReverseProxy" ]]; then |
||||
|
echo "You must run this script from inside the btcpayserver-docker folder" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if ! git -C . rev-parse |
||||
|
echo "You must run this script inside the git repository of btcpayserver-docker" |
||||
|
then |
||||
|
|
||||
|
function display_help () { |
||||
|
cat <<-END |
||||
|
Usage: |
||||
|
------ |
||||
|
This script must be run as root |
||||
|
-i : Run install |
||||
|
|
||||
|
This script will: |
||||
|
|
||||
|
* Install Docker |
||||
|
* Install Docker-Compose |
||||
|
* Setup BTCPay settings |
||||
|
* Make sure it starts at reboot via upstart or systemd |
||||
|
* Add BTCPay utilities in /usr/bin |
||||
|
* Start BTCPay |
||||
|
|
||||
|
You can run again this script if you desire to change your configuration. |
||||
|
|
||||
|
Make sure you own a domain with DNS record pointing to your website and that port 80 is accessible before running this script. |
||||
|
This will be used to properly setup HTTPS via let's encrypt. |
||||
|
|
||||
|
Environment variables: |
||||
|
BTCPAY_HOST: The hostname of your website (eg. btcpay.example.com) |
||||
|
LETSENCRYPT_EMAIL: A mail will be sent to this address if certificate expires and fail to renew automatically (eg. me@example.com, Default:me@example.com) |
||||
|
NBITCOIN_NETWORK: The type of network to use (eg. mainnet, testnet or regtest. Default: mainnet) |
||||
|
LIGHTNING_ALIAS: An alias for your lightning network node if used |
||||
|
BTCPAYGEN_CRYPTO1: First supported crypto currency (eg. btc, ltc, none. Default: btc) |
||||
|
BTCPAYGEN_CRYPTO2: Second supported crypto currency (eg. btc, ltc, none. Default: empty) |
||||
|
BTCPAYGEN_CRYPTON: N th supported crypto currency where N is maximum at maximum 9. (eg. btc, ltc. Default: none) |
||||
|
BTCPAYGEN_REVERSEPROXY: Whether to use or not a reverse proxy. NGinx setup HTTPS for you. (eg. nginx, none. Default: nginx) |
||||
|
BTCPAYGEN_LIGHTNING: Lightning network implementation to use (eg. clightning, none) |
||||
|
ACME_CA_URI: The API endpoint to ask for HTTPS certificate (default: https://acme-v01.api.letsencrypt.org/directory) |
||||
|
END |
||||
|
} |
||||
|
|
||||
|
if [ "$1" != "-i" ]; then |
||||
|
display_help() |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
: "${LETSENCRYPT_EMAIL:=me@example.com}" |
||||
|
: "${NBITCOIN_NETWORK:=mainnet}" |
||||
|
: "${BTCPAYGEN_CRYPTO1:=btc}" |
||||
|
: "${BTCPAYGEN_REVERSEPROXY:=nginx}" |
||||
|
: "${BTCPAYGEN_LIGHTNING:=none}" |
||||
|
: "${ACME_CA_URI:=https://acme-v01.api.letsencrypt.org/directory}" |
||||
|
|
||||
|
ORIGINAL_DIRECTORY=$(pwd) |
||||
|
BTCPAY_BASE_DIRECTORY="$(dirname $(pwd))" |
||||
|
BTCPAY_DOCKER_COMPOSE="$(pwd)/Generated/docker-compose.generated.yml" |
||||
|
BTCPAY_ENV_FILE="$BTCPAY_BASE_DIRECTORY/.env" |
||||
|
|
||||
|
echo " |
||||
|
-------SETUP----------- |
||||
|
Parameters passed: |
||||
|
BTCPAY_HOST:$BTCPAY_HOST |
||||
|
LETSENCRYPT_EMAIL:$LETSENCRYPT_EMAIL |
||||
|
NBITCOIN_NETWORK:$NBITCOIN_NETWORK |
||||
|
LIGHTNING_ALIAS:$LIGHTNING_ALIAS |
||||
|
BTCPAYGEN_CRYPTO1:$BTCPAYGEN_CRYPTO1 |
||||
|
BTCPAYGEN_CRYPTO2:$BTCPAYGEN_CRYPTO2 |
||||
|
BTCPAYGEN_CRYPTO3:$BTCPAYGEN_CRYPTO3 |
||||
|
BTCPAYGEN_CRYPTO4:$BTCPAYGEN_CRYPTO4 |
||||
|
BTCPAYGEN_CRYPTO5:$BTCPAYGEN_CRYPTO5 |
||||
|
BTCPAYGEN_CRYPTO6:$BTCPAYGEN_CRYPTO6 |
||||
|
BTCPAYGEN_CRYPTO7:$BTCPAYGEN_CRYPTO7 |
||||
|
BTCPAYGEN_CRYPTO8:$BTCPAYGEN_CRYPTO8 |
||||
|
BTCPAYGEN_CRYPTO9:$BTCPAYGEN_CRYPTO9 |
||||
|
BTCPAYGEN_REVERSEPROXY:$BTCPAYGEN_REVERSEPROXY |
||||
|
BTCPAYGEN_LIGHTNING:$BTCPAYGEN_LIGHTNING |
||||
|
ACME_CA_URI:$ACME_CA_URI |
||||
|
---------------------- |
||||
|
Additional exported variables: |
||||
|
BTCPAY_DOCKER_COMPOSE=$BTCPAY_DOCKER_COMPOSE |
||||
|
BTCPAY_BASE_DIRECTORY=$BTCPAY_BASE_DIRECTORY |
||||
|
BTCPAY_ENV_FILE=$BTCPAY_ENV_FILE |
||||
|
---------------------- |
||||
|
" |
||||
|
|
||||
|
if [ -z "$BTCPAY_HOST" ]; then |
||||
|
echo "BTCPAY_HOST should not be empty" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ -z "$BTCPAYGEN_CRYPTO1" ]; then |
||||
|
echo "BTCPAYGEN_CRYPTO1 should not be empty" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ "$NBITCOIN_NETWORK" != "mainnet" ] && [ "$NBITCOIN_NETWORK" != "testnet" ] && [ "$NBITCOIN_NETWORK" != "regtest" ]; then |
||||
|
echo "NBITCOIN_NETWORK should be equal to mainnet, testnet or regtest" |
||||
|
fi |
||||
|
|
||||
|
export BTCPAY_DOCKER_COMPOSE |
||||
|
export BTCPAY_BASE_DIRECTORY |
||||
|
export BTCPAY_ENV_FILE |
||||
|
|
||||
|
# Put the variables in /etc/profile.d when a user log interactively |
||||
|
touch "/etc/profile.d/btcpay-env.sh" |
||||
|
echo " |
||||
|
export BTCPAY_HOST=\"$BTCPAY_HOST\" |
||||
|
export LETSENCRYPT_EMAIL=\"$LETSENCRYPT_EMAIL\" |
||||
|
export NBITCOIN_NETWORK=\"$NBITCOIN_NETWORK\" |
||||
|
export LIGHTNING_ALIAS=\"$LIGHTNING_ALIAS\" |
||||
|
export BTCPAYGEN_CRYPTO1=\"$BTCPAYGEN_CRYPTO1\" |
||||
|
export BTCPAYGEN_CRYPTO2=\"$BTCPAYGEN_CRYPTO2\" |
||||
|
export BTCPAYGEN_CRYPTO3=\"$BTCPAYGEN_CRYPTO3\" |
||||
|
export BTCPAYGEN_CRYPTO4=\"$BTCPAYGEN_CRYPTO4\" |
||||
|
export BTCPAYGEN_CRYPTO5=\"$BTCPAYGEN_CRYPTO5\" |
||||
|
export BTCPAYGEN_CRYPTO6=\"$BTCPAYGEN_CRYPTO6\" |
||||
|
export BTCPAYGEN_CRYPTO7=\"$BTCPAYGEN_CRYPTO7\" |
||||
|
export BTCPAYGEN_CRYPTO8=\"$BTCPAYGEN_CRYPTO8\" |
||||
|
export BTCPAYGEN_CRYPTO9=\"$BTCPAYGEN_CRYPTO9\" |
||||
|
export BTCPAYGEN_LIGHTNING=\"$BTCPAYGEN_LIGHTNING\" |
||||
|
export ACME_CA_URI=\"$ACME_CA_URI\" |
||||
|
export BTCPAY_DOCKER_COMPOSE=\"$BTCPAY_DOCKER_COMPOSE\" |
||||
|
export BTCPAY_BASE_DIRECTORY=\"$BTCPAY_BASE_DIRECTORY\" |
||||
|
export BTCPAY_ENV_FILE=\"$BTCPAY_ENV_FILE\"" > /etc/profile.d/btcpay-env.sh |
||||
|
chmod +x /etc/profile.d/btcpay-env.sh |
||||
|
echo "BTCPay Server environment variables successfully saved in /etc/profile.d/btcpay-env.sh" |
||||
|
|
||||
|
if ! [ -x "$(command -v docker)" ]; then |
||||
|
apt-get update 2>error |
||||
|
apt-get install -y \ |
||||
|
curl \ |
||||
|
apt-transport-https \ |
||||
|
ca-certificates \ |
||||
|
software-properties-common \ |
||||
|
2>error |
||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - |
||||
|
add-apt-repository \ |
||||
|
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ |
||||
|
$(lsb_release -cs) \ |
||||
|
stable" |
||||
|
apt-get update |
||||
|
if apt-get install -y docker-ce ; then |
||||
|
echo "Docker installed" |
||||
|
else |
||||
|
if [ $(lsb_release -cs) == "bionic" ]; then |
||||
|
# Bionic not in the repo yet, see https://linuxconfig.org/how-to-install-docker-on-ubuntu-18-04-bionic-beaver |
||||
|
add-apt-repository \ |
||||
|
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ |
||||
|
artful \ |
||||
|
stable" |
||||
|
apt-get update |
||||
|
apt-get install -y docker-ce |
||||
|
fi |
||||
|
fi |
||||
|
else |
||||
|
echo "docker is already installed" |
||||
|
fi |
||||
|
|
||||
|
# Install docker-compose |
||||
|
if ! [ -x "$(command -v docker-compose)" ]; then |
||||
|
apt-get update 2>error |
||||
|
apt-get install -y \ |
||||
|
curl \ |
||||
|
apt-transport-https \ |
||||
|
ca-certificates \ |
||||
|
software-properties-common \ |
||||
|
2>error |
||||
|
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose |
||||
|
chmod +x /usr/local/bin/docker-compose |
||||
|
else |
||||
|
echo "docker-compose is already installed" |
||||
|
fi |
||||
|
|
||||
|
# Set .env file |
||||
|
touch $BTCPAY_ENV_FILE |
||||
|
echo " |
||||
|
BTCPAY_HOST=$BTCPAY_HOST |
||||
|
ACME_CA_URI=$ACME_CA_URI |
||||
|
NBITCOIN_NETWORK=$NBITCOIN_NETWORK |
||||
|
LETSENCRYPT_EMAIL=$LETSENCRYPT_EMAIL |
||||
|
LIGHTNING_ALIAS=$LIGHTNING_ALIAS" > $BTCPAY_ENV_FILE |
||||
|
echo "BTCPay Server docker-compose parameters saved in $BTCPAY_ENV_FILE" |
||||
|
|
||||
|
# Generate the docker compose in BTCPAY_DOCKER_COMPOSE |
||||
|
. ./build.sh |
||||
|
|
||||
|
cd BTCPAY_BASE_DIRECTORY |
||||
|
|
||||
|
# Schedule for reboot |
||||
|
if [ -d "/etc/systemd/system" ]; then # Use systemd |
||||
|
|
||||
|
echo "Adding btcpayserver.service to systemd" |
||||
|
echo " |
||||
|
[Unit] |
||||
|
Description=BTCPayServer service |
||||
|
After=docker.service network-online.target |
||||
|
Requires=docker.service network-online.target |
||||
|
|
||||
|
[Service] |
||||
|
Type=oneshot |
||||
|
RemainAfterExit=yes |
||||
|
|
||||
|
ExecStart=/bin/bash -c '. /etc/profile.d/btcpay-env.sh && cd \"\$(dirname \$BTCPAY_ENV_FILE)\" && docker-compose -f \"\$BTCPAY_DOCKER_COMPOSE\" up -d' |
||||
|
ExecStop=/bin/bash -c '. /etc/profile.d/btcpay-env.sh && cd \"\$(dirname \$BTCPAY_ENV_FILE)\" && docker-compose -f \"\$BTCPAY_DOCKER_COMPOSE\" stop' |
||||
|
ExecReload=/bin/bash -c '. /etc/profile.d/btcpay-env.sh && cd \"\$(dirname \$BTCPAY_ENV_FILE)\" && docker-compose -f \"\$BTCPAY_DOCKER_COMPOSE\" restart' |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=multi-user.target" > /etc/systemd/system/btcpayserver.service |
||||
|
|
||||
|
echo "BTCPay Server systemd configured in /etc/systemd/system/btcpayserver.service" |
||||
|
systemctl daemon-reload |
||||
|
systemctl enable btcpayserver |
||||
|
systemctl start btcpayserver |
||||
|
echo "BTCPay Server started" |
||||
|
else # Use upstart |
||||
|
echo "Using upstart" |
||||
|
echo " |
||||
|
# File is saved under /etc/init/start_containers.conf |
||||
|
# After file is modified, update config with : $ initctl reload-configuration |
||||
|
|
||||
|
description \"Start containers (see http://askubuntu.com/a/22105 and http://askubuntu.com/questions/612928/how-to-run-docker-compose-at-bootup)\" |
||||
|
|
||||
|
start on filesystem and started docker |
||||
|
stop on runlevel [!2345] |
||||
|
|
||||
|
# if you want it to automatically restart if it crashes, leave the next line in |
||||
|
# respawn # might cause over charge |
||||
|
|
||||
|
script |
||||
|
. /etc/profile.d/btcpay-env.sh |
||||
|
cd \"`dirname \$BTCPAY_ENV_FILE`\" |
||||
|
docker-compose -f \"\$BTCPAY_DOCKER_COMPOSE\" up -d |
||||
|
end script" > /etc/init/start_containers.conf |
||||
|
echo "BTCPay Server upstart configured in /etc/init/start_containers.conf" |
||||
|
initctl reload-configuration |
||||
|
docker-compose -f "$BTCPAY_DOCKER_COMPOSE" up -d |
||||
|
echo "BTCPay Server started" |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
find "$ORIGINAL_DIRECTORY" -name "*.sh" -exec chmod +x {} \; |
||||
|
find "$ORIGINAL_DIRECTORY" -name "*.sh" -exec ln -s {} /usr/bin \; |
Loading…
Reference in new issue