Girish Ramakrishnan il y a 10 ans
Parent
commit
9a436eacfb
5 fichiers modifiés avec 85 ajouts et 298 suppressions
  1. 9 1
      CloudronManifest.json
  2. 7 2
      Dockerfile
  3. 0 293
      app.ini
  4. 52 0
      app.ini.template
  5. 17 2
      start.sh

+ 9 - 1
CloudronManifest.json

@@ -7,7 +7,15 @@
   "healthCheckPath": "/",
   "httpPort": 3000,
   "addons": {
-    "mysql": { }
+    "mysql": { },
+    "sendmail": { }
+  },
+  "tcpPorts": {
+    "SSH_PORT": {
+      "title": "SSH Port",
+      "description": "SSH Port over which repos can be pushed & pulled",
+      "defaultValue": 29418
+    }
   },
   "minBoxVersion": "0.0.1",
   "manifestVersion": 1,

+ 7 - 2
Dockerfile

@@ -1,12 +1,17 @@
 FROM girish/base:0.2.0
 
 USER cloudron
+
+# gogs uses this env to detect current user
+ENV USER cloudron
+
 RUN cd /tmp && \
     wget https://github.com/gogits/gogs/releases/download/v0.6.1/linux_amd64.zip && \
     unzip linux_amd64.zip -d /home/cloudron && \
     rm linux_amd64.zip
 
-ADD start.sh /home/git/start.sh
+ADD app.ini.template /home/cloudron/app.ini.template
+ADD start.sh /home/cloudron/start.sh
 
-CMD [ "/home/git/start.sh" ]
+CMD [ "/home/cloudron/start.sh" ]
 

+ 0 - 293
app.ini

@@ -1,293 +0,0 @@
-; App name that shows on every page title
-APP_NAME = Gogs: Go Git Service
-; Change it if you run locally
-RUN_USER = git
-; Either "dev", "prod" or "test", default is "dev"
-RUN_MODE = dev
-
-[repository]
-ROOT =
-SCRIPT_TYPE = bash
-
-[server]
-PROTOCOL = http
-DOMAIN = localhost
-ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
-HTTP_ADDR =
-HTTP_PORT = 3000
-; Disable SSH feature when not available
-DISABLE_SSH = false
-SSH_PORT = 22
-; Disable CDN even in "prod" mode
-OFFLINE_MODE = false
-DISABLE_ROUTER_LOG = false
-; Generate steps:
-; $ cd path/to/gogs/custom/https
-; $ ./gogs cert -ca=true -duration=8760h0m0s -host=myhost.example.com
-;
-; Or from a .pfx file exported from the Windows certificate store (do
-; not forget to export the private key):
-; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys
-; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes
-CERT_FILE = custom/https/cert.pem
-KEY_FILE = custom/https/key.pem
-; Upper level of template and static file path
-; default is the path where Gogs is executed
-STATIC_ROOT_PATH =
-; Application level GZIP support
-ENABLE_GZIP = false
-; Landing page for non-logged users, can be "home" or "explore"
-LANDING_PAGE = home
-
-[database]
-; Either "mysql", "postgres" or "sqlite3", it's your choice
-DB_TYPE = mysql
-HOST = 127.0.0.1:3306
-NAME = gogs
-USER = root
-PASSWD =
-; For "postgres" only, either "disable", "require" or "verify-full"
-SSL_MODE = disable
-; For "sqlite3" only
-PATH = data/gogs.db
-
-[admin]
-
-[security]
-INSTALL_LOCK = false
-; !!CHANGE THIS TO KEEP YOUR USER DATA SAFE!!
-SECRET_KEY = !#@FDEWREWR&*(
-; Auto-login remember days
-LOGIN_REMEMBER_DAYS = 7
-COOKIE_USERNAME = gogs_awesome
-COOKIE_REMEMBER_NAME = gogs_incredible
-; Reverse proxy authentication header name of user name
-REVERSE_PROXY_AUTHENTICATION_USER = X-WEBAUTH-USER
-
-[service]
-ACTIVE_CODE_LIVE_MINUTES = 180
-RESET_PASSWD_CODE_LIVE_MINUTES = 180
-; User need to confirm e-mail for registration
-REGISTER_EMAIL_CONFIRM = false
-; Does not allow register and admin create account only
-DISABLE_REGISTRATION = false
-; User must sign in to view anything.
-REQUIRE_SIGNIN_VIEW = false
-; Cache avatar as picture
-ENABLE_CACHE_AVATAR = false
-; Mail notification
-ENABLE_NOTIFY_MAIL = false
-; More detail: https://github.com/gogits/gogs/issues/165
-ENABLE_REVERSE_PROXY_AUTHENTICATION = false
-ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false
-; Do not check minimum key size with corresponding type
-DISABLE_MINIMUM_KEY_SIZE_CHECK = false
-
-[webhook]
-; Cron task interval in minutes
-TASK_INTERVAL = 1
-; Deliver timeout in seconds
-DELIVER_TIMEOUT = 5
-; Allow insecure certification
-SKIP_TLS_VERIFY = false
-
-[mailer]
-ENABLED = false
-; Buffer length of channel, keep it as it is if you don't know what it is.
-SEND_BUFFER_LEN = 10
-; Name displayed in mail title
-SUBJECT = %(APP_NAME)s
-; Mail server
-; Gmail: smtp.gmail.com:587
-; QQ: smtp.qq.com:25
-; Note, if the port ends with "465", SMTPS will be used. Using STARTTLS on port 587 is recommended per RFC 6409. If the server supports STARTTLS it will always be used.
-HOST =
-; Do not verify the certificate of the server. Only use this for self-signed certificates
-SKIP_VERIFY = 
-; Use client certificate
-USE_CERTIFICATE = false
-CERT_FILE = custom/mailer/cert.pem
-KEY_FILE = custom/mailer/key.pem
-; Mail from address, RFC 5322. This can be just an email address, or the "Name" <email@example.com> format 
-FROM =
-; Mailer user name and password
-USER =
-PASSWD =
-
-[oauth]
-ENABLED = false
-
-[oauth.github]
-ENABLED = false
-CLIENT_ID =
-CLIENT_SECRET =
-SCOPES = https://api.github.com/user
-AUTH_URL = https://github.com/login/oauth/authorize
-TOKEN_URL = https://github.com/login/oauth/access_token
-
-; Get client id and secret from
-; https://console.developers.google.com/project
-[oauth.google]
-ENABLED = false
-CLIENT_ID =
-CLIENT_SECRET =
-SCOPES = https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile
-AUTH_URL = https://accounts.google.com/o/oauth2/auth
-TOKEN_URL = https://accounts.google.com/o/oauth2/token
-
-[oauth.qq]
-ENABLED = false
-CLIENT_ID =
-CLIENT_SECRET =
-SCOPES = get_user_info
-; QQ 互联
-AUTH_URL = https://graph.qq.com/oauth2.0/authorize
-TOKEN_URL = https://graph.qq.com/oauth2.0/token
-
-[oauth.weibo]
-ENABLED = false
-CLIENT_ID =
-CLIENT_SECRET =
-SCOPES = all
-AUTH_URL = https://api.weibo.com/oauth2/authorize
-TOKEN_URL = https://api.weibo.com/oauth2/access_token
-
-[cache]
-; Either "memory", "redis", or "memcache", default is "memory"
-ADAPTER = memory
-; For "memory" only, GC interval in seconds, default is 60
-INTERVAL = 60
-; For "redis" and "memcache", connection host address
-; redis: network=tcp,addr=:6379,password=macaron,db=0,pool_size=100,idle_timeout=180
-; memcache: `127.0.0.1:11211`
-HOST =
-
-[session]
-; Either "memory", "file", "redis" or "mysql", default is "memory"
-PROVIDER = memory
-; Provider config options
-; memory: not have any config yet
-; file: session file path, e.g. `data/sessions`
-; redis: network=tcp,addr=:6379,password=macaron,db=0,pool_size=100,idle_timeout=180
-; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table`
-PROVIDER_CONFIG = data/sessions
-; Session cookie name
-COOKIE_NAME = i_like_gogits
-; If you use session in https only, default is false
-COOKIE_SECURE = false
-; Enable set cookie, default is true
-ENABLE_SET_COOKIE = true
-; Session GC time interval, default is 86400
-GC_INTERVAL_TIME = 86400
-; Session life time, default is 86400
-SESSION_LIFE_TIME = 86400
-
-[picture]
-; The place to picture data, either "server" or "qiniu", default is "server"
-SERVICE = server
-AVATAR_UPLOAD_PATH = data/avatars
-; Chinese users can choose "duoshuo"
-GRAVATAR_SOURCE = gravatar
-DISABLE_GRAVATAR = false
-
-[attachment]
-; Whether attachments are enabled. Defaults to `true`
-ENABLE = true
-; Path for attachments. Defaults to `data/attachments`
-PATH = data/attachments
-; One or more allowed types, e.g. image/jpeg|image/png
-ALLOWED_TYPES = image/jpeg|image/png
-; Max size of each file. Defaults to 32MB
-MAX_SIZE = 32
-; Max number of files per upload. Defaults to 10
-MAX_FILES = 10
-
-[time]
-; Specifies the format for fully outputed dates. Defaults to RFC1123
-; Special supported values are ANSIC, UnixDate, RubyDate, RFC822, RFC822Z, RFC850, RFC1123, RFC1123Z, RFC3339, RFC3339Nano, Kitchen, Stamp, StampMilli, StampMicro and StampNano
-; For more information about the format see http://golang.org/pkg/time/#pkg-constants
-FORMAT =
-
-[log]
-ROOT_PATH =
-; Either "console", "file", "conn", "smtp" or "database", default is "console"
-; Use comma to separate multiple modes, e.g. "console, file"
-MODE = console
-; Buffer length of channel, keep it as it is if you don't know what it is.
-BUFFER_LEN = 10000
-; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace"
-LEVEL = Trace
-
-; For "console" mode only
-[log.console]
-LEVEL =
-
-; For "file" mode only
-[log.file]
-LEVEL =
-; This enables automated log rotate(switch of following options), default is true
-LOG_ROTATE = true
-; Max line number of single file, default is 1000000
-MAX_LINES = 1000000
-; Max size shift of single file, default is 28 means 1 << 28, 256MB
-MAX_SIZE_SHIFT = 28
-; Segment log daily, default is true
-DAILY_ROTATE = true
-; Expired days of log file(delete after max days), default is 7
-MAX_DAYS = 7
-
-; For "conn" mode only
-[log.conn]
-LEVEL =
-; Reconnect host for every single message, default is false
-RECONNECT_ON_MSG = false
-; Try to reconnect when connection is lost, default is false
-RECONNECT = false
-; Either "tcp", "unix" or "udp", default is "tcp"
-PROTOCOL = tcp
-; Host address
-ADDR =
-
-; For "smtp" mode only
-[log.smtp]
-LEVEL =
-; Name displayed in mail title, default is "Diagnostic message from serve"
-SUBJECT = Diagnostic message from serve
-; Mail server
-HOST =
-; Mailer user name and password
-USER =
-PASSWD =
-; Receivers, can be one or more, e.g. ["1@example.com","2@example.com"]
-RECEIVERS =
-
-; For "database" mode only
-[log.database]
-LEVEL =
-; Either "mysql" or "postgres"
-DRIVER =
-; Based on xorm, e.g.: root:root@localhost/gogs?charset=utf8
-CONN =
-
-[git]
-MAX_GIT_DIFF_LINES = 10000
-; Arguments for command 'git gc', e.g.: "--aggressive --auto"
-; see more on http://git-scm.com/docs/git-gc/1.7.5
-GC_ARGS = 
-
-; Git health check.
-[git.fsck]
-ENABLE = true
-; Execution interval in hours. Default is 24.
-INTERVAL = 24
-; Arguments for command 'git fsck', e.g.: "--unreachable --tags"
-; see more on http://git-scm.com/docs/git-fsck/1.7.5
-ARGS = 
-
-[i18n]
-LANGS = en-US,zh-CN,zh-HK,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL
-NAMES = English,简体中文,繁體中文,Deutsch,Français,Nederlands,Latviešu,Русский,日本语,Español,Português,Polski
-
-[other]
-SHOW_FOOTER_BRANDING = false
-

+ 52 - 0
app.ini.template

@@ -0,0 +1,52 @@
+; App name that shows on every page title
+APP_NAME = Gogs: Go Git Service
+; Change it if you run locally
+RUN_USER = cloudron
+; Either "dev", "prod" or "test", default is "dev"
+RUN_MODE = prod
+
+[repository]
+ROOT = /app/data
+SCRIPT_TYPE = bash
+
+[server]
+PROTOCOL = https
+DOMAIN = ##HOSTNAME
+ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s/
+HTTP_ADDR =
+HTTP_PORT = 3000
+; Disable SSH feature when not available
+DISABLE_SSH = false
+SSH_PORT = ##SSH_PORT
+; Landing page for non-logged users, can be "home" or "explore"
+LANDING_PAGE = explore
+
+[database]
+; Either "mysql", "postgres" or "sqlite3", it's your choice
+DB_TYPE = mysql
+HOST = ##MYSQL_HOST:##MYSQL_PORT
+NAME = ##MYSQL_DATABASE
+USER = ##MYSQL_USERNAME
+PASSWD = ##MYSQL_PASSWORD
+
+[mailer]
+ENABLED = true
+; Name displayed in mail title
+SUBJECT = %(APP_NAME)s
+; Mail server
+; Gmail: smtp.gmail.com:587
+; QQ: smtp.qq.com:25
+; Note, if the port ends with "465", SMTPS will be used. Using STARTTLS on port 587 is recommended per RFC 6409. If the server supports STARTTLS it will always be used.
+HOST = ##MAIL_SERVER
+; Do not verify the certificate of the server. Only use this for self-signed certificates
+SKIP_VERIFY = 
+; Use client certificate
+USE_CERTIFICATE = false
+CERT_FILE = 
+KEY_FILE = 
+; Mail from address, RFC 5322. This can be just an email address, or the "Name" <email@example.com> format 
+FROM = ##MAIL_FROM
+; Mailer user name and password
+USER = 
+PASSWD = 
+

+ 17 - 2
start.sh

@@ -2,7 +2,22 @@
 
 set -eu -o pipefail
 
-cp conf.ini > /home/git/gogs/custom/conf/app.ini
+fqdn=$(hostname -f)
 
-/home/git/gogs/gogs web
+mkdir -p /home/cloudron/gogs/custom/conf
+
+sed -e "s/##HOSTNAME/${fqdn}/g" \
+    -e "s/##SSH_PORT/${SSH_PORT}/g" \
+    -e "s/##MYSQL_HOST/${MYSQL_HOST}/g" \
+    -e "s/##MYSQL_PORT/${MYSQL_PORT}/g" \
+    -e "s/##MYSQL_USERNAME/${MYSQL_USERNAME}/g" \
+    -e "s/##MYSQL_PASSWORD/${MYSQL_PASSWORD}/g" \
+    -e "s/##MYSQL_DATABASE/${MYSQL_DATABASE}/g" \
+    -e "s/##MAIL_SERVER/${MAIL_SMTP_SERVER}/g" \
+    -e "s/##MAIL_FROM/${MAIL_SMTP_USERNAME}@${MAIL_DOMAIN}/g" \
+    /home/cloudron/app.ini.template > "/home/cloudron/gogs/custom/conf/app.ini"
+
+chown -R cloudron.cloudron /app/data
+
+/home/cloudron/gogs/gogs web