orangepi部署gogs时遇到的坑,不局限于gogs

尝试在orangepi上部署gogs,遇到的问题

  1. 大文件
    虽然gogs支持大文件,但是因为orangepi内存有限,gogs在使用http/https协议传输数据的时候会崩溃导致传输失败。使用ssh传输就可以解决这个问题。

  2. u盘存储
    因为linux会大量读写系统盘,这里将系统sd与数据flash分开。使用8G的SD卡作为系统盘,通过/etc/fstab挂载u盘作为数据盘。
    由于在/etc/fstab文件中错误的配置,使用了user选项,使得u盘开启了noexec模式,导致git-hook无法运行,权限管理失败。

  3. LFS
    没有搞定

  4. 配置gogs的systemd为git用户之后,在root账户或其它账户下用git账户调试gogs服务

su - -c "GOGS_WORK_DIR=/var/lib/gogs gogs web -c /etc/gogs/app.ini" git
  1. 配置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:$1;
}
  1. https
    gogs完全可以不用开 https,使用nginx的https即可
    uwsgi也可以不用开https
    若要使uwsgi支持https,则要保证key有权限,同时socket段是需要设置的

  2. 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通信。

  1. nginx(2)

gogs需要挂在根目录下,否则使用http git的时候,找不到仓库

持续更新

你可能感兴趣的:(orangepi部署gogs时遇到的坑,不局限于gogs)