云主机上部署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.json
被visual 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_header
是dotnet中需要的配置,注意有个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/;
}
}