云主机上部署BaGet

前不久使用Docker的方式部署BaGet, 最后放弃了,个人使用的云主机配置有限所以作罢,时至今日2022/6,一个偶然又进入了BaGet (loic-sharma.github.io),有了直接使用dotnet sdk运行的方式,那么下面就简单的记录一下部署的过程

下载

下载发布包中的压缩包,解压,在本机上面启动验证一下dotnet BaGet.dll,浏览http://localhost:5000能够成功则继续,如果没有正常的开启本地服务,检查开发机的dotnet sdk是否安装

上传BaGet文件包

登录服务器,我所使用的是ubuntu 20.04的发行版,没有什么特别的讲究就是用习惯了,通过MobaXterm中端软件将本地测试的文件夹拖放到~,同样进行服务器端的本地测试访问以及dotnet BaGet.dll --urls http://*:8888指定端口的外网访问,此处需要注意一下自己服务器的防火墙的配置,都没有问题,那么就是建立baget service来进行管理

建立系统服务

# 进入存放service文件的目录
cd /etc/systemd/system
# 当然也有人习惯在下面目录建立自己的service
#cd /lib/systemd/system
# 只是个人的习惯不同而已都可以,自己建立的我一般习惯放在/etc/systemd/system下,一个是系统内置的service在这里较少,另外一个原因是对/etc的备份也相对/lib来得方便
# 比较懒直接复制前面配置的gitea的配置文件
sudo cp gitea.service baget.service
# 打开baget.service并进行编辑
[Unit]
Description=BaGet
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
Type=simple
User=ubuntu
Group=ubuntu
WorkingDirectory=/opt/BaGet
ExecStart=/usr/bin/dotnet BaGet.dll --urls http://localhost:----
Restart=always
Environment=USER=ubuntu HOME=/home/ubuntu

# Some distributions may not support these hardening directives. If you cannot start the service due
# to an unknown option, comment out the ones not supported by your version of systemd.
ProtectSystem=full
PrivateDevices=yes
PrivateTmp=yes
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
# wq保存并退出

启用服务

最关键的service文件建立完成后,就是使用systemctl来进行对service的管理了

# 加载增加的服务
sudo systemctl deamon-reload
# 运行
sudo systemctl start baget.service
# 如果需要加入到开机启动
sudo systemctl enable baget.service
# 也可以禁用开机启动
sudo systemctl disable baget.service

# 启动、关闭、重启、状态
service start/stop/restart/status baget
# 日志的管理
journalctl -u baget.service -f

配置Nginx

同样是偷懒啦, 直接复制之前配置的gitea的配置文件然后做必要的修改,对于配置文件的存放一样是个人的使用习惯来着

# 进入配置文件目录
cd /etc/nginx/sites-enabled
sudo cp gitea baget
# 编辑配置文件
sudo vim baget

# Default server configuration
#
server {
        listen 80;
        listen [::]:80;
        server_name secret.dbugs.work;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        charset utf-8;
        client_max_body_size 100m;

        location / {
                proxy_pass http://localhost:----/;
                proxy_redirect default;
        }
}

# wq保存并退出

# 通过日志查看service的工作端口,避免记错发生配置上的错误
journalctl -u baget.service

云服器域名解析配置

载入Nginx的配置sudo nginx -s reload,打开网站并验证,非常的顺利~~~

使用验证和处理问题

真的这么顺利吗,no~~~,总是有些东西它要搞事情

问题1

baget的web服务的确是启动起来了,可以正常访问,Upload中的提示不正确,可以发现与proxy_pass之前的信息是一致的

问题2

使用dotnet cli是无法上传nuget包的,那么意义何在,使用Nuget Package Explorer勾选Append 'api/v2/package' to publish url后可以上传到服务器中,也可以通过web进行浏览,但是依然无法通过domain/v3/index.jsonvisual studio解析,查看错误信息发现获取json数据信息的url是一个localhost的,那么确定问题出在Nginx的配置上面了

查看权威的官方文档 使用 Nginx 在 Linux 上托管 ASP.NET Core | Microsoft Docs,其中有一段如下:

proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Proto $scheme;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           32 4k;

很多地方是常规配置,再有几个proxy_set_headerdotnet中需要的配置,注意有个proxy_redirect, 查看文档Module ngx_http_proxy_module (nginx.org),调整配置,sudo nginx -s reload再次验证上传与Visual Studio的检索,再次是OK了,修改后的Nginx配置如下:

# Default server configuration
#
server {
        listen 80;
        listen [::]:80;
        server_name secret.dbugs.work;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        charset utf-8;
        client_max_body_size 100m;

        location / {
                proxy_redirect  off;
                proxy_set_header Host   $host;
                proxy_set_header X-Real_IP      $remote_addr;
                proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded_Proto      $scheme;

                proxy_pass http://localhost:5053/;
        }
}
posted @ 2022-06-06 20:51  非法关键字  阅读(225)  评论(0编辑  收藏  举报