mirror of
https://github.com/community-scripts/ProxmoxVE
synced 2025-02-06 15:59:17 +00:00
Added outline
This commit is contained in:
parent
89cbb27f7c
commit
76807c72e4
109
ct/outline.sh
Normal file
109
ct/outline.sh
Normal file
@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2024 community-scripts ORG
|
||||
# Author: Gerhard Burger (burgerga)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
function header_info {
|
||||
clear
|
||||
cat <<"EOF"
|
||||
____ __ ___
|
||||
/ __ \__ __/ /_/ (_)___ ___
|
||||
/ / / / / / / __/ / / __ \/ _ \
|
||||
/ /_/ / /_/ / /_/ / / / / / __/
|
||||
\____/\__,_/\__/_/_/_/ /_/\___/
|
||||
|
||||
EOF
|
||||
}
|
||||
header_info
|
||||
echo -e "Loading..."
|
||||
APP="Outline"
|
||||
var_disk="8"
|
||||
var_cpu="2"
|
||||
var_ram="4096"
|
||||
var_os="debian"
|
||||
var_version="12"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function default_settings() {
|
||||
CT_TYPE="1"
|
||||
PW=""
|
||||
CT_ID=$NEXTID
|
||||
HN=$NSAPP
|
||||
DISK_SIZE="$var_disk"
|
||||
CORE_COUNT="$var_cpu"
|
||||
RAM_SIZE="$var_ram"
|
||||
BRG="vmbr0"
|
||||
NET="dhcp"
|
||||
GATE=""
|
||||
APT_CACHER=""
|
||||
APT_CACHER_IP=""
|
||||
DISABLEIP6="no"
|
||||
MTU=""
|
||||
SD=""
|
||||
NS=""
|
||||
MAC=""
|
||||
VLAN=""
|
||||
SSH="no"
|
||||
VERB="no"
|
||||
echo_default
|
||||
}
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/outline ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop outline
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE} (Patience)"
|
||||
cd /opt
|
||||
cp /opt/outline/.env /opt/.env
|
||||
mv /opt/outline /opt/outline_bak
|
||||
wget -q "https://github.com/outline/outline/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv outline-${RELEASE:1} /opt/outline
|
||||
cd /opt/outline
|
||||
|
||||
## Build in development mode
|
||||
unset NODE_ENV
|
||||
yarn install --no-optional --frozen-lockfile &>/dev/null &&
|
||||
yarn cache clean &>/dev/null &&
|
||||
yarn build &>/dev/null
|
||||
|
||||
## Continue in production mode
|
||||
rm -rf ./node_modules
|
||||
yarn install --production=true--frozen-lockfile &>/dev/null &&
|
||||
yarn cache clean &>/dev/null
|
||||
|
||||
mv /opt/.env /opt/outline/.env
|
||||
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start outline
|
||||
msg_ok "Started ${APP}"
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
rm -rf /opt/outline_bak
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
157
install/outline-install.sh
Normal file
157
install/outline-install.sh
Normal file
@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2024 community-scripts ORG
|
||||
# Author: Gerhard Burger (burgerga)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
read -r -p "Enter the public url for your Outline instance (e.g., https://outline.your-domain.tld)): " URL
|
||||
read -r -p "Would you like to add Adminer? <y/N> " adminer_prompt
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
sudo \
|
||||
curl \
|
||||
lsb-release \
|
||||
postgresql \
|
||||
gnupg \
|
||||
unzip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
NODE_MAJOR=20
|
||||
mkdir -p /etc/apt/keyrings
|
||||
wget -qO- https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
msg_ok "Set up Node.js Repository"
|
||||
|
||||
msg_info "Setting up Redis Repository"
|
||||
wget -qO- https://packages.redis.io/gpg | gpg --dearmor -o /etc/apt/keyrings/redis-archive-keyring.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" >/etc/apt/sources.list.d/redis.list
|
||||
msg_ok "Set up Redis Repository"
|
||||
|
||||
msg_info "Installing Node.js/Yarn"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g yarn
|
||||
msg_ok "Installed Node.js/Yarn"
|
||||
|
||||
msg_info "Installing Redis"
|
||||
$STD apt-get install -y redis
|
||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
|
||||
systemctl enable -q --now redis-server.service
|
||||
msg_ok "Installed Redis"
|
||||
|
||||
msg_info "Setting up PostgreSQL DB"
|
||||
SECRET_KEY="$(openssl rand -hex 32)"
|
||||
UTILS_SECRET="$(openssl rand -hex 32)"
|
||||
DB_NAME=outlinedb
|
||||
DB_USER=outline
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -d '/' | cut -c1-13)"
|
||||
DATABASE_URL="postgres://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER WITH CREATEDB;"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||
|
||||
{
|
||||
echo "Outline-Credentials"
|
||||
echo "Outline Database User: $DB_USER"
|
||||
echo "Outline Database Password: $DB_PASS"
|
||||
echo "Outline Database Name: $DB_NAME"
|
||||
echo "Outline Secret: $SECRET_KEY"
|
||||
echo "Outline Utils Secret: $UTILS_SECRET"
|
||||
} >> ~/outline.creds
|
||||
msg_ok "Set up PostgreSQL DB"
|
||||
|
||||
|
||||
if [[ "${adminer_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Adminer"
|
||||
$STD apt install -y adminer
|
||||
$STD a2enconf adminer
|
||||
systemctl reload apache2
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
{
|
||||
echo ""
|
||||
echo "Adminer Interface: $IP/adminer/"
|
||||
echo "Adminer System: PostgreSQL"
|
||||
echo "Adminer Server: localhost:5432"
|
||||
echo "Adminer Username: $DB_USER"
|
||||
echo "Adminer Password: $DB_PASS"
|
||||
echo "Adminer Database: $DB_NAME"
|
||||
} >> ~/outline.creds
|
||||
msg_ok "Installed Adminer"
|
||||
fi
|
||||
|
||||
msg_info "Installing $APPLICATION (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/outline/outline/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv outline-${RELEASE:1} /opt/outline
|
||||
cd /opt/outline
|
||||
|
||||
## First build in development
|
||||
$STD yarn install --no-optional --frozen-lockfile
|
||||
$STD yarn cache clean
|
||||
$STD yarn build
|
||||
|
||||
## Continue in production
|
||||
rm -rf ./node_modules
|
||||
$STD yarn install --production=true--frozen-lockfile
|
||||
$STD yarn cache clean
|
||||
|
||||
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
|
||||
mkdir -p $FILE_STORAGE_LOCAL_ROOT_DIR
|
||||
|
||||
{
|
||||
echo NODE_ENV=production
|
||||
echo SECRET_KEY=$SECRET_KEY
|
||||
echo UTILS_SECRET=$UTILS_SECRET
|
||||
echo DATABASE_URL=$DATABASE_URL
|
||||
echo REDIS_URL=redis://localhost:6379
|
||||
echo URL=$URL
|
||||
echo FILE_STORAGE=local
|
||||
echo FILE_STORAGE_LOCAL_ROOT_DIR=$FILE_STORAGE_LOCAL_ROOT_DIR
|
||||
echo FILE_STORAGE_UPLOAD_MAX_SIZE=262144000
|
||||
echo WEB_CONCURRENCY=2
|
||||
} > /opt/outline/.env
|
||||
|
||||
$STD yarn sequelize db:create
|
||||
$STD yarn sequelize db:migrate
|
||||
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed $APPLICATION"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/outline.service
|
||||
[Unit]
|
||||
Description=Linkwarden Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
WorkingDirectory=/opt/outline
|
||||
ExecStart=/usr/bin/yarn start
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now outline.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
47
json/outline.json
Normal file
47
json/outline.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "Outline",
|
||||
"slug": "outline",
|
||||
"categories": [
|
||||
14
|
||||
],
|
||||
"date_created": "2024-11-23",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": "3000",
|
||||
"documentation": "https://docs.getoutline.com/s/guide",
|
||||
"website": "https://www.getoutline.com/",
|
||||
"logo": "https://raw.githubusercontent.com/outline/outline/refs/heads/main/public/images/icon-192.png",
|
||||
"description": "Outline is the fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/outline.sh",
|
||||
"resources": {
|
||||
"cpu": "2",
|
||||
"ram": "4096",
|
||||
"hdd": "8",
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Outline needs to be behind a reverse proxy (e.g., Nginx Proxy Manager) to obtain HTTPS and to allow clients to connect. The https URL on which Outline should be reached, is prompted in the script and might not be trivial to change after installation!",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "At least one identity provider from `https://docs.getoutline.com/s/hosting/doc/authentication-7ViKRmRY5o` needs to be added to `/opt/outline/.env` to allow users to login, also SMTP can be configured here (look at `/opt/outline/.env.sample` for the correct ENV vars). After editing, restart outline with `systemctl restart outline`.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Show database credentials: `cat ~/outline.creds`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user