supervisor配置gogs记录

问题一:不能使用 gosu 调用 git 用户来启动
发现不能使用 gosu 调用 git 用户来启动,gosu git /home/git/gogs/gogs web 会报如下错误:

gogs 运行系统用户非当前用户:git >
不推荐的解决方法是: 切换到git账户下执行:su - git $ ./gogs web

通过测试,可以采用如下的方式来使用 gosu 调用 git 用户(参考自gogs官方github中的dockerfile):

export USER=git
exec gosu $USER /app/gogs/gogs web
问题二:Fail to start SSH server: listen tcp 0.0.0.0:22: bind: permission denied
启用内置SSH服务器会报该错误,暂未找到解决方法。

通过测试,将默认的 22 端口改成其他端口即可。

但是 gogs官方的docker配置中建议不要在Docker容器中使用内置的SSH服务器。

问题三:PANIC: session(start): mkdir data: permission denied
详细错误信息如下:

[Macaron] 2017-03-21 06:05:40: Started GET / for 192.168.137.1
[Macaron] PANIC: session(start): mkdir data: permission denied
/usr/local/go/src/runtime/panic.go:489 (0x4340bf)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/github.com/go-macaron/session/session.go:156 (0x8f478e)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/gopkg.in/macaron.v1/context.go:79 (0x89ba01)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/github.com/go-macaron/inject/inject.go:157 (0x87dc92)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/github.com/go-macaron/inject/inject.go:135 (0x87da8b)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/gopkg.in/macaron.v1/context.go:121 (0x89bc62)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/gopkg.in/macaron.v1/context.go:112 (0x89bb86)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/gopkg.in/macaron.v1/recovery.go:161 (0x8af50b)
/home/vagrant/gopath/src/github.com/gogits/gogs/vendor/gopkg.in/macaron.v1/logger.go:40 (0x89f118)

该问题导致的原因是,当 git 用户运行 ./gogs web 时,会在 gogs 项目的主目录下 ( 这里是 /home/git/gogs)创建一个 data 目录用于存放session缓存等临时文件。如果当前工作的主目录不是在 /home/git/gogs 目录,则git账户就没有权限来创建目录,从而导致权限错误。
解决方法是在Dockerfile中指定工作目录 WORKDIR /home/git/gogs 即可。
在supervisor解决方法在配置文件中指定directory=/home/git/gogs

后经查证,在 Gogs 项目目录下的 custom data 和 log 三个目录是用来存放项目运行期间产生的日志、配置文件、数据等信息的。当Gogs项目需要升级时,直接拷贝这三个目录到新项目目录下即可。
这里的 data 目录需要提前创建好。
supervisor案例:

[program:gogs]
command=/var/go/src/github.com/gogs/gogs/gogs web
user=git
autostart=true
autorestart=true
directory=/var/go/src/github.com/gogs/gogs
environment = HOME="/home/git", USER="git"
stderr_logfile=/var/log/gogs_err.log
stdout_logfile=/var/log/gogs_out.log

### Supervisor 配置详解 #### 创建配置文件 为了初始化Supervisor配置,在指定路径下创建并写入默认配置文件。通过执行命令可以快速生成基础配置文件: ```bash mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf ``` 此操作将在`/etc/supervisor/`目录下建立必要的结构,并填充初始设置[^3]。 #### 修改服务启动项 为了让系统能够识别到Supervisor作为一项服务,需编辑或新增Systemd的服务定义文件来指明启动参数。具体做法是在`/usr/lib/systemd/system/`位置添加名为`supervisord.service`的新条目,其内部应包含指向实际配置的位置信息: ```ini [Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf [Install] WantedBy=multi-user.target ``` 上述设定确保了当操作系统进入多用户模式时自动加载Supervisor及其关联的任务列表[^4]。 #### 添加受控程序描述 对于每一个想要被监控的应用实例,都需要单独编写相应的`.conf`文件放置于预设好的子目录内(如`/etc/supervisor/conf.d/`)。这里给出一个简单的Java应用程序控制模板供参考: ```ini [program:test_jar] command=java -jar /path/to/application.jar directory=/opt/app/ autostart=true autorestart=true stderr_logfile=/var/log/test_jar.err.log stdout_logfile=/var/log/test_jar.out.log environment=JAVA_HOME="/usr/local/java",PATH="$JAVA_HOME/bin:$PATH" user=admin stopasgroup=true killasgroup=true ``` 这段配置说明了一个名为`test_jar`的进程应该如何运行以及遇到异常情况后的处理方式;同时设置了日志记录策略以便后续排查问题所需[^1]。 #### 应用更改 每当修改过任何配置细节后,记得通知正在运行中的Supervisor重新读取最新的指令集以使改动生效。这一步骤可通过下面这条命令轻松实现: ```bash supervisorctl -u admin -p 123456 -c /application/supervisor/etc/supervisor.conf reload test_jar ``` 该语句不仅会刷新全局状态还会针对特定名称下的任务实施更新动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值