главная|main page

состояние|status

блог|blog

файлы|files

программы|software

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.env0
-rw-r--r--.env.example4
-rw-r--r--.gitignore3
-rw-r--r--README.md51
-rwxr-xr-xget-cert.sh24
-rw-r--r--libretranslate.service18
-rw-r--r--libretranslate.service.example18
-rw-r--r--nginx9
-rw-r--r--nginx.example9
-rwxr-xr-xrun.sh11
-rwxr-xr-xsetup.sh73
-rwxr-xr-x[-rw-r--r--]update.sh45
12 files changed, 171 insertions, 94 deletions
diff --git a/.env b/.env
deleted file mode 100644
index e69de29..0000000
--- a/.env
+++ /dev/null
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..56f006a
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,4 @@
+LT_DIR="/var/lib/libretranslate"
+LT_USER="libretranslate"
+# Change the value below!
+LT_DOMAIN="lt.example.com"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2d2019a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/.env
+/nginx
+/libretranslate.service
diff --git a/README.md b/README.md
index 3535967..e0802a1 100644
--- a/README.md
+++ b/README.md
@@ -4,42 +4,39 @@ Shell scripts to install [LibreTranslate](https://libretranslate.com)
Uses WSGI with [Gunicorn and Nginx](https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04).
-Tested on Ubuntu 20.04.
+Tested on Ubuntu 20.04 and Debian 12.
[Known Python version bug with Ubuntu 24.04](https://github.com/LibreTranslate/LibreTranslate/issues/611#issuecomment-2415239429) and Python 3.12.
-## Install
+## Installation
+Please note that you should run these commands as root by adding `sudo` before every command or by entering the root shell using the `sudo su -` command.
```
-# Create libretranslate user
-useradd libretranslate
-mkdir /home/libretranslate
-chown libretranslate:libretranslate /home/libretranslate
-usermod -aG sudo libretranslate
-passwd -d libretranslate
-su libretranslate
+# First of all, update the package cache & upgrade the system
+apt update
+apt dist-upgrade
# Download LibreTranslate-init
-git clone https://github.com/argosopentech/LibreTranslate-init.git ~/LibreTranslate-init
-
-# Download dependencies and run LibreTranslate on port 5000
-~/LibreTranslate-init/setup.sh
-
-# Add your hostname or IP address to this command
-# When you run LibreTranslate for the first time it will download all of the language model packages
-~/LibreTranslate/env/bin/libretranslate --host <your hostname or IP address>
-
-# Set server_name to your domain name in ~/LibreTranslate-init/nginx
-
-# Run LibreTranslate WSGI with nginx and systemd
-~/LibreTranslate-init/run.sh
-
-# Check LibreTranslate status
+git clone https://github.com/argosopentech/LibreTranslate-init.git ~/LibreTranslate-init && cd LibreTranslate-init
+
+# Fill up the .env file with settings
+cat > .env <<EOF
+# The directory where LibreTranslate will be located
+LT_DIR="/var/lib/libretranslate"
+# The user LibreTranslate will run under
+LT_USER="libretranslate"
+# The domain name LibreTranslate will be accessible on
+LT_DOMAIN="lt.example.com"
+EOF
+
+# Use the automated install
+./setup.sh
+
+# Ensure that LibreTranslate runs
sudo systemctl status libretranslate
-# Enable https
-~/LibreTranslate-init/get-cert.sh
-
+# Enable SSL after testing (powered by Certbot and Let's Encrypt)
+./get-cert.sh
```
#### Tutorials
diff --git a/get-cert.sh b/get-cert.sh
index a5b9f81..ef9d3ed 100755
--- a/get-cert.sh
+++ b/get-cert.sh
@@ -1,7 +1,21 @@
-# Setup TLS with certbot and Let's Encrypt
-# https://certbot.eff.org/
+#!/bin/sh
-sudo apt install certbot python3-certbot-nginx
-sudo certbot --nginx
-sudo certbot renew --dry-run
+if [ -f .env ]; then
+ . ./.env
+else
+ . ./.env.example
+fi
+# ---
+
+echo 'Installing Certbot...'
+apt-get install -y certbot python3-certbot-nginx
+
+if ![$LT_DOMAIN = "_" ]; then
+ certbot --nginx -d $LT_DOMAIN
+else
+ echo 'Please set the $LT_DOMAIN variable in the .env file to your domain name.'
+ exit 1
+fi
+
+echo 'Done! Now you have SSL enabled on your LibreTranslate instance.'
diff --git a/libretranslate.service b/libretranslate.service
deleted file mode 100644
index 1e28adf..0000000
--- a/libretranslate.service
+++ /dev/null
@@ -1,18 +0,0 @@
-[Unit]
-Description=LibreTranslate WSGI with Gunicorn and Nginx
-After=network.target
-
-[Service]
-User=libretranslate
-Group=www-data
-WorkingDirectory=/home/libretranslate/LibreTranslate
-Environment="PATH=/home/libretranslate/LibreTranslate/env/bin"
-ExecStart=/home/libretranslate/LibreTranslate/env/bin/gunicorn --workers 3 --bind unix:libretranslate.sock -m 007 wsgi:app
-EnvironmentFile=/home/libretranslate/LibreTranslate-init/.env
-Restart=always
-ExecReload=/bin/kill -s HUP $MAINPID
-KillMode=mixed
-TimeoutStopSec=1
-
-[Install]
-WantedBy=multi-user.target
diff --git a/libretranslate.service.example b/libretranslate.service.example
new file mode 100644
index 0000000..7ae5203
--- /dev/null
+++ b/libretranslate.service.example
@@ -0,0 +1,18 @@
+[Unit]
+Description=LibreTranslate WSGI with Gunicorn and Nginx
+After=network.target
+
+[Service]
+User=$LT_USER
+Group=www-data
+WorkingDirectory=$LT_DIR
+Environment="PATH=$LT_DIR/venv/bin"
+ExecStart=$LT_DIR/venv/bin/gunicorn --workers 3 --bind unix:libretranslate.sock -m 007 wsgi:app
+EnvironmentFile=$LT_DIR/.env
+Restart=always
+ExecReload=/bin/kill -s HUP $MAINPID
+KillMode=mixed
+TimeoutStopSec=1
+
+[Install]
+WantedBy=multi-user.target
diff --git a/nginx b/nginx
deleted file mode 100644
index 2880bc4..0000000
--- a/nginx
+++ /dev/null
@@ -1,9 +0,0 @@
-server {
- listen 80;
- server_name _;
-
- location / {
- include proxy_params;
- proxy_pass http://unix:/home/libretranslate/LibreTranslate/libretranslate.sock;
- }
-}
diff --git a/nginx.example b/nginx.example
new file mode 100644
index 0000000..69e5d83
--- /dev/null
+++ b/nginx.example
@@ -0,0 +1,9 @@
+server {
+ listen 80;
+ server_name $LT_DOMAIN;
+
+ location / {
+ include proxy_params;
+ proxy_pass http://unix:$LT_DIR/libretranslate.sock;
+ }
+}
diff --git a/run.sh b/run.sh
deleted file mode 100755
index 4af2e93..0000000
--- a/run.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-# Setup systemd
-sudo cp ~/LibreTranslate-init/libretranslate.service /etc/systemd/system/
-sudo systemctl start libretranslate
-sudo systemctl enable libretranslate
-# sudo systemctl status libretranslate
-
-# Configure Nginx
-sudo cp ~/LibreTranslate-init/nginx /etc/nginx/sites-available/default
-sudo nginx -t
-sudo systemctl restart nginx
-
diff --git a/setup.sh b/setup.sh
index e97c9df..b877146 100755
--- a/setup.sh
+++ b/setup.sh
@@ -1,26 +1,63 @@
-sudo apt-get update
-sudo apt-get upgrade -y
-sudo apt-get install -y vim git
+#!/bin/sh
-# Install Python
-sudo apt-get install -y python3 python3-virtualenv python-is-python3 python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
+if [ -f .env ]; then
+ set -a
+ . ./.env
+ set +a
+else
+ . ./.env.example
+fi
-# Install PyICU dependencies
-# https://community.libretranslate.com/t/pyicu-fails-to-install-on-ubuntu-20-04/23
-sudo apt-get install -y libicu-dev python3-icu pkg-config
+# ---
-# Install Nginx
-sudo apt-get install -y nginx
+echo 'Updating package index...'
+apt-get update
-# Download LibreTranslate source
-git clone https://github.com/LibreTranslate/LibreTranslate.git ~/LibreTranslate
+echo 'Installing dependencies...'
+# Install Python, PyICU dependencies (https://community.libretranslate.com/t/pyicu-fails-to-install-on-ubuntu-20-04/23), Nginx and optionally Certbot with Nginx plugin
+apt-get install -y python3 python3-virtualenv python-is-python3 python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools \
+libicu-dev python3-icu pkg-config \
+nginx
-# Setup virtualenv
-virtualenv ~/LibreTranslate/env
+# ---
-# Install gunicorn
-~/LibreTranslate/env/bin/pip install gunicorn
+echo 'Creating LibreTranslate user...'
+useradd --system -m --home-dir $LT_DIR $LT_USER
+cp $PWD/.env $LT_DIR/.env && chown -R $LT_USER $LT_DIR
-# Install and run LibreTranslate on port 5000
-~/LibreTranslate/env/bin/pip install ~/LibreTranslate/ --no-cache-dir
+echo 'Downloading and installing LibreTranslate...'
+su -ls /bin/sh $LT_USER <<EOF
+ # Download LibreTranslate source code
+ git clone https://github.com/LibreTranslate/LibreTranslate.git $LT_DIR/lt
+ mv $LT_DIR/lt/* $LT_DIR/
+ mv $LT_DIR/lt/.* $LT_DIR/
+ rmdir $LT_DIR/lt
+ # Setup virtualenv
+ python -m venv $LT_DIR/venv
+
+ # Install gunicorn
+ $LT_DIR/venv/bin/pip install gunicorn
+
+ # Install and run LibreTranslate on port 5000
+ $LT_DIR/venv/bin/pip install $LT_DIR --no-cache-dir
+ $LT_DIR/scripts/install_models.py
+EOF
+
+# ---
+
+echo 'Configuring system services...'
+echo 'Setting up systemd service...'
+sed -e "{s|\$LT_DIR|$LT_DIR|;s|\$LT_USER|$LT_USER|}" libretranslate.service.example > libretranslate.service
+cp -v libretranslate.service /etc/systemd/system/
+systemctl enable --now libretranslate
+
+echo 'Configuring Nginx site...'
+sed -e "{s|\$LT_DIR|$LT_DIR|;s|\$LT_DOMAIN|$LT_DOMAIN|}" nginx.example > nginx
+cp -v nginx /etc/nginx/sites-available/libretranslate
+ln -sv /etc/nginx/sites-available/libretranslate /etc/nginx/sites-enabled/libretranslate
+nginx -t && systemctl restart nginx
+
+# ---
+
+echo "Done! Now you can visit the http://$LT_DOMAIN website. You can use the ./get-cert.sh script to get an SSL certificate."
diff --git a/update.sh b/update.sh
index 779c393..9afde02 100644..100755
--- a/update.sh
+++ b/update.sh
@@ -1,6 +1,39 @@
-cd ~/LibreTranslate-init
-git pull
-rm -rf ~/LibreTranslate/env
-virtualenv ~/LibreTranslate/env
-~/LibreTranslate/env/bin/pip install ~/LibreTranslate/ --no-cache-dir
-~/LibreTranslate/env/bin/libretranslate --update-models
+#!/bin/sh
+
+if [ -f .env ]; then
+ . ./.env
+else
+ . ./.env.example
+fi
+
+echo 'Stopping LibreTranslate...'
+systemctl stop libretranslate
+
+echo 'Updating the LibreTranslate systemd service according to the .env file...'
+sed -e "{s|\$LT_DIR|$LT_DIR|;s|\$LT_USER|$LT_USER|}" libretranslate.service.example > libretranslate.service
+cp -v libretranslate.service /etc/systemd/system/
+
+echo 'Updating the nginx site according to the .env file...'
+sed -e "{s|\$LT_DIR|$LT_DIR|;s|\$LT_DOMAIN|$LT_DOMAIN|}" nginx.example > nginx
+cp -v nginx /etc/nginx/sites-available/libretranslate
+
+cp $PWD/.env $LT_DIR/.env && chown -R $LT_USER $LT_DIR
+
+echo 'Updating LibreTranslate...'
+su -ls /bin/sh $LT_USER <<EOF
+ cd $LT_DIR
+ git pull
+ . venv/bin/activate
+ pip install -U gunicorn
+ pip install $LT_DIR --no-cache-dir -U
+ if [ "$1" = 'update-models' ]; then
+ scripts/install_models.py
+ fi
+EOF
+
+echo 'Re-loading nginx configuration...'
+systemctl restart nginx
+echo 'Re-loading systemd configuration...'
+systemctl daemon-reload
+echo 'Starting LibreTranslate...'
+systemctl start libretranslate