mirror of
https://github.com/proxysu/ProxySU.git
synced 2024-11-22 05:06:08 +03:00
优化Caddy安装
This commit is contained in:
parent
c33de96563
commit
6be1fdb84a
42
ProxySuper.Core/Models/Caddy.cs
Normal file
42
ProxySuper.Core/Models/Caddy.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ProxySuper.Core.Models
|
||||
{
|
||||
public static class Caddy
|
||||
{
|
||||
public static string Service = @"
|
||||
[Unit]
|
||||
Description=Caddy
|
||||
Documentation=https://caddyserver.com/docs/
|
||||
After=network.target network-online.target
|
||||
Requires=network-online.target
|
||||
|
||||
[Service]
|
||||
#User=caddy
|
||||
#Group=caddy
|
||||
User=root
|
||||
Group=root
|
||||
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
|
||||
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
|
||||
TimeoutStopSec=5s
|
||||
#LimitNOFILE=1048576
|
||||
#LimitNPROC=512
|
||||
PrivateTmp=true
|
||||
ProtectSystem=full
|
||||
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
";
|
||||
|
||||
public static string DefaultCaddyFile = @"
|
||||
:80 {
|
||||
respond ""Hello world!"";
|
||||
}
|
||||
";
|
||||
}
|
||||
}
|
@ -67,6 +67,7 @@
|
||||
<Compile Include="Converters\ProxyTypeConverter.cs" />
|
||||
<Compile Include="Converters\VisibleConverter.cs" />
|
||||
<Compile Include="Helpers\DateTimeUtils.cs" />
|
||||
<Compile Include="Models\Caddy.cs" />
|
||||
<Compile Include="Models\Hosts\Host.cs" />
|
||||
<Compile Include="Models\Hosts\LocalProxyType.cs" />
|
||||
<Compile Include="Models\Hosts\LoginSecretType.cs" />
|
||||
|
@ -127,13 +127,13 @@ namespace ProxySuper.Core.Services
|
||||
private void UploadCaddyFile(bool useCustomWeb = false)
|
||||
{
|
||||
var caddyStr = BuildConfig(useCustomWeb);
|
||||
var stream = new MemoryStream(Encoding.UTF8.GetBytes(caddyStr));
|
||||
|
||||
if (FileExists("/etc/caddy/Caddyfile"))
|
||||
{
|
||||
RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back");
|
||||
}
|
||||
UploadFile(stream, "/etc/caddy/Caddyfile");
|
||||
|
||||
RunCmd($"echo {caddyStr} > /etc/caddy/Caddyfile");
|
||||
RunCmd("systemctl restart caddy");
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,13 @@
|
||||
using ProxySuper.Core.Helpers;
|
||||
using ProxySuper.Core.Models;
|
||||
using ProxySuper.Core.Models.Hosts;
|
||||
using ProxySuper.Core.Models.Projects;
|
||||
using Renci.SshNet;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
|
||||
namespace ProxySuper.Core.Services
|
||||
@ -25,6 +28,8 @@ namespace ProxySuper.Core.Services
|
||||
|
||||
public abstract class ProjectBase<TSettings> where TSettings : IProjectSettings
|
||||
{
|
||||
|
||||
|
||||
private SshClient _sshClient;
|
||||
|
||||
protected Action<string> WriteOutput;
|
||||
@ -55,7 +60,9 @@ namespace ProxySuper.Core.Services
|
||||
var cmd = _sshClient.CreateCommand(cmdStr);
|
||||
WriteOutput(cmdStr);
|
||||
|
||||
var result = cmd.Execute();
|
||||
var exe = cmd.BeginExecute();
|
||||
var result = cmd.EndExecute(exe);
|
||||
//var result = cmd.Execute();
|
||||
WriteOutput(result);
|
||||
return result;
|
||||
}
|
||||
@ -299,7 +306,6 @@ namespace ProxySuper.Core.Services
|
||||
/// <param name="portList"></param>
|
||||
protected void OpenPort(params int[] portList)
|
||||
{
|
||||
|
||||
string cmd;
|
||||
|
||||
cmd = RunCmd("command -v firewall-cmd");
|
||||
@ -323,15 +329,19 @@ namespace ProxySuper.Core.Services
|
||||
else
|
||||
{
|
||||
cmd = RunCmd("command -v ufw");
|
||||
if (!string.IsNullOrEmpty(cmd))
|
||||
if (string.IsNullOrEmpty(cmd))
|
||||
{
|
||||
foreach (var port in portList)
|
||||
{
|
||||
RunCmd($"ufw allow {port}/tcp");
|
||||
RunCmd($"ufw allow {port}/udp");
|
||||
}
|
||||
RunCmd("yes | ufw reload");
|
||||
RunCmd(GetInstallCmd("ufw"));
|
||||
RunCmd("echo y | ufw enable");
|
||||
}
|
||||
|
||||
foreach (var port in portList)
|
||||
{
|
||||
RunCmd($"ufw allow {port}/tcp");
|
||||
RunCmd($"ufw allow {port}/udp");
|
||||
}
|
||||
RunCmd("yes | ufw reload");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -425,30 +435,55 @@ namespace ProxySuper.Core.Services
|
||||
/// </summary>
|
||||
protected void InstallCaddy()
|
||||
{
|
||||
if (CmdType == CmdType.Apt)
|
||||
#region 二进制文件安装
|
||||
RunCmd("rm -rf caddy.tar.gz");
|
||||
RunCmd("rm -rf /etc/caddy");
|
||||
RunCmd("rm -rf /usr/share/caddy");
|
||||
|
||||
var url = "https://github.com/caddyserver/caddy/releases/download/v2.4.3/caddy_2.4.3_linux_amd64.tar.gz";
|
||||
if (ArchType == ArchType.arm)
|
||||
{
|
||||
RunCmd("apt install -y debian-keyring debian-archive-keyring apt-transport-https");
|
||||
RunCmd("echo yes | curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo apt-key add -");
|
||||
RunCmd("echo yes | curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list");
|
||||
RunCmd("sudo apt -y update");
|
||||
RunCmd("sudo apt install -y caddy");
|
||||
url = "https://github.com/caddyserver/caddy/releases/download/v2.4.3/caddy_2.4.3_linux_armv7.tar.gz";
|
||||
}
|
||||
|
||||
if (CmdType == CmdType.Dnf)
|
||||
{
|
||||
RunCmd("dnf install -y 'dnf-command(copr)'");
|
||||
RunCmd("dnf copr -y enable @caddy/caddy");
|
||||
RunCmd("dnf install -y caddy");
|
||||
}
|
||||
RunCmd($"wget -O caddy.tar.gz {url}");
|
||||
RunCmd("mkdir /etc/caddy");
|
||||
RunCmd("tar -zxvf caddy.tar.gz caddy -C /etc/caddy");
|
||||
RunCmd("cp -rf /etc/caddy/caddy /usr/bin");
|
||||
WriteToFile(Caddy.DefaultCaddyFile, "/etc/caddy/Caddyfile");
|
||||
WriteToFile(Caddy.Service, "/etc/systemd/system/caddy.service");
|
||||
RunCmd("systemctl daemon-reload");
|
||||
RunCmd("systemctl enable caddy");
|
||||
|
||||
if (CmdType == CmdType.Yum)
|
||||
{
|
||||
RunCmd("yum install -y yum-plugin-copr");
|
||||
RunCmd("yum copr -y enable @caddy/caddy");
|
||||
RunCmd("yum install -y caddy");
|
||||
}
|
||||
RunCmd("mkdir /usr/share/caddy");
|
||||
#endregion
|
||||
|
||||
RunCmd("systemctl enable caddy.service");
|
||||
#region 官方安装步骤
|
||||
//if (CmdType == CmdType.Apt)
|
||||
//{
|
||||
// RunCmd("apt install -y debian-keyring debian-archive-keyring apt-transport-https");
|
||||
// RunCmd("echo yes | curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo apt-key add -");
|
||||
// RunCmd("echo yes | curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list");
|
||||
// RunCmd("sudo apt -y update");
|
||||
// RunCmd("sudo apt install -y caddy");
|
||||
//}
|
||||
|
||||
//if (CmdType == CmdType.Dnf)
|
||||
//{
|
||||
// RunCmd("dnf install -y 'dnf-command(copr)'");
|
||||
// RunCmd("dnf copr -y enable @caddy/caddy");
|
||||
// RunCmd("dnf install -y caddy");
|
||||
//}
|
||||
|
||||
//if (CmdType == CmdType.Yum)
|
||||
//{
|
||||
// RunCmd("yum install -y yum-plugin-copr");
|
||||
// RunCmd("yum copr -y enable @caddy/caddy");
|
||||
// RunCmd("yum install -y caddy");
|
||||
//}
|
||||
|
||||
//RunCmd("systemctl enable caddy.service");
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -457,21 +492,8 @@ namespace ProxySuper.Core.Services
|
||||
protected void UninstallCaddy()
|
||||
{
|
||||
RunCmd("systemctl stop caddy");
|
||||
if (CmdType == CmdType.Apt)
|
||||
{
|
||||
RunCmd("sudo apt -y remove caddy");
|
||||
}
|
||||
|
||||
if (CmdType == CmdType.Dnf)
|
||||
{
|
||||
RunCmd("dnf -y remove caddy");
|
||||
}
|
||||
|
||||
if (CmdType == CmdType.Yum)
|
||||
{
|
||||
RunCmd("yum -y remove caddy");
|
||||
}
|
||||
|
||||
RunCmd("systemctl disable caddy");
|
||||
RunCmd("rm -rf /etc/systemd/system/caddy.service");
|
||||
RunCmd("rm -rf /usr/bin/caddy");
|
||||
RunCmd("rm -rf /usr/share/caddy");
|
||||
RunCmd("rm -rf /etc/caddy");
|
||||
@ -748,6 +770,25 @@ namespace ProxySuper.Core.Services
|
||||
RunCmd($"chmod 755 {dirPath}");
|
||||
}
|
||||
|
||||
protected void WriteToFile(string text, string path)
|
||||
{
|
||||
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(text)))
|
||||
{
|
||||
using (var sftp = new SftpClient(_sshClient.ConnectionInfo))
|
||||
{
|
||||
sftp.Connect();
|
||||
try
|
||||
{
|
||||
sftp.UploadFile(stream, path, true);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sftp.Disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 上传文件
|
||||
/// </summary>
|
||||
|
@ -164,7 +164,6 @@ namespace ProxySuper.Core.Services
|
||||
certName: "xray_ssl.crt",
|
||||
keyName: "xray_ssl.key");
|
||||
|
||||
RunCmd("systemctl restart xray");
|
||||
WriteOutput("************ 安装证书完成 ************");
|
||||
}
|
||||
|
||||
@ -247,12 +246,12 @@ namespace ProxySuper.Core.Services
|
||||
private void UploadCaddyFile(bool useCustomWeb = false)
|
||||
{
|
||||
var configJson = XrayConfigBuilder.BuildCaddyConfig(Parameters, useCustomWeb);
|
||||
var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
|
||||
|
||||
if (FileExists("/etc/caddy/Caddyfile"))
|
||||
{
|
||||
RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back");
|
||||
}
|
||||
UploadFile(stream, "/etc/caddy/Caddyfile");
|
||||
WriteToFile(configJson, "/etc/caddy/Caddyfile");
|
||||
RunCmd("systemctl restart caddy");
|
||||
}
|
||||
|
||||
@ -295,8 +294,7 @@ namespace ProxySuper.Core.Services
|
||||
|
||||
|
||||
var configJson = XrayConfigBuilder.BuildXrayConfig(Parameters);
|
||||
var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
|
||||
UploadFile(stream, "/usr/local/etc/xray/config.json");
|
||||
WriteToFile(configJson, "/usr/local/etc/xray/config.json");
|
||||
RunCmd("systemctl restart xray");
|
||||
}
|
||||
|
||||
|
@ -76,8 +76,8 @@ namespace ProxySuper.Core.ViewModels
|
||||
|
||||
result = RunCmd(@"cat /dev/urandom | tr -dc '_A-Z#\-+=a-z(0-9%^>)]{<|' | head -c 20 ; echo ''");
|
||||
string setPassword = result.TrimEnd('\r', '\n') + '\n';
|
||||
RunCmd(cmdPre + $"echo -e \"{setPassword}{setPassword}\" | sudo passwd root");
|
||||
RunCmd("sudo systemctl restart sshd ");
|
||||
RunCmd(cmdPre + $"echo \"{setPassword}{setPassword}\" | sudo passwd root");
|
||||
RunCmd("sudo systemctl restart sshd");
|
||||
|
||||
RootUserName = "root";
|
||||
RootPassword = setPassword.Trim('\n');
|
||||
|
@ -9,7 +9,7 @@
|
||||
<sys:String x:Key="Install">Install</sys:String>
|
||||
<sys:String x:Key="Settings">Settings</sys:String>
|
||||
<sys:String x:Key="ReadmeWebsiteDemo">The following is a static web page connection provided by netizens, please check whether there is an index.html file by yourself</sys:String>
|
||||
|
||||
|
||||
<!--Main Menu-->
|
||||
<sys:String x:Key="MainMenuAddHost">Add Host</sys:String>
|
||||
<sys:String x:Key="MainMenuActions">Actions</sys:String>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<sys:String x:Key="Install">安装</sys:String>
|
||||
<sys:String x:Key="Settings">配置</sys:String>
|
||||
<sys:String x:Key="ReadmeWebsiteDemo">如下是网友提供的静态网页连接,请自行检查是否有index.html文件</sys:String>
|
||||
|
||||
|
||||
<!--Main Menu-->
|
||||
<sys:String x:Key="MainMenuAddHost">添加主机</sys:String>
|
||||
<sys:String x:Key="MainMenuActions">操作</sys:String>
|
||||
|
@ -38,6 +38,7 @@ namespace ProxySuper.WPF.Views
|
||||
|
||||
WriteOutput("正在登陆服务器 ...");
|
||||
var conneInfo = CreateConnectionInfo(ViewModel.Host);
|
||||
conneInfo.Timeout = TimeSpan.FromSeconds(60);
|
||||
_sshClient = new SshClient(conneInfo);
|
||||
try
|
||||
{
|
||||
|
@ -62,7 +62,7 @@
|
||||
<Label Content="{DynamicResource HostPassword}" Grid.Row="2" Grid.Column="0" />
|
||||
<TextBox IsReadOnly="True" Text="{Binding RootPassword}" Grid.Row="2" Grid.Column="1" />
|
||||
|
||||
<Button Height="28" Grid.Row="3" Grid.Column="3" Command="{Binding ExecuteCommand}">一键Root</Button>
|
||||
<Button Height="28" Grid.Row="3" Grid.Column="3" Command="{Binding ExecuteCommand}" Content="{DynamicResource MainMenuActionsGetRoot}" />
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
</StackPanel>
|
||||
|
@ -47,6 +47,7 @@ namespace ProxySuper.WPF.Views
|
||||
|
||||
WriteOutput("正在登陆服务器 ...");
|
||||
var conneInfo = CreateConnectionInfo(ViewModel.Host);
|
||||
conneInfo.Timeout = TimeSpan.FromSeconds(60);
|
||||
_sshClient = new SshClient(conneInfo);
|
||||
try
|
||||
{
|
||||
|
@ -44,6 +44,7 @@ namespace ProxySuper.WPF.Views
|
||||
|
||||
WriteOutput("正在登陆服务器 ...");
|
||||
var conneInfo = CreateConnectionInfo(ViewModel.Host);
|
||||
conneInfo.Timeout = TimeSpan.FromSeconds(60);
|
||||
_sshClient = new SshClient(conneInfo);
|
||||
try
|
||||
{
|
||||
|
@ -75,6 +75,7 @@ namespace ProxySuper.WPF.Views
|
||||
{
|
||||
WriteOutput("正在登陆服务器 ...");
|
||||
var conneInfo = CreateConnectionInfo(ViewModel.Host);
|
||||
conneInfo.Timeout = TimeSpan.FromSeconds(60);
|
||||
_sshClient = new SshClient(conneInfo);
|
||||
try
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user