linux服务支持
This commit is contained in:
parent
eafcae4b59
commit
a4a64531db
@ -52,7 +52,7 @@ namespace FastGithub.HttpServer
|
||||
|
||||
if (geteuid() != 0)
|
||||
{
|
||||
this.logger.LogWarning($"无法自动安装CA证书{caCertFilePath},因为没有root权限");
|
||||
this.logger.LogWarning($"无法自动安装CA证书{caCertFilePath}:没有root权限");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -4,9 +4,12 @@ using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PInvoke;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Versioning;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace FastGithub
|
||||
@ -14,7 +17,7 @@ namespace FastGithub
|
||||
/// <summary>
|
||||
/// IHostBuilder扩展
|
||||
/// </summary>
|
||||
static class WindowsServiceExtensions
|
||||
static class ServiceExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 控制命令
|
||||
@ -25,6 +28,10 @@ namespace FastGithub
|
||||
Stop,
|
||||
}
|
||||
|
||||
[SupportedOSPlatform("linux")]
|
||||
[DllImport("libc", SetLastError = true)]
|
||||
private static extern uint geteuid();
|
||||
|
||||
/// <summary>
|
||||
/// 使用windows服务
|
||||
/// </summary>
|
||||
@ -48,11 +55,18 @@ namespace FastGithub
|
||||
/// <param name="singleton"></param>
|
||||
public static void Run(this IHost host, bool singleton = true)
|
||||
{
|
||||
if (OperatingSystem.IsWindows() && TryGetCommand(out var cmd))
|
||||
if (TryGetCommand(out var cmd) && (OperatingSystem.IsWindows() || OperatingSystem.IsLinux()))
|
||||
{
|
||||
try
|
||||
{
|
||||
UseCommand(cmd);
|
||||
if (OperatingSystem.IsWindows())
|
||||
{
|
||||
UseCommandAtWindows(cmd);
|
||||
}
|
||||
else if (OperatingSystem.IsLinux())
|
||||
{
|
||||
UseCommandAtLinux(cmd);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -86,7 +100,7 @@ namespace FastGithub
|
||||
/// </summary>
|
||||
/// <param name="cmd"></param>
|
||||
[SupportedOSPlatform("windows")]
|
||||
private static void UseCommand(Command cmd)
|
||||
private static void UseCommandAtWindows(Command cmd)
|
||||
{
|
||||
var binaryPath = Environment.GetCommandLineArgs().First();
|
||||
var serviceName = Path.GetFileNameWithoutExtension(binaryPath);
|
||||
@ -106,5 +120,54 @@ namespace FastGithub
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 应用控制指令
|
||||
/// </summary>
|
||||
/// <param name="cmd"></param>
|
||||
[SupportedOSPlatform("linux")]
|
||||
private static void UseCommandAtLinux(Command cmd)
|
||||
{
|
||||
if (geteuid() != 0)
|
||||
{
|
||||
throw new UnauthorizedAccessException("无法操作服务:没有root权限");
|
||||
}
|
||||
|
||||
var binaryPath = Path.GetFullPath(Environment.GetCommandLineArgs().First());
|
||||
var serviceName = Path.GetFileNameWithoutExtension(binaryPath);
|
||||
var serviceFilePath = $"/etc/systemd/system/{serviceName}.service";
|
||||
|
||||
if (cmd == Command.Start)
|
||||
{
|
||||
var serviceBuilder = new StringBuilder()
|
||||
.AppendLine("[Unit]")
|
||||
.AppendLine($"Description={serviceName}")
|
||||
.AppendLine()
|
||||
.AppendLine("[Service]")
|
||||
.AppendLine("Type=notify")
|
||||
.AppendLine($"User={Environment.UserName}")
|
||||
.AppendLine($"ExecStart={binaryPath}")
|
||||
.AppendLine($"WorkingDirectory={Path.GetDirectoryName(binaryPath)}")
|
||||
.AppendLine()
|
||||
.AppendLine("[Install]")
|
||||
.AppendLine("WantedBy=multi-user.target");
|
||||
File.WriteAllText(serviceFilePath, serviceBuilder.ToString());
|
||||
|
||||
Process.Start("chcon", $"--type=bin_t {binaryPath}").WaitForExit(); // SELinux
|
||||
Process.Start("systemctl", "daemon-reload").WaitForExit();
|
||||
Process.Start("systemctl", $"start {serviceName}.service").WaitForExit();
|
||||
Process.Start("systemctl", $"enable {serviceName}.service").WaitForExit();
|
||||
}
|
||||
else if (cmd == Command.Stop)
|
||||
{
|
||||
Process.Start("systemctl", $"stop {serviceName}.service").WaitForExit();
|
||||
Process.Start("systemctl", $"disable {serviceName}.service").WaitForExit();
|
||||
|
||||
if (File.Exists(serviceFilePath))
|
||||
{
|
||||
File.Delete(serviceFilePath);
|
||||
}
|
||||
Process.Start("systemctl", "daemon-reload").WaitForExit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
19
README.html
19
README.html
@ -374,25 +374,34 @@ code {
|
||||
<li>Q群2 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=6BBJ1nrJwe1o1E4-NJfwSOP-C4sMGc4q&jump_from=webapi">742376932</a></li>
|
||||
</ul>
|
||||
<h3 id="2-%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F">2 部署方式</h3>
|
||||
<h4 id="21-windows-x64">2.1 windows-x64</h4>
|
||||
<h4 id="21-windows-x64%E6%A1%8C%E9%9D%A2">2.1 windows-x64桌面</h4>
|
||||
<ul>
|
||||
<li>双击运行FastGithub.UI.exe</li>
|
||||
</ul>
|
||||
<h4 id="22-windows-x64%E6%9C%8D%E5%8A%A1">2.2 windows-x64服务</h4>
|
||||
<ul>
|
||||
<li><code>fastgithub.exe start</code> // 以windows服务安装并启动</li>
|
||||
<li><code>fastgithub.exe stop</code> // 以windows服务卸载并删除</li>
|
||||
</ul>
|
||||
<h4 id="22-linux-x64">2.2 linux-x64</h4>
|
||||
<h4 id="23-linux-x64%E7%BB%88%E7%AB%AF">2.3 linux-x64终端</h4>
|
||||
<ul>
|
||||
<li>执行<code>sudo ./fastgithub</code></li>
|
||||
<li><code>sudo ./fastgithub</code></li>
|
||||
<li>设置系统自动代理为<code>http://127.0.0.1:38457</code>,或手动代理http/https为<code>127.0.0.1:38457</code></li>
|
||||
</ul>
|
||||
<h4 id="23-macos-x64">2.3 macOS-x64</h4>
|
||||
<h4 id="24-linux-x64%E6%9C%8D%E5%8A%A1">2.4 linux-x64服务</h4>
|
||||
<ul>
|
||||
<li><code>sudo ./fastgithub start</code> // 以systemd服务安装并启动</li>
|
||||
<li><code>sudo ./fastgithub start</code> // 以systemd服务卸载并删除</li>
|
||||
<li>设置系统自动代理为<code>http://127.0.0.1:38457</code>,或手动代理http/https为<code>127.0.0.1:38457</code></li>
|
||||
</ul>
|
||||
<h4 id="25-macos-x64">2.5 macOS-x64</h4>
|
||||
<ul>
|
||||
<li>双击运行fastgithub</li>
|
||||
<li>安装cacert/fastgithub.cer并设置信任</li>
|
||||
<li>设置系统自动代理为<code>http://127.0.0.1:38457</code>,或手动代理http/https为<code>127.0.0.1:38457</code></li>
|
||||
<li><a href="https://github.com/dotnetcore/FastGithub/blob/master/MacOSXConfig.md">具体配置详情</a></li>
|
||||
</ul>
|
||||
<h4 id="24-docker-compose%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2">2.4 docker-compose一键部署</h4>
|
||||
<h4 id="26-docker-compose%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2">2.6 docker-compose一键部署</h4>
|
||||
<ul>
|
||||
<li>准备好docker 18.09, docker-compose.</li>
|
||||
<li>在源码目录下,有一个docker-compose.yaml 文件,专用于在实际项目中,临时使用github.com源码,而做的demo配置。</li>
|
||||
|
||||
19
README.md
19
README.md
@ -7,22 +7,29 @@ github加速神器,解决github打不开、用户头像无法加载、releases
|
||||
* Q群2 [742376932](https://qm.qq.com/cgi-bin/qm/qr?k=6BBJ1nrJwe1o1E4-NJfwSOP-C4sMGc4q&jump_from=webapi)
|
||||
|
||||
### 2 部署方式
|
||||
#### 2.1 windows-x64
|
||||
* 双击运行FastGithub.UI.exe
|
||||
#### 2.1 windows-x64桌面
|
||||
* 双击运行FastGithub.UI.exe
|
||||
|
||||
#### 2.2 windows-x64服务
|
||||
* `fastgithub.exe start` // 以windows服务安装并启动
|
||||
* `fastgithub.exe stop` // 以windows服务卸载并删除
|
||||
|
||||
#### 2.2 linux-x64
|
||||
* 执行`sudo ./fastgithub`
|
||||
#### 2.3 linux-x64终端
|
||||
* `sudo ./fastgithub`
|
||||
* 设置系统自动代理为`http://127.0.0.1:38457`,或手动代理http/https为`127.0.0.1:38457`
|
||||
|
||||
#### 2.4 linux-x64服务
|
||||
* `sudo ./fastgithub start` // 以systemd服务安装并启动
|
||||
* `sudo ./fastgithub start` // 以systemd服务卸载并删除
|
||||
* 设置系统自动代理为`http://127.0.0.1:38457`,或手动代理http/https为`127.0.0.1:38457`
|
||||
|
||||
#### 2.3 macOS-x64
|
||||
#### 2.5 macOS-x64
|
||||
* 双击运行fastgithub
|
||||
* 安装cacert/fastgithub.cer并设置信任
|
||||
* 设置系统自动代理为`http://127.0.0.1:38457`,或手动代理http/https为`127.0.0.1:38457`
|
||||
* [具体配置详情](https://github.com/dotnetcore/FastGithub/blob/master/MacOSXConfig.md)
|
||||
|
||||
#### 2.4 docker-compose一键部署
|
||||
#### 2.6 docker-compose一键部署
|
||||
* 准备好docker 18.09, docker-compose.
|
||||
* 在源码目录下,有一个docker-compose.yaml 文件,专用于在实际项目中,临时使用github.com源码,而做的demo配置。
|
||||
* 根据自己的需要更新docker-compose.yaml中的sample和build镜像即可完成拉github.com源码加速,并基于源码做后续的操作。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user