Girish Ramakrishnan 10 роки тому
батько
коміт
9bb0664688
5 змінених файлів з 74 додано та 43 видалено
  1. 1 0
      Dockerfile
  2. 4 0
      README.md
  3. 19 32
      app.ini.template
  4. 42 8
      start.sh
  5. 8 3
      supervisor/gogs.conf

+ 1 - 0
Dockerfile

@@ -9,6 +9,7 @@ ADD supervisor/ /etc/supervisor/conf.d/
 RUN cd /tmp && \
     wget https://github.com/gogits/gogs/releases/download/v0.6.1/linux_amd64.zip && \
     unzip linux_amd64.zip -d /home/cloudron && \
+    chown -R cloudron:cloudron /home/cloudron/gogs && \
     rm linux_amd64.zip
 
 ADD app.ini.template /home/cloudron/app.ini.template

+ 4 - 0
README.md

@@ -0,0 +1,4 @@
+Automated installs
+------------------
+https://github.com/gogits/gogs/issues/145#issuecomment-41863670
+https://github.com/geerlingguy/ansible-role-gogs/issues/1

+ 19 - 32
app.ini.template

@@ -1,10 +1,15 @@
-; 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
 
+[database]
+DB_TYPE = mysql
+HOST = ##MYSQL_HOST:##MYSQL_PORT
+NAME = ##MYSQL_DATABASE
+USER = ##MYSQL_USERNAME
+PASSWD = ##MYSQL_PASSWORD
+SSL_MODE =
+PATH =
+
 [repository]
 ROOT = /app/data
 SCRIPT_TYPE = bash
@@ -15,43 +20,25 @@ DOMAIN = ##HOSTNAME
 ROOT_URL = https://%(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
+HOST = ##MAIL_SERVER:##MAIL_PORT
+USER =
+PASSWD =
+FROM = ##MAIL_FROM
 
 [admin]
 
 [security]
 INSTALL_LOCK = true
+SECRET_KEY = ##SECRET_KEY
 
-[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:##MAIL_PORT
-; 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 = 
+[service]
+DISABLE_REGISTRATION = false
+SHOW_REGISTRATION_BUTTON = false
 

+ 42 - 8
start.sh

@@ -4,8 +4,46 @@ set -eu -o pipefail
 
 fqdn=$(hostname -f)
 
-mkdir -p /home/cloudron/gogs/custom/conf
+chown -R cloudron.cloudron /app/data
+
+# Dockerfile changes the ownership of this file to make it writable by cloudron user
+sed -e "s/^Port .*/Port ${SSH_PORT}/" \
+    -e "s/^#ListenAddress .*/ListenAddress 0.0.0.0/" \
+    -i /etc/ssh/sshd_config
 
+/usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i Gogs &
+
+sleep 3
+
+if [[ ! -f /home/cloudron/gogs/custom/conf/app.ini ]]; then
+    echo "Triggering installation"
+
+    mkdir -p /home/cloudron/gogs/custom/conf
+    touch /home/cloudron/gogs/custom/conf/app.ini
+    chown cloudron:cloudron /home/cloudron/gogs/custom/conf/app.ini
+
+    # this creates the custom/conf/app.ini
+    curl -X POST http://localhost:3000/install \
+        --data db_type=MySQL \
+        --data-urlencode "db_host=${MYSQL_HOST}:${MYSQL_PORT}" \
+        --data "db_user=${MYSQL_USERNAME}" \
+        --data-urlencode "db_passwd=${MYSQL_PASSWORD}" \
+        --data "db_name=${MYSQL_DATABASE}" \
+        --data-urlencode "repo_root_path=/tmp" \
+        --data run_user=cloudron \
+        --data "domain=${fqdn}" \
+        --data http_port=3000 \
+        --data-urlencode "app_url=https://${fqdn}/" \
+        --data "smtp_host=${MAIL_SMTP_SERVER}" \
+        --data smtp_user= \
+        --data smtp_pwd= \
+        --data admin_name=admin \
+        --data admin_passwd=admin \
+        --data admin_confirm_passwd=admin \
+        --data-urlencode admin_email=girish@forwardbias.in
+fi
+
+# use GOGS_CONFIG maybe for this but not very documented
 sed -e "s/##HOSTNAME/${fqdn}/g" \
     -e "s/##SSH_PORT/${SSH_PORT}/g" \
     -e "s/##MYSQL_HOST/${MYSQL_HOST}/g" \
@@ -16,14 +54,10 @@ sed -e "s/##HOSTNAME/${fqdn}/g" \
     -e "s/##MAIL_SERVER/${MAIL_SMTP_SERVER}/g" \
     -e "s/##MAIL_PORT/${MAIL_SMTP_PORT}/g" \
     -e "s/##MAIL_FROM/${MAIL_SMTP_USERNAME}@${MAIL_DOMAIN}/g" \
+    -e "s/##SECRET_KEY/$(pwgen -1 -s)/g" \
     /home/cloudron/app.ini.template > "/home/cloudron/gogs/custom/conf/app.ini"
 
-chown -R cloudron.cloudron /app/data
-
-# Dockerfile changes the ownership of this file to make it writable by cloudron user
-sed -e "s/^Port .*/Port ${SSH_PORT}/" \
-    -e "s/^#ListenAddress .*/ListenAddress 0.0.0.0/" \
-    -i /etc/ssh/sshd_config
+supervisorctl restart gogs
 
-/usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i Gogs
+wait
 

+ 8 - 3
supervisor/gogs.conf

@@ -4,6 +4,11 @@ command=/home/cloudron/gogs/gogs web
 user=cloudron
 autostart=true
 autorestart=true
-stdout_logfile=/var/log/supervisor/%(program_name)s.log
-stderr_logfile=/var/log/supervisor/%(program_name)s.log
-environment=USER="cloudron"
+; https://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html
+stdout_logfile=/dev/stdout
+stdout_logfile_maxbytes=0
+stderr_logfile=/dev/stderr
+stderr_logfile_maxbytes=0
+; stdout_logfile=/var/log/supervisor/%(program_name)s.log
+; stderr_logfile=/var/log/supervisor/%(program_name)s.log
+environment=HOME="/home/cloudron",USER="cloudron"