linkwarden-install.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/usr/bin/env bash
  2. # Copyright (c) 2021-2023 tteck
  3. # Author: tteck (tteckster)
  4. # License: MIT
  5. # https://github.com/tteck/Proxmox/raw/main/LICENSE
  6. source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
  7. color
  8. verb_ip6
  9. catch_errors
  10. setting_up_container
  11. network_check
  12. update_os
  13. msg_info "Installing Dependencies"
  14. $STD apt-get install -y curl
  15. $STD apt-get install -y sudo
  16. $STD apt-get install -y mc
  17. $STD apt-get install -y git
  18. $STD apt-get install -y gpg
  19. $STD apt-get install -y postgresql
  20. msg_ok "Installed Dependencies"
  21. msg_info "Setting up Node.js Repository"
  22. mkdir -p /etc/apt/keyrings
  23. curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
  24. echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
  25. msg_ok "Set up Node.js Repository"
  26. msg_info "Installing Node.js/Yarn"
  27. $STD apt-get update
  28. $STD apt-get install -y nodejs
  29. $STD npm install -g yarn
  30. msg_ok "Installed Node.js/Yarn"
  31. msg_info "Clone Linkwarden Repository"
  32. $STD git clone https://github.com/linkwarden/linkwarden.git /opt/linkwarden
  33. cd /opt/linkwarden
  34. msg_ok "Cloned Linkwarden Repository"
  35. msg_info "Setting up PostgreSQL DB"
  36. DB_NAME=linkwardendb
  37. DB_USER=linkwarden
  38. DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
  39. $STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
  40. $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
  41. echo "" >>~/linkwarden.creds
  42. echo -e "Linkwarden Database User: \e[32m$DB_USER\e[0m" >>~/linkwarden.creds
  43. echo -e "Linkwarden Database Password: \e[32m$DB_PASS\e[0m" >>~/linkwarden.creds
  44. echo -e "Linkwarden Database Name: \e[32m$DB_NAME\e[0m" >>~/linkwarden.creds
  45. msg_ok "Set up PostgreSQL DB"
  46. read -r -p "Would you like to add Adminer? <y/N> " prompt
  47. if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
  48. msg_info "Installing Adminer"
  49. $STD apt install -y adminer
  50. $STD a2enconf adminer
  51. systemctl reload apache2
  52. IP=$(hostname -I | awk '{print $1}')
  53. echo "" >>~/linkwarden.creds
  54. echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/linkwarden.creds
  55. echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/linkwarden.creds
  56. echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/linkwarden.creds
  57. echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/linkwarden.creds
  58. echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/linkwarden.creds
  59. echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/linkwarden.creds
  60. msg_ok "Installed Adminer"
  61. fi
  62. msg_info "Installing Linkwarden (Patience)"
  63. $STD yarn
  64. $STD npx playwright install-deps
  65. IP=$(hostname -I | awk '{print $1}')
  66. SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
  67. env_path="/opt/linkwarden/.env"
  68. echo "
  69. NEXTAUTH_SECRET=${SECRET_KEY}
  70. NEXTAUTH_URL=http://${IP}:3000
  71. DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
  72. " >$env_path
  73. $STD yarn build
  74. $STD yarn prisma migrate deploy
  75. msg_ok "Installed Linkwarden"
  76. msg_info "Creating Service"
  77. cat <<EOF >/etc/systemd/system/linkwarden.service
  78. [Unit]
  79. Description=Linkwarden Service
  80. After=network.target
  81. [Service]
  82. Type=exec
  83. WorkingDirectory=/opt/linkwarden
  84. ExecStart=/usr/bin/yarn start
  85. [Install]
  86. WantedBy=multi-user.target
  87. EOF
  88. systemctl enable -q --now linkwarden.service
  89. msg_ok "Created Service"
  90. motd_ssh
  91. customize
  92. msg_info "Cleaning up"
  93. $STD apt-get autoremove
  94. $STD apt-get autoclean
  95. msg_ok "Cleaned"