Skip to content
Commits on Source (25)
# Instructions to install libre.sh on linux with Systemd # Instructions to install libre.sh on linux with Systemd
## Recommendation ## Recommendation
- Systemd (debian 8 or debian 9, CentOS 7 ...) - Systemd distro (ubuntu server 18.04.3 or debian 9 )
# Installation # Installation
Where basicly reproduce what the user_data do for us. Where basicly reproduce what the user_data do for us.
as root as root
# configure sshd # configure sshd (Optional)
Don't forget to create the user core and adding your ssh key before Don't forget to create the user core and adding your ssh key before
You could also remove AllowUsers core or/and change the username. You could also remove AllowUsers core or/and change the username.
...@@ -25,7 +25,7 @@ chmod 600 /etc/ssh/sshd_config ...@@ -25,7 +25,7 @@ chmod 600 /etc/ssh/sshd_config
systemctl restart sshd systemctl restart sshd
``` ```
# add kernel parameter # add kernel parameter (optional but recommended )
``` ```
cat > /etc/sysctl.d/libresh.conf <<EOF cat > /etc/sysctl.d/libresh.conf <<EOF
...@@ -39,7 +39,7 @@ sysctl -p /etc/sysctl.d/libresh.conf ...@@ -39,7 +39,7 @@ sysctl -p /etc/sysctl.d/libresh.conf
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/enabled
``` ```
# define Localhost # define Localhost (should not be needed but... )
``` ```
cat > /etc/hosts <<EOF cat > /etc/hosts <<EOF
...@@ -74,6 +74,10 @@ MAIL_PORT=587 ...@@ -74,6 +74,10 @@ MAIL_PORT=587
EOF EOF
``` ```
# install docker
*Current tested version : 19.03.5 see https://docs.docker.com/install/linux/docker-ce/ubuntu/ .*
# install docker-compose # install docker-compose
*Remark I did a variante to find the last version of DockerCompose and download it* *Remark I did a variante to find the last version of DockerCompose and download it*
...@@ -88,8 +92,8 @@ chmod +x /opt/bin/docker-compose ...@@ -88,8 +92,8 @@ chmod +x /opt/bin/docker-compose
``` ```
git clone https://lab.libreho.st/libre.sh/compose.libre.sh /libre.sh &&\ git clone https://lab.libreho.st/libre.sh/compose.libre.sh /libre.sh &&\
mkdir /{data,system} &&\ mkdir -p /{data,system} &&\
mkdir /data/trash &&\ mkdir -p /data/trash &&\
cp /libre.sh/unit-files/* /etc/systemd/system && systemctl daemon-reload &&\ cp /libre.sh/unit-files/* /etc/systemd/system && systemctl daemon-reload &&\
systemctl enable web-net.service &&\ systemctl enable web-net.service &&\
systemctl start web-net.service &&\ systemctl start web-net.service &&\
......
# libre.sh # libre.sh Version 1.1
[![Backers on Open Collective](https://opencollective.com/libresh/backers/badge.svg)](#backers) [![Backers on Open Collective](https://opencollective.com/libresh/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/libresh/sponsors/badge.svg)](#sponsors) [![Sponsors on Open Collective](https://opencollective.com/libresh/sponsors/badge.svg)](#sponsors)
......
#!/bin/bash #!/bin/bash
#Current version of libre.sh to be installed #Current version of libre.sh to be installed
LIBRE_VERSION=1.1 LIBRE_VERSION=release/1.2
# System env vars # System env vars : can be overrided by a values.env file next to this install file
## domain handling
### TODO : Specify you template repo ROOT ### CONFIG : Specify you template repo ROOT without training slash (Optional) or comment if you want to supply full url for apps
APP_REPO_URL="lab.libreho.st/libre.sh/compose"
TEMPLATES_ROOT=lab.libreho.st/libre.sh/compose/ ## domain handling
### TODO : change to your domain vendor ( ovh , online, ) ### CONFIG : change to your domain vendor ( namecheap, ovh , scaleway, )
DOMAIN_SERVER=namecheap DOMAIN_SERVER=namecheap
### Namecheap specific ### Namecheap specific
...@@ -18,12 +19,19 @@ NAMECHEAP_URL="namecheap.com" ...@@ -18,12 +19,19 @@ NAMECHEAP_URL="namecheap.com"
NAMECHEAP_API_USER="pierreo" NAMECHEAP_API_USER="pierreo"
NAMECHEAP_API_KEY= NAMECHEAP_API_KEY=
### ovh specific ### ovh specific (WIP)
OVH_URL="eu.api.ovh.com" OVH_URL="eu.api.ovh.com"
OVH_API_USER="" OVH_API_USER=""
OVH_API_KEY= OVH_API_KEY=
### Scaleway specific (WIP)
SCALEWAY_URL=""
SCALEWAY_API_USER=""
SCALEWAY_API_KEY=
### TODO : change your settings
IP="curl -s http://icanhazip.com/" IP="curl -s http://icanhazip.com/"
FirstName="Pierre" FirstName="Pierre"
LastName="Ozoux" LastName="Ozoux"
...@@ -36,16 +44,26 @@ City="Lisbon" ...@@ -36,16 +44,26 @@ City="Lisbon"
CountryCode="PT" CountryCode="PT"
## Backup ## Backup
BACKUP_DESTINATION=root@xxxxx:port BACKUP_DESTINATION=root@xxxxx:port
### CONFIG : Change your mail settings.
## SMTP ## SMTP
MAIL_USER= MAIL_USER=
MAIL_PASS= MAIL_PASS=
MAIL_HOST=mail.indie.host MAIL_HOST=mail.indie.host
MAIL_PORT=587 MAIL_PORT=587
# Default admin emails for apps
ADMIN_EMAIL=support@ekimia.fr
### TODO : source a setting file is present to override defaults
echo "-------- Welcome to libre.sh $LIBRE_VERSION installer" echo "-------- Welcome to libre.sh $LIBRE_VERSION installer"
echo "---- sourcing local values.env file if present"
source values.env
# STEP add kernel parameter # STEP add kernel parameter
...@@ -53,6 +71,20 @@ echo "-------- Welcome to libre.sh $LIBRE_VERSION installer" ...@@ -53,6 +71,20 @@ echo "-------- Welcome to libre.sh $LIBRE_VERSION installer"
echo "-------- setting up system variables" echo "-------- setting up system variables"
echo "APP_REPO_URL=${APP_REPO_URL}" >> /etc/environment
echo "LIBRE_VERSION=${LIBRE_VERSION}" >> /etc/environment
echo "MAIL_USER=${MAIL_USER}" >> /etc/environment
echo "MAIL_PASS=${MAIL_PASS}" >> /etc/environment
echo "MAIL_HOST=${MAIL_HOST}" >> /etc/environment
echo "MAIL_PORT=${MAIL_PORT}" >> /etc/environment
echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> /etc/environment
# STEP Install Docker # STEP Install Docker
...@@ -98,3 +130,5 @@ cat > /etc/profile.d/libre.sh <<EOF ...@@ -98,3 +130,5 @@ cat > /etc/profile.d/libre.sh <<EOF
export PATH=$PATH:/opt/bin export PATH=$PATH:/opt/bin
EOF EOF
chmod 644 /etc/profile.d/libre.sh chmod 644 /etc/profile.d/libre.sh
bash /etc/profile.d/libre.sh
...@@ -91,10 +91,10 @@ case "$1" in ...@@ -91,10 +91,10 @@ case "$1" in
cd /data/domains cd /data/domains
tar cvzf ${2}.tgz ./${2} tar cvzf ${2}.tgz ./${2}
if [ -f ./${2}.tgz ]; then if [ -f ./${2}.tgz ]; then
if [ ! -d /data/domains/to_keep/ ]; then if [ ! -d /data/trash/ ]; then
mkdir /data/domains/to_keep/ mkdir /data/trash/
fi fi
mv ${2}.tgz /data/domains/to_keep/ mv ${2}.tgz /data/trash/
rm -rf /data/domains/${2} rm -rf /data/domains/${2}
rm -rf /system/haproxy/certs/${2} rm -rf /system/haproxy/certs/${2}
rm /system/haproxy/haproxy/certs/${2}.pem rm /system/haproxy/haproxy/certs/${2}.pem
......
...@@ -26,11 +26,13 @@ LOG_LEVEL="${LOG_LEVEL:-6}" # 7 = debug -> 0 = emergency ...@@ -26,11 +26,13 @@ LOG_LEVEL="${LOG_LEVEL:-6}" # 7 = debug -> 0 = emergency
# opts & defaults from. The parsing is unforgiving so be precise in your syntax # opts & defaults from. The parsing is unforgiving so be precise in your syntax
read -r -d '' usage <<-'EOF' read -r -d '' usage <<-'EOF'
-u [arg] URL to process. Required. -u [arg] URL to process. Required.
-a [arg] Application to install. (in the form github.com/indiehosters/wordpress) -a [arg] Application to install. (in the form github.com/indiehosters/wordpress or wordpress in REPO_MODE)
-t [arg] Checkout a specific tag or branch from the application repo. default to master
-e [arg] Specify the email of the application admin
-s Start the application right away. -s Start the application right away.
-b Buys the associated domain name. -b Buys the associated domain name.
-i Configure OpenDKIM. -i Configure OpenDKIM.
-c Configures DNS on Namecheap. -c Configures DNS if possible.
-d Enables debug mode -d Enables debug mode
-h This page -h This page
EOF EOF
...@@ -103,10 +105,34 @@ function buy_domain_name () { ...@@ -103,10 +105,34 @@ function buy_domain_name () {
} }
function application () { function application () {
git clone https://${arg_a}.git /data/domains/${arg_u}
#We check if a APP_REPO_URL was specified
if [ -z ${APP_REPO_URL:-} ]; then
warning "NO repo URL specified, using argument as full URL"
git_url=https://${arg_a}.git
else
warning "REPO specified, using argument as app name"
git_url=https://${APP_REPO_URL}/${arg_a}.git
fi
#Define the tag/branch
git clone ${git_url} -b ${arg_t} /data/domains/${arg_u}
cd /data/domains/${arg_u} cd /data/domains/${arg_u}
if [ -f ./scripts/install ]; then if [ -f ./scripts/install ]; then
export URL=${arg_u} #domain
export URL=${arg_u}
#admin email
if [ -z "${arg_e}" ]; then
warning "No admin_email specified with -e , using default hoster email"
else
export ADMIN_EMAIL=${arg_e}
debug " admin email is ${ADMIN_EMAIL} "
fi
if [ -z ${MAIL_DOMAIN:-} ]; then if [ -z ${MAIL_DOMAIN:-} ]; then
warning "you have no email server setup, we'll print a random configuration in your application. Make sure to check the parameters for your app to send proper emails." warning "you have no email server setup, we'll print a random configuration in your application. Make sure to check the parameters for your app to send proper emails."
warning "To stop having this warning, please configure your libre.sh to be abble to create email accounts." warning "To stop having this warning, please configure your libre.sh to be abble to create email accounts."
...@@ -117,14 +143,16 @@ function application () { ...@@ -117,14 +143,16 @@ function application () {
export MAIL_HOST="mail.indie.host" export MAIL_HOST="mail.indie.host"
export MAIL_PORT="587" export MAIL_PORT="587"
else else
export MAIL_PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c 20 | xargs` echo "using MAIL_DOMAIN from server env"
export MAIL_USER="noreply.${arg_u}@${MAIL_DOMAIN}" #export MAIL_PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c 20 | xargs`
/opt/bin/add_mailbox ${MAIL_USER} ${MAIL_PASS} #export MAIL_USER="noreply.${arg_u}@${MAIL_DOMAIN}"
#/opt/bin/add_mailbox ${MAIL_USER} ${MAIL_PASS}
fi fi
./scripts/install ./scripts/install
fi fi
} }
function start () { function start () {
systemctl start u@${arg_u} systemctl start u@${arg_u}
systemctl enable u@${arg_u} systemctl enable u@${arg_u}
...@@ -200,6 +228,8 @@ fi ...@@ -200,6 +228,8 @@ fi
[ -z "${arg_u}" ] && help "URL is required." [ -z "${arg_u}" ] && help "URL is required."
[ -z "${LOG_LEVEL}" ] && emergency "Cannot continue without LOG_LEVEL." [ -z "${LOG_LEVEL}" ] && emergency "Cannot continue without LOG_LEVEL."
# tags/branch for modules
[ -z "${arg_t}" ] && arg_t=master
### Runtime ### Runtime
......