Last active 1703076495

Implement multitenant moonglade pure

Revision c516948d7f9139cd834613381d710148339e1287

build.sh Raw
1#!/bin/bash
2sudo apt install jq dotnet7 -y
3
4echo "Cleaning up..."
5rm -rf /home/anduin/build
6mkdir -p /home/anduin/build
7
8echo "Downloading source code..."
9wget https://gitlab.aiursoft.cn/aiursoft/moongladepure/-/archive/master/moongladepure-master.tar.gz -O /home/anduin/build/moongladepure-master.tar.gz
10
11echo "Extracting source code..."
12tar -zxf /home/anduin/build/moongladepure-master.tar.gz -C /home/anduin/build
13
14echo "Building source code..."
15dotnet publish -c Release -o /home/anduin/build/bin -r linux-x64 --no-self-contained /home/anduin/build/moongladepure-master/src/Moonglade.Web/MoongladePure.Web.csproj
16
17echo 'Installing fonts...'
18sudo mkdir /usr/share/fonts
19sudo wget https://gitlab.aiursoft.cn/aiursoft/moongladepure/-/raw/master/assets/OpenSans-Regular.ttf -O /usr/share/fonts/OpenSans-Regular.ttf
20sudo chown www-data:www-data /usr/share/fonts/OpenSans-Regular.ttf
21
22curl https://gitlab.aiursoft.cn/aiursoft/moongladepure/-/raw/master/assets/tenants --output /tmp/tenants.txt
23while read -r tenant port
24do
25 echo "Building tenant $tenant..."
26 echo "His port is $port..."
27
28 echo 'Stopping service...'
29 sudo systemctl stop $tenant
30
31 echo 'Creating tenant folder...'
32 sudo mkdir -p /opt/apps/$tenant > /dev/null
33
34 echo 'Copying files...'
35 sudo cp /home/anduin/build/bin/* /opt/apps/$tenant/ -r
36
37 echo 'Setting permissions...'
38 sudo chown -R www-data:www-data /opt/apps/$tenant
39
40 echo 'Creating appsettings.json...'
41 sudo -u www-data cp /opt/apps/$tenant/appsettings.json /opt/apps/$tenant/appsettings.Production.json
42
43 echo 'Setting appsettings.json...'
44 sudo -u www-data jq --arg tenant "$tenant" '.ConnectionStrings.MoongladeDatabase = "Server=moongladedb;Port=3306;Database=" + $tenant + ";uid=moongladepure;Password=DATABASE_PASSWORD@1234;"' /opt/apps/$tenant/appsettings.Production.json | sudo -u www-data tee /tmp/tmp.json > /dev/null
45 sudo -u www-data mv /tmp/tmp.json /opt/apps/$tenant/appsettings.Production.json
46 sudo -u www-data jq '.ImageStorage.FileSystemPath = "/mnt/Store/'$tenant'"' /opt/apps/$tenant/appsettings.Production.json | sudo -u www-data tee /tmp/tmp.json > /dev/null
47 sudo -u www-data mv /tmp/tmp.json /opt/apps/$tenant/appsettings.Production.json
48 sudo -u www-data jq '.OpenAI.Token = "OPENAI-KEY"' /opt/apps/$tenant/appsettings.Production.json | sudo -u www-data tee /tmp/tmp.json > /dev/null
49 sudo -u www-data mv /tmp/tmp.json /opt/apps/$tenant/appsettings.Production.json
50
51 echo 'Creating service...'
52 echo "[Unit]
53Description=$tenant Service
54After=network.target
55Wants=network.target
56
57[Service]
58Type=simple
59User=www-data
60ExecStart=/usr/bin/dotnet /opt/apps/$tenant/MoongladePure.Web.dll --urls=http://0.0.0.0:$port/
61WorkingDirectory=/opt/apps/$tenant
62Restart=always
63RestartSec=10
64SyslogIdentifier=$tenant
65KillSignal=SIGINT
66Environment=\"ASPNETCORE_ENVIRONMENT=Production\"
67Environment=\"DOTNET_PRINT_TELEMETRY_MESSAGE=false\"
68Environment=\"DOTNET_CLI_TELEMETRY_OPTOUT=1\"
69Environment=\"ASPNETCORE_FORWARDEDHEADERS_ENABLED=true\"
70
71[Install]
72WantedBy=multi-user.target" | sudo tee /etc/systemd/system/$tenant.service > /dev/null
73
74 sudo systemctl daemon-reload
75 sudo systemctl enable $tenant
76 sudo systemctl start $tenant
77
78done < /tmp/tenants.txt