尝试在orangepi上部署gogs,遇到的问题
大文件
虽然gogs支持大文件,但是因为orangepi内存有限,gogs在使用http/https协议传输数据的时候会崩溃导致传输失败。使用ssh传输就可以解决这个问题。u盘存储
因为linux会大量读写系统盘,这里将系统sd与数据flash分开。使用8G的SD卡作为系统盘,通过/etc/fstab挂载u盘作为数据盘。
由于在/etc/fstab文件中错误的配置,使用了user选项,使得u盘开启了noexec模式,导致git-hook无法运行,权限管理失败。LFS
没有搞定配置gogs的systemd为git用户之后,在root账户或其它账户下用git账户调试gogs服务
su - -c "GOGS_WORK_DIR=/var/lib/gogs gogs web -c /etc/gogs/app.ini" git
- 配置nginx
使用https,ssl是必须要打开的
ssl on;
ssl_certificate /media/sys_udisk/ssl/https/server.crt;
ssl_certificate_key /media/sys_udisk/ssl/https/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
配置location
想要同时匹配gogs和gogs/最好写成下面这种
location ~ ^/gogs(/(.*))?$ {
proxy_pass https://127.0.0.1:<port>$1;
}
https
gogs完全可以不用开 https,使用nginx的https即可
uwsgi也可以不用开https
若要使uwsgi支持https,则要保证key有权限,同时socket段是需要设置的uwsgi
尝试使用nginx中uwsgi_param的REQUEST_URI和PATH_INFO段来设置,如:
location ~ ^/file/(.+)$ {
include uwsgi_params;
uwsgi_param REQUEST_URI $1;
uwsgi_param PATH_INFO $1;
uwsgi_param
uwsgi_pass 127.0.0.1:11111;
}
location /file/ {
if ($request_uri ~ "^/file/(.*)$") {
set $new_uri /$1;
}
include uwsgi_params;
uwsgi_param REQUEST_URI $new_uri;
uwsgi_param PATH_INFO $new_uri;
uwsgi_param UWSGI_SCRIPT file;
uwsgi_pass uwsgi://127.0.0.1:23335;
}
用这两种匹配方式都可以,但是这里要显式的指明uwsgi为协议
使用proxy_pass,很容易解决uri中前缀的问题,但效率肯定比不上uwsgi_pass
location /hfile/ {
proxy_pass http://127.0.0.1:11111/;
}
http/https和socket可以同时设置,设置不同端口即可。socket用于和nginx通信。
- nginx(2)
gogs需要挂在根目录下,否则使用http git的时候,找不到仓库
持续更新